package configuration
import (
+ "errors"
"fmt"
"github.com/spf13/viper"
+ "strconv"
)
type Configuration struct {
RoutingManager struct {
BaseUrl string
}
-/* Kubernetes struct {
- ConfigPath string
- KubeNamespace string
- }*/
+
NotificationResponseBuffer int
BigRedButtonTimeoutSec int
MaxRnibConnectionAttempts int
KeepAliveDelayMs int
E2TInstanceDeletionTimeoutMs int
GlobalRicId struct {
- PlmnId string
- RicNearRtId string
+ RicId string
+ Mcc int
+ Mnc int
}
}
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")
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,
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,
)
}
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) {
"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 {
"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 {
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