aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/dcaegen2/prh-testcases/assets/aai-missing-entry/ves-event.json70
-rw-r--r--tests/dcaegen2/prh-testcases/assets/aai-not-responding/ves-event.json70
-rw-r--r--tests/dcaegen2/prh-testcases/assets/re-registration/aai-entry-service-instance.json25
-rw-r--r--tests/dcaegen2/prh-testcases/assets/re-registration/aai-entry.json66
-rw-r--r--tests/dcaegen2/prh-testcases/assets/re-registration/expected-logical-link.json22
-rw-r--r--tests/dcaegen2/prh-testcases/assets/re-registration/expected-pnf-update-event.json8
-rw-r--r--tests/dcaegen2/prh-testcases/assets/re-registration/ves-event.json40
-rw-r--r--tests/dcaegen2/prh-testcases/assets/ves-event-missing-field/invalid-ves-event.json30
-rw-r--r--tests/dcaegen2/prh-testcases/assets/ves-event-with-attachment-point/expected-logical-link.json12
-rw-r--r--tests/dcaegen2/prh-testcases/assets/ves-event-with-attachment-point/ves-event.json74
-rw-r--r--tests/dcaegen2/prh-testcases/assets/ves-event-with-empty-additional-fields/ves-event.json72
-rw-r--r--tests/dcaegen2/prh-testcases/assets/ves-event-with-empty-attachment-point/ves-event.json74
-rw-r--r--tests/dcaegen2/prh-testcases/assets/ves-event-without-additional-fields/ves-event.json70
-rw-r--r--tests/dcaegen2/prh-testcases/prh_config_tests.robot33
-rw-r--r--tests/dcaegen2/prh-testcases/prh_tests.robot18
-rw-r--r--tests/dcaegen2/prh-testcases/resources/.env3
-rw-r--r--tests/dcaegen2/prh-testcases/resources/PrhLibrary.py3
-rw-r--r--tests/dcaegen2/prh-testcases/resources/docker-compose.yml11
-rw-r--r--tests/dcaegen2/prh-testcases/resources/prh_config_library.robot43
-rw-r--r--tests/dcaegen2/prh-testcases/resources/prh_library.robot88
-rw-r--r--tests/dcaegen2/prh-testcases/resources/prh_sessions.robot25
-rw-r--r--tests/dcaegen2/prh-testcases/resources/simulator/AAI.py16
-rw-r--r--tests/dcaegen2/prh-testcases/resources/simulator/DMaaP.py65
-rw-r--r--tests/integration/vCPE/test1.robot4
-rw-r--r--tests/portal/testsuites/portal_VID.robot4
-rw-r--r--tests/portal/testsuites/test1.robot4
-rw-r--r--tests/sdc/dcaed/__init__.robot2
-rw-r--r--tests/sdc/dcaed/asdc_interface.robot161
-rwxr-xr-xtests/sdc/dcaed/assets/artifact_upload.template8
-rwxr-xr-xtests/sdc/dcaed/assets/catalog_service.template42
-rw-r--r--tests/sdc/dcaed/assets/component_catalog_resource.template41
-rw-r--r--tests/sdc/dcaed/assets/create_vfcmt.template4
-rw-r--r--tests/sdc/dcaed/assets/dcae_composition.template849
-rwxr-xr-xtests/sdc/dcaed/assets/dcae_monitoring_configuration.template11
-rw-r--r--tests/sdc/dcaed/assets/resource_instance.template10
-rwxr-xr-xtests/sdc/dcaed/assets/schema.yaml551
-rwxr-xr-xtests/sdc/dcaed/assets/template.yaml117
-rwxr-xr-xtests/sdc/dcaed/assets/translate.yaml147
-rw-r--r--tests/sdc/dcaed/assets/user_remarks.template1
-rw-r--r--tests/sdc/dcaed/common.robot11
-rw-r--r--tests/sdc/dcaed/dcaed_interface.robot76
-rw-r--r--tests/sdc/dcaed/json_templater.robot20
-rw-r--r--tests/sdc/dcaed/monitoring_configuration_service_test.robot78
-rw-r--r--tests/usecases/5G-bulkpm/BulkpmE2E.robot4
-rw-r--r--tests/vid/resources/docker-compose.yml2
45 files changed, 2774 insertions, 311 deletions
diff --git a/tests/dcaegen2/prh-testcases/assets/aai-missing-entry/ves-event.json b/tests/dcaegen2/prh-testcases/assets/aai-missing-entry/ves-event.json
index 10ce41c5..3a768df2 100644
--- a/tests/dcaegen2/prh-testcases/assets/aai-missing-entry/ves-event.json
+++ b/tests/dcaegen2/prh-testcases/assets/aai-missing-entry/ves-event.json
@@ -1,39 +1,37 @@
-[
- {
- "event": {
- "commonEventHeader": {
- "startEpochMicrosec": 1540212137393,
- "sourceId": "val13",
- "eventId": "registration_40212137",
- "nfcNamingCode": "oam",
- "internalHeaderFields": {
- "collectorTimeStamp": "Mon, 10 22 2018 12:42:18 UTC"
- },
- "eventType": "pnfRegistration",
- "priority": "Normal",
- "version": "4.0.1",
- "reportingEntityName": "NOK6061ZW8",
- "sequence": 0,
- "domain": "pnfRegistration",
- "lastEpochMicrosec": 1540212137393,
- "eventName": "pnfRegistration_Nokia_5gDu",
- "vesEventListenerVersion": "7.0.1",
- "sourceName": "NOK6061ZW8",
- "nfNamingCode": "gNB"
+{
+ "event": {
+ "commonEventHeader": {
+ "startEpochMicrosec": 1540212137393,
+ "sourceId": "val13",
+ "eventId": "registration_40212137",
+ "nfcNamingCode": "oam",
+ "internalHeaderFields": {
+ "collectorTimeStamp": "Mon, 10 22 2018 12:42:18 UTC"
},
- "pnfRegistrationFields": {
- "unitType": "val8",
- "serialNumber": "6061ZW9",
- "pnfRegistrationFieldsVersion": "2.0",
- "manufactureDate": "1540212137393",
- "modelNumber": "val6",
- "lastServiceDate": "1540212137393",
- "unitFamily": "BBU",
- "vendorName": "Nokia",
- "oamV4IpAddress": "val3",
- "oamV6IpAddress": "val4",
- "softwareVersion": "val7"
- }
+ "eventType": "pnfRegistration",
+ "priority": "Normal",
+ "version": "4.0.1",
+ "reportingEntityName": "NOK6061ZW8",
+ "sequence": 0,
+ "domain": "pnfRegistration",
+ "lastEpochMicrosec": 1540212137393,
+ "eventName": "pnfRegistration_Nokia_5gDu",
+ "vesEventListenerVersion": "7.0.1",
+ "sourceName": "NOK6061ZW8",
+ "nfNamingCode": "gNB"
+ },
+ "pnfRegistrationFields": {
+ "unitType": "val8",
+ "serialNumber": "6061ZW9",
+ "pnfRegistrationFieldsVersion": "2.0",
+ "manufactureDate": "1540212137393",
+ "modelNumber": "val6",
+ "lastServiceDate": "1540212137393",
+ "unitFamily": "BBU",
+ "vendorName": "Nokia",
+ "oamV4IpAddress": "val3",
+ "oamV6IpAddress": "val4",
+ "softwareVersion": "val7"
}
}
-] \ No newline at end of file
+} \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/assets/aai-not-responding/ves-event.json b/tests/dcaegen2/prh-testcases/assets/aai-not-responding/ves-event.json
index 10ce41c5..3a768df2 100644
--- a/tests/dcaegen2/prh-testcases/assets/aai-not-responding/ves-event.json
+++ b/tests/dcaegen2/prh-testcases/assets/aai-not-responding/ves-event.json
@@ -1,39 +1,37 @@
-[
- {
- "event": {
- "commonEventHeader": {
- "startEpochMicrosec": 1540212137393,
- "sourceId": "val13",
- "eventId": "registration_40212137",
- "nfcNamingCode": "oam",
- "internalHeaderFields": {
- "collectorTimeStamp": "Mon, 10 22 2018 12:42:18 UTC"
- },
- "eventType": "pnfRegistration",
- "priority": "Normal",
- "version": "4.0.1",
- "reportingEntityName": "NOK6061ZW8",
- "sequence": 0,
- "domain": "pnfRegistration",
- "lastEpochMicrosec": 1540212137393,
- "eventName": "pnfRegistration_Nokia_5gDu",
- "vesEventListenerVersion": "7.0.1",
- "sourceName": "NOK6061ZW8",
- "nfNamingCode": "gNB"
+{
+ "event": {
+ "commonEventHeader": {
+ "startEpochMicrosec": 1540212137393,
+ "sourceId": "val13",
+ "eventId": "registration_40212137",
+ "nfcNamingCode": "oam",
+ "internalHeaderFields": {
+ "collectorTimeStamp": "Mon, 10 22 2018 12:42:18 UTC"
},
- "pnfRegistrationFields": {
- "unitType": "val8",
- "serialNumber": "6061ZW9",
- "pnfRegistrationFieldsVersion": "2.0",
- "manufactureDate": "1540212137393",
- "modelNumber": "val6",
- "lastServiceDate": "1540212137393",
- "unitFamily": "BBU",
- "vendorName": "Nokia",
- "oamV4IpAddress": "val3",
- "oamV6IpAddress": "val4",
- "softwareVersion": "val7"
- }
+ "eventType": "pnfRegistration",
+ "priority": "Normal",
+ "version": "4.0.1",
+ "reportingEntityName": "NOK6061ZW8",
+ "sequence": 0,
+ "domain": "pnfRegistration",
+ "lastEpochMicrosec": 1540212137393,
+ "eventName": "pnfRegistration_Nokia_5gDu",
+ "vesEventListenerVersion": "7.0.1",
+ "sourceName": "NOK6061ZW8",
+ "nfNamingCode": "gNB"
+ },
+ "pnfRegistrationFields": {
+ "unitType": "val8",
+ "serialNumber": "6061ZW9",
+ "pnfRegistrationFieldsVersion": "2.0",
+ "manufactureDate": "1540212137393",
+ "modelNumber": "val6",
+ "lastServiceDate": "1540212137393",
+ "unitFamily": "BBU",
+ "vendorName": "Nokia",
+ "oamV4IpAddress": "val3",
+ "oamV6IpAddress": "val4",
+ "softwareVersion": "val7"
}
}
-] \ No newline at end of file
+} \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/assets/re-registration/aai-entry-service-instance.json b/tests/dcaegen2/prh-testcases/assets/re-registration/aai-entry-service-instance.json
new file mode 100644
index 00000000..6119ea8b
--- /dev/null
+++ b/tests/dcaegen2/prh-testcases/assets/re-registration/aai-entry-service-instance.json
@@ -0,0 +1,25 @@
+{
+ "service-instance-id": "bbs_service",
+ "service-instance-name": "bbs_service",
+ "environment-context": "General_Revenue-Bearing",
+ "workload-context": "Production",
+ "model-invariant-id": "c71827e7-42fc-46ab-b059-22584c58108b",
+ "model-version-id": "8efe4a8a-6646-43e2-8807-a376ff22d2e0",
+ "resource-version": "1554127221722",
+ "orchestration-status": "Active",
+ "relationship-list": {
+ "relationship": [
+ {
+ "related-to": "pnf",
+ "relationship-label": "org.onap.relationships.inventory.ComposedOf",
+ "related-link": "/aai/v12/network/pnfs/pnf/NOK6061ZW9",
+ "relationship-data": [
+ {
+ "relationship-key": "pnf.pnf-name",
+ "relationship-value": "NOK6061ZW9"
+ }
+ ]
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/assets/re-registration/aai-entry.json b/tests/dcaegen2/prh-testcases/assets/re-registration/aai-entry.json
new file mode 100644
index 00000000..e01e26e6
--- /dev/null
+++ b/tests/dcaegen2/prh-testcases/assets/re-registration/aai-entry.json
@@ -0,0 +1,66 @@
+{
+ "pnf-name": "NOK6061ZW9",
+ "pnf-name2": "example-pnf-name2-val-58071",
+ "pnf-name2-source": "example-pnf-name2-source-val-22408",
+ "pnf-id": "example-pnf-id-val-55834",
+ "equip-type": "example-equip-type-val-5497",
+ "equip-vendor": "example-equip-vendor-val-85730",
+ "equip-model": "example-equip-model-val-38526",
+ "management-option": "example-management-option-val-15776",
+ "ipaddress-v4-oam": "example-ipaddress-v4-oam-val-33556",
+ "sw-version": "example-sw-version-val-64239",
+ "in-maint": true,
+ "frame-id": "example-frame-id-val-76733",
+ "serial-number": "example-serial-number-val-79366",
+ "ipaddress-v4-loopback-0": "example-ipaddress-v4-loopback0-val-34781",
+ "ipaddress-v6-loopback-0": "example-ipaddress-v6-loopback0-val-29979",
+ "ipaddress-v4-aim": "example-ipaddress-v4-aim-val-53703",
+ "ipaddress-v6-aim": "example-ipaddress-v6-aim-val-93386",
+ "ipaddress-v6-oam": "example-ipaddress-v6-oam-val-92665",
+ "inv-status": "example-inv-status-val-8477",
+ "prov-status": "example-prov-status-val-68268",
+ "nf-role": "example-nf-role-val-68489",
+ "relationship-list": {
+ "relationship": [
+ {
+ "related-to": "service-instance",
+ "relationship-label": "org.onap.relationships.inventory.ComposedOf",
+ "related-link": "/aai/v12/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFW/service-instances/service-instance/bbs_service",
+ "relationship-data": [
+ {
+ "relationship-key": "customer.global-customer-id",
+ "relationship-value": "Demonstration"
+ },
+ {
+ "relationship-key": "service-subscription.service-type",
+ "relationship-value": "vFW"
+ },
+ {
+ "relationship-key": "service-instance.service-instance-id",
+ "relationship-value": "bbs_service"
+ }
+ ],
+ "related-to-property": [
+ {
+ "property-key": "service-instance.service-instance-name",
+ "property-value": "bbs_service"
+ }
+ ]
+ },
+ {
+ "related-to": "logical-link",
+ "relationship-label": "org.onap.relationships.inventory.BridgedTo",
+ "related-link": "/aai/v12/network/logical-links/logical-link/bbs-link",
+ "relationship-data": [
+ {
+ "relationship-key": "logical-link.link-name",
+ "relationship-value": "bbs-link"
+ }
+ ]
+ }
+ ]
+ }
+
+
+
+} \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/assets/re-registration/expected-logical-link.json b/tests/dcaegen2/prh-testcases/assets/re-registration/expected-logical-link.json
new file mode 100644
index 00000000..0e4f6ab1
--- /dev/null
+++ b/tests/dcaegen2/prh-testcases/assets/re-registration/expected-logical-link.json
@@ -0,0 +1,22 @@
+{
+ "link-name": "bbs-link",
+ "in-maint": false,
+ "link-type": "attachment-point",
+ "relationship-list":
+ {
+ "relationship": [
+ {
+ "related-to": "pnf",
+ "relationship-label": "org.onap.relationships.inventory.BridgedTo",
+ "related-link": "/network/pnfs/pnf/NOK6061ZW9",
+ "relationship-data": [
+ {
+ "relationship-key": "pnf.pnf-name",
+ "relationship-value": "NOK6061ZW9"
+ }
+ ]
+ }
+ ]
+ }
+}
+
diff --git a/tests/dcaegen2/prh-testcases/assets/re-registration/expected-pnf-update-event.json b/tests/dcaegen2/prh-testcases/assets/re-registration/expected-pnf-update-event.json
new file mode 100644
index 00000000..5c77e125
--- /dev/null
+++ b/tests/dcaegen2/prh-testcases/assets/re-registration/expected-pnf-update-event.json
@@ -0,0 +1,8 @@
+[
+ {
+ "additionalFields": {
+ "attachment-point": "bbs-link"
+ },
+ "correlationId": "NOK6061ZW9"
+ }
+] \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/assets/re-registration/ves-event.json b/tests/dcaegen2/prh-testcases/assets/re-registration/ves-event.json
new file mode 100644
index 00000000..5de986c5
--- /dev/null
+++ b/tests/dcaegen2/prh-testcases/assets/re-registration/ves-event.json
@@ -0,0 +1,40 @@
+{
+ "event": {
+ "commonEventHeader": {
+ "startEpochMicrosec": 1540212137393,
+ "sourceId": "val13",
+ "eventId": "registration_40212137",
+ "nfcNamingCode": "oam",
+ "internalHeaderFields": {
+ "collectorTimeStamp": "Mon, 10 22 2018 12:42:18 UTC"
+ },
+ "eventType": "pnfRegistration",
+ "priority": "Normal",
+ "version": "4.0.1",
+ "reportingEntityName": "NOK6061ZW9",
+ "sequence": 0,
+ "domain": "pnfRegistration",
+ "lastEpochMicrosec": 1540212137393,
+ "eventName": "pnfRegistration_Nokia_5gDu",
+ "vesEventListenerVersion": "7.0.1",
+ "sourceName": "NOK6061ZW9",
+ "nfNamingCode": "gNB"
+ },
+ "pnfRegistrationFields": {
+ "unitType": "val8",
+ "serialNumber": "6061ZW9",
+ "pnfRegistrationFieldsVersion": "2.0",
+ "manufactureDate": "1540212137393",
+ "modelNumber": "val6",
+ "lastServiceDate": "1540212137393",
+ "unitFamily": "BBU",
+ "vendorName": "Nokia",
+ "oamV4IpAddress": "val3",
+ "oamV6IpAddress": "val4",
+ "softwareVersion": "val7",
+ "additionalFields": {
+ "attachment-point": "bbs-link"
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/assets/ves-event-missing-field/invalid-ves-event.json b/tests/dcaegen2/prh-testcases/assets/ves-event-missing-field/invalid-ves-event.json
index 2bdc0570..dd135f4d 100644
--- a/tests/dcaegen2/prh-testcases/assets/ves-event-missing-field/invalid-ves-event.json
+++ b/tests/dcaegen2/prh-testcases/assets/ves-event-missing-field/invalid-ves-event.json
@@ -1,18 +1,16 @@
-[
- {
- "event": {
- "commonEventHeader": {
- "sourceName": ""
- },
- "pnfRegistrationFields": {
- "oamV4IpAddress": "10.18.123.236",
- "oamV6IpAddress": "2001:0db8:85a3:0000:0000:8a2a:0370:7334",
- "serialNumber": "",
- "vendorName": "",
- "modelNumber": "",
- "unitType": "",
- "additionalFields": {}
- }
+{
+ "event": {
+ "commonEventHeader": {
+ "sourceName": ""
+ },
+ "pnfRegistrationFields": {
+ "oamV4IpAddress": "10.18.123.236",
+ "oamV6IpAddress": "2001:0db8:85a3:0000:0000:8a2a:0370:7334",
+ "serialNumber": "",
+ "vendorName": "",
+ "modelNumber": "",
+ "unitType": "",
+ "additionalFields": {}
}
}
-] \ No newline at end of file
+} \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/assets/ves-event-with-attachment-point/expected-logical-link.json b/tests/dcaegen2/prh-testcases/assets/ves-event-with-attachment-point/expected-logical-link.json
index 95c5570a..9b4c7e2c 100644
--- a/tests/dcaegen2/prh-testcases/assets/ves-event-with-attachment-point/expected-logical-link.json
+++ b/tests/dcaegen2/prh-testcases/assets/ves-event-with-attachment-point/expected-logical-link.json
@@ -1,11 +1,13 @@
{
"link-name": "bbs-link",
"link-type": "attachment-point",
- "relationship-list": [
+ "relationship-list":
{
- "relationship": {
- "related-link": "/network/pnfs/pnf/NOK6061ZW9"
- }
+ "relationship": [
+ {
+ "related-link": "/network/pnfs/pnf/NOK6061ZW9",
+ "relationship-data": []
+ }
+ ]
}
- ]
}
diff --git a/tests/dcaegen2/prh-testcases/assets/ves-event-with-attachment-point/ves-event.json b/tests/dcaegen2/prh-testcases/assets/ves-event-with-attachment-point/ves-event.json
index 84e52233..5de986c5 100644
--- a/tests/dcaegen2/prh-testcases/assets/ves-event-with-attachment-point/ves-event.json
+++ b/tests/dcaegen2/prh-testcases/assets/ves-event-with-attachment-point/ves-event.json
@@ -1,42 +1,40 @@
-[
- {
- "event": {
- "commonEventHeader": {
- "startEpochMicrosec": 1540212137393,
- "sourceId": "val13",
- "eventId": "registration_40212137",
- "nfcNamingCode": "oam",
- "internalHeaderFields": {
- "collectorTimeStamp": "Mon, 10 22 2018 12:42:18 UTC"
- },
- "eventType": "pnfRegistration",
- "priority": "Normal",
- "version": "4.0.1",
- "reportingEntityName": "NOK6061ZW9",
- "sequence": 0,
- "domain": "pnfRegistration",
- "lastEpochMicrosec": 1540212137393,
- "eventName": "pnfRegistration_Nokia_5gDu",
- "vesEventListenerVersion": "7.0.1",
- "sourceName": "NOK6061ZW9",
- "nfNamingCode": "gNB"
+{
+ "event": {
+ "commonEventHeader": {
+ "startEpochMicrosec": 1540212137393,
+ "sourceId": "val13",
+ "eventId": "registration_40212137",
+ "nfcNamingCode": "oam",
+ "internalHeaderFields": {
+ "collectorTimeStamp": "Mon, 10 22 2018 12:42:18 UTC"
},
- "pnfRegistrationFields": {
- "unitType": "val8",
- "serialNumber": "6061ZW9",
- "pnfRegistrationFieldsVersion": "2.0",
- "manufactureDate": "1540212137393",
- "modelNumber": "val6",
- "lastServiceDate": "1540212137393",
- "unitFamily": "BBU",
- "vendorName": "Nokia",
- "oamV4IpAddress": "val3",
- "oamV6IpAddress": "val4",
- "softwareVersion": "val7",
- "additionalFields": {
- "attachment-point": "bbs-link"
- }
+ "eventType": "pnfRegistration",
+ "priority": "Normal",
+ "version": "4.0.1",
+ "reportingEntityName": "NOK6061ZW9",
+ "sequence": 0,
+ "domain": "pnfRegistration",
+ "lastEpochMicrosec": 1540212137393,
+ "eventName": "pnfRegistration_Nokia_5gDu",
+ "vesEventListenerVersion": "7.0.1",
+ "sourceName": "NOK6061ZW9",
+ "nfNamingCode": "gNB"
+ },
+ "pnfRegistrationFields": {
+ "unitType": "val8",
+ "serialNumber": "6061ZW9",
+ "pnfRegistrationFieldsVersion": "2.0",
+ "manufactureDate": "1540212137393",
+ "modelNumber": "val6",
+ "lastServiceDate": "1540212137393",
+ "unitFamily": "BBU",
+ "vendorName": "Nokia",
+ "oamV4IpAddress": "val3",
+ "oamV6IpAddress": "val4",
+ "softwareVersion": "val7",
+ "additionalFields": {
+ "attachment-point": "bbs-link"
}
}
}
-]
+} \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/assets/ves-event-with-empty-additional-fields/ves-event.json b/tests/dcaegen2/prh-testcases/assets/ves-event-with-empty-additional-fields/ves-event.json
index b7e5af5e..ba91f286 100644
--- a/tests/dcaegen2/prh-testcases/assets/ves-event-with-empty-additional-fields/ves-event.json
+++ b/tests/dcaegen2/prh-testcases/assets/ves-event-with-empty-additional-fields/ves-event.json
@@ -1,41 +1,39 @@
-[
- {
- "event": {
- "commonEventHeader": {
- "startEpochMicrosec": 1540212137393,
- "sourceId": "val13",
- "eventId": "registration_40212137",
- "nfcNamingCode": "oam",
- "internalHeaderFields": {
- "collectorTimeStamp": "Mon, 10 22 2018 12:42:18 UTC"
- },
- "eventType": "pnfRegistration",
- "priority": "Normal",
- "version": "4.0.1",
- "reportingEntityName": "NOK6061ZW8",
- "sequence": 0,
- "domain": "pnfRegistration",
- "lastEpochMicrosec": 1540212137393,
- "eventName": "pnfRegistration_Nokia_5gDu",
- "vesEventListenerVersion": "7.0.1",
- "sourceName": "NOK6061ZW8",
- "nfNamingCode": "gNB"
+{
+ "event": {
+ "commonEventHeader": {
+ "startEpochMicrosec": 1540212137393,
+ "sourceId": "val13",
+ "eventId": "registration_40212137",
+ "nfcNamingCode": "oam",
+ "internalHeaderFields": {
+ "collectorTimeStamp": "Mon, 10 22 2018 12:42:18 UTC"
},
- "pnfRegistrationFields": {
- "unitType": "val8",
- "serialNumber": "6061ZW9",
- "pnfRegistrationFieldsVersion": "2.0",
- "manufactureDate": "1540212137393",
- "modelNumber": "val6",
- "lastServiceDate": "1540212137393",
- "unitFamily": "BBU",
- "vendorName": "Nokia",
- "oamV4IpAddress": "val3",
- "oamV6IpAddress": "val4",
- "softwareVersion": "val7",
- "additionalFields": {
- }
+ "eventType": "pnfRegistration",
+ "priority": "Normal",
+ "version": "4.0.1",
+ "reportingEntityName": "NOK6061ZW8",
+ "sequence": 0,
+ "domain": "pnfRegistration",
+ "lastEpochMicrosec": 1540212137393,
+ "eventName": "pnfRegistration_Nokia_5gDu",
+ "vesEventListenerVersion": "7.0.1",
+ "sourceName": "NOK6061ZW8",
+ "nfNamingCode": "gNB"
+ },
+ "pnfRegistrationFields": {
+ "unitType": "val8",
+ "serialNumber": "6061ZW9",
+ "pnfRegistrationFieldsVersion": "2.0",
+ "manufactureDate": "1540212137393",
+ "modelNumber": "val6",
+ "lastServiceDate": "1540212137393",
+ "unitFamily": "BBU",
+ "vendorName": "Nokia",
+ "oamV4IpAddress": "val3",
+ "oamV6IpAddress": "val4",
+ "softwareVersion": "val7",
+ "additionalFields": {
}
}
}
-] \ No newline at end of file
+} \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/assets/ves-event-with-empty-attachment-point/ves-event.json b/tests/dcaegen2/prh-testcases/assets/ves-event-with-empty-attachment-point/ves-event.json
index fda6ef10..b56341f3 100644
--- a/tests/dcaegen2/prh-testcases/assets/ves-event-with-empty-attachment-point/ves-event.json
+++ b/tests/dcaegen2/prh-testcases/assets/ves-event-with-empty-attachment-point/ves-event.json
@@ -1,42 +1,40 @@
-[
- {
- "event": {
- "commonEventHeader": {
- "startEpochMicrosec": 1540212137393,
- "sourceId": "val13",
- "eventId": "registration_40212137",
- "nfcNamingCode": "oam",
- "internalHeaderFields": {
- "collectorTimeStamp": "Mon, 10 22 2018 12:42:18 UTC"
- },
- "eventType": "pnfRegistration",
- "priority": "Normal",
- "version": "4.0.1",
- "reportingEntityName": "NOK6061ZW8",
- "sequence": 0,
- "domain": "pnfRegistration",
- "lastEpochMicrosec": 1540212137393,
- "eventName": "pnfRegistration_Nokia_5gDu",
- "vesEventListenerVersion": "7.0.1",
- "sourceName": "NOK6061ZW8",
- "nfNamingCode": "gNB"
+{
+ "event": {
+ "commonEventHeader": {
+ "startEpochMicrosec": 1540212137393,
+ "sourceId": "val13",
+ "eventId": "registration_40212137",
+ "nfcNamingCode": "oam",
+ "internalHeaderFields": {
+ "collectorTimeStamp": "Mon, 10 22 2018 12:42:18 UTC"
},
- "pnfRegistrationFields": {
- "unitType": "val8",
- "serialNumber": "6061ZW9",
- "pnfRegistrationFieldsVersion": "2.0",
- "manufactureDate": "1540212137393",
- "modelNumber": "val6",
- "lastServiceDate": "1540212137393",
- "unitFamily": "BBU",
- "vendorName": "Nokia",
- "oamV4IpAddress": "val3",
- "oamV6IpAddress": "val4",
- "softwareVersion": "val7",
- "additionalFields": {
- "attachment-point": ""
- }
+ "eventType": "pnfRegistration",
+ "priority": "Normal",
+ "version": "4.0.1",
+ "reportingEntityName": "NOK6061ZW8",
+ "sequence": 0,
+ "domain": "pnfRegistration",
+ "lastEpochMicrosec": 1540212137393,
+ "eventName": "pnfRegistration_Nokia_5gDu",
+ "vesEventListenerVersion": "7.0.1",
+ "sourceName": "NOK6061ZW8",
+ "nfNamingCode": "gNB"
+ },
+ "pnfRegistrationFields": {
+ "unitType": "val8",
+ "serialNumber": "6061ZW9",
+ "pnfRegistrationFieldsVersion": "2.0",
+ "manufactureDate": "1540212137393",
+ "modelNumber": "val6",
+ "lastServiceDate": "1540212137393",
+ "unitFamily": "BBU",
+ "vendorName": "Nokia",
+ "oamV4IpAddress": "val3",
+ "oamV6IpAddress": "val4",
+ "softwareVersion": "val7",
+ "additionalFields": {
+ "attachment-point": ""
}
}
}
-] \ No newline at end of file
+} \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/assets/ves-event-without-additional-fields/ves-event.json b/tests/dcaegen2/prh-testcases/assets/ves-event-without-additional-fields/ves-event.json
index 10ce41c5..3a768df2 100644
--- a/tests/dcaegen2/prh-testcases/assets/ves-event-without-additional-fields/ves-event.json
+++ b/tests/dcaegen2/prh-testcases/assets/ves-event-without-additional-fields/ves-event.json
@@ -1,39 +1,37 @@
-[
- {
- "event": {
- "commonEventHeader": {
- "startEpochMicrosec": 1540212137393,
- "sourceId": "val13",
- "eventId": "registration_40212137",
- "nfcNamingCode": "oam",
- "internalHeaderFields": {
- "collectorTimeStamp": "Mon, 10 22 2018 12:42:18 UTC"
- },
- "eventType": "pnfRegistration",
- "priority": "Normal",
- "version": "4.0.1",
- "reportingEntityName": "NOK6061ZW8",
- "sequence": 0,
- "domain": "pnfRegistration",
- "lastEpochMicrosec": 1540212137393,
- "eventName": "pnfRegistration_Nokia_5gDu",
- "vesEventListenerVersion": "7.0.1",
- "sourceName": "NOK6061ZW8",
- "nfNamingCode": "gNB"
+{
+ "event": {
+ "commonEventHeader": {
+ "startEpochMicrosec": 1540212137393,
+ "sourceId": "val13",
+ "eventId": "registration_40212137",
+ "nfcNamingCode": "oam",
+ "internalHeaderFields": {
+ "collectorTimeStamp": "Mon, 10 22 2018 12:42:18 UTC"
},
- "pnfRegistrationFields": {
- "unitType": "val8",
- "serialNumber": "6061ZW9",
- "pnfRegistrationFieldsVersion": "2.0",
- "manufactureDate": "1540212137393",
- "modelNumber": "val6",
- "lastServiceDate": "1540212137393",
- "unitFamily": "BBU",
- "vendorName": "Nokia",
- "oamV4IpAddress": "val3",
- "oamV6IpAddress": "val4",
- "softwareVersion": "val7"
- }
+ "eventType": "pnfRegistration",
+ "priority": "Normal",
+ "version": "4.0.1",
+ "reportingEntityName": "NOK6061ZW8",
+ "sequence": 0,
+ "domain": "pnfRegistration",
+ "lastEpochMicrosec": 1540212137393,
+ "eventName": "pnfRegistration_Nokia_5gDu",
+ "vesEventListenerVersion": "7.0.1",
+ "sourceName": "NOK6061ZW8",
+ "nfNamingCode": "gNB"
+ },
+ "pnfRegistrationFields": {
+ "unitType": "val8",
+ "serialNumber": "6061ZW9",
+ "pnfRegistrationFieldsVersion": "2.0",
+ "manufactureDate": "1540212137393",
+ "modelNumber": "val6",
+ "lastServiceDate": "1540212137393",
+ "unitFamily": "BBU",
+ "vendorName": "Nokia",
+ "oamV4IpAddress": "val3",
+ "oamV6IpAddress": "val4",
+ "softwareVersion": "val7"
}
}
-] \ No newline at end of file
+} \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/prh_config_tests.robot b/tests/dcaegen2/prh-testcases/prh_config_tests.robot
new file mode 100644
index 00000000..144504d1
--- /dev/null
+++ b/tests/dcaegen2/prh-testcases/prh_config_tests.robot
@@ -0,0 +1,33 @@
+*** Settings ***
+Documentation Tests related to updating PRH app config based on CBS config
+Suite Setup Run keywords Create sessions
+Resource resources/prh_sessions.robot
+Resource resources/prh_config_library.robot
+Resource resources/prh_library.robot
+Test Timeout 15 seconds
+
+*** Test Cases ***
+CBS configuration forced refresh
+ [Documentation] It should be possible to force refresh PRH configuration from CBS
+ [Tags] PRH coniguration
+ ${some_random_value}= Generate random value
+ Put key-value to consul foo_${some_random_value} bar_${some_random_value}
+ Force PRH config refresh
+ Check key-value in PRH app environment foo_${some_random_value} bar_${some_random_value}
+
+CBS configuration scheduled refresh
+ [Documentation] PRH should pull for CBS configuration updates according to schedule
+ [Tags] PRH coniguration
+ Set scheduled CBS updates interval 1s
+ ${some_random_value}= Generate random value
+ Put key-value to consul spam_${some_random_value} ham_${some_random_value}
+ wait until keyword succeeds 20x 500ms
+ ... Check key-value in PRH app environment spam_${some_random_value} ham_${some_random_value}
+ [Teardown] Set scheduled CBS updates interval 0
+
+PRH log level change based on CBS config
+ [Documentation] It should be possible to change logging levels in PRH based on entries in CBS
+ [Tags] PRH coniguration logging
+ Set logging level in CBS org.onap.dcaegen2.services.prh.foo WARN
+ Force PRH config refresh
+ Verify logging level org.onap.dcaegen2.services.prh.foo WARN \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/prh_tests.robot b/tests/dcaegen2/prh-testcases/prh_tests.robot
index acaf78fd..4e387b91 100644
--- a/tests/dcaegen2/prh-testcases/prh_tests.robot
+++ b/tests/dcaegen2/prh-testcases/prh_tests.robot
@@ -6,18 +6,14 @@ Test Teardown Reset Simulators
Test Timeout 2 minutes
Library resources/PrhLibrary.py
+Resource resources/prh_sessions.robot
Resource resources/prh_library.robot
-Resource ../../common.robot
*** Variables ***
${TEST_CASES_DIR} %{WORKSPACE}/tests/dcaegen2/prh-testcases/assets
-${DMAAP_SIMULATOR_SETUP_URL} http://${DMAAP_SIMULATOR_SETUP}
-${AAI_SIMULATOR_SETUP_URL} http://${AAI_SIMULATOR_SETUP}
-${CONSUL_SETUP_URL} http://${CONSUL_SETUP}
-
*** Test Cases ***
-Simple BBS case event
+BBS case event - attachment point
[Documentation] PRH get from DMaaP valid event with valid attachment point
[Tags] PRH Valid event Attachment point
[Template] Verify PNF ready sent and logical link created
@@ -52,3 +48,13 @@ Should not sent PNF ready when AAI is not responding
[Tags] PRH AAI not responding
Verify AAI not responding is logged ${TEST_CASES_DIR}/aai-not-responding
+BBS case event - Re-registration
+ [Documentation] After regitered PNF, PRH reads another one PRH event with registration event
+ [Tags] PRH Valid event Re registraiton
+ [Template] Verify PNF re registration
+ ${TEST_CASES_DIR}/re-registration
+
+PRH logging level change
+ [Documentation] ad-hoc PRH logging level change using rest endpoint
+ [Tags] PRH logging level
+ Verify change logging level
diff --git a/tests/dcaegen2/prh-testcases/resources/.env b/tests/dcaegen2/prh-testcases/resources/.env
index a558a2e8..b1de55a9 100644
--- a/tests/dcaegen2/prh-testcases/resources/.env
+++ b/tests/dcaegen2/prh-testcases/resources/.env
@@ -1,5 +1,4 @@
-LOG_LEVEL=INFO
-PRH_LOG_LEVEL=TRACE
HOSTNAME=dcae-prh
CONSUL_HOST=consul
CONFIG_BINDING_SERVICE=cbs
+CONFIG_BINDING_SERVICE_SERVICE_PORT=10000 \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/resources/PrhLibrary.py b/tests/dcaegen2/prh-testcases/resources/PrhLibrary.py
index b9942611..b3f5f8d9 100644
--- a/tests/dcaegen2/prh-testcases/resources/PrhLibrary.py
+++ b/tests/dcaegen2/prh-testcases/resources/PrhLibrary.py
@@ -46,8 +46,7 @@ class PrhLibrary(object):
@staticmethod
def create_invalid_notification(json_file):
output = {}
- input = json.loads(json_file)[0]
-
+ input = json.loads(json_file)
output["correlationId"] = PrhLibrary.__extract_correlation_id_value(input)
output["oamV4IpAddress"] = PrhLibrary.__extract_value_from_pnfRegistrationFields(input, "oamV4IpAddress")
output["oamV6IpAddress"] = PrhLibrary.__extract_value_from_pnfRegistrationFields(input, "oamV6IpAddress")
diff --git a/tests/dcaegen2/prh-testcases/resources/docker-compose.yml b/tests/dcaegen2/prh-testcases/resources/docker-compose.yml
index aba658b0..ca94dfb2 100644
--- a/tests/dcaegen2/prh-testcases/resources/docker-compose.yml
+++ b/tests/dcaegen2/prh-testcases/resources/docker-compose.yml
@@ -8,11 +8,10 @@ services:
volumes:
- ./simulator/certs:/tmp/certs
environment:
- - LOG_LEVEL
- - PRH_LOG_LEVEL
- - HOSTNAME
- - CONSUL_HOST
+ - HOSTNAME=dcae-prh
+ - CONSUL_HOST # not in use, but still required by SDK - should be removed later on
- CONFIG_BINDING_SERVICE
+ - CONFIG_BINDING_SERVICE_SERVICE_PORT
container_name: prh
depends_on:
cbs:
@@ -55,6 +54,10 @@ services:
image: consul:1.0.6
restart: on-failure
command: ["kv", "put", "-http-addr=http://consul:8500", "dcae-prh", '{
+ "cbs.updates-interval": 0,
+ "logging.level.org.onap.dcaegen2.services.prh": "debug",
+ "logging.level.org.onap.dcaegen2.services.sdk": "debug",
+ "logging.level.org.onap.dcaegen2.services.prh.controllers.AppInfoController": "off",
"dmaap.dmaapConsumerConfiguration.dmaapUserName":"admin",
"dmaap.dmaapConsumerConfiguration.dmaapUserPassword":"admin",
"dmaap.dmaapConsumerConfiguration.dmaapContentType": "application/json",
diff --git a/tests/dcaegen2/prh-testcases/resources/prh_config_library.robot b/tests/dcaegen2/prh-testcases/resources/prh_config_library.robot
new file mode 100644
index 00000000..26a62704
--- /dev/null
+++ b/tests/dcaegen2/prh-testcases/resources/prh_config_library.robot
@@ -0,0 +1,43 @@
+*** Settings ***
+Documentation Keywords related to checking and updating PRH app config based on CBS config
+Library RequestsLibrary
+Library Collections
+
+*** Keywords ***
+
+Put key-value to consul
+ [Arguments] ${key} ${value}
+ ${prh_config}= Get PRH config from consul
+ set to dictionary ${prh_config} ${key} ${value}
+ put request consul_session /v1/kv/dcae-prh json=${prh_config}
+ Get PRH config from consul prh config in consul after update
+
+Get PRH config from consul
+ [Arguments] ${logMessage}=prh config in consul
+ ${phr_config_response}= get request consul_session /v1/kv/dcae-prh?raw
+ log ${logMessage}: ${phr_config_response.content}
+ [Return] ${phr_config_response.json()}
+
+Force PRH config refresh
+ ${refresh_response}= post request prh_session /actuator/refresh
+ should be equal as integers ${refresh_response.status_code} 200
+
+Check key-value in PRH app environment
+ [Arguments] ${key} ${expected_value}
+ ${env_response}= get request prh_session /actuator/env/${key}
+ should be equal as integers ${env_response.status_code} 200
+ log ${env_response.content}
+ should be equal ${env_response.json()["property"]["value"]} ${expected_value}
+
+Set scheduled CBS updates interval
+ [Arguments] ${cbs_updates_interval}
+ Put key-value to consul cbs.updates-interval ${cbs_updates_interval}
+ Force PRH config refresh
+
+Set logging level in CBS
+ [Arguments] ${logger} ${level}
+ Put key-value to consul logging.level.${logger} ${level}
+
+Generate random value
+ ${some_random_value} evaluate random.randint(sys.maxint/10, sys.maxint) modules=random,sys
+ [Return] ${some_random_value} \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/resources/prh_library.robot b/tests/dcaegen2/prh-testcases/resources/prh_library.robot
index 482a6ee5..3ed377c7 100644
--- a/tests/dcaegen2/prh-testcases/resources/prh_library.robot
+++ b/tests/dcaegen2/prh-testcases/resources/prh_library.robot
@@ -13,18 +13,19 @@ Verify PNF ready sent
Add PNF entry in AAI ${pnf_entry}
Set VES event in DMaaP ${ves_event}
Wait Until Keyword Succeeds 10x 3000ms Check CBS ready
- Wait Until Keyword Succeeds 10x 3000ms Check recorded PNF_READY notification ${expected_pnf_ready_event}
+ Wait Until Keyword Succeeds 10x 3000ms Check created PNF_READY notification ${expected_pnf_ready_event}
Verify PNF ready sent and logical link created
[Arguments] ${test_case_directory}
${expected_logical_link}= Get Data From File ${test_case_directory}/expected-logical-link.json
Verify PNF ready sent ${test_case_directory}
- Check recorded Logical Link ${expected_logical_link}
+ Check created Logical Link ${expected_logical_link}
Verify event with missing required field is logged
[Arguments] ${test_case_directory}
${invalid_ves_event}= Get Data From File ${test_case_directory}/invalid-ves-event.json
Set VES event in DMaaP ${invalid_ves_event}
+ Log Invalid ves event: ${invalid_ves_event}
${notification}= Create invalid notification ${invalid_ves_event}
${error_msg}= Set Variable Incorrect json, consumerDmaapModel can not be created:
Wait Until Keyword Succeeds 10x 3000ms Check PRH json log ${error_msg} ${notification}
@@ -34,7 +35,7 @@ Verify incorrect JSON event is logged
[Arguments] ${test_case_directory}
${invalid_ves_event}= Get Data From File ${test_case_directory}/invalid-ves-event.json
Set VES event in DMaaP ${invalid_ves_event}
- Check PRH log |com.google.gson.JsonSyntaxException: Expected a com.google.gson.JsonArray
+ Check PRH log |WARN |Incorrect json, consumerDmaapModel can not be created:
Verify missing AAI record is logged
[Timeout] 100s
@@ -54,21 +55,42 @@ Verify AAI not responding is logged
Check PRH log connection timed out: aai Host is unreachable: aai
Ensure Container Is Running aai_simulator
+Verify PNF re registration
+ [Timeout] 500s
+ [Arguments] ${test_case_directory}
+ ${aai_entry}= Get Data From File ${test_case_directory}/aai-entry.json
+ Log PNF Re-registration: AAI entry for AAI Simulator ${aai_entry}
+ Add PNF entry in AAI ${aai_entry}
+ ${service_instance}= Get Data From File ${test_case_directory}/aai-entry-service-instance.json
+ Add service instance entry in AAI ${service_instance}
+
+ ${ves_event}= Get Data From File ${test_case_directory}/ves-event.json
+ Set VES event in DMaaP ${ves_event}
+ ${expected_pnf_update_event}= Get Data From File ${test_case_directory}/expected-pnf-update-event.json
+ Wait Until Keyword Succeeds 10x 3000ms Check created PNF_UPDATE notification ${expected_pnf_update_event}
+
Check CBS ready
- ${resp}= Get Request ${consul_setup_session} /v1/catalog/services
+ ${resp}= Get Request ${consul_session} /v1/catalog/services
Should Be Equal As Strings ${resp.status_code} 200
Log Service Catalog response: ${resp.content}
Dictionary Should Contain Key ${resp.json()} cbs |Consul service catalog should contain CBS entry
-Check recorded PNF_READY notification
+Check created PNF_READY notification
[Arguments] ${expected_event_pnf_ready_in_dpaap}
- ${resp}= Get Request ${dmaap_setup_session} /setup/pnf_ready headers=${suite_headers}
+ ${resp}= Get Request ${dmaap_session} /verify/pnf_ready headers=${suite_headers}
Should Be Equal As Strings ${resp.status_code} 200
Should Be Equal As JSON ${resp.content} ${expected_event_pnf_ready_in_dpaap}
-Check recorded Logical Link
+Check created PNF_UPDATE notification
+ [Arguments] ${expected_event_pnf_update_in_dpaap}
+ ${resp}= Get Request ${dmaap_session} /verify/pnf_update headers=${suite_headers}
+ Log Response from DMaaP: ${resp.content}
+ Should Be Equal As Strings ${resp.status_code} 200
+ #Should Be Equal As JSON ${resp.content} ${expected_event_pnf_ready_in_dpaap}
+
+Check created Logical Link
[Arguments] ${expected_logical_link_in_aai}
- ${resp}= Get Request ${aai_setup_session} /setup/created_logical_link headers=${suite_headers}
+ ${resp}= Get Request ${aai_session} /verify/created_logical_link headers=${suite_headers}
Should Be Equal As Strings ${resp.status_code} 200
Should Be Equal As JSON ${resp.content} ${expected_logical_link_in_aai}
@@ -92,12 +114,19 @@ Add PNF entry in AAI
[Arguments] ${pnf_entry}
${headers}= Create Dictionary Accept=application/json Content-Type=application/json
Log AAI url ${AAI_SIMULATOR_SETUP_URL}
- ${resp}= Put Request ${aai_setup_session} /setup/add_pnf_entry headers=${suite_headers} data=${pnf_entry}
+ ${resp}= Put Request ${aai_session} /setup/add_pnf_entry headers=${suite_headers} data=${pnf_entry}
+ Should Be Equal As Strings ${resp.status_code} 200
+
+Add service instance entry in AAI
+ [Arguments] ${aai_service_instance}
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json
+ Log AAI url ${AAI_SIMULATOR_SETUP_URL}
+ ${resp}= Put Request ${aai_session} /setup/add_service_instace headers=${suite_headers} data=${aai_service_instance}
Should Be Equal As Strings ${resp.status_code} 200
Set VES event in DMaaP
[Arguments] ${ves_event}
- ${resp}= Put Request ${dmaap_setup_session} /setup/ves_event headers=${suite_headers} data=${ves_event}
+ ${resp}= Put Request ${dmaap_session} /setup/ves_event headers=${suite_headers} data=${ves_event}
Should Be Equal As Strings ${resp.status_code} 200
Should Be Equal As JSON
@@ -108,26 +137,39 @@ Should Be Equal As JSON
${actual_json}= Evaluate json.loads("""${actual}""") json
Should Be Equal ${actual_json} ${expected_json}
-Create sessions
- Create Session dmaap_setup_session ${DMAAP_SIMULATOR_SETUP_URL}
- Set Suite Variable ${dmaap_setup_session} dmaap_setup_session
- Create Session aai_setup_session ${AAI_SIMULATOR_SETUP_URL}
- Set Suite Variable ${aai_setup_session} aai_setup_session
- Create Session consul_setup_session ${CONSUL_SETUP_URL}
- Set Suite Variable ${consul_setup_session} consul_setup_session
-
Reset Simulators
Reset AAI simulator
Reset DMaaP simulator
Reset AAI simulator
- ${resp}= Post Request ${aai_setup_session} /reset
+ ${resp}= Post Request ${aai_session} /reset
Should Be Equal As Strings ${resp.status_code} 200
Reset DMaaP simulator
- ${resp}= Post Request ${dmaap_setup_session} /reset
+ ${resp}= Post Request ${dmaap_session} /reset
Should Be Equal As Strings ${resp.status_code} 200
-Create headers
- ${headers}= Create Dictionary Accept=application/json Content-Type=application/json
- Set Suite Variable ${suite_headers} ${headers}
+
+Verify change logging level
+ ${logger}= Set Variable org.onap.dcaegen2.services.prh.controllers.AppInfoController
+ Change logging level ${logger} TRACE
+ Verify logging level ${logger} TRACE
+ Verify logs with heartbeat
+ [Teardown] Change logging level ${logger} INFO
+
+Change logging level
+ [Arguments] ${logger} ${log_level}
+ ${request_body}= Create Dictionary configuredLevel=${log_level}
+ ${resp}= Post Request prh_session /actuator/loggers/${logger} json=${request_body}
+ Should Be Equal As Integers ${resp.status_code} 204
+
+Verify logging level
+ [Arguments] ${logger} ${expected_log_level}
+ ${resp}= Get Request prh_session /actuator/loggers/${logger}
+ Should Be Equal As Integers ${resp.status_code} 200
+ Log ${resp.content}
+ Should Be Equal As Strings ${resp.json()["configuredLevel"]} ${expected_log_level} ignore_case=true
+
+Verify logs with heartbeat
+ Get Request prh_session /heartbeat
+ Check PRH log Heartbeat request received \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/resources/prh_sessions.robot b/tests/dcaegen2/prh-testcases/resources/prh_sessions.robot
new file mode 100644
index 00000000..2fadbbae
--- /dev/null
+++ b/tests/dcaegen2/prh-testcases/resources/prh_sessions.robot
@@ -0,0 +1,25 @@
+*** Settings ***
+Library RequestsLibrary
+Library Collections
+
+*** Variables ***
+${DMAAP_SIMULATOR_SETUP_URL} http://${DMAAP_SIMULATOR_SETUP}
+${AAI_SIMULATOR_SETUP_URL} http://${AAI_SIMULATOR_SETUP}
+${CONSUL_SETUP_URL} http://${CONSUL_SETUP}
+${PRH_SETUP_URL} http://${PRH_SETUP}
+
+*** Keywords ***
+Create sessions
+ Create Session dmaap_session ${DMAAP_SIMULATOR_SETUP_URL}
+ Set Suite Variable ${dmaap_session} dmaap_session
+ Create Session aai_session ${AAI_SIMULATOR_SETUP_URL}
+ Set Suite Variable ${aai_session} aai_session
+ Create Session consul_session ${CONSUL_SETUP_URL}
+ Set Suite Variable ${consul_session} consul_session
+ Create Session prh_session ${PRH_SETUP_URL}
+ Set Suite Variable ${prh_session} prh_session
+
+
+Create headers
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json
+ Set Suite Variable ${suite_headers} ${headers} \ No newline at end of file
diff --git a/tests/dcaegen2/prh-testcases/resources/simulator/AAI.py b/tests/dcaegen2/prh-testcases/resources/simulator/AAI.py
index ff368034..f6d3b1f6 100644
--- a/tests/dcaegen2/prh-testcases/resources/simulator/AAI.py
+++ b/tests/dcaegen2/prh-testcases/resources/simulator/AAI.py
@@ -22,6 +22,7 @@ AAI_RESOURCE_NOT_FOUND = b'{}'
pnf_entries = {}
patched_pnf = AAI_RESOURCE_NOT_FOUND
created_logical_link = AAI_RESOURCE_NOT_FOUND
+service_instance = AAI_RESOURCE_NOT_FOUND
class AAISetup(BaseHTTPRequestHandler):
@@ -30,7 +31,7 @@ class AAISetup(BaseHTTPRequestHandler):
if re.search('/setup/patched_pnf', self.path):
httpServerLib.set_response_200_ok(self, payload = patched_pnf)
logger.debug('AAISetup GET /setup/patched_pnf -> 200 OK')
- elif re.search('/setup/created_logical_link', self.path):
+ elif re.search('/verify/created_logical_link', self.path):
httpServerLib.set_response_200_ok(self, payload = created_logical_link)
logger.debug('AAISetup GET /setup/created_logical_link -> 200 OK')
else:
@@ -53,6 +54,13 @@ class AAISetup(BaseHTTPRequestHandler):
httpServerLib.set_response_200_ok(self)
logger.debug('AAISetup PUT /setup/add_pnf_entry [' + pnf_name + '] -> 200 OK')
+ elif re.search('/setup/add_service_instace', self.path):
+ service_instance_payload = httpServerLib.get_payload(self)
+ global service_instance
+ service_instance = json.loads(service_instance_payload)
+ httpServerLib.set_response_200_ok(self)
+ logger.debug('AAISetup PUT /setup/add_service_instace -> 200 OK')
+
elif re.search('/set_pnf', self.path):
pnf_name = httpServerLib.get_payload(self).decode()
pnf_entries[pnf_name] = AAI_RESOURCE_NOT_FOUND
@@ -70,9 +78,11 @@ class AAISetup(BaseHTTPRequestHandler):
global pnf_entries
global patched_pnf
global created_logical_link
+ global service_instance
pnf_entries = {}
patched_pnf = AAI_RESOURCE_NOT_FOUND
created_logical_link = AAI_RESOURCE_NOT_FOUND
+ service_instance = AAI_RESOURCE_NOT_FOUND
httpServerLib.set_response_200_ok(self)
logger.debug('AAISetup POST /reset -> 200 OK')
@@ -95,6 +105,9 @@ class AAIHandler(BaseHTTPRequestHandler):
else:
httpServerLib.set_response_404_not_found(self)
logger.info('AAIHandler GET /aai/v12/network/pnfs/pnf/' + pnf_name + ' -> 404 Not found, actual entries: ' + str(pnf_entries.keys()))
+ elif re.search('aai/v12/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFW/service-instances/service-instance/bbs_service', self.path):
+ httpServerLib.set_response_200_ok(self, payload = service_instance)
+ logger.debug('AAIHandler GET aai/v12/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFW/service-instances/service-instance/bbs_service -> 200 OK')
else:
httpServerLib.set_response_404_not_found(self)
logger.info('AAIHandler GET ' + self.path + ' -> 404 Not found')
@@ -142,7 +155,6 @@ class AAIHandler(BaseHTTPRequestHandler):
def _main_(handler_class=AAIHandler, protocol="HTTP/1.0"):
handler_class.protocol_version = protocol
- httpServerLib.start_http_endpoint(3333, AAIHandler)
httpServerLib.start_https_endpoint(3334, AAIHandler, keyfile="certs/aai.key", certfile="certs/aai.crt", ca_certs="certs/root.crt")
httpServerLib.start_http_endpoint(3335, AAISetup)
while 1:
diff --git a/tests/dcaegen2/prh-testcases/resources/simulator/DMaaP.py b/tests/dcaegen2/prh-testcases/resources/simulator/DMaaP.py
index ce9858d6..5ec601f6 100644
--- a/tests/dcaegen2/prh-testcases/resources/simulator/DMaaP.py
+++ b/tests/dcaegen2/prh-testcases/resources/simulator/DMaaP.py
@@ -2,6 +2,7 @@ import logging
import re
import sys
import time
+import json
from http.server import BaseHTTPRequestHandler
import httpServerLib
@@ -17,17 +18,22 @@ logger = logging.getLogger('DMaaP-simulator-logger')
DMAAP_EMPTY = b'[]'
-ves_event = DMAAP_EMPTY
-captured_prh_event = DMAAP_EMPTY
+event_ves = DMAAP_EMPTY
+event_pnf_ready = DMAAP_EMPTY
+event_pnf_update = DMAAP_EMPTY
class DmaapSetup(BaseHTTPRequestHandler):
def do_GET(self):
try:
- if re.search('/setup/pnf_ready', self.path):
- global captured_prh_event
- httpServerLib.set_response_200_ok(self, payload = captured_prh_event)
- logger.debug('DmaapSetup GET /setup/pnf_ready -> 200 OK')
+ if re.search('/verify/pnf_ready', self.path):
+ global event_pnf_ready
+ httpServerLib.set_response_200_ok(self, payload = event_pnf_ready)
+ logger.debug('DmaapSetup GET /verify/pnf_ready -> 200 OK')
+ elif re.search('/verify/pnf_update', self.path):
+ global event_pnf_update
+ httpServerLib.set_response_200_ok(self, payload = event_pnf_update)
+ logger.debug('DmaapSetup GET /verify/pnf_ready -> 200 OK')
else:
httpServerLib.set_response_404_not_found(self)
logger.info('DmaapSetup GET ' + self.path + ' -> 404 Not found')
@@ -38,10 +44,10 @@ class DmaapSetup(BaseHTTPRequestHandler):
def do_PUT(self):
try:
if re.search('/setup/ves_event', self.path):
- global ves_event
- ves_event = httpServerLib.get_payload(self)
+ global event_ves
+ event_ves = httpServerLib.get_payload(self)
httpServerLib.set_response_200_ok(self)
- logger.debug('DmaapSetup PUT /setup/ves_event -> 200 OK, content: ' + ves_event.decode("utf-8"))
+ logger.debug('DmaapSetup PUT /setup/ves_event -> 200 OK, content: ' + event_ves.decode("utf-8"))
else:
httpServerLib.set_response_404_not_found(self)
logger.info('DmaapSetup PUT ' + self.path + ' -> 404 Not found')
@@ -52,10 +58,12 @@ class DmaapSetup(BaseHTTPRequestHandler):
def do_POST(self):
try:
if re.search('/reset', self.path):
- global ves_event
- global captured_prh_event
- ves_event = DMAAP_EMPTY
- captured_prh_event = DMAAP_EMPTY
+ global event_ves
+ global event_pnf_ready
+ global event_pnf_update
+ event_ves = DMAAP_EMPTY
+ event_pnf_ready = DMAAP_EMPTY
+ event_pnf_update = DMAAP_EMPTY
httpServerLib.set_response_200_ok(self)
logger.debug('DmaapSetup POST /reset -> 200 OK')
else:
@@ -70,11 +78,17 @@ class DMaaPHandler(BaseHTTPRequestHandler):
def do_POST(self):
try:
if re.search('/events/unauthenticated.PNF_READY', self.path):
- global captured_prh_event
- captured_prh_event = httpServerLib.get_payload(self)
+ global event_pnf_ready
+ event_pnf_ready = httpServerLib.get_payload(self)
httpServerLib.set_response_200_ok(self)
logger.debug('DMaaPHandler POST /events/unauthenticated.PNF_READY -> 200, content: '
- + captured_prh_event.decode("utf-8"))
+ + event_pnf_ready.decode("utf-8"))
+ elif re.search('/events/unauthenticated.PNF_UPDATE', self.path):
+ global event_pnf_update
+ event_pnf_update = httpServerLib.get_payload(self)
+ httpServerLib.set_response_200_ok(self)
+ logger.debug('DMaaPHandler POST /events/unauthenticated.PNF_READY -> 200, content: '
+ + event_pnf_update.decode("utf-8"))
else:
httpServerLib.set_response_404_not_found(self)
logger.info('DMaaPHandler POST ' + self.path + ' -> 404 Not found')
@@ -85,12 +99,12 @@ class DMaaPHandler(BaseHTTPRequestHandler):
def do_GET(self):
try:
if re.search('/events/unauthenticated.VES_PNFREG_OUTPUT/OpenDCAE-c12/c12', self.path):
- global ves_event
- httpServerLib.set_response_200_ok(self, payload = ves_event)
+ global event_ves
+ httpServerLib.set_response_200_ok(self, payload=self.pack_event_json_as_quoted_string_into_array(event_ves))
logger.debug(
'DMaaPHandler GET /events/unauthenticated.VES_PNFREG_OUTPUT/OpenDcae-c12/c12 -> 200, content: '
- + ves_event.decode("utf-8"))
- ves_event = DMAAP_EMPTY
+ + event_ves.decode("utf-8"))
+ event_ves = DMAAP_EMPTY
logger.debug('DMaaPHandler GET /events/unauthenticated.VES_PNFREG_OUTPUT/OpenDcae-c12/c12 -> 200')
else:
httpServerLib.set_response_404_not_found(self)
@@ -99,9 +113,18 @@ class DMaaPHandler(BaseHTTPRequestHandler):
logger.error(e)
httpServerLib.set_response_500_server_error(self)
+ def pack_event_json_as_quoted_string_into_array(self, event):
+ if event == DMAAP_EMPTY:
+ return DMAAP_EMPTY
+ else:
+ decoded = event_ves.decode("utf-8")
+ packed = '[' + json.dumps(decoded) + ']'
+ logger.info("prepared response: " + packed)
+ return packed.encode()
+
+
def _main_(handler_class=DMaaPHandler, protocol="HTTP/1.0"):
handler_class.protocol_version = protocol
- httpServerLib.start_http_endpoint(2222, DMaaPHandler)
httpServerLib.start_https_endpoint(2223, DMaaPHandler, keyfile="certs/dmaap-mr.key", certfile="certs/dmaap-mr.crt", ca_certs="certs/root.crt")
httpServerLib.start_http_endpoint(2224, DmaapSetup)
while 1:
diff --git a/tests/integration/vCPE/test1.robot b/tests/integration/vCPE/test1.robot
index 1dd7c1bb..d07bf6e4 100644
--- a/tests/integration/vCPE/test1.robot
+++ b/tests/integration/vCPE/test1.robot
@@ -4,7 +4,7 @@ Suite Teardown Suite Teardown
Library OperatingSystem
Library RequestsLibrary
Library Process
-Library eteutils/UUID.py
+Library ONAPLibrary.Utilities
*** Variables ***
${GLOBAL_APPLICATION_ID} csit-vCPE
@@ -15,7 +15,7 @@ ${GLOBAL_MSO_PASSWORD} password1$
SO ServiceInstance health check
${auth}= Create List ${GLOBAL_MSO_USERNAME} ${GLOBAL_MSO_PASSWORD}
${session}= Create Session so http://${SO_IP}:8080
- ${uuid}= Generate UUID
+ ${uuid}= Generate UUID4
${headers}= Create Dictionary Accept=text/html Content-Type=text/html X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
${resp}= Get Request so /ecomp/mso/infra/globalhealthcheck headers=${headers}
&{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json
diff --git a/tests/portal/testsuites/portal_VID.robot b/tests/portal/testsuites/portal_VID.robot
index 473a0464..fdfa4e79 100644
--- a/tests/portal/testsuites/portal_VID.robot
+++ b/tests/portal/testsuites/portal_VID.robot
@@ -3,7 +3,7 @@ Documentation The main interface for interacting with Portal. It handles low
Library ExtendedSelenium2Library
Library RequestsClientCert
Library RequestsLibrary
-Library UUID
+Library ONAPLibrary.Utilities
Library DateTime
Resource ../global_properties.robot
Resource ../browser_setup.robot
@@ -50,7 +50,7 @@ Run Portal Get Request
[Documentation] Runs Portal Get request
[Arguments] ${data_path}
${session}= Create Session portal ${GLOBAL_PORTAL_URL}
- ${uuid}= Generate UUID
+ ${uuid}= Generate UUID4
${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
${resp}= Get Request portal ${data_path} headers=${headers}
Log Received response from portal ${resp.text}
diff --git a/tests/portal/testsuites/test1.robot b/tests/portal/testsuites/test1.robot
index 516fb0d4..d3196f83 100644
--- a/tests/portal/testsuites/test1.robot
+++ b/tests/portal/testsuites/test1.robot
@@ -4,7 +4,7 @@ Library ExtendedSelenium2Library
Library OperatingSystem
Library eteutils/RequestsClientCert.py
Library RequestsLibrary
-Library eteutils/UUID.py
+Library ONAPLibrary.Utilities
Library DateTime
Library Collections
Library eteutils/StringTemplater.py
@@ -259,7 +259,7 @@ Run Portal Get Request
[Documentation] Runs Portal Get request
[Arguments] ${data_path}
${session}= Create Session portal ${PORTAL_URL}
- ${uuid}= Generate UUID
+ ${uuid}= Generate UUID4
${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
${resp}= Get Request portal ${data_path} headers=${headers}
Log Received response from portal ${resp.text}
diff --git a/tests/sdc/dcaed/__init__.robot b/tests/sdc/dcaed/__init__.robot
new file mode 100644
index 00000000..fc9392d3
--- /dev/null
+++ b/tests/sdc/dcaed/__init__.robot
@@ -0,0 +1,2 @@
+*** Settings ***
+Documentation Sdc - dcaed
diff --git a/tests/sdc/dcaed/asdc_interface.robot b/tests/sdc/dcaed/asdc_interface.robot
new file mode 100644
index 00000000..88053e88
--- /dev/null
+++ b/tests/sdc/dcaed/asdc_interface.robot
@@ -0,0 +1,161 @@
+*** Settings ***
+Library Collections
+Library OperatingSystem
+Library RequestsLibrary
+Library ONAPLibrary.Utilities
+
+Resource common.robot
+
+***Variables ***
+${ASDC_CATALOG_SERVICES_PATH} /sdc2/rest/v1/catalog/services
+${ASDC_CATALOG_RESOURCES_PATH} /sdc2/rest/v1/catalog/resources
+${ASDC_CATALOG_LIFECYCLE_PATH} /lifecycleState
+${ASDC_CATALOG_SERVICE_RESOURCE_INSTANCE_PATH} /resourceInstance
+${ASDC_CATALOG_SERVICE_DISTRIBUTION_STATE_PATH} /distribution-state
+${ASDC_DISTRIBUTION_STATE_APPROVE_PATH} /approve
+
+${ASDC_CATALOG_RESOURCE_TEMPLATE} ${ASSETS_DIR}component_catalog_resource.template
+${ASDC_CATALOG_SERVICE_TEMPLATE} ${ASSETS_DIR}catalog_service.template
+${ASDC_ARTIFACT_UPLOAD_TEMPLATE} ${ASSETS_DIR}artifact_upload.template
+${ASDC_USER_REMARKS_TEMPLATE} ${ASSETS_DIR}user_remarks.template
+${DCAE_VFCMT_TEMPLATE} ${ASSETS_DIR}create_vfcmt.template
+${DCAE_COMPOSITION_TEMPLATE} ${ASSETS_DIR}dcae_composition.template
+${DCAE_MONITORING_CONFIGURATION_TEMPLATE} ${ASSETS_DIR}dcae_monitoring_configuration.template
+${ASDC_RESOURCE_INSTANCE_TEMPLATE} ${ASSETS_DIR}resource_instance.template
+
+${ASDC_BE_ENDPOINT} http://localhost:8080
+
+*** Keywords ***
+
+Create Catalog Resource Data
+ [Documentation] Creates and returns data for ASDC Catalog Resource
+ [Arguments] ${resource_name} ${vendor_name}
+ ${map}= Create Dictionary resource_name=${resource_name} vendor_name=${vendor_name}
+ ${data}= json_templater.Fill JSON Template File ${ASDC_CATALOG_RESOURCE_TEMPLATE} ${map}
+ [Return] ${data}
+
+# Based on testsuite/robot/resources/asdc_interface.robot's 'Post ASDC Resource Request' keyword
+Post ASDC Resource Request Unauthenticated
+ [Documentation] Makes unauthenticated Post request for ASDC Catalog resource and returns its unique id
+ [Arguments] ${data}
+ ${resp}= Run ASDC Post Request Unauthenticated ${ASDC_CATALOG_RESOURCES_PATH} ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 201
+ [Return] ${resp.json()['uniqueId']}
+
+# Based on testsuite/robot/resources/asdc_interface.robot's 'Run ASDC Post Request' keyword
+Run ASDC Post Request Unauthenticated
+ [Documentation] Runs an ASDC Post request without authentication and returns the HTTP response
+ [Arguments] ${data_path} ${data} ${user}=${ASDC_DESIGNER_USER_ID} ${MY_ASDC_BE_ENDPOINT}=${ASDC_BE_ENDPOINT}
+ Log Creating session ${MY_ASDC_BE_ENDPOINT}
+ ${session}= Create Session asdc ${MY_ASDC_BE_ENDPOINT}
+ ${uuid}= Generate UUID4
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
+ ${resp}= Post Request asdc ${data_path} data=${data} headers=${headers}
+ Log Received response from asdc ${resp.text}
+ [Return] ${resp}
+
+# Based on testsuite/robot/resources/asdc_interface.robot's 'Run ASDC MD5 Post Request' keyword
+Run ASDC MD5 Post Request Unauthenticated
+ [Documentation] Runs an ASDC post request with MD5 Checksum header without authentication and returns the HTTP response
+ [Arguments] ${data_path} ${data} ${user}=${ASDC_DESIGNER_USER_ID} ${MY_ASDC_BE_ENDPOINT}=${ASDC_BE_ENDPOINT}
+ Log Creating session ${MY_ASDC_BE_ENDPOINT}
+ ${session}= Create Session asdc ${MY_ASDC_BE_ENDPOINT}
+ ${uuid}= Generate UUID4
+ ${data_string}= Evaluate json.dumps(${data}) json
+ ${md5checksum}= Evaluate md5.new('''${data_string}''').hexdigest() modules=md5
+ ${base64md5checksum}= Evaluate base64.b64encode("${md5checksum}") modules=base64
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} Content-MD5=${base64md5checksum}
+ ${resp}= Post Request asdc ${data_path} data=${data} headers=${headers}
+ Log Received response from asdc: ${resp.text}
+ [Return] ${resp}
+
+# Based on testsuite/robot/resources/asdc_interface.robot's 'Setup SDC Catalog Resource Deployment Artifact Properties' keyword
+Add Tosca Artifact To Resource
+ [Documentation] Add Tosca artifacts to given resource id
+ [Arguments] ${artifact} ${vf_id}
+ ${blueprint_data} OperatingSystem.Get File ${ASSETS_DIR}${artifact}.yaml
+ ${payloadData}= Evaluate base64.b64encode('''${blueprint_data}'''.encode('utf-8')) modules=base64
+ ${dict}= Create Dictionary artifactLabel=${artifact} artifactName=${artifact}.yaml artifactType=DCAE_TOSCA artifactGroupType=DEPLOYMENT description=${artifact}.yaml payloadData=${payloadData}
+ ${data}= Fill JSON Template File ${ASDC_ARTIFACT_UPLOAD_TEMPLATE} ${dict}
+ # POST artifactUpload to resource
+ ${resp}= Run ASDC MD5 Post Request Unauthenticated ${ASDC_CATALOG_RESOURCES_PATH}/${vf_id}/artifacts ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp}
+
+# Directly copied from testsuite/robot/resources/asdc_interface.robot
+Certify ASDC Catalog Resource
+ [Documentation] Certifies an ASDC Catalog Resource by its id and returns the new id
+ [Arguments] ${catalog_resource_id} ${user_id}=${ASDC_TESTER_USER_ID}
+ ${map}= Create Dictionary user_remarks=Robot remarks
+ ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request Unauthenticated ${ASDC_CATALOG_RESOURCES_PATH}/${catalog_resource_id}${ASDC_CATALOG_LIFECYCLE_PATH}/certify ${data} ${user_id}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()['uniqueId']} ${resp.json()['uuid']}
+
+Add Catalog Service For Monitoring Template
+ [Documentation] Creates an ASDC Catalog Service for Monitoring Template with given name
+ [Arguments] ${service_name}
+ ${map}= Create Dictionary service_name=${service_name}
+ ${data}= Fill JSON Template File ${ASDC_CATALOG_SERVICE_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request Unauthenticated ${ASDC_CATALOG_SERVICES_PATH} ${data}
+ Should Be Equal As Strings ${resp.status_code} 201
+ [Return] ${resp.json()['uniqueId']} ${resp.json()['uuid']}
+
+# Based on testsuite/robot/resources/asdc_interface.robot's 'Add ASDC Resource Instance' keyword
+Add ASDC Resource Instance
+ [Documentation] Creates an ASDC Resource Instance and returns its id
+ [Arguments] ${catalog_service_id} ${catalog_resource_id} ${catalog_resource_name} ${xoffset}=${0} ${yoffset}=${0} ${resourceType}=VF
+ ${milli_timestamp}= Generate Timestamp
+ ${xoffset}= Set Variable ${xoffset+306}
+ ${yoffset}= Set Variable ${yoffset+248}
+ ${map}= Create Dictionary catalog_resource_id=${catalog_resource_id} catalog_resource_name=${catalog_resource_name} milli_timestamp=${milli_timestamp} posX=${xoffset} posY=${yoffset} originType=${resourceType}
+ ${data}= Fill JSON Template File ${ASDC_RESOURCE_INSTANCE_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request Unauthenticated ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_SERVICE_RESOURCE_INSTANCE_PATH} ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 201
+ [Return] ${resp.json()['uniqueId']} ${resp.json()['name']}
+
+# Adjusted from asdc_interface.robot
+
+Checkin ASDC Catalog Service
+ [Documentation] Checks in an ASDC Catalog Service by its id
+ [Arguments] ${catalog_service_id}
+ ${map}= Create Dictionary user_remarks=Robot remarks
+ ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request Unauthenticated ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_LIFECYCLE_PATH}/checkin ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+
+Request Certify ASDC Catalog Service
+ [Documentation] Requests certification of an ASDC Catalog Service by its id
+ [Arguments] ${catalog_service_id}
+ ${map}= Create Dictionary user_remarks=Robot remarks
+ ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request Unauthenticated ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_LIFECYCLE_PATH}/certificationRequest ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+
+Start Certify ASDC Catalog Service
+ [Documentation] Start certification of an ASDC Catalog Service by its id
+ [Arguments] ${catalog_service_id}
+ ${resp}= Run ASDC Post Request Unauthenticated ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_LIFECYCLE_PATH}/startCertification ${None} ${ASDC_TESTER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+
+Certify ASDC Catalog Service
+ [Documentation] Certifies an ASDC Catalog Service by its id and returns the new id
+ [Arguments] ${catalog_service_id}
+ ${map}= Create Dictionary user_remarks=Robot remarks
+ ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request Unauthenticated ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_LIFECYCLE_PATH}/certify ${data} ${ASDC_TESTER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()['uniqueId']}
+
+Approve ASDC Catalog Service
+ [Documentation] Approves an ASDC Catalog Service by its id
+ [Arguments] ${catalog_service_id}
+ ${map}= Create Dictionary user_remarks=Robot remarks
+ ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request Unauthenticated ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_SERVICE_DISTRIBUTION_STATE_PATH}${ASDC_DISTRIBUTION_STATE_APPROVE_PATH} ${data} ${ASDC_GOVERNOR_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+
diff --git a/tests/sdc/dcaed/assets/artifact_upload.template b/tests/sdc/dcaed/assets/artifact_upload.template
new file mode 100755
index 00000000..9be6ca04
--- /dev/null
+++ b/tests/sdc/dcaed/assets/artifact_upload.template
@@ -0,0 +1,8 @@
+{
+ "artifactLabel":"${artifactLabel}",
+ "artifactName": "${artifactName}",
+ "artifactType": "${artifactType}",
+ "artifactGroupType": "${artifactGroupType}",
+ "description": "${description}",
+ "payloadData": "${payloadData}"
+}
diff --git a/tests/sdc/dcaed/assets/catalog_service.template b/tests/sdc/dcaed/assets/catalog_service.template
new file mode 100755
index 00000000..56085025
--- /dev/null
+++ b/tests/sdc/dcaed/assets/catalog_service.template
@@ -0,0 +1,42 @@
+{
+ "artifacts": {},
+ "toscaArtifacts": {},
+ "contactId": "cs0008",
+ "categories": [
+ {
+ "name": "Network L4+",
+ "normalizedName": "network l4+",
+ "uniqueId": "serviceNewCategory.network l4+",
+ "icons": [
+ "network_l_4"
+ ],
+ "subcategories": null,
+ "version": null,
+ "ownerId": null,
+ "empty": false,
+ "type": null
+ }
+ ],
+ "description": "Created by robot for monitoring template",
+ "icon": "defaulticon",
+ "componentInstancesProperties": {},
+ "componentInstancesAttributes": {},
+ "name": "${service_name}",
+ "tags": [
+ "robot-ete",
+ "${service_name}"
+ ],
+ "capabilities": {},
+ "requirements": {},
+ "deploymentArtifacts": {},
+ "componentType": "SERVICE",
+ "projectCode": "123456",
+ "componentInstances": [],
+ "properties": [],
+ "attributes": [],
+ "forwardingPaths": {},
+ "ecompGeneratedNaming": true,
+ "serviceApiArtifacts": {},
+ "instantiationType": "A-la-carte",
+ "environmentContext": "General_Revenue-Bearing"
+}
diff --git a/tests/sdc/dcaed/assets/component_catalog_resource.template b/tests/sdc/dcaed/assets/component_catalog_resource.template
new file mode 100644
index 00000000..cb6c402c
--- /dev/null
+++ b/tests/sdc/dcaed/assets/component_catalog_resource.template
@@ -0,0 +1,41 @@
+{
+ "artifacts": {},
+ "toscaArtifacts": {},
+ "contactId": "cs0008",
+ "categories": [
+ {
+ "name": "DCAE Component",
+ "normalizedName": "dcaecomponent",
+ "uniqueId": "resourceNewCategory.dcaecomponent",
+ "subcategories": [
+ {
+ "name": "Microservice",
+ "normalizedName": "microservice",
+ "uniqueId": "resourceNewCategory.dcaecomponent.microservice",
+ "icons": [
+ "dcae_microservice"
+ ]
+ }
+ ]
+ }
+ ],
+ "description": "virtual function",
+ "icon": "defaulticon",
+ "componentInstancesProperties": {},
+ "componentInstancesAttributes": {},
+ "name": "${resource_name}",
+ "tags": [
+ "${resource_name}"
+ ],
+ "capabilities": {},
+ "requirements": {},
+ "deploymentArtifacts": {},
+ "componentType": "RESOURCE",
+ "vendorName": "${vendor_name}",
+ "vendorRelease": "1.0",
+ "componentInstances": [],
+ "properties": [],
+ "attributes": [],
+ "groups": [],
+ "resourceType": "VF"
+}
diff --git a/tests/sdc/dcaed/assets/create_vfcmt.template b/tests/sdc/dcaed/assets/create_vfcmt.template
new file mode 100644
index 00000000..19ce2117
--- /dev/null
+++ b/tests/sdc/dcaed/assets/create_vfcmt.template
@@ -0,0 +1,4 @@
+{
+"name":"${vfcmtName}",
+"description":"${description}"
+}
diff --git a/tests/sdc/dcaed/assets/dcae_composition.template b/tests/sdc/dcaed/assets/dcae_composition.template
new file mode 100644
index 00000000..81be7893
--- /dev/null
+++ b/tests/sdc/dcaed/assets/dcae_composition.template
@@ -0,0 +1,849 @@
+{
+ "cid": "${cid}",
+ "flowType": "TCA Hi Lo",
+ "inputs": [],
+ "nodes": [
+ {
+ "capabilities": [
+ {
+ "name": "feature",
+ "type": {
+ "id": "template.yaml/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ }
+ }
+ ],
+ "description": "/sdc/v1/catalog/resources/${vf_id}/toscaModel/",
+ "id": "${vf_id}",
+ "name": "tca-docker",
+ "ndata": {
+ "label": "tca-docker",
+ "name": "n.1559041944060.0",
+ "ports": [],
+ "px": 364,
+ "py": 437,
+ "radius": 30,
+ "x": 365,
+ "y": 438
+ },
+ "nid": "n.1559041944060.0",
+ "properties": [
+ {
+ "default": 10000,
+ "name": "cpu_period",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "default": 30000,
+ "name": "cpu_quota",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "default": 256,
+ "name": "cpu_shares",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "image",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "composition",
+ "location_id"
+ ]
+ }
+ },
+ "name": "location_id",
+ "required": true,
+ "type": "string",
+ "value": {
+ "get_property": [
+ "SELF",
+ "composition",
+ "location_id"
+ ]
+ }
+ },
+ {
+ "default": "500m",
+ "name": "mem_limit",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "default": "on-failure",
+ "name": "restart_policy.Name",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "default": 3,
+ "name": "restart_policy.max_retry_counts",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "service_component_type",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "requirements": [
+ {
+ "capability": {
+ "id": "template.yaml/dcae.capabilities.dmmap.topic",
+ "name": "dcae.capabilities.dmmap.topic"
+ },
+ "name": "stream_subscribe_0",
+ "node": "topic0",
+ "relationship": {
+ "type": "dcae.relationships.subscribe_to_events"
+ }
+ },
+ {
+ "capability": {
+ "id": "template.yaml/dcae.capabilities.dmmap.topic",
+ "name": "dcae.capabilities.dmmap.topic"
+ },
+ "name": "stream_publish_0",
+ "node": "topic1",
+ "relationship": {
+ "type": "dcae.relationships.publish_events"
+ }
+ },
+ {
+ "capability": {
+ "id": "template.yaml/dcae.capabilities.dockerHost",
+ "name": "dcae.capabilities.dockerHost"
+ },
+ "name": "host",
+ "relationship": {
+ "type": "dcae.relationships.component_contained_in"
+ }
+ },
+ {
+ "capability": {
+ "id": "template.yaml/dcae.capabilities.composition.host",
+ "name": "dcae.capabilities.composition.host"
+ },
+ "name": "composition"
+ },
+ {
+ "capability": {
+ "id": "template.yaml/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ },
+ "name": "dependency",
+ "node": "tosca.nodes.Root",
+ "occurrences": [
+ 0,
+ "UNBOUNDED"
+ ],
+ "relationship": {
+ "type": "tosca.relationships.DependsOn"
+ }
+ }
+ ],
+ "type": {
+ "name": "tosca.dcae.nodes.dockerApp.tca-docker"
+ },
+ "typeinfo": {
+ "capabilities": [
+ {
+ "name": "feature",
+ "type": {
+ "id": "${vf_id}/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ }
+ }
+ ],
+ "hierarchy": [
+ {
+ "id": "${vf_id}/tosca.dcae.nodes.dockerApp",
+ "name": "tosca.dcae.nodes.dockerApp"
+ },
+ {
+ "id": "${vf_id}/tosca.dcae.nodes.Root",
+ "name": "tosca.dcae.nodes.Root"
+ },
+ {
+ "description": "The TOSCA Node Type all other TOSCA base Node Types derive from",
+ "id": "${vf_id}/tosca.nodes.Root",
+ "name": "tosca.nodes.Root"
+ }
+ ],
+ "id": "${vf_id}/tosca.dcae.nodes.dockerApp.tca-docker",
+ "itemId": "${vf_id}/tosca.dcae.nodes.dockerApp.tca-docker",
+ "name": "tosca.dcae.nodes.dockerApp.tca-docker",
+ "requirements": [
+ {
+ "capability": {
+ "id": "${vf_id}/dcae.capabilities.dmmap.topic",
+ "name": "dcae.capabilities.dmmap.topic"
+ },
+ "id": "${vf_id}/stream_subscribe_0",
+ "name": "stream_subscribe_0",
+ "node": {
+ "id": "${vf_id}/dcae.capabilities.dmmap.topic",
+ "name": "dcae.capabilities.dmmap.topic"
+ },
+ "relationship": {
+ "type": "dcae.relationships.subscribe_to_events"
+ }
+ },
+ {
+ "capability": {
+ "id": "${vf_id}/dcae.capabilities.dmmap.topic",
+ "name": "dcae.capabilities.dmmap.topic"
+ },
+ "id": "${vf_id}/stream_publish_0",
+ "name": "stream_publish_0",
+ "node": {
+ "id": "${vf_id}/dcae.capabilities.dmmap.topic",
+ "name": "dcae.capabilities.dmmap.topic"
+ },
+ "relationship": {
+ "type": "dcae.relationships.publish_events"
+ }
+ },
+ {
+ "capability": {
+ "id": "${vf_id}/dcae.capabilities.dockerHost",
+ "name": "dcae.capabilities.dockerHost"
+ },
+ "id": "${vf_id}/host",
+ "name": "host",
+ "node": {
+ "id": "${vf_id}/dcae.capabilities.dockerHost",
+ "name": "dcae.capabilities.dockerHost"
+ },
+ "relationship": {
+ "type": "dcae.relationships.component_contained_in"
+ }
+ },
+ {
+ "capability": {
+ "id": "${vf_id}/dcae.capabilities.composition.host",
+ "name": "dcae.capabilities.composition.host"
+ },
+ "id": "${vf_id}/composition",
+ "name": "composition",
+ "node": {
+ "id": "${vf_id}/dcae.capabilities.composition.host",
+ "name": "dcae.capabilities.composition.host"
+ }
+ },
+ {
+ "capability": {
+ "id": "${vf_id}/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ },
+ "id": "${vf_id}/dependency",
+ "name": "dependency",
+ "node": {
+ "id": "${vf_id}/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ },
+ "occurrences": [
+ 0,
+ "UNBOUNDED"
+ ],
+ "relationship": {
+ "type": "tosca.relationships.DependsOn"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "capabilities": [
+ {
+ "name": "topic",
+ "properties": [
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "aaf_password"
+ ]
+ }
+ },
+ "name": "aaf_password",
+ "type": "string"
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "aaf_username"
+ ]
+ }
+ },
+ "name": "aaf_username",
+ "type": "string"
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "client_role"
+ ]
+ }
+ },
+ "name": "client_role",
+ "type": "string"
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "location"
+ ]
+ }
+ },
+ "name": "location",
+ "type": "string"
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "node_name"
+ ]
+ }
+ },
+ "name": "node_name",
+ "type": "string"
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "topic_name"
+ ]
+ }
+ },
+ "name": "topic_name",
+ "type": "string"
+ }
+ ],
+ "type": {
+ "id": "template.yaml/dcae.capabilities.dmmap.topic",
+ "name": "dcae.capabilities.dmmap.topic"
+ }
+ },
+ {
+ "name": "feature",
+ "type": {
+ "id": "template.yaml/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ }
+ }
+ ],
+ "description": "/sdc/v1/catalog/resources/${vf_id}/toscaModel/",
+ "id": "${vf_id}",
+ "name": "topic0",
+ "ndata": {
+ "label": "topic0",
+ "name": "n.1559041944077.1",
+ "ports": [],
+ "px": 414,
+ "py": 430.9243296300162,
+ "radius": 30,
+ "x": 415,
+ "y": 431.9243296300162
+ },
+ "nid": "n.1559041944077.1",
+ "properties": [
+ {
+ "assignment": {
+ "value": {
+ "get_input": "topic0_aaf_password"
+ }
+ },
+ "name": "aaf_password",
+ "type": "string",
+ "value": {
+ "get_input": "topic0_aaf_password"
+ }
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_input": "topic0_aaf_username"
+ }
+ },
+ "name": "aaf_username",
+ "type": "string",
+ "value": {
+ "get_input": "topic0_aaf_username"
+ }
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_input": "topic0_client_role"
+ }
+ },
+ "name": "client_role",
+ "type": "string",
+ "value": {
+ "get_input": "topic0_client_role"
+ }
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "composition",
+ "location_id"
+ ]
+ }
+ },
+ "name": "location",
+ "type": "string",
+ "value": {
+ "get_property": [
+ "SELF",
+ "composition",
+ "location_id"
+ ]
+ }
+ },
+ {
+ "assignment": {
+ "value": "__GET_NODE_NAME__"
+ },
+ "name": "node_name",
+ "type": "string",
+ "value": "__GET_NODE_NAME__"
+ },
+ {
+ "assignment": {
+ "value": ""
+ },
+ "name": "topic_name",
+ "type": "string"
+ }
+ ],
+ "requirements": [
+ {
+ "capability": {
+ "id": "template.yaml/dcae.capabilities.composition.host",
+ "name": "dcae.capabilities.composition.host"
+ },
+ "name": "composition"
+ },
+ {
+ "capability": {
+ "id": "template.yaml/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ },
+ "name": "dependency",
+ "node": "tosca.nodes.Root",
+ "occurrences": [
+ 0,
+ "UNBOUNDED"
+ ],
+ "relationship": {
+ "type": "tosca.relationships.DependsOn"
+ }
+ }
+ ],
+ "type": {
+ "name": "tosca.dcae.nodes.dmaap.topic"
+ },
+ "typeinfo": {
+ "capabilities": [
+ {
+ "name": "topic",
+ "type": {
+ "id": "${vf_id}/dcae.capabilities.dmmap.topic",
+ "name": "dcae.capabilities.dmmap.topic"
+ }
+ },
+ {
+ "name": "feature",
+ "type": {
+ "id": "${vf_id}/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ }
+ }
+ ],
+ "hierarchy": [
+ {
+ "id": "${vf_id}/tosca.dcae.nodes.Root",
+ "name": "tosca.dcae.nodes.Root"
+ },
+ {
+ "description": "The TOSCA Node Type all other TOSCA base Node Types derive from",
+ "id": "${vf_id}/tosca.nodes.Root",
+ "name": "tosca.nodes.Root"
+ }
+ ],
+ "id": "${vf_id}/tosca.dcae.nodes.dmaap.topic",
+ "itemId": "${vf_id}/tosca.dcae.nodes.dmaap.topic",
+ "name": "tosca.dcae.nodes.dmaap.topic",
+ "requirements": [
+ {
+ "capability": {
+ "id": "${vf_id}/dcae.capabilities.composition.host",
+ "name": "dcae.capabilities.composition.host"
+ },
+ "id": "${vf_id}/composition",
+ "name": "composition",
+ "node": {
+ "id": "${vf_id}/dcae.capabilities.composition.host",
+ "name": "dcae.capabilities.composition.host"
+ }
+ },
+ {
+ "capability": {
+ "id": "${vf_id}/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ },
+ "id": "${vf_id}/dependency",
+ "name": "dependency",
+ "node": {
+ "id": "${vf_id}/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ },
+ "occurrences": [
+ 0,
+ "UNBOUNDED"
+ ],
+ "relationship": {
+ "type": "tosca.relationships.DependsOn"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "capabilities": [
+ {
+ "name": "topic",
+ "properties": [
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "aaf_password"
+ ]
+ }
+ },
+ "name": "aaf_password",
+ "type": "string"
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "aaf_username"
+ ]
+ }
+ },
+ "name": "aaf_username",
+ "type": "string"
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "client_role"
+ ]
+ }
+ },
+ "name": "client_role",
+ "type": "string"
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "location"
+ ]
+ }
+ },
+ "name": "location",
+ "type": "string"
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "node_name"
+ ]
+ }
+ },
+ "name": "node_name",
+ "type": "string"
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "topic_name"
+ ]
+ }
+ },
+ "name": "topic_name",
+ "type": "string"
+ }
+ ],
+ "type": {
+ "id": "template.yaml/dcae.capabilities.dmmap.topic",
+ "name": "dcae.capabilities.dmmap.topic"
+ }
+ },
+ {
+ "name": "feature",
+ "type": {
+ "id": "template.yaml/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ }
+ }
+ ],
+ "description": "/sdc/v1/catalog/resources/${vf_id}/toscaModel/",
+ "id": "${vf_id}",
+ "name": "topic1",
+ "ndata": {
+ "label": "topic1",
+ "name": "n.1559041944083.2",
+ "ports": [],
+ "px": 464,
+ "py": 451.6297431929615,
+ "radius": 30,
+ "x": 465,
+ "y": 452.6297431929615
+ },
+ "nid": "n.1559041944083.2",
+ "properties": [
+ {
+ "assignment": {
+ "value": {
+ "get_input": "topic1_aaf_password"
+ }
+ },
+ "name": "aaf_password",
+ "type": "string",
+ "value": {
+ "get_input": "topic1_aaf_password"
+ }
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_input": "topic1_aaf_username"
+ }
+ },
+ "name": "aaf_username",
+ "type": "string",
+ "value": {
+ "get_input": "topic1_aaf_username"
+ }
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_input": "topic1_client_role"
+ }
+ },
+ "name": "client_role",
+ "type": "string",
+ "value": {
+ "get_input": "topic1_client_role"
+ }
+ },
+ {
+ "assignment": {
+ "value": {
+ "get_property": [
+ "SELF",
+ "composition",
+ "location_id"
+ ]
+ }
+ },
+ "name": "location",
+ "type": "string",
+ "value": {
+ "get_property": [
+ "SELF",
+ "composition",
+ "location_id"
+ ]
+ }
+ },
+ {
+ "assignment": {
+ "value": "__GET_NODE_NAME__"
+ },
+ "name": "node_name",
+ "type": "string",
+ "value": "__GET_NODE_NAME__"
+ },
+ {
+ "assignment": {
+ "value": ""
+ },
+ "name": "topic_name",
+ "type": "string"
+ }
+ ],
+ "requirements": [
+ {
+ "capability": {
+ "id": "template.yaml/dcae.capabilities.composition.host",
+ "name": "dcae.capabilities.composition.host"
+ },
+ "name": "composition"
+ },
+ {
+ "capability": {
+ "id": "template.yaml/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ },
+ "name": "dependency",
+ "node": "tosca.nodes.Root",
+ "occurrences": [
+ 0,
+ "UNBOUNDED"
+ ],
+ "relationship": {
+ "type": "tosca.relationships.DependsOn"
+ }
+ }
+ ],
+ "type": {
+ "name": "tosca.dcae.nodes.dmaap.topic"
+ },
+ "typeinfo": {
+ "capabilities": [
+ {
+ "name": "topic",
+ "type": {
+ "id": "${vf_id}/dcae.capabilities.dmmap.topic",
+ "name": "dcae.capabilities.dmmap.topic"
+ }
+ },
+ {
+ "name": "feature",
+ "type": {
+ "id": "${vf_id}/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ }
+ }
+ ],
+ "hierarchy": [
+ {
+ "id": "${vf_id}/tosca.dcae.nodes.Root",
+ "name": "tosca.dcae.nodes.Root"
+ },
+ {
+ "description": "The TOSCA Node Type all other TOSCA base Node Types derive from",
+ "id": "${vf_id}/tosca.nodes.Root",
+ "name": "tosca.nodes.Root"
+ }
+ ],
+ "id": "${vf_id}/tosca.dcae.nodes.dmaap.topic",
+ "itemId": "${vf_id}/tosca.dcae.nodes.dmaap.topic",
+ "name": "tosca.dcae.nodes.dmaap.topic",
+ "requirements": [
+ {
+ "capability": {
+ "id": "${vf_id}/dcae.capabilities.composition.host",
+ "name": "dcae.capabilities.composition.host"
+ },
+ "id": "${vf_id}/composition",
+ "name": "composition",
+ "node": {
+ "id": "${vf_id}/dcae.capabilities.composition.host",
+ "name": "dcae.capabilities.composition.host"
+ }
+ },
+ {
+ "capability": {
+ "id": "${vf_id}/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ },
+ "id": "${vf_id}/dependency",
+ "name": "dependency",
+ "node": {
+ "id": "${vf_id}/tosca.capabilities.Node",
+ "name": "tosca.capabilities.Node"
+ },
+ "occurrences": [
+ 0,
+ "UNBOUNDED"
+ ],
+ "relationship": {
+ "type": "tosca.relationships.DependsOn"
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "outputs": [],
+ "relations": [
+ {
+ "meta": {
+ "n1": "n.1559041944060.0",
+ "n2": "n.1559041944077.1",
+ "p1": "stream_subscribe_0",
+ "p2": "topic",
+ "relationship": [
+ "tca-docker",
+ null,
+ "stream_subscribe_0"
+ ]
+ },
+ "n1": "n.1559041944060.0",
+ "n2": "n.1559041944077.1",
+ "name1": "tca-docker",
+ "name2": "topic0",
+ "rid": "lnk.1559041944098.3"
+ },
+ {
+ "meta": {
+ "n1": "n.1559041944060.0",
+ "n2": "n.1559041944083.2",
+ "p1": "stream_publish_0",
+ "p2": "topic",
+ "relationship": [
+ "tca-docker",
+ null,
+ "stream_publish_0"
+ ]
+ },
+ "n1": "n.1559041944060.0",
+ "n2": "n.1559041944083.2",
+ "name1": "tca-docker",
+ "name2": "topic1",
+ "rid": "lnk.1559041944104.4"
+ }
+ ],
+ "version": 0
+}
diff --git a/tests/sdc/dcaed/assets/dcae_monitoring_configuration.template b/tests/sdc/dcaed/assets/dcae_monitoring_configuration.template
new file mode 100755
index 00000000..f42e4685
--- /dev/null
+++ b/tests/sdc/dcaed/assets/dcae_monitoring_configuration.template
@@ -0,0 +1,11 @@
+{
+ "name": "${name}",
+ "description": "Created by robot",
+ "templateUuid": "${template_uuid}",
+ "vfiName": "${vfi_name}",
+ "serviceUuid": "${service_uuid}",
+ "contextType": "SERVICE",
+ "flowType": "TCA Hi Lo",
+ "cloneVFCMT": true,
+ "updateFlowType": false
+}
diff --git a/tests/sdc/dcaed/assets/resource_instance.template b/tests/sdc/dcaed/assets/resource_instance.template
new file mode 100644
index 00000000..18cf34c7
--- /dev/null
+++ b/tests/sdc/dcaed/assets/resource_instance.template
@@ -0,0 +1,10 @@
+{
+ "uniqueId": "${catalog_resource_id}${milli_timestamp}",
+ "posX": ${posX},
+ "posY": ${posY},
+ "name": "${catalog_resource_name}",
+ "componentVersion": "1.0",
+ "originType": "${originType}",
+ "icon": "defaulticon",
+ "componentUid": "${catalog_resource_id}"
+}
diff --git a/tests/sdc/dcaed/assets/schema.yaml b/tests/sdc/dcaed/assets/schema.yaml
new file mode 100755
index 00000000..7024a35c
--- /dev/null
+++ b/tests/sdc/dcaed/assets/schema.yaml
@@ -0,0 +1,551 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+capability_types:
+ dcae.capabilities.cdapHost:
+ derived_from: tosca.capabilities.Root
+ dcae.capabilities.composition.host:
+ derived_from: tosca.capabilities.Root
+ properties:
+ location_id:
+ type: string
+ service_id:
+ type: string
+ dcae.capabilities.dmmap.feed:
+ derived_from: tosca.capabilities.Root
+ properties:
+ feed_name:
+ type: string
+ location:
+ type: string
+ node_name:
+ type: string
+ dcae.capabilities.dmmap.topic:
+ derived_from: tosca.capabilities.Root
+ properties:
+ aaf_password:
+ type: string
+ aaf_username:
+ type: string
+ client_role:
+ type: string
+ location:
+ type: string
+ node_name:
+ type: string
+ topic_name:
+ type: string
+ dcae.capabilities.dockerHost:
+ derived_from: tosca.capabilities.Root
+ dcae.capabilities.policy:
+ derived_from: tosca.capabilities.Root
+ dcae.capabilities.service.provide:
+ derived_from: tosca.capabilities.Root
+ properties:
+ request_format:
+ type: string
+ request_version:
+ type: string
+ response_format:
+ type: string
+ response_version:
+ type: string
+ service_endpoint:
+ type: string
+ service_name:
+ type: string
+ verb:
+ type: string
+ dcae.capabilities.stream.subscribe:
+ derived_from: tosca.capabilities.Root
+ properties:
+ format:
+ type: string
+ route:
+ type: string
+ version:
+ type: string
+relationship_types:
+ cloudify.relationships.depends_on:
+ derived_from: tosca.relationships.Root
+ dcae.relationships.component_contained_in:
+ derived_from: tosca.relationships.Root
+ dcae.relationships.publish_events:
+ derived_from: tosca.relationships.Root
+ dcae.relationships.publish_files:
+ derived_from: tosca.relationships.Root
+ dcae.relationships.rework_connected_to:
+ derived_from: tosca.relationships.Root
+ dcae.relationships.subscribe_to_events:
+ derived_from: tosca.relationships.Root
+ dcae.relationships.subscribe_to_files:
+ derived_from: tosca.relationships.Root
+node_types:
+ cloudify.dcae.nodes.Root:
+ derived_from: tosca.nodes.Root
+ dcae.nodes.ContainerizedComponent:
+ derived_from: cloudify.dcae.nodes.Root
+ properties:
+ application_config:
+ required: true
+ type: map
+ docker_config:
+ type: map
+ image:
+ required: true
+ type: string
+ dcae.nodes.ContainerizedServiceComponent:
+ attributes:
+ service_component_name:
+ type: string
+ derived_from: dcae.nodes.ContainerizedComponent
+ properties:
+ location_id:
+ required: true
+ type: string
+ service_component_type:
+ required: true
+ type: string
+ dcae.nodes.ContainerizedServiceComponentUsingDmaap:
+ derived_from: dcae.nodes.ContainerizedServiceComponent
+ properties:
+ streams_publishes:
+ type: list
+ streams_subscribes:
+ type: list
+ dcae.nodes.DockerContainerForComponents:
+ attributes:
+ service_component_name:
+ type: string
+ derived_from: cloudify.dcae.nodes.Root
+ interfaces:
+ cloudify.interfaces.lifecycle:
+ start:
+ inputs:
+ host_config:
+ type: map
+ stop:
+ inputs:
+ cleanup_image:
+ type: boolean
+ type: tosca.interfaces.Root
+ properties:
+ application_config:
+ required: true
+ type: map
+ docker_config:
+ type: map
+ image:
+ required: true
+ type: string
+ location_id:
+ required: true
+ type: string
+ service_component_type:
+ required: true
+ type: string
+ requirements:
+ - host:
+ capability: dcae.capabilities.dockerHost
+ relationship: dcae.relationships.component_contained_in
+ dcae.nodes.DockerContainerForComponentsUsingDmaap:
+ derived_from: dcae.nodes.DockerContainerForComponents
+ properties:
+ application_config:
+ required: true
+ type: map
+ docker_config:
+ type: map
+ image:
+ required: true
+ type: string
+ location_id:
+ required: true
+ type: string
+ service_component_type:
+ required: true
+ type: string
+ streams_publishes:
+ type: list
+ streams_subscribes:
+ type: list
+ attributes:
+ service_component_name:
+ type: string
+ requirements:
+ - host:
+ capability: dcae.capabilities.dockerHost
+ relationship: dcae.relationships.component_contained_in
+ - stream_subscribe_0:
+ capability: dcae.capabilities.dmmap.topic
+ relationship: dcae.relationships.subscribe_to_events
+ - stream_publish_0:
+ capability: dcae.capabilities.dmmap.topic
+ relationship: dcae.relationships.publish_events
+ interfaces:
+ cloudify.interfaces.lifecycle:
+ start:
+ inputs:
+ host_config:
+ type: map
+ stop:
+ inputs:
+ cleanup_image:
+ type: boolean
+ type: tosca.interfaces.Root
+ dcae.nodes.ExistingFeed:
+ capabilities:
+ feed:
+ type: dcae.capabilities.dmmap.feed
+ derived_from: cloudify.dcae.nodes.Root
+ properties:
+ feed_id:
+ type: string
+ dcae.nodes.ExistingTopic:
+ capabilities:
+ topic:
+ type: dcae.capabilities.dmmap.topic
+ derived_from: cloudify.dcae.nodes.Root
+ properties:
+ fqtn:
+ type: string
+ dcae.nodes.ExternalTargetFeed:
+ capabilities:
+ feed:
+ type: dcae.capabilities.dmmap.feed
+ derived_from: cloudify.dcae.nodes.Root
+ properties:
+ url:
+ type: string
+ username:
+ type: string
+ userpw:
+ type: string
+ dcae.nodes.Feed:
+ capabilities:
+ feed:
+ type: dcae.capabilities.dmmap.feed
+ derived_from: cloudify.dcae.nodes.Root
+ properties:
+ feed_name:
+ type: string
+ dcae.nodes.MicroService.cdap:
+ attributes:
+ service_component_name:
+ type: string
+ derived_from: cloudify.dcae.nodes.Root
+ interfaces:
+ cloudify.interfaces.lifecycle:
+ create:
+ inputs:
+ connected_broker_dns_name:
+ type: string
+ type: tosca.interfaces.Root
+ properties:
+ app_config:
+ required: false
+ type: map
+ app_preferences:
+ required: false
+ type: map
+ artifact_name:
+ required: false
+ type: string
+ artifact_version:
+ required: false
+ type: string
+ connections:
+ required: false
+ type: map
+ jar_url:
+ type: string
+ namespace:
+ required: false
+ type: string
+ program_preferences:
+ required: false
+ type: list
+ programs:
+ required: false
+ type: list
+ service_component_type:
+ type: string
+ service_endpoints:
+ required: false
+ type: list
+ streamname:
+ required: false
+ type: string
+ requirements:
+ - host:
+ capability: dcae.capabilities.cdapHost
+ relationship: dcae.relationships.component_contained_in
+ dcae.nodes.SelectedDockerHost:
+ capabilities:
+ host:
+ type: dcae.capabilities.dockerHost
+ derived_from: cloudify.dcae.nodes.Root
+ properties:
+ docker_host_override:
+ type: string
+ location_id:
+ required: true
+ type: string
+ dcae.nodes.Topic:
+ capabilities:
+ topic:
+ type: dcae.capabilities.dmmap.topic
+ derived_from: cloudify.dcae.nodes.Root
+ properties:
+ topic_name:
+ type: string
+ dcae.nodes.composition.virtual:
+ capabilities:
+ host:
+ type: dcae.capabilities.composition.host
+ derived_from: tosca.nodes.Root
+ properties:
+ location_id:
+ required: true
+ type: string
+ service_id:
+ required: true
+ type: string
+ dcae.nodes.policies:
+ capabilities:
+ policy:
+ type: dcae.capabilities.policy
+ derived_from: cloudify.dcae.nodes.Root
+ properties:
+ policy_filter:
+ type: map
+ dcae.nodes.policy:
+ capabilities:
+ policy:
+ type: dcae.capabilities.policy
+ derived_from: cloudify.dcae.nodes.Root
+ properties:
+ policy_id:
+ required: true
+ type: string
+ policy.nodes.Root:
+ derived_from: tosca.nodes.Root
+ properties:
+ policyDescription:
+ required: false
+ type: string
+ policyName:
+ required: true
+ type: string
+ policyScope:
+ required: true
+ type: string
+ policyVersion:
+ required: true
+ type: string
+ tosca.dcae.nodes.Root:
+ derived_from: tosca.nodes.Root
+ tosca.dcae.nodes.cdapApp:
+ attributes:
+ service_component_name:
+ type: string
+ derived_from: tosca.dcae.nodes.Root
+ properties:
+ connected_broker_dns_name:
+ default: cdap_broker
+ required: true
+ type: string
+ jar_url:
+ required: true
+ type: string
+ service_component_type:
+ required: true
+ type: string
+ requirements:
+ - host:
+ capability: dcae.capabilities.cdapHost
+ relationship: dcae.relationships.component_contained_in
+ tosca.dcae.nodes.dmaap.existingFeed:
+ capabilities:
+ feed:
+ type: dcae.capabilities.dmmap.feed
+ derived_from: tosca.dcae.nodes.Root
+ properties:
+ feed_id:
+ type: string
+ location:
+ type: string
+ node_name:
+ type: string
+ requirements:
+ - composition:
+ capability: dcae.capabilities.composition.host
+ tosca.dcae.nodes.dmaap.existingTopic:
+ capabilities:
+ topic:
+ type: dcae.capabilities.dmmap.topic
+ derived_from: tosca.dcae.nodes.Root
+ properties:
+ aaf_password:
+ type: string
+ aaf_username:
+ type: string
+ client_role:
+ type: string
+ fqtn:
+ type: string
+ location:
+ type: string
+ node_name:
+ type: string
+ requirements:
+ - composition:
+ capability: dcae.capabilities.composition.host
+ tosca.dcae.nodes.dmaap.externalTargetFeed:
+ capabilities:
+ feed:
+ type: dcae.capabilities.dmmap.feed
+ derived_from: tosca.dcae.nodes.Root
+ properties:
+ location:
+ type: string
+ node_name:
+ type: string
+ url:
+ type: string
+ username:
+ type: string
+ userpw:
+ type: string
+ requirements:
+ - composition:
+ capability: dcae.capabilities.composition.host
+ tosca.dcae.nodes.dmaap.feed:
+ capabilities:
+ feed:
+ type: dcae.capabilities.dmmap.feed
+ derived_from: tosca.dcae.nodes.Root
+ properties:
+ feed_name:
+ type: string
+ location:
+ type: string
+ node_name:
+ type: string
+ requirements:
+ - composition:
+ capability: dcae.capabilities.composition.host
+ tosca.dcae.nodes.dmaap.topic:
+ capabilities:
+ topic:
+ type: dcae.capabilities.dmmap.topic
+ derived_from: tosca.dcae.nodes.Root
+ properties:
+ aaf_password:
+ type: string
+ aaf_username:
+ type: string
+ client_role:
+ type: string
+ location:
+ type: string
+ node_name:
+ type: string
+ topic_name:
+ type: string
+ requirements:
+ - composition:
+ capability: dcae.capabilities.composition.host
+ tosca.dcae.nodes.dockerApp:
+ attributes:
+ service_component_name:
+ type: string
+ derived_from: tosca.dcae.nodes.Root
+ properties:
+ cpu_period:
+ default: 10000
+ required: true
+ type: integer
+ cpu_quota:
+ default: 30000
+ required: true
+ type: integer
+ cpu_shares:
+ default: 256
+ required: true
+ type: integer
+ image:
+ required: true
+ type: string
+ location_id:
+ required: true
+ type: string
+ mem_limit:
+ default: 500m
+ required: true
+ type: string
+ restart_policy.Name:
+ default: on-failure
+ required: true
+ type: string
+ restart_policy.max_retry_counts:
+ default: 3
+ required: true
+ type: integer
+ service_component_type:
+ required: true
+ type: string
+ requirements:
+ - host:
+ capability: dcae.capabilities.dockerHost
+ relationship: dcae.relationships.component_contained_in
+ - composition:
+ capability: dcae.capabilities.composition.host
+ tosca.dcae.nodes.dockerApp.tca-docker:
+ derived_from: tosca.dcae.nodes.dockerApp
+ requirements:
+ - stream_subscribe_0:
+ capability: dcae.capabilities.dmmap.topic
+ relationship: dcae.relationships.subscribe_to_events
+ - stream_publish_0:
+ capability: dcae.capabilities.dmmap.topic
+ relationship: dcae.relationships.publish_events
+ tosca.dcae.nodes.dockerHost:
+ capabilities:
+ host:
+ type: dcae.capabilities.dockerHost
+ derived_from: tosca.dcae.nodes.Root
+ properties:
+ docker_host_override:
+ type: string
+ location_id:
+ required: true
+ type: string
+ requirements:
+ - composition:
+ capability: dcae.capabilities.composition.host
+ tosca.dcae.nodes.policies:
+ capabilities:
+ policy:
+ type: dcae.capabilities.policy
+ derived_from: tosca.dcae.nodes.Root
+ properties:
+ configAttributes:
+ type: string
+ configName:
+ type: string
+ onapName:
+ type: string
+ policyName:
+ type: string
+ unique:
+ type: boolean
+ tosca.dcae.nodes.policy:
+ capabilities:
+ policy:
+ type: dcae.capabilities.policy
+ derived_from: tosca.dcae.nodes.Root
+ properties:
+ policy_id:
+ required: true
+ type: string
+ policy_name:
+ type: string
diff --git a/tests/sdc/dcaed/assets/template.yaml b/tests/sdc/dcaed/assets/template.yaml
new file mode 100755
index 00000000..5a03da76
--- /dev/null
+++ b/tests/sdc/dcaed/assets/template.yaml
@@ -0,0 +1,117 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+ template_name: tca-docker
+imports:
+- schema: schema.yaml
+topology_template:
+ inputs:
+ topic0_aaf_password:
+ type: string
+ topic0_aaf_username:
+ type: string
+ topic0_client_role:
+ type: string
+ topic1_aaf_password:
+ type: string
+ topic1_aaf_username:
+ type: string
+ topic1_client_role:
+ type: string
+ node_templates:
+ tca-docker:
+ type: tosca.dcae.nodes.dockerApp.tca-docker
+ properties:
+ location_id:
+ get_property:
+ - SELF
+ - composition
+ - location_id
+ requirements:
+ - stream_subscribe_0: topic0
+ - stream_publish_0: topic1
+ topic0:
+ type: tosca.dcae.nodes.dmaap.topic
+ properties:
+ aaf_password:
+ get_input: topic0_aaf_password
+ aaf_username:
+ get_input: topic0_aaf_username
+ client_role:
+ get_input: topic0_client_role
+ location:
+ get_property:
+ - SELF
+ - composition
+ - location_id
+ node_name: __GET_NODE_NAME__
+ topic_name: ''
+ capabilities:
+ topic:
+ properties:
+ aaf_password:
+ get_property:
+ - SELF
+ - aaf_password
+ aaf_username:
+ get_property:
+ - SELF
+ - aaf_username
+ client_role:
+ get_property:
+ - SELF
+ - client_role
+ location:
+ get_property:
+ - SELF
+ - location
+ node_name:
+ get_property:
+ - SELF
+ - node_name
+ topic_name:
+ get_property:
+ - SELF
+ - topic_name
+ topic1:
+ type: tosca.dcae.nodes.dmaap.topic
+ properties:
+ aaf_password:
+ get_input: topic1_aaf_password
+ aaf_username:
+ get_input: topic1_aaf_username
+ client_role:
+ get_input: topic1_client_role
+ location:
+ get_property:
+ - SELF
+ - composition
+ - location_id
+ node_name: __GET_NODE_NAME__
+ topic_name: ''
+ capabilities:
+ topic:
+ properties:
+ aaf_password:
+ get_property:
+ - SELF
+ - aaf_password
+ aaf_username:
+ get_property:
+ - SELF
+ - aaf_username
+ client_role:
+ get_property:
+ - SELF
+ - client_role
+ location:
+ get_property:
+ - SELF
+ - location
+ node_name:
+ get_property:
+ - SELF
+ - node_name
+ topic_name:
+ get_property:
+ - SELF
+ - topic_name
diff --git a/tests/sdc/dcaed/assets/translate.yaml b/tests/sdc/dcaed/assets/translate.yaml
new file mode 100755
index 00000000..5515dc2c
--- /dev/null
+++ b/tests/sdc/dcaed/assets/translate.yaml
@@ -0,0 +1,147 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+ template_name: tca-docker_translate
+imports:
+- schema: schema.yaml
+topology_template:
+ inputs:
+ cpu_period:
+ type: integer
+ default: 10000
+ cpu_quota:
+ type: integer
+ default: 30000
+ cpu_shares:
+ type: integer
+ default: 256
+ image:
+ type: string
+ location_id:
+ type: string
+ mem_limit:
+ type: string
+ default: 500m
+ restart_policy.Name:
+ type: string
+ default: on-failure
+ restart_policy.max_retry_counts:
+ type: integer
+ default: 3
+ service_component_type:
+ type: string
+ substitution_mappings:
+ node_type: tosca.dcae.nodes.dockerApp.tca-docker
+ capabilities: {}
+ requirements:
+ host:
+ - tca-docker
+ - host
+ stream_publish_0:
+ - tca-docker
+ - stream_publish_0
+ stream_subscribe_0:
+ - tca-docker
+ - stream_subscribe_0
+ node_templates:
+ tca-docker:
+ type: dcae.nodes.DockerContainerForComponentsUsingDmaap
+ properties:
+ application_config:
+ services_calls: {}
+ streams_publishes:
+ tca_handle_out:
+ aaf_password:
+ get_property:
+ - SELF
+ - stream_publish_0
+ - aaf_password
+ aaf_username:
+ get_property:
+ - SELF
+ - stream_publish_0
+ - aaf_username
+ dmaap_info:
+ concat:
+ - '<<'
+ - get_property:
+ - SELF
+ - stream_publish_0
+ - node_name
+ - '>>'
+ type: message_router
+ streams_subscribes:
+ tca_handle_in:
+ aaf_password:
+ get_property:
+ - SELF
+ - stream_subscribe_0
+ - aaf_password
+ aaf_username:
+ get_property:
+ - SELF
+ - stream_subscribe_0
+ - aaf_username
+ dmaap_info:
+ concat:
+ - '<<'
+ - get_property:
+ - SELF
+ - stream_subscribe_0
+ - node_name
+ - '>>'
+ type: message_router
+ docker_config:
+ healthcheck:
+ endpoint: /
+ interval: 15s
+ timeout: 1s
+ type: https
+ ports:
+ - 11011:11011
+ image: nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0
+ location_id:
+ get_input: location_id
+ service_component_type: tca-docker
+ streams_publishes:
+ - client_role:
+ get_property:
+ - SELF
+ - stream_publish_0
+ - client_role
+ location:
+ get_property:
+ - SELF
+ - stream_publish_0
+ - location
+ name:
+ get_property:
+ - SELF
+ - stream_publish_0
+ - node_name
+ type: message_router
+ streams_subscribes:
+ - client_role:
+ get_property:
+ - SELF
+ - stream_subscribe_0
+ - client_role
+ location:
+ get_property:
+ - SELF
+ - stream_subscribe_0
+ - location
+ name:
+ get_property:
+ - SELF
+ - stream_subscribe_0
+ - node_name
+ type: message_router
+ interfaces:
+ cloudify.interfaces.lifecycle:
+ type: tosca.interfaces.Root
+ start:
+ inputs:
+ host_config: null
+ stop:
+ inputs:
+ cleanup_image: null
diff --git a/tests/sdc/dcaed/assets/user_remarks.template b/tests/sdc/dcaed/assets/user_remarks.template
new file mode 100644
index 00000000..465115e6
--- /dev/null
+++ b/tests/sdc/dcaed/assets/user_remarks.template
@@ -0,0 +1 @@
+{"userRemarks":"${user_remarks}"} \ No newline at end of file
diff --git a/tests/sdc/dcaed/common.robot b/tests/sdc/dcaed/common.robot
new file mode 100644
index 00000000..3cb73ff4
--- /dev/null
+++ b/tests/sdc/dcaed/common.robot
@@ -0,0 +1,11 @@
+*** Variables ***
+
+${ASDC_DESIGNER_USER_ID} cs0008
+${ASDC_TESTER_USER_ID} jm0007
+${ASDC_GOVERNOR_USER_ID} gv0001
+${ASDC_OPS_USER_ID} op0001
+
+${GLOBAL_APPLICATION_ID} robot
+
+${ASSETS_DIR} %{WORKSPACE}/tests/sdc/dcaed/assets/
+
diff --git a/tests/sdc/dcaed/dcaed_interface.robot b/tests/sdc/dcaed/dcaed_interface.robot
new file mode 100644
index 00000000..76401a86
--- /dev/null
+++ b/tests/sdc/dcaed/dcaed_interface.robot
@@ -0,0 +1,76 @@
+*** Settings ***
+Library json
+Library eteutils/HTTPUtils.py
+Library ONAPLibrary.Utilities
+
+Resource json_templater.robot
+Resource common.robot
+
+*** Variables ***
+${DCAE_PATH} /dcae
+${DCAE_CREATE_BLUEPRINT_PATH} /SERVICE/createBluePrint
+${DCAE_VFCMT_TEMPLATE} ${ASSETS_DIR}create_vfcmt.template
+${DCAE_COMPOSITION_TEMPLATE} ${ASSETS_DIR}dcae_composition.template
+${DCAE_MONITORING_CONFIGURATION_TEMPLATE} ${ASSETS_DIR}dcae_monitoring_configuration.template
+${DCAE_BE_ENDPOINT} http://localhost:8082
+
+*** Keywords ***
+
+Add VFCMT To DCAE-DS
+ [Documentation] Create VFCMT with the given name and return its uuid
+ [Arguments] ${vfcmt_name}
+ ${map}= Create Dictionary vfcmtName=${vfcmt_name} description=VFCMT created by robot
+ ${data}= Fill JSON Template File ${DCAE_VFCMT_TEMPLATE} ${map}
+ ${resp}= Run DCAE-DS Post Request ${DCAE_PATH}/createVFCMT ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()['uuid']}
+
+Run DCAE-DS Post Request
+ [Documentation] Runs a DCAE-DS post request
+ [Arguments] ${data_path} ${data} ${user}=${ASDC_DESIGNER_USER_ID} ${MY_DCAE_BE_ENDPOINT}=${DCAE_BE_ENDPOINT}
+ Log Creating session ${MY_DCAE_BE_ENDPOINT}
+ ${session}= Create Session sdc_dcae_ds ${MY_DCAE_BE_ENDPOINT}
+ ${uuid}= Generate UUID4
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
+ ${resp}= Post Request sdc_dcae_ds ${data_path} data=${data} headers=${headers}
+ Log Received response from DCAE-BE: ${resp.text}
+ [Return] ${resp}
+
+Run DCAE-DS Put Request
+ [Documentation] Runs a DCAE-DS put request
+ [Arguments] ${data_path} ${user}=${ASDC_DESIGNER_USER_ID} ${MY_DCAE_BE_ENDPOINT}=${DCAE_BE_ENDPOINT}
+ Log Creating session ${MY_DCAE_BE_ENDPOINT}
+ ${session}= Create Session sdc_dcae_ds ${MY_DCAE_BE_ENDPOINT}
+ ${uuid}= Generate UUID4
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
+ ${resp}= Put Request sdc_dcae_ds ${data_path} headers=${headers}
+ Log Received response from DCAE-BE: ${resp.text}
+ [Return] ${resp}
+
+Save Composition
+ [Arguments] ${vfcmt_uuid} ${vf_uuid}
+ ${map}= Create Dictionary cid=${vfcmt_uuid} vf_id=${vf_uuid}
+ ${data}= Fill JSON Template File ${DCAE_COMPOSITION_TEMPLATE} ${map}
+ ${resp}= Run DCAE-DS Post Request ${DCAE_PATH}/saveComposition/${vfcmt_uuid} ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+
+Certify VFCMT
+ [Arguments] ${vfcmt_uuid}
+ ${resp}= Run DCAE-DS Put Request ${DCAE_PATH}/certify/vfcmt/${vfcmt_uuid}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()['uuid']}
+
+Add Monitoring Configuration To DCAE-DS
+ [Arguments] ${vfcmt_uuid} ${cs_uuid} ${vfi_name} ${mc_name}
+ ${map}= Create Dictionary template_uuid=${vfcmt_uuid} service_uuid=${cs_uuid} vfi_name=${vfi_name} name=${mc_name}
+ ${data}= Fill JSON Template File ${DCAE_MONITORING_CONFIGURATION_TEMPLATE} ${map}
+ ${resp}= Run DCAE-DS Post Request ${DCAE_PATH}/importMC ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()['vfcmt']['uuid']}
+
+Submit Monitoring Configuration To DCAE-DS
+ [Arguments] ${mc_uuid} ${cs_uuid} ${vfi_name}
+ ${url_vfi_name} HTTPUtils.url_encode_string ${vfi_name}
+ ${resp}= Run DCAE-DS Post Request ${DCAE_PATH}${DCAE_CREATE_BLUEPRINT_PATH}/${mc_uuid}/${cs_uuid}/${url_vfi_name} ${None} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+
diff --git a/tests/sdc/dcaed/json_templater.robot b/tests/sdc/dcaed/json_templater.robot
new file mode 100644
index 00000000..884c8f97
--- /dev/null
+++ b/tests/sdc/dcaed/json_templater.robot
@@ -0,0 +1,20 @@
+*** Settings ***
+Documentation This resource is filling out json string templates and returning the json back
+Library RequestsLibrary
+Library eteutils/StringTemplater.py
+Library OperatingSystem
+
+*** Keywords ***
+Fill JSON Template
+ [Documentation] Runs substitution on template to return a filled in json
+ [Arguments] ${json} ${arguments}
+ ${returned_string}= Template String ${json} ${arguments}
+ ${returned_json}= To Json ${returned_string}
+ [Return] ${returned_json}
+
+Fill JSON Template File
+ [Documentation] Runs substitution on template to return a filled in json
+ [Arguments] ${json_file} ${arguments}
+ ${json}= OperatingSystem.Get File ${json_file}
+ ${returned_json}= Fill JSON Template ${json} ${arguments}
+ [Return] ${returned_json}
diff --git a/tests/sdc/dcaed/monitoring_configuration_service_test.robot b/tests/sdc/dcaed/monitoring_configuration_service_test.robot
new file mode 100644
index 00000000..9a4bbc60
--- /dev/null
+++ b/tests/sdc/dcaed/monitoring_configuration_service_test.robot
@@ -0,0 +1,78 @@
+*** Settings ***
+Library ONAPLibrary.Utilities
+
+Resource asdc_interface.robot
+Resource dcaed_interface.robot
+
+*** Test Cases ***
+Create Service With Monitoring Configuration Test
+ [Tags] dcaed
+ [Documentation] Create a service with a monitoring configuration -
+ ... this test case implements the steps described in
+ ... https://wiki.onap.org/display/DW/How+to+Create+a+Service+with+a+Monitoring+Configuration+using+SDC
+ ... excluding distribution of the service
+
+ ${unique_postfix}= Generate Unique Postfix
+ ${test_vf_name}= Set Variable TestVF_${unique_postfix}
+ ${test_cs_name}= Set Variable TestService_${unique_postfix}
+ ${test_vfcmt_name}= Set Variable TestVFCMT_${unique_postfix}
+ ${test_mc_name}= Set Variable TestMC_${unique_postfix}
+
+ ${cert_vf_unique_id} ${cert_vf_uuid} Onboard DCAE Microservice ${test_vf_name}
+ ${cert_vfcmt_uuid} Create Monitoring Template ${test_vfcmt_name} ${cert_vf_uuid}
+ ${cs_unique_id} Create Monitoring Configuration ${test_cs_name} ${cert_vf_unique_id} ${test_vf_name} ${cert_vfcmt_uuid} ${test_mc_name}
+ Approve Service ${cs_unique_id}
+
+*** Keywords ***
+Generate Unique Postfix
+ [Documentation] Create and return unique postfix to be used in various unique names
+ ${tmp_id} = Generate Timestamp
+ ${tmp_str} = Convert To String ${tmp_id}
+ [return] ${tmp_str}
+
+Onboard DCAE Microservice
+ [Documentation] Create DCAE Microservice with a given name, add Tosca artifacts to it and certify it
+ ... Return the unique_id and uuid of the certified VF
+ [Arguments] ${test_vf_name}
+ ${data}= asdc_interface.Create Catalog Resource Data ${test_vf_name} TestVendor
+ ${vf_unique_id}= asdc_interface.Post ASDC Resource Request Unauthenticated ${data}
+
+ asdc_interface.Add Tosca Artifact to Resource template ${vf_unique_id}
+ asdc_interface.Add Tosca Artifact to Resource translate ${vf_unique_id}
+ asdc_interface.Add Tosca Artifact to Resource schema ${vf_unique_id}
+
+ ${cert_vf_unique_id} ${cert_vf_uuid} asdc_interface.Certify ASDC Catalog Resource ${vf_unique_id} ${ASDC_DESIGNER_USER_ID}
+ [return] ${cert_vf_unique_id} ${cert_vf_uuid}
+
+Create Monitoring Template
+ [Documentation] Create a new monitoring template containing the DCAE VF, certify it and return the uuid
+ [Arguments] ${vfcmt_name} ${vf_uuid}
+ ${vfcmt_uuid} dcaed_interface.Add VFCMT To DCAE-DS ${vfcmt_name}
+ dcaed_interface.Save Composition ${vfcmt_uuid} ${vf_uuid}
+
+ # Note that certification is not instructed in
+ # https://wiki.onap.org/display/DW/How+to+Create+a+Service+with+a+Monitoring+Configuration+using+SDC
+ # due to limitations of GUI so this test case goes beyond the instructions at this certification step
+
+ ${cert_vfcmt_uuid} dcaed_interface.Certify VFCMT ${vfcmt_uuid}
+ [return] ${cert_vfcmt_uuid}
+
+Create Monitoring Configuration
+ [Documentation] Create a monitoring configuration for a given service based on a previously created VFCMT
+ ... Return the unique_id of the created catalog service for the monitoring configuration
+ [Arguments] ${service_name} ${vf_unique_id} ${vf_name} ${vfcmt_uuid} ${mc_name}
+ ${cs_unique_id} ${cs_uuid} asdc_interface.Add Catalog Service For Monitoring Template ${service_name}
+ ${vfi_uuid} ${vfi_name} asdc_interface.Add ASDC Resource Instance ${cs_unique_id} ${vf_unique_id} ${vf_name}
+ ${mc_uuid} dcaed_interface.Add Monitoring Configuration To DCAE-DS ${vfcmt_uuid} ${cs_uuid} ${vfi_name} ${mc_name}
+ dcaed_interface.Submit Monitoring Configuration To DCAE-DS ${mc_uuid} ${cs_uuid} ${vfi_name}
+ [return] ${cs_unique_id}
+
+Approve Service
+ [Documentation] Perform the required steps to certify and approve the given ASDC catalog service
+ [Arguments] ${cs_unique_id}
+ asdc_interface.Checkin ASDC Catalog Service ${cs_unique_id}
+ asdc_interface.Request Certify ASDC Catalog Service ${cs_unique_id}
+ asdc_interface.Start Certify ASDC Catalog Service ${cs_unique_id}
+ ${cert_cs_unique_id}= asdc_interface.Certify ASDC Catalog Service ${cs_unique_id}
+ asdc_interface.Approve ASDC Catalog Service ${cert_cs_unique_id}
+
diff --git a/tests/usecases/5G-bulkpm/BulkpmE2E.robot b/tests/usecases/5G-bulkpm/BulkpmE2E.robot
index 84243cba..cac93f7f 100644
--- a/tests/usecases/5G-bulkpm/BulkpmE2E.robot
+++ b/tests/usecases/5G-bulkpm/BulkpmE2E.robot
@@ -19,7 +19,7 @@ ${TARGETURL_SUBSCR} http://${DMAAP_MR_IP}:3904/events/unaut
${CLI_EXEC_CLI} curl -k https://${DR_PROV_IP}:8443/internal/prov
${CLI_EXEC_CLI_FILECONSUMER} docker exec fileconsumer-node /bin/sh -c "ls /opt/app/subscriber/delivery | grep .xml"
${CLI_EXEC_CLI_DFC_LOG} docker exec dfc /bin/sh -c "cat /var/log/ONAP/application.log" > /tmp/dfc_docker.log.robot
-${CLI_EXEC_CLI_DFC_LOG_GREP} grep "Publish to DR successful!" /tmp/dfc_docker.log.robot
+${CLI_EXEC_CLI_DFC_LOG_GREP} grep "Datafile file published" /tmp/dfc_docker.log.robot
${CLI_EXEC_CLI_FILECONSUMER_CP} docker cp fileconsumer-node:/opt/app/subscriber/delivery/A20181002.0000-1000-0015-1000_5G.xml.M %{WORKSPACE}
${CLI_EXEC_RENAME_METADATA} mv %{WORKSPACE}/A20181002.0000-1000-0015-1000_5G.xml.M %{WORKSPACE}/metadata.json
${CLI_EXEC_CLI_PMMAPPER_LOG} docker exec pmmapper /bin/sh -c "cat /var/log/ONAP/dcaegen2/services/pm-mapper/pm-mapper_output.log" > /tmp/pmmapper_docker.log.robot
@@ -71,7 +71,7 @@ Verify Data File Collector successfully publishes the PM XML file to the Data Ro
${cli_cmd_output}= Run Process ${CLI_EXEC_CLI_DFC_LOG_GREP} shell=yes
Log ${cli_cmd_output.stdout}
Should Be Equal As Strings ${cli_cmd_output.rc} 0
- Should Contain ${cli_cmd_output.stdout} Publish to DR successful!
+ Should Contain ${cli_cmd_output.stdout} Datafile file published
Verify Default Feed And File Consumer Subscription On Datarouter
diff --git a/tests/vid/resources/docker-compose.yml b/tests/vid/resources/docker-compose.yml
index 6bd0c138..6aaa5a7e 100644
--- a/tests/vid/resources/docker-compose.yml
+++ b/tests/vid/resources/docker-compose.yml
@@ -1,7 +1,7 @@
version: '3'
services:
vid-server:
- image: nexus3.onap.org:10001/onap/vid:4.3-STAGING-latest
+ image: nexus3.onap.org:10001/onap/vid:5.0-STAGING-latest
environment:
- VID_MYSQL_DBNAME=vid_openecomp_epsdk
- VID_MYSQL_PASS=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U