aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scripts/optf-has/has/has-properties/conductor.conf.onap3
-rwxr-xr-xscripts/optf-has/has/has_script.sh2
-rwxr-xr-xscripts/optf-has/has/simulator_script.sh10
-rw-r--r--tests/optf-has/has/data/nsi_selection_template_with_create.json168
-rw-r--r--tests/optf-has/has/data/nsi_selection_template_with_nonsi.json168
-rw-r--r--tests/optf-has/has/data/nsi_selection_template_with_reuse.json168
-rw-r--r--tests/optf-has/has/data/nssi_selection_template.json84
-rw-r--r--tests/optf-has/has/data/nssi_selection_template_unmatched.json84
-rw-r--r--tests/optf-has/has/optf_has_test.robot164
9 files changed, 841 insertions, 10 deletions
diff --git a/scripts/optf-has/has/has-properties/conductor.conf.onap b/scripts/optf-has/has/has-properties/conductor.conf.onap
index 6cf8fb29..3ce7fa05 100644
--- a/scripts/optf-has/has/has-properties/conductor.conf.onap
+++ b/scripts/optf-has/has/has-properties/conductor.conf.onap
@@ -296,6 +296,7 @@ concurrent = true
# Time between checking for new plans. Default value is 1. (integer value)
# Minimum value: 1
#polling_interval = 1
+opt_schema_file = /opt/has/conductor/etc/conductor/opt_schema.json
# (integer value)
# Minimum value: 1
@@ -335,7 +336,7 @@ concurrent = true
#
# Extensions list to use (list value)
-#extensions = aai
+extensions = aai,generator
[messaging_server]
diff --git a/scripts/optf-has/has/has_script.sh b/scripts/optf-has/has/has_script.sh
index f851051c..3b24d47a 100755
--- a/scripts/optf-has/has/has_script.sh
+++ b/scripts/optf-has/has/has_script.sh
@@ -31,7 +31,7 @@ cd ${DIR}
COND_CONF=/tmp/conductor/properties/conductor.conf
LOG_CONF=/tmp/conductor/properties/log.conf
IMAGE_NAME=nexus3.onap.org:10001/onap/optf-has
-IMAGE_VER=2.0.2-SNAPSHOT-latest
+IMAGE_VER=2.1.2-SNAPSHOT-latest
BUNDLE=/tmp/conductor/properties/AAF_RootCA.cer
mkdir -p /tmp/conductor/properties
diff --git a/scripts/optf-has/has/simulator_script.sh b/scripts/optf-has/has/simulator_script.sh
index ccb479b2..c52535cb 100755
--- a/scripts/optf-has/has/simulator_script.sh
+++ b/scripts/optf-has/has/simulator_script.sh
@@ -44,16 +44,10 @@ if [ ${USER} != 'jenkins' ]; then
fi
# prepare aaisim
-cd ${WORK_DIR}/has/conductor/conductor/tests/functional/simulators/aaisim/
-
-# check Dockerfile content
-cat ./Dockerfile
-
-# build aaisim
-docker build -t aaisim .
+cd ${WORK_DIR}/has/conductor/conductor/tests/functional/simulators/
# run aaisim
-docker run -d --name aaisim -p 8081:8081 aaisim
+./run_aaisim.sh
AAISIM_IP=`docker inspect --format '{{ .NetworkSettings.Networks.bridge.IPAddress}}' aaisim`
echo "AAISIM_IP=${AAISIM_IP}"
diff --git a/tests/optf-has/has/data/nsi_selection_template_with_create.json b/tests/optf-has/has/data/nsi_selection_template_with_create.json
new file mode 100644
index 00000000..6d659f9e
--- /dev/null
+++ b/tests/optf-has/has/data/nsi_selection_template_with_create.json
@@ -0,0 +1,168 @@
+{
+ "files": {},
+ "limit": 10,
+ "name": "urllc_sample",
+ "num_solution": "1",
+ "template": {
+ "constraints": {
+ "URLLC_Threshold": {
+ "demands": [
+ "URLLC"
+ ],
+ "properties": {
+ "evaluate": [
+ {
+ "attribute": "latency",
+ "operator": "lte",
+ "threshold": {
+ "get_param": "latency"
+ },
+ "unit": "ms"
+ },
+ {
+ "attribute": "reliability",
+ "operator": "gte",
+ "threshold": {
+ "get_param": "reliability"
+ },
+ "unit": ""
+ },
+ {
+ "attribute": "coverage_area_ta_list",
+ "operator": "eq",
+ "threshold": {
+ "get_param": "coverage_area_ta_list"
+ },
+ "unit": ""
+ }
+ ]
+ },
+ "type": "threshold"
+ }
+ },
+ "demands": {
+ "URLLC": [
+ {
+ "default_attributes": {
+ "creation_cost": 0.1
+ },
+ "filtering_attributes": {
+ "service-function": "shared",
+ "model-invariant-id": "21d57d4b-52ad-4d3c-a798-248b5bb9124a",
+ "model-version-id": "bfba363e-e39c-4bd9-a9d5-1371c28f4d22",
+ "service-role": "nsi"
+ },
+ "inventory_provider": "aai",
+ "inventory_type": "nsi",
+ "unique": "true"
+ },
+ {
+ "default_attributes": {
+ "creation_cost": 0.9
+ },
+ "filtering_attributes": {
+ "service_profile": {
+ "latency": {"value": {"get_param": "latency"}, "operator": "lte"},
+ "reliability": {"value": {"get_param": "reliability"}, "operator": "gte"},
+ "coverage_area_ta_list": {"value": {"get_param": "coverage_area_ta_list"}, "operator": "eq"}
+ },
+ "subnets":{
+ "core": {
+ "latency": {
+ "max": {
+ "get_param": "latency"
+ },
+ "min": {
+ "get_param": "core_latency"
+ },
+ "steps": 1
+ },
+ "reliability": {
+ "values": [
+ {
+ "get_param": "core_reliability"
+ }
+ ]
+ }
+ },
+ "ran": {
+ "coverage_area_ta_list": {
+ "values": [
+ {
+ "get_param": "coverage_area_ta_list"
+ }
+ ]
+ },
+ "latency": {
+ "max": {
+ "get_param": "latency"
+ },
+ "min": {
+ "get_param": "ran_latency"
+ },
+ "steps": 1
+ },
+ "reliability": {
+ "values": [
+ {
+ "get_param": "ran_reliability"
+ }
+ ]
+ }
+ },
+ "transport": {
+ "latency": {
+ "max": {
+ "get_param": "latency"
+ },
+ "min": {
+ "get_param": "tn_latency"
+ },
+ "steps": 1
+ },
+ "reliability": {
+ "values": [
+ {
+ "get_param": "tn_reliability"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "inventory_provider": "generator",
+ "inventory_type": "slice_profiles",
+ "unique": "true"
+ }
+ ]
+ },
+ "homing_template_version": "2020-08-13",
+ "optimization": {
+ "goal": "maximize",
+ "operation_function": {
+ "operands": [
+ {
+ "function": "attribute",
+ "params": {
+ "attribute": "creation_cost",
+ "demand": "URLLC"
+ }
+ }
+ ],
+ "operator": "sum"
+ }
+ },
+ "parameters": {
+ "core_latency": 10,
+ "core_reliability": 99.9,
+ "coverage_area_ta_list": "Chennai",
+ "latency": 30,
+ "ran_latency": 7,
+ "ran_reliability": 99.9,
+ "reliability": 99.9,
+ "tn_latency": 10,
+ "tn_reliability": 99.9
+ }
+ },
+ "timeout": 1200
+}
diff --git a/tests/optf-has/has/data/nsi_selection_template_with_nonsi.json b/tests/optf-has/has/data/nsi_selection_template_with_nonsi.json
new file mode 100644
index 00000000..1b5b99e4
--- /dev/null
+++ b/tests/optf-has/has/data/nsi_selection_template_with_nonsi.json
@@ -0,0 +1,168 @@
+{
+ "files": {},
+ "limit": 10,
+ "name": "urllc_sample",
+ "num_solution": "1",
+ "template": {
+ "constraints": {
+ "URLLC_Threshold": {
+ "demands": [
+ "URLLC"
+ ],
+ "properties": {
+ "evaluate": [
+ {
+ "attribute": "latency",
+ "operator": "lte",
+ "threshold": {
+ "get_param": "latency"
+ },
+ "unit": "ms"
+ },
+ {
+ "attribute": "reliability",
+ "operator": "gte",
+ "threshold": {
+ "get_param": "reliability"
+ },
+ "unit": ""
+ },
+ {
+ "attribute": "coverage_area_ta_list",
+ "operator": "eq",
+ "threshold": {
+ "get_param": "coverage_area_ta_list"
+ },
+ "unit": ""
+ }
+ ]
+ },
+ "type": "threshold"
+ }
+ },
+ "demands": {
+ "URLLC": [
+ {
+ "default_attributes": {
+ "creation_cost": 0.1
+ },
+ "filtering_attributes": {
+ "service-function": "shared",
+ "model-invariant-id": "21d57d4b-52ad-4d3c-a798-248b5bb9124a",
+ "model-version-id": "637762da-0764-43cc-8b9a-535085770821",
+ "service-role": "nsi"
+ },
+ "inventory_provider": "aai",
+ "inventory_type": "nsi",
+ "unique": "true"
+ },
+ {
+ "default_attributes": {
+ "creation_cost": 0.9
+ },
+ "filtering_attributes": {
+ "service_profile": {
+ "latency": {"value": {"get_param": "latency"}, "operator": "lte"},
+ "reliability": {"value": {"get_param": "reliability"}, "operator": "gte"},
+ "coverage_area_ta_list": {"value": {"get_param": "coverage_area_ta_list"}, "operator": "eq"}
+ },
+ "subnets":{
+ "core": {
+ "latency": {
+ "max": {
+ "get_param": "latency"
+ },
+ "min": {
+ "get_param": "core_latency"
+ },
+ "steps": 1
+ },
+ "reliability": {
+ "values": [
+ {
+ "get_param": "core_reliability"
+ }
+ ]
+ }
+ },
+ "ran": {
+ "coverage_area_ta_list": {
+ "values": [
+ {
+ "get_param": "coverage_area_ta_list"
+ }
+ ]
+ },
+ "latency": {
+ "max": {
+ "get_param": "latency"
+ },
+ "min": {
+ "get_param": "ran_latency"
+ },
+ "steps": 1
+ },
+ "reliability": {
+ "values": [
+ {
+ "get_param": "ran_reliability"
+ }
+ ]
+ }
+ },
+ "transport": {
+ "latency": {
+ "max": {
+ "get_param": "latency"
+ },
+ "min": {
+ "get_param": "tn_latency"
+ },
+ "steps": 1
+ },
+ "reliability": {
+ "values": [
+ {
+ "get_param": "tn_reliability"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "inventory_provider": "generator",
+ "inventory_type": "slice_profiles",
+ "unique": "true"
+ }
+ ]
+ },
+ "homing_template_version": "2020-08-13",
+ "optimization": {
+ "goal": "minimize",
+ "operation_function": {
+ "operands": [
+ {
+ "function": "attribute",
+ "params": {
+ "attribute": "creation_cost",
+ "demand": "URLLC"
+ }
+ }
+ ],
+ "operator": "sum"
+ }
+ },
+ "parameters": {
+ "core_latency": 10,
+ "core_reliability": 99.9,
+ "coverage_area_ta_list": "Chennai",
+ "latency": 30,
+ "ran_latency": 7,
+ "ran_reliability": 99.9,
+ "reliability": 99.9,
+ "tn_latency": 10,
+ "tn_reliability": 99.9
+ }
+ },
+ "timeout": 1200
+}
diff --git a/tests/optf-has/has/data/nsi_selection_template_with_reuse.json b/tests/optf-has/has/data/nsi_selection_template_with_reuse.json
new file mode 100644
index 00000000..ff66b2d2
--- /dev/null
+++ b/tests/optf-has/has/data/nsi_selection_template_with_reuse.json
@@ -0,0 +1,168 @@
+{
+ "files": {},
+ "limit": 10,
+ "name": "urllc_sample",
+ "num_solution": "1",
+ "template": {
+ "constraints": {
+ "URLLC_Threshold": {
+ "demands": [
+ "URLLC"
+ ],
+ "properties": {
+ "evaluate": [
+ {
+ "attribute": "latency",
+ "operator": "lte",
+ "threshold": {
+ "get_param": "latency"
+ },
+ "unit": "ms"
+ },
+ {
+ "attribute": "reliability",
+ "operator": "gte",
+ "threshold": {
+ "get_param": "reliability"
+ },
+ "unit": ""
+ },
+ {
+ "attribute": "coverage_area_ta_list",
+ "operator": "eq",
+ "threshold": {
+ "get_param": "coverage_area_ta_list"
+ },
+ "unit": ""
+ }
+ ]
+ },
+ "type": "threshold"
+ }
+ },
+ "demands": {
+ "URLLC": [
+ {
+ "default_attributes": {
+ "creation_cost": 0.1
+ },
+ "filtering_attributes": {
+ "service-function": "shared",
+ "model-invariant-id": "21d57d4b-52ad-4d3c-a798-248b5bb9124a",
+ "model-version-id": "bfba363e-e39c-4bd9-a9d5-1371c28f4d22",
+ "service-role": "nsi"
+ },
+ "inventory_provider": "aai",
+ "inventory_type": "nsi",
+ "unique": "true"
+ },
+ {
+ "default_attributes": {
+ "creation_cost": 0.9
+ },
+ "filtering_attributes": {
+ "service_profile": {
+ "latency": {"value": {"get_param": "latency"}, "operator": "lte"},
+ "reliability": {"value": {"get_param": "reliability"}, "operator": "gte"},
+ "coverage_area_ta_list": {"value": {"get_param": "coverage_area_ta_list"}, "operator": "eq"}
+ },
+ "subnets":{
+ "core": {
+ "latency": {
+ "max": {
+ "get_param": "latency"
+ },
+ "min": {
+ "get_param": "core_latency"
+ },
+ "steps": 1
+ },
+ "reliability": {
+ "values": [
+ {
+ "get_param": "core_reliability"
+ }
+ ]
+ }
+ },
+ "ran": {
+ "coverage_area_ta_list": {
+ "values": [
+ {
+ "get_param": "coverage_area_ta_list"
+ }
+ ]
+ },
+ "latency": {
+ "max": {
+ "get_param": "latency"
+ },
+ "min": {
+ "get_param": "ran_latency"
+ },
+ "steps": 1
+ },
+ "reliability": {
+ "values": [
+ {
+ "get_param": "ran_reliability"
+ }
+ ]
+ }
+ },
+ "transport": {
+ "latency": {
+ "max": {
+ "get_param": "latency"
+ },
+ "min": {
+ "get_param": "tn_latency"
+ },
+ "steps": 1
+ },
+ "reliability": {
+ "values": [
+ {
+ "get_param": "tn_reliability"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "inventory_provider": "generator",
+ "inventory_type": "slice_profiles",
+ "unique": "true"
+ }
+ ]
+ },
+ "homing_template_version": "2020-08-13",
+ "optimization": {
+ "goal": "minimize",
+ "operation_function": {
+ "operands": [
+ {
+ "function": "attribute",
+ "params": {
+ "attribute": "creation_cost",
+ "demand": "URLLC"
+ }
+ }
+ ],
+ "operator": "sum"
+ }
+ },
+ "parameters": {
+ "core_latency": 10,
+ "core_reliability": 99.9,
+ "coverage_area_ta_list": "Chennai",
+ "latency": 30,
+ "ran_latency": 7,
+ "ran_reliability": 99.9,
+ "reliability": 99.9,
+ "tn_latency": 10,
+ "tn_reliability": 99.9
+ }
+ },
+ "timeout": 1200
+}
diff --git a/tests/optf-has/has/data/nssi_selection_template.json b/tests/optf-has/has/data/nssi_selection_template.json
new file mode 100644
index 00000000..a498ca0b
--- /dev/null
+++ b/tests/optf-has/has/data/nssi_selection_template.json
@@ -0,0 +1,84 @@
+{
+ "files": {},
+ "limit": 10,
+ "name": "urllc_sample",
+ "num_solution": "1",
+ "timeout": 1200,
+ "template": {
+ "homing_template_version": "2020-08-13",
+ "parameters": {
+ "coverage_area_ta_list": "Chennai",
+ "latency": 30,
+ "reliability": 99.9
+ },
+ "demands": {
+ "URLLC_core": [
+ {
+ "default_attributes": {
+ "creation_cost": 0.1
+ },
+ "filtering_attributes": {
+ "service-function": "shared",
+ "model-invariant-id": "c343a533-c045-4ec0-bbb6-f30eb8eb5a41",
+ "model-version-id": "8d770214-d3e7-43ea-b7a6-9b235dcbcd34",
+ "service-role": "nssi"
+ },
+ "inventory_provider": "aai",
+ "inventory_type": "nssi",
+ "unique": "true"
+ }
+ ]
+ },
+ "constraints": {
+ "URLLC_Threshold": {
+ "demands": [
+ "URLLC_core"
+ ],
+ "properties": {
+ "evaluate": [
+ {
+ "attribute": "latency",
+ "operator": "lte",
+ "threshold": {
+ "get_param": "latency"
+ },
+ "unit": "ms"
+ },
+ {
+ "attribute": "reliability",
+ "operator": "gte",
+ "threshold": {
+ "get_param": "reliability"
+ },
+ "unit": ""
+ },
+ {
+ "attribute": "coverage_area_ta_list",
+ "operator": "eq",
+ "threshold": {
+ "get_param": "coverage_area_ta_list"
+ },
+ "unit": ""
+ }
+ ]
+ },
+ "type": "threshold"
+ }
+ },
+ "optimization": {
+ "goal": "minimize",
+ "operation_function": {
+ "operands": [
+ {
+ "function": "attribute",
+ "params": {
+ "attribute": "latency",
+ "demand": "URLLC_core"
+ }
+ }
+ ],
+ "operator": "sum"
+ }
+ }
+ }
+}
diff --git a/tests/optf-has/has/data/nssi_selection_template_unmatched.json b/tests/optf-has/has/data/nssi_selection_template_unmatched.json
new file mode 100644
index 00000000..49302801
--- /dev/null
+++ b/tests/optf-has/has/data/nssi_selection_template_unmatched.json
@@ -0,0 +1,84 @@
+{
+ "files": {},
+ "limit": 10,
+ "name": "urllc_sample",
+ "num_solution": "1",
+ "timeout": 1200,
+ "template": {
+ "homing_template_version": "2020-08-13",
+ "parameters": {
+ "coverage_area_ta_list": "Chennai",
+ "latency": 5,
+ "reliability": 99.9
+ },
+ "demands": {
+ "URLLC_core": [
+ {
+ "default_attributes": {
+ "creation_cost": 0.1
+ },
+ "filtering_attributes": {
+ "service-function": "shared",
+ "model-invariant-id": "c343a533-c045-4ec0-bbb6-f30eb8eb5a41",
+ "model-version-id": "8d770214-d3e7-43ea-b7a6-9b235dcbcd34",
+ "service-role": "nssi"
+ },
+ "inventory_provider": "aai",
+ "inventory_type": "nssi",
+ "unique": "true"
+ }
+ ]
+ },
+ "constraints": {
+ "URLLC_Threshold": {
+ "demands": [
+ "URLLC_core"
+ ],
+ "properties": {
+ "evaluate": [
+ {
+ "attribute": "latency",
+ "operator": "lte",
+ "threshold": {
+ "get_param": "latency"
+ },
+ "unit": "ms"
+ },
+ {
+ "attribute": "reliability",
+ "operator": "gte",
+ "threshold": {
+ "get_param": "reliability"
+ },
+ "unit": ""
+ },
+ {
+ "attribute": "coverage_area_ta_list",
+ "operator": "eq",
+ "threshold": {
+ "get_param": "coverage_area_ta_list"
+ },
+ "unit": ""
+ }
+ ]
+ },
+ "type": "threshold"
+ }
+ },
+ "optimization": {
+ "goal": "minimize",
+ "operation_function": {
+ "operands": [
+ {
+ "function": "attribute",
+ "params": {
+ "attribute": "latency",
+ "demand": "URLLC_core"
+ }
+ }
+ ],
+ "operator": "sum"
+ }
+ }
+ }
+}
diff --git a/tests/optf-has/has/optf_has_test.robot b/tests/optf-has/has/optf_has_test.robot
index 8bd313a9..9185fcea 100644
--- a/tests/optf-has/has/optf_has_test.robot
+++ b/tests/optf-has/has/optf_has_test.robot
@@ -522,6 +522,170 @@ GetPlanWithHpaScoreMultiObj
Should Be Equal done ${resultStatus}
Should Be Equal HPA-cloud_cloud-region-1 ${vim-id}
+# NSI selection template
+SendPlanWithNsiSelection
+ [Documentation] It sends a POST request to conductor
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ ${data}= Get Binary File ${CURDIR}${/}data${/}nsi_selection_template_with_reuse.json
+ &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json
+ ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ Log To Console body = ${resp.text}
+ ${response_json} json.loads ${resp.content}
+ ${generatedPlanId}= Convert To String ${response_json['id']}
+ Set Global Variable ${generatedPlanId}
+ Log To Console generatedPlanId = ${generatedPlanId}
+ Should Be Equal As Integers ${resp.status_code} 201
+ Sleep 60s Wait Plan Resolution
+
+GetPlanWithNsiSelection
+ [Documentation] It sends a REST GET request to capture recommendations
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json
+ ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ ${response_json} json.loads ${resp.content}
+ ${resultStatus}= Convert To String ${response_json['plans'][0]['status']}
+ ${instance_name}= Convert To String ${response_json['plans'][0]['recommendations'][0]['URLLC']['candidate']['instance_name']}
+ Set Global Variable ${resultStatus}
+ Log To Console resultStatus = ${resultStatus}
+ Log To Console body = ${resp.text}
+ Should Be Equal As Integers ${resp.status_code} 200
+ Should Be Equal done ${resultStatus}
+ Should Be Equal nsi_test_0211 ${instance_name}
+
+SendPlanWithNsiSelectionSliceProfile
+ [Documentation] It sends a POST request to conductor
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ ${data}= Get Binary File ${CURDIR}${/}data${/}nsi_selection_template_with_create.json
+ &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json
+ ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ Log To Console body = ${resp.text}
+ ${response_json} json.loads ${resp.content}
+ ${generatedPlanId}= Convert To String ${response_json['id']}
+ Set Global Variable ${generatedPlanId}
+ Log To Console generatedPlanId = ${generatedPlanId}
+ Should Be Equal As Integers ${resp.status_code} 201
+ Sleep 60s Wait Plan Resolution
+
+GetPlanWithNsiSelectionSliceProfile
+ [Documentation] It sends a REST GET request to capture recommendations
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json
+ ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ ${response_json} json.loads ${resp.content}
+ ${resultStatus}= Convert To String ${response_json['plans'][0]['status']}
+ ${candidate_type}= Convert To String ${response_json['plans'][0]['recommendations'][0]['URLLC']['candidate']['inventory_type']}
+ Set Global Variable ${resultStatus}
+ Log To Console resultStatus = ${resultStatus}
+ Log To Console body = ${resp.text}
+ Should Be Equal As Integers ${resp.status_code} 200
+ Should Be Equal done ${resultStatus}
+ Should Be Equal slice_profiles ${candidate_type}
+
+SendPlanWithNoNsi
+ [Documentation] It sends a POST request to conductor
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ ${data}= Get Binary File ${CURDIR}${/}data${/}nsi_selection_template_with_nonsi.json
+ &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json
+ ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ Log To Console body = ${resp.text}
+ ${response_json} json.loads ${resp.content}
+ ${generatedPlanId}= Convert To String ${response_json['id']}
+ Set Global Variable ${generatedPlanId}
+ Log To Console generatedPlanId = ${generatedPlanId}
+ Should Be Equal As Integers ${resp.status_code} 201
+ Sleep 60s Wait Plan Resolution
+
+GetPlanWithNoNsi
+ [Documentation] It sends a REST GET request to capture recommendations
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json
+ ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ ${response_json} json.loads ${resp.content}
+ ${resultStatus}= Convert To String ${response_json['plans'][0]['status']}
+ ${candidate_type}= Convert To String ${response_json['plans'][0]['recommendations'][0]['URLLC']['candidate']['inventory_type']}
+ Set Global Variable ${resultStatus}
+ Log To Console resultStatus = ${resultStatus}
+ Log To Console body = ${resp.text}
+ Should Be Equal As Integers ${resp.status_code} 200
+ Should Be Equal done ${resultStatus}
+ Should Be Equal slice_profiles ${candidate_type}
+
+SendPlanWithNssiSelection
+ [Documentation] It sends a POST request to conductor
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ ${data}= Get Binary File ${CURDIR}${/}data${/}nssi_selection_template.json
+ &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json
+ ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ Log To Console body = ${resp.text}
+ ${response_json} json.loads ${resp.content}
+ ${generatedPlanId}= Convert To String ${response_json['id']}
+ Set Global Variable ${generatedPlanId}
+ Log To Console generatedPlanId = ${generatedPlanId}
+ Should Be Equal As Integers ${resp.status_code} 201
+ Sleep 60s Wait Plan Resolution
+
+GetPlanWithNssiSelection
+ [Documentation] It sends a REST GET request to capture recommendations
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json
+ ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ ${response_json} json.loads ${resp.content}
+ ${resultStatus}= Convert To String ${response_json['plans'][0]['status']}
+ ${instance_name}= Convert To String ${response_json['plans'][0]['recommendations'][0]['URLLC_core']['candidate']['instance_name']}
+ Set Global Variable ${resultStatus}
+ Log To Console resultStatus = ${resultStatus}
+ Log To Console body = ${resp.text}
+ Should Be Equal As Integers ${resp.status_code} 200
+ Should Be Equal done ${resultStatus}
+ Should Be Equal nssi_test_0211 ${instance_name}
+
+SendPlanWithNssiSelectionUnmatched
+ [Documentation] It sends a POST request to conductor
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ ${data}= Get Binary File ${CURDIR}${/}data${/}nssi_selection_template_unmatched.json
+ &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json
+ ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ Log To Console body = ${resp.text}
+ ${response_json} json.loads ${resp.content}
+ ${generatedPlanId}= Convert To String ${response_json['id']}
+ Set Global Variable ${generatedPlanId}
+ Log To Console generatedPlanId = ${generatedPlanId}
+ Should Be Equal As Integers ${resp.status_code} 201
+ Sleep 60s Wait Plan Resolution
+
+GetPlanWithNssiSelectionUnmatched
+ [Documentation] It sends a REST GET request to capture recommendations
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json
+ ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ ${response_json} json.loads ${resp.content}
+ ${resultStatus}= Convert To String ${response_json['plans'][0]['status']}
+ Set Global Variable ${resultStatus}
+ Log To Console resultStatus = ${resultStatus}
+ Log To Console body = ${resp.text}
+ Should Be Equal As Integers ${resp.status_code} 200
+ Should Be Equal not found ${resultStatus}
+
*** Keywords ***