From 7abc043a40d183f290391f6c99dfc98062f5f237 Mon Sep 17 00:00:00 2001 From: ss412g Date: Thu, 28 May 2020 00:26:29 +0300 Subject: [PATCH] [RIC-306] Split configuration of globalRicId to mmc, mnc and ric id Change-Id: I4546f8600182a63b87548d8f2e84ee1f2ae9ee5e Signed-off-by: ss412g --- E2Manager/configuration/configuration.go | 111 +++++++-- E2Manager/configuration/configuration_test.go | 252 +++++++++++++++++++-- .../e2_setup_request_notification_handler.go | 24 +- .../e2_setup_request_notification_handler_test.go | 14 +- E2Manager/rNibWriter/rNibWriter_test.go | 4 +- E2Manager/resources/configuration.yaml | 5 +- 6 files changed, 360 insertions(+), 50 deletions(-) diff --git a/E2Manager/configuration/configuration.go b/E2Manager/configuration/configuration.go index 5e4c31e..8beac3c 100644 --- a/E2Manager/configuration/configuration.go +++ b/E2Manager/configuration/configuration.go @@ -20,8 +20,10 @@ package configuration import ( + "errors" "fmt" "github.com/spf13/viper" + "strconv" ) type Configuration struct { @@ -38,10 +40,7 @@ type Configuration struct { RoutingManager struct { BaseUrl string } -/* Kubernetes struct { - ConfigPath string - KubeNamespace string - }*/ + NotificationResponseBuffer int BigRedButtonTimeoutSec int MaxRnibConnectionAttempts int @@ -50,8 +49,9 @@ type Configuration struct { KeepAliveDelayMs int E2TInstanceDeletionTimeoutMs int GlobalRicId struct { - PlmnId string - RicNearRtId string + RicId string + Mcc int + Mnc int } } @@ -72,7 +72,6 @@ func ParseConfiguration() *Configuration { config.populateHttpConfig(viper.Sub("http")) config.populateLoggingConfig(viper.Sub("logging")) config.populateRoutingManagerConfig(viper.Sub("routingManager")) - //config.populateKubernetesConfig(viper.Sub("kubernetes")) config.NotificationResponseBuffer = viper.GetInt("notificationResponseBuffer") config.BigRedButtonTimeoutSec = viper.GetInt("bigRedButtonTimeoutSec") config.MaxRnibConnectionAttempts = viper.GetInt("maxRnibConnectionAttempts") @@ -113,27 +112,96 @@ func (c *Configuration) populateRoutingManagerConfig(rmConfig *viper.Viper) { c.RoutingManager.BaseUrl = rmConfig.GetString("baseUrl") } -/*func (c *Configuration) populateKubernetesConfig(rmConfig *viper.Viper) { - if rmConfig == nil { - panic(fmt.Sprintf("#configuration.populateKubernetesConfig - failed to populate Kubernetes configuration: The entry 'kubernetes' not found\n")) +func (c *Configuration) populateGlobalRicIdConfig(globalRicIdConfig *viper.Viper) { + err := validateGlobalRicIdConfig(globalRicIdConfig) + if err != nil { + panic(err.Error()) } - c.Kubernetes.ConfigPath = rmConfig.GetString("configPath") - c.Kubernetes.KubeNamespace = rmConfig.GetString("kubeNamespace") -}*/ + c.GlobalRicId.RicId = globalRicIdConfig.GetString("ricId") + c.GlobalRicId.Mcc = globalRicIdConfig.GetInt("mcc") + c.GlobalRicId.Mnc = globalRicIdConfig.GetInt("mnc") +} -func (c *Configuration) populateGlobalRicIdConfig(globalRicIdConfig *viper.Viper) { +func validateGlobalRicIdConfig(globalRicIdConfig *viper.Viper) error { if globalRicIdConfig == nil { - panic(fmt.Sprintf("#configuration.populateGlobalRicIdConfig - failed to populate Global RicId configuration: The entry 'globalRicId' not found\n")) + return errors.New("#configuration.validateGlobalRicIdConfig - failed to populate Global RicId configuration: The entry 'globalRicId' not found\n") + } + + err := validateRicId(globalRicIdConfig.GetString("ricId")) + + if err != nil { + return err + } + + err = validateMcc(globalRicIdConfig.GetInt("mcc")) + + if err != nil { + return err + } + + err = validateMnc(globalRicIdConfig.GetInt("mnc")) + + if err != nil { + return err + } + + + return nil +} + +func validateMcc(mcc int) error { + + mccStr := strconv.Itoa(mcc) + + if len(mccStr) != 3{ + return errors.New("#configuration.validateMcc - mcc is not 3 digits\n") + } + + if mcc < 0 { + return errors.New("#configuration.validateMcc - mcc is negative\n") + } + return nil +} + +func validateMnc(mnc int) error { + + mncStr := strconv.Itoa(mnc) + + if len(mncStr) < 2 || len(mncStr) >3 { + return errors.New("#configuration.validateMnc - mnc is not 2 or 3 digits\n") } - c.GlobalRicId.PlmnId = globalRicIdConfig.GetString("plmnId") - c.GlobalRicId.RicNearRtId = globalRicIdConfig.GetString("ricNearRtId") + + if mnc < 0 { + return errors.New("#configuration.validateMnc - mnc is negative\n") + } + + return nil } +func validateRicId(ricId string) error{ + + if len(ricId) == 0{ + return errors.New("#configuration.validateRicId - ricId is emtpy\n") + } + + if len(ricId) != 5 { + return errors.New("#configuration.validateRicId - ricId length should be 5 hex characters\n") + } + + _, err := strconv.ParseUint(ricId, 16, 64) + if err != nil { + return errors.New("#configuration.validateRicId - ricId is not hex number\n") + } + + return nil +} + + func (c *Configuration) String() string { return fmt.Sprintf("{logging.logLevel: %s, http.port: %d, rmr: { port: %d, maxMsgSize: %d}, routingManager.baseUrl: %s, "+ "notificationResponseBuffer: %d, bigRedButtonTimeoutSec: %d, maxRnibConnectionAttempts: %d, "+ "rnibRetryIntervalMs: %d, keepAliveResponseTimeoutMs: %d, keepAliveDelayMs: %d, e2tInstanceDeletionTimeoutMs: %d, "+ - "globalRicId: { plmnId: %s, ricNearRtId: %s}",//, kubernetes: {configPath: %s, kubeNamespace: %s}}", + "globalRicId: { ricId: %s, mcc: %d, mnc: %d}", c.Logging.LogLevel, c.Http.Port, c.Rmr.Port, @@ -146,9 +214,8 @@ func (c *Configuration) String() string { c.KeepAliveResponseTimeoutMs, c.KeepAliveDelayMs, c.E2TInstanceDeletionTimeoutMs, - c.GlobalRicId.PlmnId, - c.GlobalRicId.RicNearRtId, -/* c.Kubernetes.ConfigPath, - c.Kubernetes.KubeNamespace,*/ + c.GlobalRicId.RicId, + c.GlobalRicId.Mcc, + c.GlobalRicId.Mnc, ) } diff --git a/E2Manager/configuration/configuration_test.go b/E2Manager/configuration/configuration_test.go index 695ed9a..c6b1e18 100644 --- a/E2Manager/configuration/configuration_test.go +++ b/E2Manager/configuration/configuration_test.go @@ -40,10 +40,9 @@ func TestParseConfigurationSuccess(t *testing.T) { assert.Equal(t, 1500, config.KeepAliveDelayMs) assert.Equal(t, 15000, config.E2TInstanceDeletionTimeoutMs) assert.NotNil(t, config.GlobalRicId) - assert.NotEmpty(t, config.GlobalRicId.PlmnId) - assert.NotEmpty(t, config.GlobalRicId.RicNearRtId) -/* assert.NotEmpty(t, config.Kubernetes.KubeNamespace) - assert.NotEmpty(t, config.Kubernetes.ConfigPath)*/ + assert.Equal(t, "AACCE", config.GlobalRicId.RicId) + assert.Equal(t, 327, config.GlobalRicId.Mcc) + assert.Equal(t, 94, config.GlobalRicId.Mnc) } func TestStringer(t *testing.T) { @@ -176,7 +175,7 @@ func TestRoutingManagerConfigNotFoundFailure(t *testing.T) { "rmr": map[string]interface{}{"port": 3801, "maxMsgSize": 4096}, "logging": map[string]interface{}{"logLevel": "info"}, "http": map[string]interface{}{"port": 3800}, - "globalRicId": map[string]interface{}{"plmnId": "131014", "ricNearRtId": "556670"}, + "globalRicId": map[string]interface{}{"mcc": 327, "mnc": 94, "ricId": "AACCE"}, } buf, err := yaml.Marshal(yamlMap) if err != nil { @@ -208,7 +207,6 @@ func TestGlobalRicIdConfigNotFoundFailure(t *testing.T) { "logging": map[string]interface{}{"logLevel": "info"}, "http": map[string]interface{}{"port": 3800}, "routingManager": map[string]interface{}{"baseUrl": "http://iltlv740.intl.att.com:8080/ric/v1/handles/"}, - //"kubernetes": map[string]interface{}{"kubeNamespace": "test", "ConfigPath": "test"}, } buf, err := yaml.Marshal(yamlMap) if err != nil { @@ -218,38 +216,262 @@ func TestGlobalRicIdConfigNotFoundFailure(t *testing.T) { if err != nil { t.Errorf("#TestGlobalRicIdConfigNotFoundFailure - failed to write configuration file: %s\n", configPath) } - assert.PanicsWithValue(t, "#configuration.populateGlobalRicIdConfig - failed to populate Global RicId configuration: The entry 'globalRicId' not found\n", + assert.PanicsWithValue(t, "#configuration.validateGlobalRicIdConfig - failed to populate Global RicId configuration: The entry 'globalRicId' not found\n", func() { ParseConfiguration() }) } -/*func TestKubernetesConfigNotFoundFailure(t *testing.T) { +func TestEmptyRicIdFailure(t *testing.T) { +configPath := "../resources/configuration.yaml" +configPathTmp := "../resources/configuration.yaml_tmp" +err := os.Rename(configPath, configPathTmp) +if err != nil { +t.Errorf("#TestEmptyRicIdFailure - failed to rename configuration file: %s\n", configPath) +} +defer func() { +err = os.Rename(configPathTmp, configPath) +if err != nil { +t.Errorf("#TestEmptyRicIdFailure - failed to rename configuration file: %s\n", configPath) +} +}() +yamlMap := map[string]interface{}{ +"rmr": map[string]interface{}{"port": 3801, "maxMsgSize": 4096}, +"logging": map[string]interface{}{"logLevel": "info"}, +"http": map[string]interface{}{"port": 3800}, +"globalRicId": map[string]interface{}{"mcc": 327, "mnc": 94, "ricId": ""}, +"routingManager": map[string]interface{}{"baseUrl": "http://iltlv740.intl.att.com:8080/ric/v1/handles/"}, +} +buf, err := yaml.Marshal(yamlMap) +if err != nil { +t.Errorf("#TestEmptyRicIdFailure - failed to marshal configuration map\n") +} +err = ioutil.WriteFile("../resources/configuration.yaml", buf, 0644) +if err != nil { +t.Errorf("#TestEmptyRicIdFailure - failed to write configuration file: %s\n", configPath) +} +assert.PanicsWithValue(t, "#configuration.validateRicId - ricId is emtpy\n", +func() { ParseConfiguration() }) +} + +func TestNonHexRicIdFailure(t *testing.T) { configPath := "../resources/configuration.yaml" configPathTmp := "../resources/configuration.yaml_tmp" err := os.Rename(configPath, configPathTmp) if err != nil { - t.Errorf("#TestKubernetesConfigNotFoundFailure - failed to rename configuration file: %s\n", configPath) + t.Errorf("#TestNonHexRicIdFailure - failed to rename configuration file: %s\n", configPath) } defer func() { err = os.Rename(configPathTmp, configPath) if err != nil { - t.Errorf("#TestKubernetesConfigNotFoundFailure - failed to rename configuration file: %s\n", configPath) + t.Errorf("#TestNonHexRicIdFailure - failed to rename configuration file: %s\n", configPath) } }() yamlMap := map[string]interface{}{ "rmr": map[string]interface{}{"port": 3801, "maxMsgSize": 4096}, "logging": map[string]interface{}{"logLevel": "info"}, "http": map[string]interface{}{"port": 3800}, + "globalRicId": map[string]interface{}{"mcc": 327, "mnc": 94, "ricId": "TEST1"}, + "routingManager": map[string]interface{}{"baseUrl": "http://iltlv740.intl.att.com:8080/ric/v1/handles/"}, + } + buf, err := yaml.Marshal(yamlMap) + if err != nil { + t.Errorf("#TestNonHexRicIdFailure - failed to marshal configuration map\n") + } + err = ioutil.WriteFile("../resources/configuration.yaml", buf, 0644) + if err != nil { + t.Errorf("#TestNonHexRicIdFailure - failed to write configuration file: %s\n", configPath) + } + assert.PanicsWithValue(t, "#configuration.validateRicId - ricId is not hex number\n", + func() { ParseConfiguration() }) +} + +func TestWrongRicIdLengthFailure(t *testing.T) { + configPath := "../resources/configuration.yaml" + configPathTmp := "../resources/configuration.yaml_tmp" + err := os.Rename(configPath, configPathTmp) + if err != nil { + t.Errorf("#TestWrongRicIdLengthFailure - failed to rename configuration file: %s\n", configPath) + } + defer func() { + err = os.Rename(configPathTmp, configPath) + if err != nil { + t.Errorf("#TestWrongRicIdLengthFailure - failed to rename configuration file: %s\n", configPath) + } + }() + yamlMap := map[string]interface{}{ + "rmr": map[string]interface{}{"port": 3801, "maxMsgSize": 4096}, + "logging": map[string]interface{}{"logLevel": "info"}, + "http": map[string]interface{}{"port": 3800}, + "globalRicId": map[string]interface{}{"mcc": 327, "mnc": 94, "ricId": "AA43"}, + "routingManager": map[string]interface{}{"baseUrl": "http://iltlv740.intl.att.com:8080/ric/v1/handles/"}, + } + buf, err := yaml.Marshal(yamlMap) + if err != nil { + t.Errorf("#TestWrongRicIdLengthFailure - failed to marshal configuration map\n") + } + err = ioutil.WriteFile("../resources/configuration.yaml", buf, 0644) + if err != nil { + t.Errorf("#TestWrongRicIdLengthFailure - failed to write configuration file: %s\n", configPath) + } + assert.PanicsWithValue(t, "#configuration.validateRicId - ricId length should be 5 hex characters\n", + func() { ParseConfiguration() }) +} + +func TestMccNotThreeDigitsFailure(t *testing.T) { + configPath := "../resources/configuration.yaml" + configPathTmp := "../resources/configuration.yaml_tmp" + err := os.Rename(configPath, configPathTmp) + if err != nil { + t.Errorf("#TestMccNotThreeDigitsFailure - failed to rename configuration file: %s\n", configPath) + } + defer func() { + err = os.Rename(configPathTmp, configPath) + if err != nil { + t.Errorf("#TestMccNotThreeDigitsFailure - failed to rename configuration file: %s\n", configPath) + } + }() + yamlMap := map[string]interface{}{ + "rmr": map[string]interface{}{"port": 3801, "maxMsgSize": 4096}, + "logging": map[string]interface{}{"logLevel": "info"}, + "http": map[string]interface{}{"port": 3800}, + "globalRicId": map[string]interface{}{"mcc": "31", "mnc": "94", "ricId": "AA443"}, + "routingManager": map[string]interface{}{"baseUrl": "http://iltlv740.intl.att.com:8080/ric/v1/handles/"}, + } + buf, err := yaml.Marshal(yamlMap) + if err != nil { + t.Errorf("#TestMccNotThreeDigitsFailure - failed to marshal configuration map\n") + } + err = ioutil.WriteFile("../resources/configuration.yaml", buf, 0644) + if err != nil { + t.Errorf("#TestMccNotThreeDigitsFailure - failed to write configuration file: %s\n", configPath) + } + assert.PanicsWithValue(t, "#configuration.validateMcc - mcc is not 3 digits\n", + func() { ParseConfiguration() }) +} + +func TestMncLengthIsGreaterThanThreeDigitsFailure(t *testing.T) { + configPath := "../resources/configuration.yaml" + configPathTmp := "../resources/configuration.yaml_tmp" + err := os.Rename(configPath, configPathTmp) + if err != nil { + t.Errorf("#TestMncLengthIsGreaterThanThreeDigitsFailure - failed to rename configuration file: %s\n", configPath) + } + defer func() { + err = os.Rename(configPathTmp, configPath) + if err != nil { + t.Errorf("#TestMncLengthIsGreaterThanThreeDigitsFailure - failed to rename configuration file: %s\n", configPath) + } + }() + yamlMap := map[string]interface{}{ + "rmr": map[string]interface{}{"port": 3801, "maxMsgSize": 4096}, + "logging": map[string]interface{}{"logLevel": "info"}, + "http": map[string]interface{}{"port": 3800}, + "globalRicId": map[string]interface{}{"mcc": "310", "mnc": "6794", "ricId": "AA443"}, + "routingManager": map[string]interface{}{"baseUrl": "http://iltlv740.intl.att.com:8080/ric/v1/handles/"}, + } + buf, err := yaml.Marshal(yamlMap) + if err != nil { + t.Errorf("#TestMncLengthIsGreaterThanThreeDigitsFailure - failed to marshal configuration map\n") + } + err = ioutil.WriteFile("../resources/configuration.yaml", buf, 0644) + if err != nil { + t.Errorf("#TestMncLengthIsGreaterThanThreeDigitsFailure - failed to write configuration file: %s\n", configPath) + } + assert.PanicsWithValue(t, "#configuration.validateMnc - mnc is not 2 or 3 digits\n", + func() { ParseConfiguration() }) +} + +func TestMncLengthIsLessThanTwoDigitsFailure(t *testing.T) { + configPath := "../resources/configuration.yaml" + configPathTmp := "../resources/configuration.yaml_tmp" + err := os.Rename(configPath, configPathTmp) + if err != nil { + t.Errorf("#TestMncLengthIsLessThanTwoDigitsFailure - failed to rename configuration file: %s\n", configPath) + } + defer func() { + err = os.Rename(configPathTmp, configPath) + if err != nil { + t.Errorf("#TestMncLengthIsLessThanTwoDigitsFailure - failed to rename configuration file: %s\n", configPath) + } + }() + yamlMap := map[string]interface{}{ + "rmr": map[string]interface{}{"port": 3801, "maxMsgSize": 4096}, + "logging": map[string]interface{}{"logLevel": "info"}, + "http": map[string]interface{}{"port": 3800}, + "globalRicId": map[string]interface{}{"mcc": "310", "mnc": "4", "ricId": "AA443"}, + "routingManager": map[string]interface{}{"baseUrl": "http://iltlv740.intl.att.com:8080/ric/v1/handles/"}, + } + buf, err := yaml.Marshal(yamlMap) + if err != nil { + t.Errorf("#TestMncLengthIsLessThanTwoDigitsFailure - failed to marshal configuration map\n") + } + err = ioutil.WriteFile("../resources/configuration.yaml", buf, 0644) + if err != nil { + t.Errorf("#TestMncLengthIsLessThanTwoDigitsFailure - failed to write configuration file: %s\n", configPath) + } + assert.PanicsWithValue(t, "#configuration.validateMnc - mnc is not 2 or 3 digits\n", + func() { ParseConfiguration() }) +} + +func TestNegativeMncFailure(t *testing.T) { + configPath := "../resources/configuration.yaml" + configPathTmp := "../resources/configuration.yaml_tmp" + err := os.Rename(configPath, configPathTmp) + if err != nil { + t.Errorf("#TestNegativeMncFailure - failed to rename configuration file: %s\n", configPath) + } + defer func() { + err = os.Rename(configPathTmp, configPath) + if err != nil { + t.Errorf("#TestNegativeMncFailure - failed to rename configuration file: %s\n", configPath) + } + }() + yamlMap := map[string]interface{}{ + "rmr": map[string]interface{}{"port": 3801, "maxMsgSize": 4096}, + "logging": map[string]interface{}{"logLevel": "info"}, + "http": map[string]interface{}{"port": 3800}, + "globalRicId": map[string]interface{}{"mcc": "310", "mnc": -2, "ricId": "AA443"}, + "routingManager": map[string]interface{}{"baseUrl": "http://iltlv740.intl.att.com:8080/ric/v1/handles/"}, + } + buf, err := yaml.Marshal(yamlMap) + if err != nil { + t.Errorf("#TestNegativeMncFailure - failed to marshal configuration map\n") + } + err = ioutil.WriteFile("../resources/configuration.yaml", buf, 0644) + if err != nil { + t.Errorf("#TestNegativeMncFailure - failed to write configuration file: %s\n", configPath) + } + assert.PanicsWithValue(t, "#configuration.validateMnc - mnc is negative\n", + func() { ParseConfiguration() }) +} + +func TestNegativeMccFailure(t *testing.T) { + configPath := "../resources/configuration.yaml" + configPathTmp := "../resources/configuration.yaml_tmp" + err := os.Rename(configPath, configPathTmp) + if err != nil { + t.Errorf("#TestNegativeMncFailure - failed to rename configuration file: %s\n", configPath) + } + defer func() { + err = os.Rename(configPathTmp, configPath) + if err != nil { + t.Errorf("#TestNegativeMncFailure - failed to rename configuration file: %s\n", configPath) + } + }() + yamlMap := map[string]interface{}{ + "rmr": map[string]interface{}{"port": 3801, "maxMsgSize": 4096}, + "logging": map[string]interface{}{"logLevel": "info"}, + "http": map[string]interface{}{"port": 3800}, + "globalRicId": map[string]interface{}{"mcc": -31, "mnc": 222, "ricId": "AA443"}, "routingManager": map[string]interface{}{"baseUrl": "http://iltlv740.intl.att.com:8080/ric/v1/handles/"}, - "globalRicId": map[string]interface{}{"plmnId": "131014", "ricNearRtId": "556670"}, } buf, err := yaml.Marshal(yamlMap) if err != nil { - t.Errorf("#TestKubernetesConfigNotFoundFailure - failed to marshal configuration map\n") + t.Errorf("#TestNegativeMncFailure - failed to marshal configuration map\n") } err = ioutil.WriteFile("../resources/configuration.yaml", buf, 0644) if err != nil { - t.Errorf("#TestKubernetesConfigNotFoundFailure - failed to write configuration file: %s\n", configPath) + t.Errorf("#TestNegativeMncFailure - failed to write configuration file: %s\n", configPath) } - assert.PanicsWithValue(t, "#configuration.populateKubernetesConfig - failed to populate Kubernetes configuration: The entry 'kubernetes' not found\n", + assert.PanicsWithValue(t, "#configuration.validateMcc - mcc is negative\n", func() { ParseConfiguration() }) -}*/ +} \ No newline at end of file diff --git a/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go b/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go index e50829d..de17a4f 100644 --- a/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go +++ b/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go @@ -171,12 +171,13 @@ func (h E2SetupRequestNotificationHandler) handleUnsuccessfulResponse(nodebInfo func (h E2SetupRequestNotificationHandler) handleSuccessfulResponse(ranName string, req *models.NotificationRequest, setupRequest *models.E2SetupRequestMessage) { - ricNearRtId, err := convertTo20BitString(h.config.GlobalRicId.RicNearRtId) + plmnId := buildPlmnId(strconv.Itoa(h.config.GlobalRicId.Mcc), strconv.Itoa(h.config.GlobalRicId.Mnc)) + + ricNearRtId, err := convertTo20BitString(h.config.GlobalRicId.RicId) if err != nil { - h.logger.Errorf("#E2SetupRequestNotificationHandler.handleSuccessfulResponse - RAN name: %s - failed to convert RicNearRtId value %s to 20 bit string . Error: %s", ranName, h.config.GlobalRicId.RicNearRtId, err) return } - successResponse := models.NewE2SetupSuccessResponseMessage(h.config.GlobalRicId.PlmnId, ricNearRtId, setupRequest) + successResponse := models.NewE2SetupSuccessResponseMessage(plmnId, ricNearRtId, setupRequest) h.logger.Debugf("#E2SetupRequestNotificationHandler.handleSuccessfulResponse - E2_SETUP_RESPONSE has been built successfully %+v", successResponse) responsePayload, err := xml.Marshal(&successResponse.E2APPDU) @@ -191,6 +192,23 @@ func (h E2SetupRequestNotificationHandler) handleSuccessfulResponse(ranName stri _ = h.rmrSender.Send(msg) } +func buildPlmnId(mmc string, mnc string) string{ + var b strings.Builder + + b.WriteString(string (mmc[1])) + b.WriteString(string (mmc[0])) + if len(mnc) == 2 { + b.WriteString("F") + } else { + b.WriteString(string (mnc[2])) + } + b.WriteString(string (mmc[2])) + b.WriteString(string (mnc[1])) + b.WriteString(string (mnc[0])) + + return b.String() +} + func replaceEmptyTagsWithSelfClosing(responsePayload []byte) []byte { responseString := strings.NewReplacer( "", "", diff --git a/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go b/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go index 9d45c16..30bc71a 100644 --- a/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go +++ b/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go @@ -307,9 +307,10 @@ func TestE2SetupRequestNotificationHandler_ConvertTo20BitStringError(t *testing. xmlEnGnb := readXmlFile(t, EnGnbSetupRequestXmlPath) logger := tests.InitLog(t) config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, GlobalRicId: struct { - PlmnId string - RicNearRtId string - }{PlmnId: "131014", RicNearRtId: "10011001101010101011"}} + RicId string + Mcc int + Mnc int + }{Mcc: 327, Mnc: 94 ,RicId: "10011001101010101011"}} rmrMessengerMock := &mocks.RmrMessengerMock{} rmrSender := tests.InitRmrSender(rmrMessengerMock, logger) readerMock := &mocks.RnibReaderMock{} @@ -365,9 +366,10 @@ func TestE2SetupRequestNotificationHandler_HandleExistingGnbInvalidStatusError(t func initMocks(t *testing.T) (E2SetupRequestNotificationHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock, *mocks.RoutingManagerClientMock) { logger := tests.InitLog(t) config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, GlobalRicId: struct { - PlmnId string - RicNearRtId string - }{PlmnId: "131014", RicNearRtId: "556670"}} + RicId string + Mcc int + Mnc int + }{Mcc: 327, Mnc: 94 ,RicId: "AACCE"}} rmrMessengerMock := &mocks.RmrMessengerMock{} rmrSender := tests.InitRmrSender(rmrMessengerMock, logger) readerMock := &mocks.RnibReaderMock{} diff --git a/E2Manager/rNibWriter/rNibWriter_test.go b/E2Manager/rNibWriter/rNibWriter_test.go index cd38bcc..dc5450b 100644 --- a/E2Manager/rNibWriter/rNibWriter_test.go +++ b/E2Manager/rNibWriter/rNibWriter_test.go @@ -762,7 +762,7 @@ func TestRemoveE2TInstanceEmptyAddressFailure(t *testing.T) { // nb.Configuration = &entities.NodebInfo_Enb{Enb:&enb} // plmnId := 0x02f828 // nbId := 0x4a952a0a -// nbIdentity := &entities.NbIdentity{InventoryName: fmt.Sprintf("nameEnb%d" ,i), GlobalNbId:&entities.GlobalNbId{PlmnId:fmt.Sprintf("%02x", plmnId + i), NbId:fmt.Sprintf("%02x", nbId + i)}} +// nbIdentity := &entities.NbIdentity{InventoryName: fmt.Sprintf("nameEnb%d" ,i), GlobalNbId:&entities.GlobalNbId{RicId:fmt.Sprintf("%02x", plmnId + i), NbId:fmt.Sprintf("%02x", nbId + i)}} // err := w.SaveNodeb(nbIdentity, &nb) // if err != nil{ // t.Errorf("#rNibWriter_test.TestSaveEnbInteg - Failed to save NodeB entity. Error: %v", err) @@ -779,7 +779,7 @@ func TestRemoveE2TInstanceEmptyAddressFailure(t *testing.T) { // gCell3 := &entities.ServedNRCell{ServedNrCellInformation:&entities.ServedNRCellInformation{CellId:fmt.Sprintf("%02x",3333 + i), NrPci:uint32(3 + i)}} // gnb.ServedNrCells = []*entities.ServedNRCell{gCell1, gCell2, gCell3,} // nb1.Configuration = &entities.NodebInfo_Gnb{Gnb:&gnb} -// nbIdentity = &entities.NbIdentity{InventoryName: fmt.Sprintf("nameGnb%d" ,i), GlobalNbId:&entities.GlobalNbId{PlmnId:fmt.Sprintf("%02x", plmnId - i), NbId:fmt.Sprintf("%02x", nbId - i)}} +// nbIdentity = &entities.NbIdentity{InventoryName: fmt.Sprintf("nameGnb%d" ,i), GlobalNbId:&entities.GlobalNbId{RicId:fmt.Sprintf("%02x", plmnId - i), NbId:fmt.Sprintf("%02x", nbId - i)}} // err = w.SaveNodeb(nbIdentity, &nb1) // if err != nil{ // t.Errorf("#rNibWriter_test.TestSaveEnbInteg - Failed to save NodeB entity. Error: %v", err) diff --git a/E2Manager/resources/configuration.yaml b/E2Manager/resources/configuration.yaml index d79565b..0331f44 100644 --- a/E2Manager/resources/configuration.yaml +++ b/E2Manager/resources/configuration.yaml @@ -15,5 +15,6 @@ keepAliveResponseTimeoutMs: 4500 keepAliveDelayMs: 1500 e2tInstanceDeletionTimeoutMs: 15000 globalRicId: - plmnId: 131014 - ricNearRtId: 556670 \ No newline at end of file + ricId: AACCE + mcc: 327 + mnc: 94 \ No newline at end of file -- 2.16.6