X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fhandlers%2Fhttpmsghandlers%2Fsetup_request_handler_test.go;h=5556eb1f6948ce30577b50a11db5cb48b16e1a45;hb=3a4f37e98ae155b8d910b0a61c6b88d8832cac90;hp=dddda3509a5271d674778a0df0183f639c2fbb11;hpb=1ec13d4076e7c7abefac6176462c1fee31229213;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go b/E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go index dddda35..5556eb1 100644 --- a/E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go +++ b/E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go @@ -14,154 +14,328 @@ // See the License for the specific language governing permissions and // limitations under the License. // - package httpmsghandlers import ( - "bytes" - "e2mgr/e2pdus" - "e2mgr/logger" + "e2mgr/configuration" + "e2mgr/e2managererrors" "e2mgr/mocks" "e2mgr/models" - "e2mgr/rNibWriter" - "e2mgr/sessions" + "e2mgr/services" "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" "github.com/stretchr/testify/assert" - "strings" - "sync" "testing" - "time" ) -func TestNewSetupRequestHandler(t *testing.T) { - - rnibWriterProvider := func() rNibWriter.RNibWriter { - return &mocks.RnibWriterMock{} - } - - h := NewSetupRequestHandler(rnibWriterProvider) - assert.NotNil(t, h) -} - -func TestCreateMessageSuccess(t *testing.T) { - log, err := logger.InitLogger(logger.InfoLevel) - if err != nil { - t.Errorf("#setup_request_handler_test.TestCreateMessageSuccess - failed to initialize logger, error: %s", err) - } - messageChannel := make(chan *models.E2RequestMessage) - assert.NotPanics(t, func() { createMsg(log, messageChannel) }) - assert.NotEmpty(t, <-messageChannel) -} - -func TestParseRicId(t *testing.T) { - var testCases = []struct { - ricId string - pLMNId []byte - eNBId []byte - eNBIdBitqty uint - failure error - }{ - { - ricId: "bbbccc-abcd02/18", - pLMNId: []byte{0xbb, 0xbc, 0xcc}, - eNBId: []byte{0xab, 0xcd, 0x2}, /*00000010 -> 10000000*/ - eNBIdBitqty: e2pdus.ShortMacro_eNB_ID, - }, - { - ricId: "bbbccc-abcd0e/20", - pLMNId: []byte{0xbb, 0xbc, 0xcc}, - eNBId: []byte{0xab, 0xcd, 0xe}, - eNBIdBitqty: e2pdus.Macro_eNB_ID, - }, - { - ricId: "bbbccc-abcd07/21", - pLMNId: []byte{0xbb, 0xbc, 0xcc}, - eNBId: []byte{0xab, 0xcd, 0x7}, /*00000111 -> 00111000*/ - eNBIdBitqty: e2pdus.LongMacro_eNB_ID, - }, - { - ricId: "bbbccc-abcdef08/28", - pLMNId: []byte{0xbb, 0xbc, 0xcc}, - eNBId: []byte{0xab, 0xcd, 0xef, 0x8}, - eNBIdBitqty: e2pdus.Home_eNB_ID, - }, - { - ricId: "", - failure: fmt.Errorf("unable to extract the value of RIC_ID: EOF"), - }, - - { - ricId: "bbbccc", - failure: fmt.Errorf("unable to extract the value of RIC_ID: unexpected EOF"), - }, - { - ricId: "bbbccc-", - failure: fmt.Errorf("unable to extract the value of RIC_ID: EOF"), - }, - { - ricId: "-bbbccc", - failure: fmt.Errorf("%s", "unable to extract the value of RIC_ID: no hex data for %x string"), - }, - { - ricId: "/20", - failure: fmt.Errorf("%s", "unable to extract the value of RIC_ID: no hex data for %x string"), - }, - { - ricId: "bbbcccdd-abcdef08/28", // pLMNId too long - failure: fmt.Errorf("unable to extract the value of RIC_ID: input does not match format"), - }, - { - ricId: "bbbccc-abcdef0809/28", // eNBId too long - failure: fmt.Errorf("unable to extract the value of RIC_ID: input does not match format"), - }, - - { - ricId: "bbbc-abcdef08/28", // pLMNId too short - failure: fmt.Errorf("invalid value for RIC_ID, len(pLMNId:[187 188]) != 3"), - }, - { - ricId: "bbbccc-abcd/28", // eNBId too short - failure: fmt.Errorf("invalid value for RIC_ID, len(eNBId:[171 205]) != 3 or 4"), - }, - { - ricId: "bbbccc-abcdef08/239", // bit quantity too long - no error, will return 23 (which is invalid) - failure: fmt.Errorf("invalid value for RIC_ID, eNBIdBitqty: 23"), - }, - } - - for _, tc := range testCases { - t.Run(tc.ricId, func(t *testing.T) { - - err := parseRicID(tc.ricId) - if err != nil { - if tc.failure == nil { - t.Errorf("want: success, got: parse failed. Error: %v\n", err) - } else { - if strings.Compare(err.Error(), tc.failure.Error()) != 0 { - t.Errorf("want: %s, got: %s\n", err, tc.failure) - } - } - } else { - if bytes.Compare(tc.pLMNId, pLMNId) != 0 { - t.Errorf("want: pLMNId = %v, got: pLMNId = %v", tc.pLMNId, pLMNId) - } - - if bytes.Compare(tc.eNBId, eNBId) != 0 { - t.Errorf("want: eNBId = %v, got: eNBId = %v", tc.eNBId, eNBId) - } - - if tc.eNBIdBitqty != eNBIdBitqty { - t.Errorf("want: eNBIdBitqty = %d, got: eNBIdBitqty = %d", tc.eNBIdBitqty, eNBIdBitqty) - } - } - }) - } -} -func createMsg(log *logger.Logger, messageChannel chan *models.E2RequestMessage) { - h := SetupRequestHandler{} - E2Sessions := make(sessions.E2Sessions) - var wg sync.WaitGroup - var rd models.RequestDetails - go h.CreateMessage(log, &rd, messageChannel, E2Sessions, time.Now(), wg) - wg.Wait() +const E2TAddress = "10.0.2.15:8989" +const RanName = "test" + +func initSetupRequestTest(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.E2TInstancesManagerMock, *mocks.RanSetupManagerMock) { + log := initLog(t) + config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3} + + readerMock := &mocks.RnibReaderMock{} + writerMock := &mocks.RnibWriterMock{} + + rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock) + + ranSetupManagerMock := &mocks.RanSetupManagerMock{} + e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{} + handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManagerMock, protocol, e2tInstancesManagerMock) + + return readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock +} + +func TestX2SetupHandleNoPortError(t *testing.T) { + readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + + sr := models.SetupRequest{"127.0.0.1", 0, RanName,} + _, err := handler.Handle(sr) + assert.IsType(t, &e2managererrors.RequestValidationError{}, err) + readerMock.AssertNotCalled(t, "GetNodeb") +} + +func TestX2SetupHandleNoRanNameError(t *testing.T) { + readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + + sr := models.SetupRequest{RanPort: 8080, RanIp: "127.0.0.1"} + _, err := handler.Handle(sr) + assert.IsType(t, &e2managererrors.RequestValidationError{}, err) + readerMock.AssertNotCalled(t, "GetNodeb") +} + +func TestX2SetupHandleNoIpError(t *testing.T) { + readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + + sr := models.SetupRequest{RanPort: 8080, RanName: RanName} + _, err := handler.Handle(sr) + assert.IsType(t, &e2managererrors.RequestValidationError{}, err) + readerMock.AssertNotCalled(t, "GetNodeb") +} + +func TestX2SetupHandleInvalidIpError(t *testing.T) { + readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + + sr := models.SetupRequest{RanPort: 8080, RanName: RanName, RanIp: "invalid ip"} + _, err := handler.Handle(sr) + assert.IsType(t, &e2managererrors.RequestValidationError{}, err) + readerMock.AssertNotCalled(t, "GetNodeb") +} + +func TestX2SetupHandleGetNodebFailure(t *testing.T) { + readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + + rnibErr := &common.ValidationError{} + nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,} + readerMock.On("GetNodeb", RanName).Return(nb, rnibErr) + + sr := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(sr) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) +} + +func TestSetupNewRanSelectE2TInstancesDbError(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewRnibDbError()) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + e2tInstancesManagerMock.AssertNotCalled(t, "AssociateRan") + writerMock.AssertNotCalled(t, "SaveNodeb") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupNewRanSelectE2TInstancesNoInstances(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewE2TInstanceAbsenceError()) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err) + e2tInstancesManagerMock.AssertNotCalled(t, "AssociateRan") + writerMock.AssertNotCalled(t, "SaveNodeb") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupNewRanAssociateRanFailure(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(e2managererrors.NewRnibDbError()) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + writerMock.AssertNotCalled(t, "SaveNodeb") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupNewRanSaveNodebFailure(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress) + writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(common.NewInternalError(fmt.Errorf(""))) + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") } + +func TestSetupNewRanSetupDbError(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress) + writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil) + ranSetupManagerMock.On("ExecuteSetup", nodebInfo, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRnibDbError()) + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) +} + +func TestSetupNewRanSetupRmrError(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress) + writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil) + ranSetupManagerMock.On("ExecuteSetup", nodebInfo, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRmrError()) + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.RmrError{}, err) +} + +func TestSetupNewRanSetupSuccess(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress) + writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil) + ranSetupManagerMock.On("ExecuteSetup", nodebInfo, entities.ConnectionStatus_CONNECTING).Return(nil) + _, err := handler.Handle(setupRequest) + assert.Nil(t, err) +} + +func TestX2SetupExistingRanShuttingDown(t *testing.T) { + readerMock, _, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}, nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.WrongStateError{}, err) + e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestEndcSetupExistingRanShuttingDown(t *testing.T) { + readerMock, _, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}, nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.WrongStateError{}, err) + e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupExistingRanWithoutAssocE2TInstanceSelectDbError(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewRnibDbError()) + updatedNb := *nb + updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED + writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupExistingRanWithoutAssocE2TInstanceSelectNoInstanceError(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewE2TInstanceAbsenceError()) + updatedNb := *nb + updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED + writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err) + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupExistingRanWithoutAssocE2TInstanceSelectNoInstanceErrorUpdateFailure(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewE2TInstanceAbsenceError()) + updatedNb := *nb + updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED + writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf(""))) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err) + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupExistingRanWithoutAssocE2TInstanceSelectErrorDisconnected(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:"", ConnectionStatus:entities.ConnectionStatus_DISCONNECTED} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, e2managererrors.NewE2TInstanceAbsenceError()) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err) + writerMock.AssertNotCalled(t, "UpdateNodebInfo") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupExistingRanWithoutAssocE2TInstanceAssociateRanFailure(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(e2managererrors.NewRnibDbError()) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + writerMock.AssertNotCalled(t, "UpdateNodebInfo") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupExistingRanWithoutAssocE2TInstanceAssociateRanSucceedsUpdateNodebFails(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + updatedNb := *nb + updatedNb.AssociatedE2TInstanceAddress = E2TAddress + updatedNb.ConnectionAttempts = 0 + writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf(""))) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupExistingRanWithoutAssocE2TInstanceExecuteSetupFailure(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + updatedNb := *nb + updatedNb.AssociatedE2TInstanceAddress = E2TAddress + updatedNb.ConnectionAttempts = 0 + writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil) + ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRnibDbError()) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) +} + +func TestSetupExistingRanWithoutAssocE2TInstanceSuccess(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + updatedNb := *nb + updatedNb.AssociatedE2TInstanceAddress = E2TAddress + updatedNb.ConnectionAttempts = 0 + writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil) + ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(nil) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.Nil(t, err) +} + +func TestSetupExistingRanWithAssocE2TInstanceUpdateNodebFailure(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:E2TAddress} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + updatedNb := *nb + updatedNb.ConnectionAttempts = 0 + writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf(""))) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance") + e2tInstancesManagerMock.AssertNotCalled(t, "AssociateRan") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupExistingConnectedRanWithAssocE2TInstanceSuccess(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus: entities.ConnectionStatus_CONNECTED} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + updatedNb := *nb + updatedNb.ConnectionAttempts = 0 + writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil) + ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTED).Return(nil) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.Nil(t, err) + e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance") + e2tInstancesManagerMock.AssertNotCalled(t, "AssociateRan") +} \ No newline at end of file