From: subhash kumar singh Date: Wed, 4 May 2022 07:28:17 +0000 (+0000) Subject: Add method to extract addtion list X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=3f8767e984b3c286793925c0d9a250ce726c6d9b;p=ric-plt%2Fe2mgr.git Add method to extract addtion list Added method got extract configuration addition item. Note: Xn and X2 interface is not supported. Signed-off-by: subhash kumar singh Change-Id: I1dbfa62b8439743ad4dabd4d3d1995e82e4db5bd --- diff --git a/E2Manager/models/constants.go b/E2Manager/models/constants.go index 246329b..c67b9a4 100644 --- a/E2Manager/models/constants.go +++ b/E2Manager/models/constants.go @@ -19,12 +19,14 @@ 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" ) diff --git a/E2Manager/models/e2_node_configuration_update.go b/E2Manager/models/e2_node_configuration_update.go index 6677ba6..b79cda7 100644 --- a/E2Manager/models/e2_node_configuration_update.go +++ b/E2Manager/models/e2_node_configuration_update.go @@ -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 +} diff --git a/E2Manager/models/e2_node_configuration_update_test.go b/E2Manager/models/e2_node_configuration_update_test.go index 9f96d5b..3e59a49 100644 --- a/E2Manager/models/e2_node_configuration_update_test.go +++ b/E2Manager/models/e2_node_configuration_update_test.go @@ -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") +} diff --git a/E2Manager/tests/resources/configurationUpdate/e2NodeConfigurationUpdate.xml b/E2Manager/tests/resources/configurationUpdate/e2NodeConfigurationUpdate.xml index d416d12..451064d 100644 --- a/E2Manager/tests/resources/configurationUpdate/e2NodeConfigurationUpdate.xml +++ b/E2Manager/tests/resources/configurationUpdate/e2NodeConfigurationUpdate.xml @@ -1,6 +1,6 @@ - 6 + 10 diff --git a/E2Manager/tests/resources/configurationUpdate/e2NodeConfigurationUpdateOnlyAddition.xml b/E2Manager/tests/resources/configurationUpdate/e2NodeConfigurationUpdateOnlyAddition.xml index 53b59ee..984fbf5 100644 --- a/E2Manager/tests/resources/configurationUpdate/e2NodeConfigurationUpdateOnlyAddition.xml +++ b/E2Manager/tests/resources/configurationUpdate/e2NodeConfigurationUpdateOnlyAddition.xml @@ -1,6 +1,6 @@ - 6 + 10