Add method to extract addtion list 39/8139/2
authorsubhash kumar singh <subh.singh@samsung.com>
Wed, 4 May 2022 07:28:17 +0000 (07:28 +0000)
committersubhash kumar singh <subh.singh@samsung.com>
Tue, 10 May 2022 16:00:47 +0000 (16:00 +0000)
Added method got extract configuration addition item.
Note: Xn and X2 interface is not supported.

Signed-off-by: subhash kumar singh <subh.singh@samsung.com>
Change-Id: I1dbfa62b8439743ad4dabd4d3d1995e82e4db5bd

E2Manager/models/constants.go
E2Manager/models/e2_node_configuration_update.go
E2Manager/models/e2_node_configuration_update_test.go
E2Manager/tests/resources/configurationUpdate/e2NodeConfigurationUpdate.xml
E2Manager/tests/resources/configurationUpdate/e2NodeConfigurationUpdateOnlyAddition.xml

index 246329b..c67b9a4 100644 (file)
 package models
 
 const (
-       ProtocolIE_ID_id_RANfunctionID_Item   = "6"
-       ProtocolIE_ID_id_RANfunctionsAccepted = "9"
-       ProtocolIE_ID_id_TransactionID        = "49"
+       ProtocolIE_ID_id_RANfunctionID_Item            = "6"
+       ProtocolIE_ID_id_RANfunctionsAccepted          = "9"
+       ProtocolIE_ID_id_TransactionID                 = "49"
+       ProtocolIE_ID_id_E2nodeComponentConfigAddition = "50"
 )
 
 const (
        SuccessfulOutcome_value_PR_RICserviceUpdateAcknowledge = "3"
        InitiatingMessage_value_PR_RICserviceQuery             = "10"
+       ProcedureCode_id_E2nodeConfigurationUpdate             = "10"
 )
index 6677ba6..b79cda7 100644 (file)
@@ -20,6 +20,9 @@ package models
 
 import (
        "encoding/xml"
+       "strconv"
+
+       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
 )
 
 type E2nodeConfigurationUpdateMessage struct {
@@ -176,3 +179,124 @@ type E2nodeComponentConfiguration 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
+}
index 9f96d5b..3e59a49 100644 (file)
@@ -43,7 +43,7 @@ func getTestE2NodeConfigurationUpdateMessage(t *testing.T, reqXmlPath string) *m
 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)
@@ -54,7 +54,7 @@ func TestParseE2NodeConfigurationUpdateSuccessAdditionOnly(t *testing.T) {
 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))
@@ -74,3 +74,15 @@ func TestParseE2NodeConfigurationUpdateSuccess(t *testing.T) {
        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")
+}
index d416d12..451064d 100644 (file)
@@ -1,6 +1,6 @@
 <E2AP-PDU>
     <initiatingMessage>
-        <procedureCode>6</procedureCode>
+        <procedureCode>10</procedureCode>
         <criticality><reject/></criticality>
         <value>
             <E2nodeConfigurationUpdate>
index 53b59ee..984fbf5 100644 (file)
@@ -1,6 +1,6 @@
 <E2AP-PDU>
     <initiatingMessage>
-        <procedureCode>6</procedureCode>
+        <procedureCode>10</procedureCode>
         <criticality><reject/></criticality>
         <value>
             <E2nodeConfigurationUpdate>