X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=ric-plt%2Fresource-status-manager.git;a=blobdiff_plain;f=RSM%2Frsmdb%2Frsm_reader_test.go;fp=RSM%2Frsmdb%2Frsm_reader_test.go;h=e1703dfad453334791789bff25b4072a9db9753f;hp=0000000000000000000000000000000000000000;hb=60652d98d51ee23c1eaca2e8bc2bf19c74c57658;hpb=b8d3ff3abf409da49ecab244cd6d2c2124dbce7c diff --git a/RSM/rsmdb/rsm_reader_test.go b/RSM/rsmdb/rsm_reader_test.go new file mode 100644 index 0000000..e1703df --- /dev/null +++ b/RSM/rsmdb/rsm_reader_test.go @@ -0,0 +1,179 @@ +/******************************************************************************* + * + * Copyright (c) 2019 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * 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. + * + *******************************************************************************/ +package rsmdb + +import ( + "fmt" + "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common" +// "gerrit.o-ran-sc.org/r/ric-plt/sdlgo" + "github.com/stretchr/testify/assert" +// "os" + "rsm/enums" + "rsm/mocks" + "rsm/models" + "testing" +) + +func TestGetRsmRanInfo(t *testing.T) { + sdl := &mocks.MockSdlInstance{} + reader := GetRsmReader(sdl) + ranName := "test1" + key, _ := common.ValidateAndBuildNodeBNameKey(ranName) + infoAsGoType := models.RsmRanInfo{ + RanName: ranName, + Enb1MeasurementId: 1, + Enb2MeasurementId: 2, + Action: enums.Start, + ActionStatus: false, + } + infoAsDbType:= "{\"ranName\":\"test1\",\"enb1MeasurementId\":1,\"enb2MeasurementId\":2,\"action\":\"start\",\"actionStatus\":false}" + sdl.On("Get", []string{key}).Return(map[string]interface{}{key: infoAsDbType}, nil) + info, err := reader.GetRsmRanInfo(ranName) + if err != nil { + t.Errorf("want: success, got: error: %v\n", err) + } + assert.Equal(t, info, &infoAsGoType) +} + +func TestGetRsmRanInfoValidationError(t *testing.T) { + sdl := &mocks.MockSdlInstance{} + reader := GetRsmReader(sdl) + ranName := "" + key, _ := common.ValidateAndBuildNodeBNameKey(ranName) + sdl.On("Get", []string{key}).Return(map[string]interface{}{key: ""}, nil) + _, err := reader.GetRsmRanInfo(ranName) + assert.NotNil(t, err) + assert.Equal(t, err.Error(), "#utils.ValidateAndBuildNodeBNameKey - an empty inventory name received") +} + +func TestGetRsmRanInfoDbError(t *testing.T) { + sdl := &mocks.MockSdlInstance{} + reader := GetRsmReader(sdl) + ranName := "test1" + key, _ := common.ValidateAndBuildNodeBNameKey(ranName) + sdl.On("Get", []string{key}).Return((map[string]interface{})(nil), fmt.Errorf("db error")) + _, err := reader.GetRsmRanInfo(ranName) + assert.NotNil(t, err) + assert.Equal(t, err.Error(), "db error") +} + +func TestGetGeneralConfiguration(t *testing.T) { + sdl := &mocks.MockSdlInstance{} + reader := GetRsmReader(sdl) + var testCases = []struct { + cfgAsGoType models.RsmGeneralConfiguration + cfgAsDbType string + }{ + { + cfgAsGoType: models.RsmGeneralConfiguration{ + EnableResourceStatus: true, + PartialSuccessAllowed: true, + PrbPeriodic: true, + TnlLoadIndPeriodic: true, + HwLoadIndPeriodic: true, + AbsStatusPeriodic: true, + RsrpMeasurementPeriodic: true, + CsiPeriodic: true, + PeriodicityMs: enums.ReportingPeriodicity_one_thousand_ms, + PeriodicityRsrpMeasurementMs: enums.ReportingPeriodicityRSRPMR_four_hundred_80_ms, + PeriodicityCsiMs: enums.ReportingPeriodicityCSIR_ms20, + }, + + cfgAsDbType: "{\"enableResourceStatus\":true,\"partialSuccessAllowed\":true,\"prbPeriodic\":true,\"tnlLoadIndPeriodic\":true,\"wwLoadIndPeriodic\":true,\"absStatusPeriodic\":true,\"rsrpMeasurementPeriodic\":true,\"csiPeriodic\":true,\"periodicityMs\":1,\"periodicityRsrpMeasurementMs\":3,\"periodicityCsiMs\":3}", + }, + } + + for _, tc := range testCases { + t.Run(tc.cfgAsDbType, func(t *testing.T) { + key := buildRsmGeneralConfigurationKey() + sdl.On("Get", []string{key}).Return(map[string]interface{}{key: tc.cfgAsDbType}, nil) + cfg, err := reader.GetRsmGeneralConfiguration() + if err != nil { + t.Errorf("want: success, got: error: %v\n", err) + } + assert.Equal(t, cfg, &tc.cfgAsGoType) + }) + } +} + +func TestGetGeneralConfigurationNotFound(t *testing.T) { + sdl := &mocks.MockSdlInstance{} + reader := GetRsmReader(sdl) + + key := buildRsmGeneralConfigurationKey() + sdl.On("Get", []string{key}).Return((map[string]interface{})(nil), nil) + _, err := reader.GetRsmGeneralConfiguration() + assert.NotNil(t, err) + assert.Equal(t, err.Error(), "#rsmReader.getByKeyAndUnmarshal - entity of type *models.RsmGeneralConfiguration not found. Key: CFG:GENERAL:v1.0.0") +} + +func TestGetGeneralConfigurationDbError(t *testing.T) { + sdl := &mocks.MockSdlInstance{} + reader := GetRsmReader(sdl) + + key := buildRsmGeneralConfigurationKey() + sdl.On("Get", []string{key}).Return((map[string]interface{})(nil), fmt.Errorf("db error")) + _, err := reader.GetRsmGeneralConfiguration() + assert.NotNil(t, err) + assert.Equal(t, err.Error(), "db error") +} + +func TestGetGeneralConfigurationUnmarshalError(t *testing.T) { + sdl := &mocks.MockSdlInstance{} + reader := GetRsmReader(sdl) + cfgAsDbTYpe := "{\"enableResourceStatus\":true, partialSuccessAllowed\":true,\"prbPeriodic\":true,\"tnlLoadIndPeriodic\":true,\"wwLoadIndPeriodic\":true,\"absStatusPeriodic\":true,\"rsrpMeasurementPeriodic\":true,\"csiPeriodic\":true,\"periodicityMs\":1,\"periodicityRsrpMeasurementMs\":3,\"periodicityCsiMs\":3}" + key := buildRsmGeneralConfigurationKey() + sdl.On("Get", []string{key}).Return(map[string]interface{}{key: cfgAsDbTYpe}, nil) + _, err := reader.GetRsmGeneralConfiguration() + assert.NotNil(t, err) + assert.Equal(t, err.Error(), "invalid character 'p' looking for beginning of object key string") +} + +/* +Test against redis. +Test execution depends on the existence of the environment variable DBAAS_SERVICE_HOST. +* + +func TestGetGeneralConfigurationIntegration(t *testing.T) { + if len(os.Getenv("DBAAS_SERVICE_HOST")) == 0 { + return + } + db := sdlgo.NewDatabase() + sdl := sdlgo.NewSdlInstance("rsm", db) + reader := GetRsmReader(sdl) + cfgAsGoType := models.RsmGeneralConfiguration{ + EnableResourceStatus: true, + PartialSuccessAllowed: true, + PrbPeriodic: true, + TnlLoadIndPeriodic: true, + HwLoadIndPeriodic: true, + AbsStatusPeriodic: true, + RsrpMeasurementPeriodic: true, + CsiPeriodic: true, + PeriodicityMs: enums.ReportingPeriodicity_one_thousand_ms, + PeriodicityRsrpMeasurementMs: enums.ReportingPeriodicityRSRPMR_four_hundred_80_ms, + PeriodicityCsiMs: enums.ReportingPeriodicityCSIR_ms20, + } + cfg, err := reader.GetRsmGeneralConfiguration() + if err != nil { + t.Errorf("want: success, got: error: %v\n", err) + } + + assert.Equal(t, &cfgAsGoType, cfg) +} +*/ \ No newline at end of file