From a2533f20818f4aab9ee32e2b3ef4bea298613cc7 Mon Sep 17 00:00:00 2001 From: rh362j Date: Thu, 15 Aug 2019 22:24:32 +0300 Subject: [PATCH] [RICPLT-1703] - Reset Request + rmr_service refactoring (enabled) Change-Id: Id58fa184f351611dc1429720c876f52e9095400e Signed-off-by: rh362j --- E2Manager/controllers/controller.go | 4 ++++ E2Manager/e2managererrors/wrong_state_error.go | 8 +++++--- E2Manager/handlers/x2_reset_request_handler.go | 22 +++++++++++----------- E2Manager/handlers/x2_reset_response_handler.go | 3 ++- .../handlers/x2_reset_response_handler_test.go | 10 ++++++---- E2Manager/main/http_server.go | 2 +- 6 files changed, 29 insertions(+), 20 deletions(-) diff --git a/E2Manager/controllers/controller.go b/E2Manager/controllers/controller.go index a0c7a15..c02e671 100644 --- a/E2Manager/controllers/controller.go +++ b/E2Manager/controllers/controller.go @@ -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) diff --git a/E2Manager/e2managererrors/wrong_state_error.go b/E2Manager/e2managererrors/wrong_state_error.go index be7b59a..4c53b2e 100644 --- a/E2Manager/e2managererrors/wrong_state_error.go +++ b/E2Manager/e2managererrors/wrong_state_error.go @@ -17,15 +17,17 @@ 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) , }, } } diff --git a/E2Manager/handlers/x2_reset_request_handler.go b/E2Manager/handlers/x2_reset_request_handler.go index e666513..c5605c6 100644 --- a/E2Manager/handlers/x2_reset_request_handler.go +++ b/E2Manager/handlers/x2_reset_request_handler.go @@ -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) diff --git a/E2Manager/handlers/x2_reset_response_handler.go b/E2Manager/handlers/x2_reset_response_handler.go index e64c0ce..7de2e2c 100644 --- a/E2Manager/handlers/x2_reset_response_handler.go +++ b/E2Manager/handlers/x2_reset_response_handler.go @@ -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) diff --git a/E2Manager/handlers/x2_reset_response_handler_test.go b/E2Manager/handlers/x2_reset_response_handler_test.go index 1ea8384..a99ea62 100644 --- a/E2Manager/handlers/x2_reset_response_handler_test.go +++ b/E2Manager/handlers/x2_reset_response_handler_test.go @@ -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, diff --git a/E2Manager/main/http_server.go b/E2Manager/main/http_server.go index 1e601fb..e7ee10a 100644 --- a/E2Manager/main/http_server.go +++ b/E2Manager/main/http_server.go @@ -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 { -- 2.16.6