summaryrefslogtreecommitdiffstats
path: root/components/slice-analysis-ms
diff options
context:
space:
mode:
authordenilson.l65 <denilson.l65@wipro.com>2021-08-24 11:08:00 +0000
committerdenilson.l65 <denilson.l65@wipro.com>2021-08-28 05:43:10 +0000
commit7363faa6243e3428d20a3be1800df9aa641ed3ba (patch)
tree61fa58760a0642dcf8a28c1d18dcedf023f792de /components/slice-analysis-ms
parent1972718be2da50d09ea3284a7ab1746952be4cbb (diff)
DCAE SliceAnalysis MS - Cps Integration1.1.1-datalake-handler-admin-ui1.0.6-slice-analysis-ms
Issue-ID: DCAEGEN2-2885 Signed-off-by: denilson.l65 <denilson.l65@wipro.com> Change-Id: Iea7a675e5dc2f182dda14f0ccf14f2864a5991e5
Diffstat (limited to 'components/slice-analysis-ms')
-rw-r--r--components/slice-analysis-ms/ChangeLog.md11
-rw-r--r--components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/configdb/CpsService.java76
-rw-r--r--components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ConsumerThread.java13
-rw-r--r--components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/configdb/CpsInterfaceServiceTest.java109
-rw-r--r--components/slice-analysis-ms/src/test/resources/DUCellsList.json400
-rw-r--r--components/slice-analysis-ms/src/test/resources/DUList.json236
-rw-r--r--components/slice-analysis-ms/src/test/resources/sliceConfig.json322
7 files changed, 1162 insertions, 5 deletions
diff --git a/components/slice-analysis-ms/ChangeLog.md b/components/slice-analysis-ms/ChangeLog.md
new file mode 100644
index 00000000..5d64d124
--- /dev/null
+++ b/components/slice-analysis-ms/ChangeLog.md
@@ -0,0 +1,11 @@
+# Change Log
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/)
+and this project adheres to [Semantic Versioning](http://semver.org/).
+
+## [1.0.6] - 2021/08/28
+ - [DCAEGEN2-2885](https://jira.onap.org/browse/DCAEGEN2-2885) - DCAE SliceAnalysis MS - CPS Integration
+
+ - [DCAEGEN2-2811](https://jira.onap.org/browse/DCAEGEN2-2811) - Remove security vulnerabilities
+
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/configdb/CpsService.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/configdb/CpsService.java
index f0c27e19..389a75d9 100644
--- a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/configdb/CpsService.java
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/configdb/CpsService.java
@@ -22,12 +22,18 @@ package org.onap.slice.analysis.ms.configdb;
import java.util.List;
import java.util.Map;
+import java.util.HashMap;
+import java.util.ArrayList;
+import org.json.JSONArray;
+import org.json.JSONObject;
import org.onap.slice.analysis.ms.models.Configuration;
import org.onap.slice.analysis.ms.restclients.CpsRestClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.core.ParameterizedTypeReference;
import org.springframework.stereotype.Service;
/**
@@ -48,22 +54,84 @@ public class CpsService implements CpsInterface {
* Fetches the current configuration of RIC from CPS
*/
public Map<String, Map<String, Object>> fetchCurrentConfigurationOfRIC(String snssai) {
- return null;
+ Map<String, Map<String, Object>> responseMap = new HashMap<String, Map<String, Object>>();
+ String reqUrl = cpsBaseUrl +"/get-nearrtric-config";
+ log.info("fetching current configuration of RIC from Cps: {s-NSSAI: "+snssai+"}");
+ String requestBody = "{\"inputParameters\": {\"sNssai\":"+JSONObject.quote(snssai)+"}}";
+ try {
+ String response = restclient.sendPostRequest(reqUrl,requestBody, new ParameterizedTypeReference<String>() {}).getBody();
+ JSONArray sliceArray = new JSONArray(response);
+ for (int i=0;i<sliceArray.length();i++) {
+ String nearRTTICid = sliceArray.getJSONObject(i).optString("idNearRTRIC");
+ JSONArray pLMNInfoList = sliceArray.getJSONObject(i).getJSONObject("attributes").getJSONArray("pLMNInfoList");
+ for (int j=0;j<pLMNInfoList.length();j++){
+ JSONArray sNSSAIList = pLMNInfoList.getJSONObject(j).getJSONArray("sNSSAIList");
+ for(int k=0;k<sNSSAIList.length();k++) {
+ Map<String,Object> map = new HashMap<String,Object>();
+ JSONArray configDataArray = sNSSAIList.getJSONObject(k).getJSONArray("configData");
+ for(int l=0;l<configDataArray.length();l++) {
+ JSONObject configData = configDataArray.getJSONObject(l);
+ map.put((String) configData.get("configParameter"), configData.get("configValue"));
+ }
+ responseMap.put(nearRTTICid, map);
+ }
+ }
+ }
+ }catch (Exception e) {
+ log.info("CPS fetches current configuration of RIC: " + e);
+ }
+ return responseMap;
}
/**
* Fetches all the network functions of an S-NSSAI from CPS
*/
public List<String> fetchNetworkFunctionsOfSnssai(String snssai) {
- return null;
+ List<String> responseList=new ArrayList<>();
+ String reqUrl=cpsBaseUrl+"/get-gnbdufunction-by-snssai";
+ log.info("fetching network functions of snssai from Cps: {s-NSSAI: "+snssai+"}");
+ String requestBody = "{\"inputParameters\": {\"sNssai\":"+JSONObject.quote(snssai)+"}}";
+ try {
+ String response=restclient.sendPostRequest(reqUrl,requestBody,new ParameterizedTypeReference<String>() {}).getBody();
+ JSONArray networkFunctionJsonArry = new JSONArray(response);
+ for (int i=0;i<networkFunctionJsonArry.length();i++) {
+ JSONObject networkFunctionJson = networkFunctionJsonArry.getJSONObject(i);
+ responseList.add(networkFunctionJson.getJSONObject("attributes").optString("gNBDUId"));
+ }
+ }
+ catch (Exception e) {
+ log.info("Fetch network functions of S-NSSAI from CPS" + e);
+ }
+ return responseList;
}
/**
* Fetches the RICS of an S-NSSAI from CPS
*/
public Map<String, List<String>> fetchRICsOfSnssai(String snssai) {
- return null;
+ Map<String,List<String>> responseMap=new HashMap<>();
+ String reqUrl=cpsBaseUrl + "/get-nrcelldu-by-snssai";
+ log.info("fetching RIC of s-NSSAI from Cps: {s-NSSAI: "+snssai+"}");
+ String requestBody = "{\"inputParameters\": {\"sNssai\":"+JSONObject.quote(snssai)+"}}";
+ try {
+ String response=restclient.sendPostRequest(reqUrl,requestBody,new ParameterizedTypeReference<String>() {}).getBody();
+ JSONArray sliceArray = new JSONArray(response);
+ for (int i=0;i<sliceArray.length();i++) {
+ String nearRTTICid = sliceArray.getJSONObject(i).optString("idNearRTRIC");
+ JSONArray GNBDUFunctionArray = sliceArray.getJSONObject(i).getJSONArray("GNBDUFunction");
+ for (int j=0;j<GNBDUFunctionArray.length();j++){
+ JSONArray NRCellDUArray = GNBDUFunctionArray.getJSONObject(j).getJSONArray("NRCellDU");
+ List<String> cellslist=new ArrayList<>();
+ for(int k=0;k<NRCellDUArray.length();k++) {
+ cellslist.add(NRCellDUArray.getJSONObject(k).getJSONObject("attributes").optString("cellLocalId"));
+ }
+ responseMap.put(nearRTTICid,cellslist);
+ }
+ }
+ }catch (Exception e) {
+ log.info("Fetch RICS of S-NSSAI from CPS" + e);
+ }
+ return responseMap;
}
-
}
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ConsumerThread.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ConsumerThread.java
index e8028200..6098142e 100644
--- a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ConsumerThread.java
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ConsumerThread.java
@@ -22,7 +22,9 @@
package org.onap.slice.analysis.ms.service;
import java.util.List;
+import java.util.Objects;
+import org.onap.slice.analysis.ms.configdb.CpsInterface;
import org.onap.slice.analysis.ms.configdb.IConfigDbService;
import org.onap.slice.analysis.ms.models.Configuration;
import org.onap.slice.analysis.ms.models.SubCounter;
@@ -38,6 +40,7 @@ public class ConsumerThread extends Thread {
private PmDataQueue pmDataQueue;
private IConfigDbService configDbService;
private SnssaiSamplesProcessor snssaiSamplesProcessor;
+ private CpsInterface cpsInterface;
private long initialDelaySec;
private int samples;
@@ -50,6 +53,7 @@ public class ConsumerThread extends Thread {
this.configDbService = BeanUtil.getBean(IConfigDbService.class);
this.initialDelaySec = Configuration.getInstance().getInitialDelaySeconds();
this.samples = Configuration.getInstance().getSamples();
+ this.cpsInterface = BeanUtil.getBean(CpsInterface.class);
}
/**
@@ -57,6 +61,8 @@ public class ConsumerThread extends Thread {
*/
@Override
public void run() {
+ Boolean isConfigDbEnabled = (Objects.isNull(Configuration.getInstance().getConfigDbEnabled())) ? true
+ : Configuration.getInstance().getConfigDbEnabled();
boolean done = false;
boolean result = false;
String snssai = "";
@@ -69,7 +75,12 @@ public class ConsumerThread extends Thread {
if (!snssai.equals("")) {
log.info("Consumer thread processing data for s-nssai {}",snssai);
try {
- nfs = configDbService.fetchNetworkFunctionsOfSnssai(snssai);
+ if (isConfigDbEnabled) {
+ nfs = configDbService.fetchNetworkFunctionsOfSnssai(snssai);
+ }
+ else {
+ nfs = cpsInterface.fetchNetworkFunctionsOfSnssai(snssai);
+ }
}
catch(Exception e) {
pmDataQueue.putSnssaiToQueue(snssai);
diff --git a/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/configdb/CpsInterfaceServiceTest.java b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/configdb/CpsInterfaceServiceTest.java
new file mode 100644
index 00000000..008736d3
--- /dev/null
+++ b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/configdb/CpsInterfaceServiceTest.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * slice-analysis-ms
+ * ================================================================================
+ * Copyright (C) 2021 Wipro Limited.
+ * ==============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ *******************************************************************************/
+package org.onap.slice.analysis.ms.configdb;
+
+import static org.junit.Assert.assertEquals;
+
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.onap.slice.analysis.ms.models.Configuration;
+import org.onap.slice.analysis.ms.restclients.CpsRestClient;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(PowerMockRunner.class)
+@PowerMockRunnerDelegate(SpringRunner.class)
+@PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*"})
+@PrepareForTest({ CpsService.class,Configuration.class })
+@SpringBootTest(classes = CpsInterfaceServiceTest.class)
+public class CpsInterfaceServiceTest {
+ @InjectMocks
+ CpsService cpsService;
+
+ @Mock
+ CpsRestClient restClient;
+
+ @Test
+ public void fetchCurrentConfigurationOfRICTest() {
+ Map<String, Object> map = new HashMap<>();
+ map.put("dLThptPerSlice", 10);
+ map.put("uLThptPerSlice", 10);
+ map.put("maxNumberOfConns", 10);
+ Map<String, Map<String, Object>> responseMap = new HashMap<>();
+ responseMap.put("11", map);
+ try {
+ String serviceInstance = new String(
+ Files.readAllBytes(Paths.get("src/test/resources/sliceConfig.json")));
+ Mockito.when(restClient.sendPostRequest(Mockito.anyString(), Mockito.anyString(), Mockito.any())).thenReturn(new ResponseEntity<>(serviceInstance, HttpStatus.OK));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ assertEquals(responseMap, cpsService.fetchCurrentConfigurationOfRIC("111-1111"));
+ }
+
+ @Test
+ public void fetchNetworkFunctionsOfSnssaiTest() {
+ List<String> responseList=new ArrayList<>();
+ responseList.add("22");
+ responseList.add("23");
+ try {
+ String serviceInstance = new String(
+ Files.readAllBytes(Paths.get("src/test/resources/DUList.json")));
+ Mockito.when(restClient.sendPostRequest(Mockito.anyString(), Mockito.anyString(), Mockito.any())).thenReturn(new ResponseEntity<>(serviceInstance, HttpStatus.OK));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ assertEquals(responseList, cpsService.fetchNetworkFunctionsOfSnssai("111-1111"));
+ }
+
+ @Test
+ public void fetchRICsOfSnssaiTest() {
+ Map<String,List<String>> responseMap=new HashMap<>();
+ List<String> cellslist=new ArrayList<>();
+ cellslist.add("1599");
+ cellslist.add("1598");
+ responseMap.put("11",cellslist);
+ try {
+ String serviceInstance = new String(
+ Files.readAllBytes(Paths.get("src/test/resources/DUCellsList.json")));
+ Mockito.when(restClient.sendPostRequest(Mockito.anyString(), Mockito.anyString(), Mockito.any())).thenReturn(new ResponseEntity<>(serviceInstance, HttpStatus.OK));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ assertEquals(responseMap, cpsService.fetchRICsOfSnssai("111-1111"));
+ }
+}
diff --git a/components/slice-analysis-ms/src/test/resources/DUCellsList.json b/components/slice-analysis-ms/src/test/resources/DUCellsList.json
new file mode 100644
index 00000000..799e1e80
--- /dev/null
+++ b/components/slice-analysis-ms/src/test/resources/DUCellsList.json
@@ -0,0 +1,400 @@
+[
+ {
+ "idNearRTRIC": 11,
+ "attributes": {
+ "near-rt-ric-url": "10.165.160.47:6080",
+ "trackingArea": "Kingston",
+ "rANNFNSSIList": [
+ "e893-e93r-c0f2-kj76",
+ "m93ed-e93e-c0f2-9i7y"
+ ],
+ "RRMPolicyRatio": [
+ {
+ "id": "33",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 33,
+ "mcc": "310",
+ "mnc": "410",
+ "sNSSAI": 101
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 22,
+ "rRMPolicyMinRatio": 3,
+ "rRMPolicyDedicatedRatio": 4
+ }
+ }
+ ],
+ "pLMNInfoList": [
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sNSSAIList": [
+ {
+ "sNssai": "010",
+ "status": "ACTIVE",
+ "configData": [
+ {
+ "configParameter": "maxNumberOfConns",
+ "configValue": 10
+ },
+ {
+ "configParameter": "uLThptPerSlice",
+ "configValue": 10
+ },
+ {
+ "configParameter": "dLThptPerSlice",
+ "configValue": 10
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "sliceProfilesList": [
+ {
+ "sliceProfileId": "b594-e98r-c7f2-ij79",
+ "sNSSAI": 101,
+ "maxNumberofUEs": 24,
+ "latency": 2,
+ "uLThptPerSlice": 30,
+ "dLThptPerSlice": 60,
+ "maxNumberofConns": 22,
+ "uEMobilityLevel": "high",
+ "coverageAreaList": [
+ "CA1",
+ "CA2"
+ ],
+ "resourceSharingLevel": "Shared"
+ }
+ ]
+ },
+ "GNBDUFunction": [
+ {
+ "idGNBDUFunction": "22",
+ "attributes": {
+ "gNBDUFunction-url": "10.165.160.13:6080",
+ "gNBIdLength": 23,
+ "gNBDUName": "gnbdu1",
+ "gNBDUId": 22,
+ "gNBId": 98763,
+ "RRMPolicyRatio": [
+ {
+ "id": "34",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 34,
+ "mcc": "211",
+ "mnc": "111",
+ "sNSSAI": 102
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 23,
+ "rRMPolicyMinRatio": 4,
+ "rRMPolicyDedicatedRatio": 5
+ }
+ }
+ ],
+ "userLabel": "user",
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ },
+ "NRCellDU": [
+ {
+ "idNRCellDU": "1599",
+ "attributes": {
+ "nRCellDU-url": "10.165.160.15:8083",
+ "cellLocalId": 1599,
+ "operationalState": "ENABLED",
+ "administrativeState": "UNLOCKED",
+ "cellState": "ACTIVE",
+ "RRMPolicyRatio": [
+ {
+ "id": "34",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 34,
+ "mcc": "211",
+ "mnc": "111",
+ "sNSSAI": 102
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 23,
+ "rRMPolicyMinRatio": 4,
+ "rRMPolicyDedicatedRatio": 5
+ }
+ }
+ ],
+ "pLMNInfoList": [
+ {
+ "mcc": "211",
+ "mnc": "211",
+ "sNSSAIList": [
+ {
+ "sNssai": "111-1111",
+ "status": "active",
+ "configData": [
+ {
+ "configParameter": "maxNumberOfConns",
+ "configValue": 20
+ },
+ {
+ "configParameter": "dLThptPerSlice",
+ "configValue": 20
+ },
+ {
+ "configParameter": "uLThptPerSlice",
+ "configValue": 20
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "nRPCI": 11,
+ "nRTAC": 14777,
+ "arfcnDL": 1,
+ "arfcnUL": 2,
+ "arfcnSUL": 3,
+ "bSChannelBwDL": 4,
+ "bSChannelBwUL": 5,
+ "bSChannelBwSUL": 6,
+ "ssbFrequency": 7,
+ "ssbSubCarrierSpacing": 15,
+ "ssbOffset": 9,
+ "ssbDuration": 4,
+ "nRSectorCarrierRef": [
+ "OU=Sales"
+ ],
+ "userLabel": "user",
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ }
+ },
+ {
+ "idNRCellDU": "1598",
+ "attributes": {
+ "nRCellDU-url": "10.165.160.15:8083",
+ "cellLocalId": 1598,
+ "operationalState": "ENABLED",
+ "administrativeState": "UNLOCKED",
+ "cellState": "ACTIVE",
+ "RRMPolicyRatio": [
+ {
+ "id": "34",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 34,
+ "mcc": "211",
+ "mnc": "111",
+ "sNSSAI": 102
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 23,
+ "rRMPolicyMinRatio": 4,
+ "rRMPolicyDedicatedRatio": 5
+ }
+ }
+ ],
+ "pLMNInfoList": [
+ {
+ "mcc": "211",
+ "mnc": "211",
+ "sNSSAIList": [
+ {
+ "sNssai": "111-1111",
+ "status": "active",
+ "configData": [
+ {
+ "configParameter": "maxNumberOfConns",
+ "configValue": 20
+ },
+ {
+ "configParameter": "dLThptPerSlice",
+ "configValue": 20
+ },
+ {
+ "configParameter": "uLThptPerSlice",
+ "configValue": 20
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "nRPCI": 11,
+ "nRTAC": 14777,
+ "arfcnDL": 1,
+ "arfcnUL": 2,
+ "arfcnSUL": 3,
+ "bSChannelBwDL": 4,
+ "bSChannelBwUL": 5,
+ "bSChannelBwSUL": 6,
+ "ssbFrequency": 7,
+ "ssbSubCarrierSpacing": 15,
+ "ssbOffset": 9,
+ "ssbDuration": 4,
+ "nRSectorCarrierRef": [
+ "OU=Sales"
+ ],
+ "userLabel": "user",
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ],
+ "GNBCUUPFunction": [
+ {
+ "idGNBCUUPFunction": "22",
+ "attributes": {
+ "gNBCUUPFunction-url": "10.165.160.13:6080",
+ "gNBId": 22,
+ "RRMPolicyRatio": [
+ {
+ "id": "35",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 35,
+ "mcc": "212",
+ "mnc": "212",
+ "sNSSAI": 203
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 22,
+ "rRMPolicyMinRatio": 3,
+ "rRMPolicyDedicatedRatio": 4
+ }
+ }
+ ],
+ "userLabel": "user",
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ }
+ }
+ ],
+ "GNBCUCPFunction": [
+ {
+ "idGNBCUCPFunction": "32",
+ "attributes": {
+ "gNBCUCPFunction-url": "10.165.160.13:6080",
+ "gNBId": 32,
+ "gNBIdLength": 23,
+ "gNBCUName": "gnbcucp1",
+ "RRMPolicyRatio": [
+ {
+ "id": "43",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 43,
+ "mcc": "310",
+ "mnc": "410",
+ "sNSSAI": 101
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 22,
+ "rRMPolicyMinRatio": 3,
+ "rRMPolicyDedicatedRatio": 4
+ }
+ }
+ ],
+ "userLabel": "user",
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ },
+ "NRCellCU": [
+ {
+ "idNRCellCU": "15199",
+ "attributes": {
+ "nRCellCU-url": "10.165.160.15:8083",
+ "cellLocalId": 15199,
+ "RRMPolicyRatio": [
+ {
+ "id": "55",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 55,
+ "mcc": "550",
+ "mnc": "550",
+ "sNSSAI": 101
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 22,
+ "rRMPolicyMinRatio": 3,
+ "rRMPolicyDedicatedRatio": 4
+ }
+ }
+ ],
+ "pLMNInfoList": [
+ {
+ "mcc": "551",
+ "mnc": "550",
+ "sNSSAIList": [
+ {
+ "sNssai": "501",
+ "status": "active",
+ "configData": [
+ {
+ "configParameter": "maxNumberOfConns",
+ "configValue": 10
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/components/slice-analysis-ms/src/test/resources/DUList.json b/components/slice-analysis-ms/src/test/resources/DUList.json
new file mode 100644
index 00000000..26b96ed6
--- /dev/null
+++ b/components/slice-analysis-ms/src/test/resources/DUList.json
@@ -0,0 +1,236 @@
+[
+ {
+ "idGNBDUFunction": "22",
+ "attributes": {
+ "gNBDUFunction-url": "10.165.160.13:6080",
+ "gNBIdLength": 23,
+ "gNBDUName": "gnbdu1",
+ "gNBDUId": 22,
+ "gNBId": 98763,
+ "RRMPolicyRatio": [
+ {
+ "id": "34",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 34,
+ "mcc": "211",
+ "mnc": "111",
+ "sNSSAI": 102
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 23,
+ "rRMPolicyMinRatio": 4,
+ "rRMPolicyDedicatedRatio": 5
+ }
+ }
+ ],
+ "userLabel": "user",
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ },
+ "NRCellDU": [
+ {
+ "idNRCellDU": "15299",
+ "attributes": {
+ "nRCellDU-url": "10.165.160.15:8083",
+ "cellLocalId": 15299,
+ "operationalState": "ENABLED",
+ "administrativeState": "UNLOCKED",
+ "cellState": "ACTIVE",
+ "RRMPolicyRatio": [
+ {
+ "id": "34",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 34,
+ "mcc": "211",
+ "mnc": "111",
+ "sNSSAI": 102
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 23,
+ "rRMPolicyMinRatio": 4,
+ "rRMPolicyDedicatedRatio": 5
+ }
+ }
+ ],
+ "pLMNInfoList": [
+ {
+ "mcc": "211",
+ "mnc": "211",
+ "sNSSAIList": [
+ {
+ "sNssai": "111-1111",
+ "status": "active",
+ "configData": [
+ {
+ "configParameter": "maxNumberOfConns",
+ "configValue": 20
+ },
+ {
+ "configParameter": "dLThptPerSlice",
+ "configValue": 20
+ },
+ {
+ "configParameter": "uLThptPerSlice",
+ "configValue": 20
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "nRPCI": 11,
+ "nRTAC": 14777,
+ "arfcnDL": 1,
+ "arfcnUL": 2,
+ "arfcnSUL": 3,
+ "bSChannelBwDL": 4,
+ "bSChannelBwUL": 5,
+ "bSChannelBwSUL": 6,
+ "ssbFrequency": 7,
+ "ssbSubCarrierSpacing": 15,
+ "ssbOffset": 9,
+ "ssbDuration": 4,
+ "nRSectorCarrierRef": [
+ "OU=Sales"
+ ],
+ "userLabel": "user",
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "idGNBDUFunction": "23",
+ "attributes": {
+ "gNBDUFunction-url": "10.165.160.13:6080",
+ "gNBIdLength": 23,
+ "gNBDUName": "gnbdu1",
+ "gNBDUId": 23,
+ "gNBId": 98763,
+ "RRMPolicyRatio": [
+ {
+ "id": "34",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 34,
+ "mcc": "211",
+ "mnc": "111",
+ "sNSSAI": 102
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 23,
+ "rRMPolicyMinRatio": 4,
+ "rRMPolicyDedicatedRatio": 5
+ }
+ }
+ ],
+ "userLabel": "user",
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ },
+ "NRCellDU": [
+ {
+ "idNRCellDU": "15299",
+ "attributes": {
+ "nRCellDU-url": "10.165.160.15:8083",
+ "cellLocalId": 15299,
+ "operationalState": "ENABLED",
+ "administrativeState": "UNLOCKED",
+ "cellState": "ACTIVE",
+ "RRMPolicyRatio": [
+ {
+ "id": "34",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 34,
+ "mcc": "211",
+ "mnc": "111",
+ "sNSSAI": 102
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 23,
+ "rRMPolicyMinRatio": 4,
+ "rRMPolicyDedicatedRatio": 5
+ }
+ }
+ ],
+ "pLMNInfoList": [
+ {
+ "mcc": "211",
+ "mnc": "211",
+ "sNSSAIList": [
+ {
+ "sNssai": "111-1111",
+ "status": "active",
+ "configData": [
+ {
+ "configParameter": "maxNumberOfConns",
+ "configValue": 20
+ },
+ {
+ "configParameter": "dLThptPerSlice",
+ "configValue": 20
+ },
+ {
+ "configParameter": "uLThptPerSlice",
+ "configValue": 20
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "nRPCI": 11,
+ "nRTAC": 14777,
+ "arfcnDL": 1,
+ "arfcnUL": 2,
+ "arfcnSUL": 3,
+ "bSChannelBwDL": 4,
+ "bSChannelBwUL": 5,
+ "bSChannelBwSUL": 6,
+ "ssbFrequency": 7,
+ "ssbSubCarrierSpacing": 15,
+ "ssbOffset": 9,
+ "ssbDuration": 4,
+ "nRSectorCarrierRef": [
+ "OU=Sales"
+ ],
+ "userLabel": "user",
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ }
+ }
+ ]
+ }
+]
diff --git a/components/slice-analysis-ms/src/test/resources/sliceConfig.json b/components/slice-analysis-ms/src/test/resources/sliceConfig.json
new file mode 100644
index 00000000..8e5e1886
--- /dev/null
+++ b/components/slice-analysis-ms/src/test/resources/sliceConfig.json
@@ -0,0 +1,322 @@
+[
+ {
+ "idNearRTRIC": 11,
+ "attributes": {
+ "near-rt-ric-url": "10.165.160.47:6080",
+ "trackingArea": "Kingston",
+ "rANNFNSSIList": [
+ "e893-e93r-c0f2-kj76",
+ "m93ed-e93e-c0f2-9i7y"
+ ],
+ "RRMPolicyRatio": [
+ {
+ "id": "33",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 33,
+ "mcc": "310",
+ "mnc": "410",
+ "sNSSAI": 101
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 22,
+ "rRMPolicyMinRatio": 3,
+ "rRMPolicyDedicatedRatio": 4
+ }
+ }
+ ],
+ "pLMNInfoList": [
+ {
+ "mcc": "310",
+ "mnc": "410",
+ "sNSSAIList": [
+ {
+ "sNssai": "111-1111",
+ "status": "ACTIVE",
+ "configData": [
+ {
+ "configParameter": "maxNumberOfConns",
+ "configValue": 10
+ },
+ {
+ "configParameter": "uLThptPerSlice",
+ "configValue": 10
+ },
+ {
+ "configParameter": "dLThptPerSlice",
+ "configValue": 10
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "sliceProfilesList": [
+ {
+ "sliceProfileId": "b594-e98r-c7f2-ij79",
+ "sNSSAI": 101,
+ "maxNumberofUEs": 24,
+ "latency": 2,
+ "uLThptPerSlice": 30,
+ "dLThptPerSlice": 60,
+ "maxNumberofConns": 22,
+ "uEMobilityLevel": "high",
+ "coverageAreaList": [
+ "CA1",
+ "CA2"
+ ],
+ "resourceSharingLevel": "Shared"
+ }
+ ]
+ },
+ "GNBDUFunction": [
+ {
+ "idGNBDUFunction": "22",
+ "attributes": {
+ "gNBDUFunction-url": "10.165.160.13:6080",
+ "gNBIdLength": 23,
+ "gNBDUName": "gnbdu1",
+ "gNBDUId": 22,
+ "gNBId": 98763,
+ "RRMPolicyRatio": [
+ {
+ "id": "34",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 34,
+ "mcc": "211",
+ "mnc": "111",
+ "sNSSAI": 102
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 23,
+ "rRMPolicyMinRatio": 4,
+ "rRMPolicyDedicatedRatio": 5
+ }
+ }
+ ],
+ "userLabel": "user",
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ },
+ "NRCellDU": [
+ {
+ "idNRCellDU": "15299",
+ "attributes": {
+ "nRCellDU-url": "10.165.160.15:8083",
+ "cellLocalId": 15299,
+ "operationalState": "ENABLED",
+ "administrativeState": "UNLOCKED",
+ "cellState": "ACTIVE",
+ "RRMPolicyRatio": [
+ {
+ "id": "34",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 34,
+ "mcc": "211",
+ "mnc": "111",
+ "sNSSAI": 102
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 23,
+ "rRMPolicyMinRatio": 4,
+ "rRMPolicyDedicatedRatio": 5
+ }
+ }
+ ],
+ "pLMNInfoList": [
+ {
+ "mcc": "211",
+ "mnc": "211",
+ "sNSSAIList": [
+ {
+ "sNssai": "111-1111",
+ "status": "active",
+ "configData": [
+ {
+ "configParameter": "maxNumberOfConns",
+ "configValue": 20
+ },
+ {
+ "configParameter": "dLThptPerSlice",
+ "configValue": 20
+ },
+ {
+ "configParameter": "uLThptPerSlice",
+ "configValue": 20
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "nRPCI": 11,
+ "nRTAC": 14777,
+ "arfcnDL": 1,
+ "arfcnUL": 2,
+ "arfcnSUL": 3,
+ "bSChannelBwDL": 4,
+ "bSChannelBwUL": 5,
+ "bSChannelBwSUL": 6,
+ "ssbFrequency": 7,
+ "ssbSubCarrierSpacing": 15,
+ "ssbOffset": 9,
+ "ssbDuration": 4,
+ "nRSectorCarrierRef": [
+ "OU=Sales"
+ ],
+ "userLabel": "user",
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ],
+ "GNBCUUPFunction": [
+ {
+ "idGNBCUUPFunction": "22",
+ "attributes": {
+ "gNBCUUPFunction-url": "10.165.160.13:6080",
+ "gNBId": 22,
+ "RRMPolicyRatio": [
+ {
+ "id": "35",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 35,
+ "mcc": "212",
+ "mnc": "212",
+ "sNSSAI": 203
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 22,
+ "rRMPolicyMinRatio": 3,
+ "rRMPolicyDedicatedRatio": 4
+ }
+ }
+ ],
+ "userLabel": "user",
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ }
+ }
+ ],
+ "GNBCUCPFunction": [
+ {
+ "idGNBCUCPFunction": "32",
+ "attributes": {
+ "gNBCUCPFunction-url": "10.165.160.13:6080",
+ "gNBId": 32,
+ "gNBIdLength": 23,
+ "gNBCUName": "gnbcucp1",
+ "RRMPolicyRatio": [
+ {
+ "id": "43",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 43,
+ "mcc": "310",
+ "mnc": "410",
+ "sNSSAI": 101
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 22,
+ "rRMPolicyMinRatio": 3,
+ "rRMPolicyDedicatedRatio": 4
+ }
+ }
+ ],
+ "userLabel": "user",
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ },
+ "NRCellCU": [
+ {
+ "idNRCellCU": "15199",
+ "attributes": {
+ "nRCellCU-url": "10.165.160.15:8083",
+ "cellLocalId": 15199,
+ "RRMPolicyRatio": [
+ {
+ "id": "55",
+ "attributes": {
+ "resourceType": "sharing",
+ "rRMPolicyMemberList": [
+ {
+ "idx": 55,
+ "mcc": "550",
+ "mnc": "550",
+ "sNSSAI": 101
+ }
+ ],
+ "quotaType": "STRICT",
+ "rRMPolicyMaxRatio": 22,
+ "rRMPolicyMinRatio": 3,
+ "rRMPolicyDedicatedRatio": 4
+ }
+ }
+ ],
+ "pLMNInfoList": [
+ {
+ "mcc": "551",
+ "mnc": "550",
+ "sNSSAIList": [
+ {
+ "sNssai": "501",
+ "status": "active",
+ "configData": [
+ {
+ "configParameter": "maxNumberOfConns",
+ "configValue": 10
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "sAP": [
+ {
+ "host": "localhost",
+ "port": 8080
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+]