[RICPLT-1703] - Reset Request + rmr_service refactoring (enabled) 29/729/1
authorrh362j <ronen.hasid@intl.att.com>
Thu, 15 Aug 2019 19:24:32 +0000 (22:24 +0300)
committerrh362j <ronen.hasid@intl.att.com>
Thu, 15 Aug 2019 19:24:56 +0000 (22:24 +0300)
Change-Id: Id58fa184f351611dc1429720c876f52e9095400e
Signed-off-by: rh362j <ronen.hasid@intl.att.com>
E2Manager/controllers/controller.go
E2Manager/e2managererrors/wrong_state_error.go
E2Manager/handlers/x2_reset_request_handler.go
E2Manager/handlers/x2_reset_response_handler.go
E2Manager/handlers/x2_reset_response_handler_test.go
E2Manager/main/http_server.go

index a0c7a15..c02e671 100644 (file)
@@ -154,6 +154,10 @@ func (c *Controller) handleErrorResponse(err error, writer http.ResponseWriter){
                        e2Error, _ := err.(*e2managererrors.RmrError)
                        errorResponseDetails = models.ErrorResponse{Code: e2Error.Err.Code, Message: e2Error.Err.Message}
                        httpError = http.StatusInternalServerError
+               case *e2managererrors.ResourceNotFoundError:
+                       e2Error, _ := err.(*e2managererrors.ResourceNotFoundError)
+                       errorResponseDetails = models.ErrorResponse{Code: e2Error.Err.Code, Message: e2Error.Err.Message}
+                       httpError = http.StatusNotFound
 
                default:
                        e2Error, _ := err.(*e2managererrors.InternalError)
index be7b59a..4c53b2e 100644 (file)
 
 package e2managererrors
 
+import "fmt"
+
 type WrongStateError struct {
        Err BaseError
 }
 
-func NewWrongStateError() *RnibDbError {
-       return &RnibDbError{
+func NewWrongStateError(state string) *WrongStateError {
+       return &WrongStateError{
                BaseError{
                        Code:    403,
-                       Message: "RAN in wrong state",
+                       Message: fmt.Sprintf("The RAN state <%s> isn’t in the appropriate state.", state) ,
                },
        }
 }
index e666513..c5605c6 100644 (file)
@@ -136,6 +136,16 @@ func NewX2ResetRequestHandler(rmrService *services.RmrService, config *configura
 
 func (handler *X2ResetRequestHandler) Handle(logger *logger.Logger, request models.Request, rmrResponseChannel chan<- *models.NotificationResponse) error {
        resetRequest := request.(models.ResetRequest)
+
+       if len(resetRequest.Cause) == 0 {
+               resetRequest.Cause = "misc:om-intervention"
+       }
+       cause, ok:= knownCauses[resetRequest.Cause]
+       if !ok {
+               logger.Errorf("#reset_request_handler.Handle - Unknown cause (%s)", resetRequest.Cause)
+               return e2managererrors.NewRequestValidationError()
+       }
+
        nodeb, err  := handler.readerProvider().GetNodeb(resetRequest.RanName)
        if err != nil {
                logger.Errorf("#reset_request_handler.Handle - failed to get status of RAN: %s from RNIB. Error: %s", resetRequest.RanName,  err.Error())
@@ -147,17 +157,7 @@ func (handler *X2ResetRequestHandler) Handle(logger *logger.Logger, request mode
 
        if nodeb.ConnectionStatus != entities.ConnectionStatus_CONNECTED {
                logger.Errorf("#reset_request_handler.Handle - RAN: %s in wrong state (%s)", resetRequest.RanName, entities.ConnectionStatus_name[int32(nodeb.ConnectionStatus)])
-               return e2managererrors.NewWrongStateError()
-       }
-
-
-       if len(resetRequest.Cause) == 0 {
-               resetRequest.Cause = "misc:om-intervention"
-       }
-       cause, ok:= knownCauses[resetRequest.Cause]
-       if !ok {
-               logger.Errorf("#reset_request_handler.Handle - Unknown cause (%s)", resetRequest.Cause)
-               return e2managererrors.NewRequestValidationError()
+               return e2managererrors.NewWrongStateError(entities.ConnectionStatus_name[int32(nodeb.ConnectionStatus)])
        }
 
        var payloadSize  = C.ulong(MaxAsn1PackedBufferSize)
index e64c0ce..7de2e2c 100644 (file)
@@ -41,13 +41,14 @@ func NewX2ResetResponseHandler(rnibReaderProvider func() reader.RNibReader) X2Re
 
 func (src X2ResetResponseHandler) Handle(logger *logger.Logger, e2Sessions sessions.E2Sessions,
        request *models.NotificationRequest, messageChannel chan<- *models.NotificationResponse) {
-
+       request.TransactionId = request.RanName
                logger.Debugf("#x2ResetResponseHandler.Handle - transactionId %s: received reset response. Payload: %s", request.TransactionId, request.Payload)
 
                if nb, rNibErr := src.rnibReaderProvider().GetNodeb(request.RanName); rNibErr != nil {
                        logger.Errorf("#x2ResetResponseHandler.Handle - transactionId %s: failed to retrieve nb entity. RanName: %s. Error: %s", request.TransactionId, request.RanName, rNibErr.Error())
                } else {
                        logger.Debugf("#x2ResetResponseHandler.Handle - transactionId %s: nb entity retrieved. RanName %s, ConnectionStatus %s", request.TransactionId, nb.RanName, nb.ConnectionStatus)
+                       //TODO: only returned in debug mode
                        refinedMessage, err := unpackX2apPduAndRefine(logger, MaxAsn1CodecAllocationBufferSize /*allocation buffer*/, request.Len, request.Payload, MaxAsn1CodecMessageBufferSize /*message buffer*/)
                        if err != nil {
                                logger.Errorf("#x2ResetResponseHandler.Handle - transactionId %s: failed to unpack reset response message. RanName %s, Payload: %s", request.TransactionId , request.RanName, request.Payload)
index 1ea8384..a99ea62 100644 (file)
@@ -24,7 +24,6 @@ import (
        "e2mgr/rmrCgo"
        "e2mgr/sessions"
        "e2mgr/tests"
-       "fmt"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
@@ -49,7 +48,8 @@ func TestX2ResetResponseSuccess(t *testing.T) {
 
        h := NewX2ResetResponseHandler(rnibReaderProvider)
        e2Sessions := make(sessions.E2Sessions)
-       xaction := []byte(fmt.Sprintf("%32s", "1234"))
+       //xaction := []byte(fmt.Sprintf("%32s", "1234"))
+       xaction := []byte("RanName")
        e2Sessions[string(xaction)] = sessions.E2SessionDetails{SessionStart: time.Now()}
        mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
        notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
@@ -80,7 +80,8 @@ func TestX2ResetResponseReaderFailure(t *testing.T) {
 
        h := NewX2ResetResponseHandler(rnibReaderProvider)
        e2Sessions := make(sessions.E2Sessions)
-       xaction := []byte(fmt.Sprintf("%32s", "1234"))
+       //xaction = []byte(fmt.Sprintf("%32s", "1234"))
+       xaction := []byte("RanName")
        e2Sessions[string(xaction)] = sessions.E2SessionDetails{SessionStart: time.Now()}
        mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
        notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
@@ -111,7 +112,8 @@ func TestX2ResetResponseUnpackFailure(t *testing.T) {
 
        h := NewX2ResetResponseHandler(rnibReaderProvider)
        e2Sessions := make(sessions.E2Sessions)
-       xaction := []byte(fmt.Sprintf("%32s", "1234"))
+       //xaction := []byte(fmt.Sprintf("%32s", "1234"))
+       xaction := []byte("RanName")
        e2Sessions[string(xaction)] = sessions.E2SessionDetails{SessionStart: time.Now()}
        mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
        notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
index 1e601fb..e7ee10a 100644 (file)
@@ -73,7 +73,7 @@ func runServer(rmrService *services.RmrService, logger *logger.Logger, config *c
        router.GET("/v1/nodeb/:ranName", controller.GetNodeb)
        router.GET("/v1/health", controller.HandleHealthCheckRequest)
        router.PUT("/v1/nodeb/shutdown", newController.ShutdownHandler)
-       //router.PUT("/v1/nodeb-reset/:ranName", newController.X2ResetHandler)
+       router.PUT("/v1/nodeb-reset/:ranName", newController.X2ResetHandler)
 
        port := fmt.Sprintf(":%d", config.Http.Port)
        if err := http.ListenAndServe(port, router); err != nil {