import (
"encoding/xml"
+ "strconv"
+
+ "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
)
type E2nodeConfigurationUpdateMessage struct {
E2nodeComponentRequestPart string `xml:"e2nodeComponentRequestPart"`
E2nodeComponentResponsePart string `xml:"e2nodeComponentResponsePart"`
}
+
+func (m *E2nodeConfigurationUpdateMessage) ExtractConfigAdditionList() []entities.E2NodeComponentConfig {
+ var result []entities.E2NodeComponentConfig
+ e2nodeConfigUpdateIEs := m.E2APPDU.InitiatingMessage.Value.E2nodeConfigurationUpdate.ProtocolIEs.E2nodeConfigurationUpdateIEs
+
+ var additionList *E2nodeComponentConfigAdditionList
+ for _, v := range e2nodeConfigUpdateIEs {
+ if v.ID == ProtocolIE_ID_id_E2nodeComponentConfigAddition {
+ additionList = &(v.Value.E2nodeComponentConfigAdditionList)
+ break
+ }
+ }
+
+ // need not to check for empty addtionList
+ // as list defined as SIZE(1..maxofE2nodeComponents)
+ if additionList != nil {
+ for _, val := range additionList.ProtocolIESingleContainer {
+ componentItem := val.Value.E2nodeComponentConfigAdditionItem
+ if componentItem.E2nodeComponentInterfaceType.Ng != nil { // NG Interface
+ result = append(result, entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_ng,
+ E2NodeComponentRequestPart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentRequestPart),
+ E2NodeComponentResponsePart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentResponsePart),
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeNG{
+ E2NodeComponentInterfaceTypeNG: &entities.E2NodeComponentInterfaceNG{
+ AmfName: componentItem.E2nodeComponentID.E2nodeComponentInterfaceTypeNG.AmfName,
+ },
+ },
+ })
+ }
+
+ // TODO - Not Supported Yet
+ if componentItem.E2nodeComponentInterfaceType.Xn != nil { // xn inetrface
+ // result = append(result, entities.E2NodeComponentConfig{
+ // E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_xn,
+ // E2NodeComponentRequestPart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentRequestPart),
+ // E2NodeComponentResponsePart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentResponsePart),
+ // E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeXn{},
+ // })
+ }
+
+ if componentItem.E2nodeComponentInterfaceType.E1 != nil { // e1 interface
+ gnbCuCpId, err := strconv.ParseInt(componentItem.E2nodeComponentID.E2nodeComponentInterfaceTypeE1.GNBCUCPID, 10, 64)
+ if err != nil {
+ continue
+ }
+
+ result = append(result, entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_e1,
+ E2NodeComponentRequestPart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentRequestPart),
+ E2NodeComponentResponsePart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentResponsePart),
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeE1{
+ E2NodeComponentInterfaceTypeE1: &entities.E2NodeComponentInterfaceE1{
+ GNBCuCpId: gnbCuCpId,
+ },
+ },
+ })
+ }
+
+ if componentItem.E2nodeComponentInterfaceType.F1 != nil { // f1 interface
+ gnbDuId, err := strconv.ParseInt(componentItem.E2nodeComponentID.E2nodeComponentInterfaceTypeF1.GNBDUID, 10, 64)
+ if err != nil {
+ continue
+ }
+ result = append(result, entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_f1,
+ E2NodeComponentRequestPart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentRequestPart),
+ E2NodeComponentResponsePart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentResponsePart),
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeF1{
+ E2NodeComponentInterfaceTypeF1: &entities.E2NodeComponentInterfaceF1{
+ GNBDuId: gnbDuId,
+ },
+ },
+ })
+ }
+
+ if componentItem.E2nodeComponentInterfaceType.W1 != nil { // w1 interface
+ ngenbDuId, err := strconv.ParseInt(componentItem.E2nodeComponentID.E2nodeComponentInterfaceTypeW1.NgENBDUID, 10, 64)
+ if err != nil {
+ continue
+ }
+
+ result = append(result, entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_w1,
+ E2NodeComponentRequestPart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentRequestPart),
+ E2NodeComponentResponsePart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentResponsePart),
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeW1{
+ E2NodeComponentInterfaceTypeW1: &entities.E2NodeComponentInterfaceW1{
+ NgenbDuId: ngenbDuId,
+ },
+ },
+ })
+ }
+
+ if componentItem.E2nodeComponentInterfaceType.S1 != nil { // s1 interface
+ result = append(result, entities.E2NodeComponentConfig{
+ E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_s1,
+ E2NodeComponentRequestPart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentRequestPart),
+ E2NodeComponentResponsePart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentResponsePart),
+ E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeS1{
+ E2NodeComponentInterfaceTypeS1: &entities.E2NodeComponentInterfaceS1{
+ MmeName: componentItem.E2nodeComponentID.E2nodeComponentInterfaceTypeS1.MmeName,
+ },
+ },
+ })
+ }
+
+ // TODO - Not Supported Yet
+ if componentItem.E2nodeComponentInterfaceType.X2 != nil { // x2 interface
+ // result = append(result, entities.E2NodeComponentConfig{
+ // E2NodeComponentInterfaceType: entities.E2NodeComponentInterfaceType_x2,
+ // E2NodeComponentRequestPart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentRequestPart),
+ // E2NodeComponentResponsePart: []byte(componentItem.E2nodeComponentConfiguration.E2nodeComponentResponsePart),
+ // E2NodeComponentID: &entities.E2NodeComponentConfig_E2NodeComponentInterfaceTypeX2{},
+ // })
+
+ }
+ }
+ }
+ return result
+}
func TestParseE2NodeConfigurationUpdateSuccessAdditionOnly(t *testing.T) {
configurationUpdate := getTestE2NodeConfigurationUpdateMessage(t, e2NodeConfigurationUpdateOnlyAdditionXmlPath)
assert.NotEqual(t, nil, configurationUpdate, "xml is not parsed correctly")
- assert.Equal(t, "6", configurationUpdate.E2APPDU.InitiatingMessage.ProcedureCode)
+ assert.Equal(t, models.ProcedureCode_id_E2nodeConfigurationUpdate, configurationUpdate.E2APPDU.InitiatingMessage.ProcedureCode)
assert.Equal(t, 1, len(configurationUpdate.E2APPDU.InitiatingMessage.Value.E2nodeConfigurationUpdate.ProtocolIEs.E2nodeConfigurationUpdateIEs))
assert.Equal(t, 1, len(configurationUpdate.E2APPDU.InitiatingMessage.Value.E2nodeConfigurationUpdate.ProtocolIEs.E2nodeConfigurationUpdateIEs[0].Value.E2nodeComponentConfigAdditionList.ProtocolIESingleContainer))
assert.Equal(t, false, configurationUpdate.E2APPDU.InitiatingMessage.Value.E2nodeConfigurationUpdate.ProtocolIEs.E2nodeConfigurationUpdateIEs[0].Value.E2nodeComponentConfigAdditionList.ProtocolIESingleContainer[0].Value.E2nodeComponentConfigAdditionItem.E2nodeComponentInterfaceType.Ng == nil)
func TestParseE2NodeConfigurationUpdateSuccess(t *testing.T) {
configurationUpdate := getTestE2NodeConfigurationUpdateMessage(t, e2NodeConfigurationUpdateXmlPath)
assert.NotEqual(t, nil, configurationUpdate, "xml is not parsed correctly")
- assert.Equal(t, "6", configurationUpdate.E2APPDU.InitiatingMessage.ProcedureCode)
+ assert.Equal(t, models.ProcedureCode_id_E2nodeConfigurationUpdate, configurationUpdate.E2APPDU.InitiatingMessage.ProcedureCode)
assert.Equal(t, 3, len(configurationUpdate.E2APPDU.InitiatingMessage.Value.E2nodeConfigurationUpdate.ProtocolIEs.E2nodeConfigurationUpdateIEs))
assert.Equal(t, 7, len(configurationUpdate.E2APPDU.InitiatingMessage.Value.E2nodeConfigurationUpdate.ProtocolIEs.E2nodeConfigurationUpdateIEs[0].Value.E2nodeComponentConfigAdditionList.ProtocolIESingleContainer))
assert.Equal(t, true, removalIE.Value.E2nodeComponentConfigRemovalList.ProtocolIESingleContainer[0].Value.E2nodeComponentConfigRemovalItem.E2nodeComponentInterfaceType.E1 == nil)
assert.Equal(t, true, removalIE.Value.E2nodeComponentConfigRemovalList.ProtocolIESingleContainer[0].Value.E2nodeComponentConfigRemovalItem.E2nodeComponentInterfaceType.E1 == nil)
}
+
+func TestExtractAdditionConfigList(t *testing.T) {
+ configurationUpdate1 := getTestE2NodeConfigurationUpdateMessage(t, e2NodeConfigurationUpdateXmlPath)
+ additionList := configurationUpdate1.ExtractConfigAdditionList()
+
+ assert.Equal(t, 5, len(additionList), "Addtion List is not matching")
+
+ configurationUpdate2 := getTestE2NodeConfigurationUpdateMessage(t, e2NodeConfigurationUpdateOnlyAdditionXmlPath)
+ additionList2 := configurationUpdate2.ExtractConfigAdditionList()
+
+ assert.Equal(t, 1, len(additionList2), "Addtion List is not matching")
+}