[RIC-306] Split configuration of globalRicId to mmc, mnc and ric id 85/3885/2
authorss412g <shuky.har-noy@intl.att.com>
Wed, 27 May 2020 21:26:29 +0000 (00:26 +0300)
committerss412g <shuky.har-noy@intl.att.com>
Sun, 31 May 2020 20:24:10 +0000 (23:24 +0300)
Change-Id: I4546f8600182a63b87548d8f2e84ee1f2ae9ee5e
Signed-off-by: ss412g <shuky.har-noy@intl.att.com>
E2Manager/configuration/configuration.go
E2Manager/configuration/configuration_test.go
E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go
E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go
E2Manager/rNibWriter/rNibWriter_test.go
E2Manager/resources/configuration.yaml

index 5e4c31e..8beac3c 100644 (file)
 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,
        )
 }
index 695ed9a..c6b1e18 100644 (file)
@@ -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
index e50829d..de17a4f 100644 (file)
@@ -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(
                "<reject></reject>", "<reject/>",
index 9d45c16..30bc71a 100644 (file)
@@ -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{}
index cd38bcc..dc5450b 100644 (file)
@@ -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)
index d79565b..0331f44 100644 (file)
@@ -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