X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2FrNibWriter%2FrNibWriter_test.go;h=34ef4c87b969a00e435f136fbfa7f1c73223dd49;hb=31a781cfece23cf447792e9be4f7cbc4834a782c;hp=63a5d18a9907b1035e044bfa7fd4498edeec2db2;hpb=264731981e4a52e876c5b484e35032ada6559ac6;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/rNibWriter/rNibWriter_test.go b/E2Manager/rNibWriter/rNibWriter_test.go index 63a5d18..34ef4c8 100644 --- a/E2Manager/rNibWriter/rNibWriter_test.go +++ b/E2Manager/rNibWriter/rNibWriter_test.go @@ -13,12 +13,16 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// + +// This source code is part of the near-RT RIC (RAN Intelligent Controller) +// platform project (RICP). + package rNibWriter import ( "e2mgr/mocks" + "encoding/json" "errors" "fmt" "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common" @@ -29,55 +33,19 @@ import ( "time" ) -func TestInitRNibWriter(t *testing.T) { - writerPool = nil - initSdlInstanceMock(namespace, 1) - available, created := writerPool.Stats() - assert.Equal(t, available, 0, "number of available objects in the writerPool should be 0") - assert.Equal(t, created, 0, "number of created objects in the writerPool should be 0") - w := GetRNibWriter() - assert.NotNil(t, w) -} - -func TestInitPool(t *testing.T) { - writerPool = nil - sdlInstanceMock := new(mocks.MockSdlInstance) - initPool(1, func() interface{} { - sdlI := common.ISdlInstance(sdlInstanceMock) - return &rNibWriterInstance{sdl: &sdlI, namespace: namespace} - }, - func(obj interface{}) { - }, - ) - assert.NotNil(t, writerPool) - assert.NotNil(t, writerPool.New) - assert.NotNil(t, writerPool.Destroy) - available, created := writerPool.Stats() - assert.Equal(t, 0, available, "number of available objects in the writerPool should be 0") - assert.Equal(t, 0, created, "number of created objects in the writerPool should be 0") +func initSdlInstanceMock(namespace string) (w RNibWriter, sdlInstanceMock *mocks.MockSdlInstance) { + sdlInstanceMock = new(mocks.MockSdlInstance) + w = GetRNibWriter(sdlInstanceMock) + return } var namespace = "namespace" -func initSdlInstanceMock(namespace string, poolSize int) *mocks.MockSdlInstance { - sdlInstanceMock := new(mocks.MockSdlInstance) - initPool(poolSize, func() interface{} { - sdlI := common.ISdlInstance(sdlInstanceMock) - return &rNibWriterInstance{sdl: &sdlI, namespace: namespace} - }, - func(obj interface{}) { - }, - ) - return sdlInstanceMock -} - func TestUpdateNodebInfoSuccess(t *testing.T) { inventoryName := "name" plmnId := "02f829" nbId := "4a952a0a" - writerPool = nil - sdlInstanceMock := initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, sdlInstanceMock := initSdlInstanceMock(namespace) nodebInfo := &entities.NodebInfo{} nodebInfo.RanName = inventoryName nodebInfo.GlobalNbId = &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId} @@ -107,9 +75,7 @@ func TestUpdateNodebInfoMissingInventoryNameFailure(t *testing.T) { inventoryName := "name" plmnId := "02f829" nbId := "4a952a0a" - writerPool = nil - sdlInstanceMock := initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, sdlInstanceMock := initSdlInstanceMock(namespace) nodebInfo := &entities.NodebInfo{} data, err := proto.Marshal(nodebInfo) if err != nil { @@ -128,14 +94,12 @@ func TestUpdateNodebInfoMissingInventoryNameFailure(t *testing.T) { rNibErr := w.UpdateNodebInfo(nodebInfo) assert.NotNil(t, rNibErr) - assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode()) + assert.IsType(t, &common.ValidationError{}, rNibErr) } func TestUpdateNodebInfoMissingGlobalNbId(t *testing.T) { inventoryName := "name" - writerPool = nil - sdlInstanceMock := initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, sdlInstanceMock := initSdlInstanceMock(namespace) nodebInfo := &entities.NodebInfo{} nodebInfo.RanName = inventoryName data, err := proto.Marshal(nodebInfo) @@ -157,9 +121,7 @@ func TestUpdateNodebInfoMissingGlobalNbId(t *testing.T) { func TestSaveEnb(t *testing.T) { name := "name" ranName := "RAN:" + name - writerPool = nil - sdlInstanceMock := initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, sdlInstanceMock := initSdlInstanceMock(namespace) nb := entities.NodebInfo{} nb.NodeType = entities.Node_ENB nb.ConnectionStatus = 1 @@ -207,9 +169,7 @@ func TestSaveEnb(t *testing.T) { func TestSaveEnbCellIdValidationFailure(t *testing.T) { name := "name" - writerPool = nil - initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, _ := initSdlInstanceMock(namespace) nb := entities.NodebInfo{} nb.NodeType = entities.Node_ENB nb.ConnectionStatus = 1 @@ -223,14 +183,12 @@ func TestSaveEnbCellIdValidationFailure(t *testing.T) { nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}} rNibErr := w.SaveNodeb(nbIdentity, &nb) assert.NotNil(t, rNibErr) - assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode()) - assert.Equal(t, "3 VALIDATION_ERROR - #utils.ValidateAndBuildCellIdKey - an empty cell id received", rNibErr.Error()) + assert.IsType(t, &common.ValidationError{}, rNibErr) + assert.Equal(t, "#utils.ValidateAndBuildCellIdKey - an empty cell id received", rNibErr.Error()) } func TestSaveEnbInventoryNameValidationFailure(t *testing.T) { - writerPool = nil - initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, _ := initSdlInstanceMock(namespace) nb := entities.NodebInfo{} nb.NodeType = entities.Node_ENB nb.ConnectionStatus = 1 @@ -244,39 +202,13 @@ func TestSaveEnbInventoryNameValidationFailure(t *testing.T) { nbIdentity := &entities.NbIdentity{InventoryName: "", GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}} rNibErr := w.SaveNodeb(nbIdentity, &nb) assert.NotNil(t, rNibErr) - assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode()) - assert.Equal(t, "3 VALIDATION_ERROR - #utils.ValidateAndBuildNodeBNameKey - an empty inventory name received", rNibErr.Error()) -} - -func TestSaveEnbOnClosedPool(t *testing.T) { - name := "name" - writerPool = nil - sdlInstanceMock := initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() - nb := entities.NodebInfo{} - nb.NodeType = entities.Node_ENB - nb.ConnectionStatus = 1 - nb.Ip = "localhost" - nb.Port = 5656 - enb := entities.Enb{} - nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb} - data, err := proto.Marshal(&nb) - if err != nil { - t.Errorf("#rNibWriter_test.TestSaveEnbOnClosedPool - Failed to marshal NodeB entity. Error: %v", err) - } - setExpected := []interface{}{name, data} - var e error - sdlInstanceMock.On("Set", setExpected).Return(e) - writerPool.Close() - nbIdentity := &entities.NbIdentity{} - assert.Panics(t, func() { w.SaveNodeb(nbIdentity, &nb) }) + assert.IsType(t, &common.ValidationError{}, rNibErr) + assert.Equal(t, "#utils.ValidateAndBuildNodeBNameKey - an empty inventory name received", rNibErr.Error()) } func TestSaveGnbCellIdValidationFailure(t *testing.T) { name := "name" - writerPool = nil - initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, _ := initSdlInstanceMock(namespace) nb := entities.NodebInfo{} nb.NodeType = entities.Node_GNB nb.ConnectionStatus = 1 @@ -291,16 +223,14 @@ func TestSaveGnbCellIdValidationFailure(t *testing.T) { nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}} rNibErr := w.SaveNodeb(nbIdentity, &nb) assert.NotNil(t, rNibErr) - assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode()) - assert.Equal(t, "3 VALIDATION_ERROR - #utils.ValidateAndBuildNrCellIdKey - an empty cell id received", rNibErr.Error()) + assert.IsType(t, &common.ValidationError{}, rNibErr) + assert.Equal(t, "#utils.ValidateAndBuildNrCellIdKey - an empty cell id received", rNibErr.Error()) } func TestSaveGnb(t *testing.T) { name := "name" ranName := "RAN:" + name - writerPool = nil - sdlInstanceMock := initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, sdlInstanceMock := initSdlInstanceMock(namespace) nb := entities.NodebInfo{} nb.NodeType = entities.Node_GNB nb.ConnectionStatus = 1 @@ -354,9 +284,7 @@ func TestSaveRanLoadInformationSuccess(t *testing.T) { t.Errorf("#rNibWriter_test.TestSaveRanLoadInformationSuccess - Failed to build ran load infromation key. Error: %v", validationErr) } - writerPool = nil - sdlInstanceMock := initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, sdlInstanceMock := initSdlInstanceMock(namespace) ranLoadInformation := generateRanLoadInformation() data, err := proto.Marshal(ranLoadInformation) @@ -376,9 +304,7 @@ func TestSaveRanLoadInformationSuccess(t *testing.T) { func TestSaveRanLoadInformationMarshalNilFailure(t *testing.T) { inventoryName := "name2" - writerPool = nil - initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, _ := initSdlInstanceMock(namespace) expectedErr := common.NewInternalError(errors.New("proto: Marshal called with nil")) err := w.SaveRanLoadInformation(inventoryName, nil) @@ -387,13 +313,11 @@ func TestSaveRanLoadInformationMarshalNilFailure(t *testing.T) { func TestSaveRanLoadInformationEmptyInventoryNameFailure(t *testing.T) { inventoryName := "" - writerPool = nil - initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, _ := initSdlInstanceMock(namespace) err := w.SaveRanLoadInformation(inventoryName, nil) assert.NotNil(t, err) - assert.Equal(t, common.VALIDATION_ERROR, err.GetCode()) + assert.IsType(t, &common.ValidationError{}, err) } func TestSaveRanLoadInformationSdlFailure(t *testing.T) { @@ -405,9 +329,7 @@ func TestSaveRanLoadInformationSdlFailure(t *testing.T) { t.Errorf("#rNibWriter_test.TestSaveRanLoadInformationSuccess - Failed to build ran load infromation key. Error: %v", validationErr) } - writerPool = nil - sdlInstanceMock := initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, sdlInstanceMock := initSdlInstanceMock(namespace) ranLoadInformation := generateRanLoadInformation() data, err := proto.Marshal(ranLoadInformation) @@ -423,8 +345,7 @@ func TestSaveRanLoadInformationSdlFailure(t *testing.T) { rNibErr := w.SaveRanLoadInformation(inventoryName, ranLoadInformation) assert.NotNil(t, rNibErr) - assert.Equal(t, common.INTERNAL_ERROR, rNibErr.GetCode()) - assert.Equal(t, expectedErr, rNibErr.GetError()) + assert.IsType(t, &common.InternalError{}, rNibErr) } func generateCellLoadInformation() *entities.CellLoadInformation { @@ -501,9 +422,7 @@ func generateRanLoadInformation() *entities.RanLoadInformation { } func TestSaveNilEntityFailure(t *testing.T) { - writerPool = nil - initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, _ := initSdlInstanceMock(namespace) expectedErr := common.NewInternalError(errors.New("proto: Marshal called with nil")) nbIdentity := &entities.NbIdentity{} actualErr := w.SaveNodeb(nbIdentity, nil) @@ -511,10 +430,8 @@ func TestSaveNilEntityFailure(t *testing.T) { } func TestSaveUnknownTypeEntityFailure(t *testing.T) { - writerPool = nil - initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() - expectedErr := common.NewValidationError(errors.New("#rNibWriter.saveNodeB - Unknown responding node type, entity: ip:\"localhost\" port:5656 ")) + w, _ := initSdlInstanceMock(namespace) + expectedErr := common.NewValidationError("#rNibWriter.saveNodeB - Unknown responding node type, entity: ip:\"localhost\" port:5656 ") nbIdentity := &entities.NbIdentity{InventoryName: "name", GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}} nb := &entities.NodebInfo{} nb.Port = 5656 @@ -528,9 +445,7 @@ func TestSaveEntityFailure(t *testing.T) { plmnId := "02f829" nbId := "4a952a0a" - writerPool = nil - sdlInstanceMock := initSdlInstanceMock(namespace, 1) - w := GetRNibWriter() + w, sdlInstanceMock := initSdlInstanceMock(namespace) gnb := entities.NodebInfo{} gnb.NodeType = entities.Node_GNB data, err := proto.Marshal(&gnb) @@ -546,79 +461,120 @@ func TestSaveEntityFailure(t *testing.T) { assert.NotEmpty(t, rNibErr) } -func TestGetRNibWriterPoolNotInitializedFailure(t *testing.T) { - writerPool = nil - assert.Panics(t, func() { GetRNibWriter() }) -} - func TestGetRNibWriter(t *testing.T) { - writerPool = nil - initSdlInstanceMock(namespace, 1) - received := GetRNibWriter() + received, _ := initSdlInstanceMock(namespace) assert.NotEmpty(t, received) - available, created := writerPool.Stats() - assert.Equal(t, 0, available, "number of available objects in the writerPool should be 0") - assert.Equal(t, 1, created, "number of created objects in the writerPool should be 1") - writerPool.Close() } -func TestClose(t *testing.T) { - writerPool = nil - instanceMock := initSdlInstanceMock(namespace, 2) - w1 := GetRNibWriter() - w2 := GetRNibWriter() - writerPool.Put(w1) - writerPool.Put(w2) - available, created := writerPool.Stats() - assert.Equal(t, 2, available, "number of available objects in the writerPool should be 2") - assert.Equal(t, 2, created, "number of created objects in the writerPool should be 2") +func TestSaveE2TInstanceSuccess(t *testing.T) { + address := "10.10.2.15:9800" + loadKey, validationErr := common.ValidateAndBuildE2TInstanceKey(address) + + if validationErr != nil { + t.Errorf("#rNibWriter_test.TestSaveE2TInstanceSuccess - Failed to build E2T Instance key. Error: %v", validationErr) + } + + w, sdlInstanceMock := initSdlInstanceMock(namespace) + + e2tInstance := generateE2tInstance(address) + data, err := json.Marshal(e2tInstance) + + if err != nil { + t.Errorf("#rNibWriter_test.TestSaveE2TInstanceSuccess - Failed to marshal E2tInstance entity. Error: %v", err) + } + var e error - instanceMock.On("Close").Return(e) - Close() - available, created = writerPool.Stats() - assert.Equal(t, 0, available, "number of available objects in the writerPool should be 0") - assert.Equal(t, 0, created, "number of created objects in the writerPool should be 0") + var setExpected []interface{} + setExpected = append(setExpected, loadKey, data) + sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e) + + rNibErr := w.SaveE2TInstance(e2tInstance) + assert.Nil(t, rNibErr) } -func TestCloseOnClosedPoolFailure(t *testing.T) { - writerPool = nil - instanceMock := initSdlInstanceMock(namespace, 1) - w1 := GetRNibWriter() - writerPool.Put(w1) - available, created := writerPool.Stats() - assert.Equal(t, 1, available, "number of available objects in the writerPool should be 1") - assert.Equal(t, 1, created, "number of created objects in the writerPool should be 1") - var e error - instanceMock.On("Close").Return(e) - Close() - assert.Panics(t, func() { Close() }) +func TestSaveE2TInstanceNullE2tInstanceFailure(t *testing.T) { + w, _ := initSdlInstanceMock(namespace) + var address string + e2tInstance := entities.NewE2TInstance(address) + err := w.SaveE2TInstance(e2tInstance) + assert.NotNil(t, err) + assert.IsType(t, &common.ValidationError{}, err) } -func TestCloseFailure(t *testing.T) { - writerPool = nil - instanceMock := initSdlInstanceMock(namespace, 2) - w1 := GetRNibWriter() - writerPool.Put(w1) - available, created := writerPool.Stats() - assert.Equal(t, 1, available, "number of available objects in the writerPool should be 1") - assert.Equal(t, 1, created, "number of created objects in the writerPool should be 1") - e := errors.New("expected error") - instanceMock.On("Close").Return(e) - Close() - available, created = writerPool.Stats() - assert.Equal(t, 0, available, "number of available objects in the writerPool should be 0") - assert.Equal(t, 0, created, "number of created objects in the writerPool should be 0") +func TestSaveE2TInstanceSdlFailure(t *testing.T) { + address := "10.10.2.15:9800" + loadKey, validationErr := common.ValidateAndBuildE2TInstanceKey(address) + + if validationErr != nil { + t.Errorf("#rNibWriter_test.TestSaveE2TInstanceSdlFailure - Failed to build E2T Instance key. Error: %v", validationErr) + } + + w, sdlInstanceMock := initSdlInstanceMock(namespace) + + e2tInstance := generateE2tInstance(address) + data, err := json.Marshal(e2tInstance) + + if err != nil { + t.Errorf("#rNibWriter_test.TestSaveE2TInstanceSdlFailure - Failed to marshal E2tInstance entity. Error: %v", err) + } + + expectedErr := errors.New("expected error") + var setExpected []interface{} + setExpected = append(setExpected, loadKey, data) + sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(expectedErr) + + rNibErr := w.SaveE2TInstance(e2tInstance) + assert.NotNil(t, rNibErr) + assert.IsType(t, &common.InternalError{}, rNibErr) +} + +func generateE2tInstance(address string) *entities.E2TInstance { + e2tInstance := entities.NewE2TInstance(address) + + e2tInstance.AssociatedRanList = []string{"test1", "test2"} + + return e2tInstance } -func TestInit(t *testing.T) { - writerPool = nil - Init("", 1) - assert.NotNil(t, writerPool) - assert.NotNil(t, writerPool.New) - assert.NotNil(t, writerPool.Destroy) - available, created := writerPool.Stats() - assert.Equal(t, 0, available, "number of available objects in the writerPool should be 0") - assert.Equal(t, 0, created, "number of created objects in the writerPool should be 0") +func TestSaveE2TAddressesSuccess(t *testing.T) { + address := "10.10.2.15:9800" + w, sdlInstanceMock := initSdlInstanceMock(namespace) + + e2tAddresses := []string{address} + data, err := json.Marshal(e2tAddresses) + + if err != nil { + t.Errorf("#rNibWriter_test.TestSaveE2TInfoListSuccess - Failed to marshal E2TInfoList. Error: %v", err) + } + + var e error + var setExpected []interface{} + setExpected = append(setExpected, E2TAddressesKey, data) + sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e) + + rNibErr := w.SaveE2TAddresses(e2tAddresses) + assert.Nil(t, rNibErr) +} + +func TestSaveE2TAddressesSdlFailure(t *testing.T) { + address := "10.10.2.15:9800" + w, sdlInstanceMock := initSdlInstanceMock(namespace) + + e2tAddresses := []string{address} + data, err := json.Marshal(e2tAddresses) + + if err != nil { + t.Errorf("#rNibWriter_test.TestSaveE2TInfoListSdlFailure - Failed to marshal E2TInfoList. Error: %v", err) + } + + expectedErr := errors.New("expected error") + var setExpected []interface{} + setExpected = append(setExpected, E2TAddressesKey, data) + sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(expectedErr) + + rNibErr := w.SaveE2TAddresses(e2tAddresses) + assert.NotNil(t, rNibErr) + assert.IsType(t, &common.InternalError{}, rNibErr) } //Integration tests