aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMorgan Richomme <morgan.richomme@orange.com>2020-10-29 12:52:33 +0000
committerGerrit Code Review <gerrit@onap.org>2020-10-29 12:52:33 +0000
commit0963516ab409f4fc2d36ee7c8885eeeaab288a6b (patch)
treed17bf78516800a341107f6db5d02e2855431444e /tests
parentb6328b945c85e874bc4fcd1368e19878577eadce (diff)
parent4e76bd143c04d7f2adcc01255f3666e0d333414c (diff)
Merge "[OOF] Add CSIT for NSI/NSSI selection"
Diffstat (limited to 'tests')
-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
6 files changed, 836 insertions, 0 deletions
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 ***