diff options
39 files changed, 1400 insertions, 0 deletions
diff --git a/plans/dcaegen2-services-bbs-event-processor/bbs-testsuites/setup.sh b/plans/dcaegen2-services-bbs-event-processor/bbs-testsuites/setup.sh new file mode 100644 index 00000000..9551ce43 --- /dev/null +++ b/plans/dcaegen2-services-bbs-event-processor/bbs-testsuites/setup.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +source ${SCRIPTS}/common_functions.sh + +export BBS_SERVICE="bbs" +# export SSL_BBS_SERVICE="ssl_bbs" +export DMAAP_SIMULATOR="dmaap_simulator" +export AAI_SIMULATOR="aai_simulator" + +cd ${WORKSPACE}/tests/dcaegen2/bbs-testcases/resources/ + +pip uninstall -y docker-py +pip uninstall -y docker +pip install -U docker==2.7.0 +docker-compose up -d --build + +BBS_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${BBS_SERVICE}) +# SSL_BBS_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${SSL_BBS_SERVICE}) +DMAAP_SIMULATOR_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${DMAAP_SIMULATOR}) +AAI_SIMULATOR_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${AAI_SIMULATOR}) + +bypass_ip_adress ${BBS_IP} +# bypass_ip_adress ${SSL_BBS_IP} +bypass_ip_adress ${DMAAP_SIMULATOR_IP} +bypass_ip_adress ${AAI_SIMULATOR_IP} + +echo BBS_IP=${BBS_IP} +# echo SSL_BBS_IP=${SSL_BBS_IP} +echo DMAAP_SIMULATOR_IP=${DMAAP_SIMULATOR_IP} +echo AAI_SIMULATOR_IP=${AAI_SIMULATOR_IP} + +# Wait for initialization of BBS services +# Same ports in the testcases docker compose +wait_for_service_init localhost:32100/heartbeat +#wait_for_service_init localhost:8200/heartbeat + +# #Pass any variables required by Robot test suites in ROBOT_VARIABLES +ROBOT_VARIABLES="-v DMAAP_SIMULATOR_SETUP:${DMAAP_SIMULATOR_IP}:2224 -v AAI_SIMULATOR_SETUP:${AAI_SIMULATOR_IP}:3335" + diff --git a/plans/dcaegen2-services-bbs-event-processor/bbs-testsuites/teardown.sh b/plans/dcaegen2-services-bbs-event-processor/bbs-testsuites/teardown.sh new file mode 100644 index 00000000..6cc85f54 --- /dev/null +++ b/plans/dcaegen2-services-bbs-event-processor/bbs-testsuites/teardown.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# +# Copyright 2017 Nokia, Inc. and others. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +kill-instance.sh bbs +# kill-instance.sh ssl_bbs +kill-instance.sh dmaap_simulator +kill-instance.sh aai_simulator diff --git a/plans/dcaegen2-services-bbs-event-processor/bbs-testsuites/testplan.txt b/plans/dcaegen2-services-bbs-event-processor/bbs-testsuites/testplan.txt new file mode 100644 index 00000000..9f1794bd --- /dev/null +++ b/plans/dcaegen2-services-bbs-event-processor/bbs-testsuites/testplan.txt @@ -0,0 +1,3 @@ +# Test suites are relative paths under [integration/csit.git]/tests/. +# Place the suites in run order. +dcaegen2/bbs-testcases diff --git a/tests/dcaegen2/bbs-testcases/__init__.robot b/tests/dcaegen2/bbs-testcases/__init__.robot new file mode 100644 index 00000000..d9957dd3 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/__init__.robot @@ -0,0 +1,2 @@ +*** Settings *** +Documentation Integration - BBS suite
\ No newline at end of file diff --git a/tests/dcaegen2/bbs-testcases/assets/aai_records/aai_pnf_not_found.json b/tests/dcaegen2/bbs-testcases/assets/aai_records/aai_pnf_not_found.json new file mode 100644 index 00000000..23c169fd --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/aai_records/aai_pnf_not_found.json @@ -0,0 +1,17 @@ +[ +{ + "requestError": { + "serviceException": { + "messageId": "SVC3001", + "text": "Resource not found for %1 using id %2 (msg=%3) (ec=%4)", + "variables": [ + "GET", + "nodes/pnfs/pnf/Wrong-PNF-Name", + "Node Not Found:No Node of type pnf found at: nodes/pnfs/pnf/Wrong-PNF-Name", + "ERR.5.4.6114" + ] + } + } +} + +] diff --git a/tests/dcaegen2/bbs-testcases/assets/aai_records/aai_pnfs.json b/tests/dcaegen2/bbs-testcases/assets/aai_records/aai_pnfs.json new file mode 100644 index 00000000..4ea7827f --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/aai_records/aai_pnfs.json @@ -0,0 +1,46 @@ +[ +{ + "pnf-name": "NVendor-Equip_Model-SN1234", + "in-maint": true, + "resource-version": "1551889263181", + "relationship-list": { + "relationship": [ + { + "related-to": "service-instance", + "relationship-label": "org.onap.relationships.inventory.ComposedOf", + "related-link": "/aai/v14/business/customers/customer/766162a3-53a9-42b8-8fe2-ebaa2213a6dd/service-subscriptions/service-subscription/BBS-CFS11/service-instances/service-instance/1923eaa8-8ab7-49ef-b4c2-e185efbbe832", + "relationship-data": [ + { + "relationship-key": "customer.global-customer-id", + "relationship-value": "766162a3-53a9-42b8-8fe2-ebaa2213a6dd" + }, + { + "relationship-key": "service-subscription.service-type", + "relationship-value": "BBS-CFS11" + }, + { + "relationship-key": "service-instance.service-instance-id", + "relationship-value": "1923eaa8-8ab7-49ef-b4c2-e185efbbe832" + } + ], + "related-to-property": [ + { + "property-key": "service-instance.service-instance-name" + } + ] + }, + { + "related-to": "logical-link", + "relationship-label": "org.onap.relationships.inventory.BridgedTo", + "related-link": "/aai/v14/network/logical-links/logical-link/olt11-11-11", + "relationship-data": [ + { + "relationship-key": "logical-link.link-name", + "relationship-value": "olt11-11-11" + } + ] + } + ] + } +} +] diff --git a/tests/dcaegen2/bbs-testcases/assets/aai_records/aai_services.json b/tests/dcaegen2/bbs-testcases/assets/aai_records/aai_services.json new file mode 100644 index 00000000..351cc780 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/aai_records/aai_services.json @@ -0,0 +1,46 @@ +[ +{ + "service-instance-id": "1923eaa8-8ab7-49ef-b4c2-e185efbbe832", + "resource-version": "1551889260591", + "orchestration-status": "assigned", + "relationship-list": { + "relationship": [ + { + "related-to": "pnf", + "relationship-label": "org.onap.relationships.inventory.ComposedOf", + "related-link": "/aai/v14/network/pnfs/pnf/NVendor-Equip_Model-SN1234", + "relationship-data": [ + { + "relationship-key": "pnf.pnf-name", + "relationship-value": "NVendor-Equip_Model-SN1234" + } + ] + } + ] + }, + "metadata": { + "metadatum": [ + { + "metaname": "cvlan", + "metaval": "1005", + "resource-version": "1551889260599" + }, + { + "metaname": "svlan", + "metaval": "100", + "resource-version": "1551889260608" + }, + { + "metaname": "oltName", + "metaval": "olt1", + "resource-version": "1551889260616" + }, + { + "metaname": "rgw-mac-address", + "metaval": "01:02:03:04:05:06", + "resource-version": "1551889260624" + } + ] + } +} +] diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_all_fields.json b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_all_fields.json new file mode 100644 index 00000000..3ad1fec0 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_all_fields.json @@ -0,0 +1,30 @@ +{ + "event": { + "commonEventHeader": { + "version": "4.0.1", + "eventName": "StateChange_cpe_authentication", + "domain": "stateChange", + "eventId": "ab305d54-85b4-a31b-7db2fb6b9e546015", + "eventType": "applicationNf", + "sourceId": "", + "sourceName": "NVendor-Equip_Model-SN1234", + "reportingEntityId": "", + "reportingEntityName": "thirdparty-sdnc-idfromesrrequest", + "priority": "Normal", + "startEpochMicrosec": 1.413378172e+15, + "lastEpochMicrosec": 1.413378172e+15, + "sequence": 0, + "vesEventListenerVersion": "7.1" + }, + "stateChangeFields": { + "stateChangeFieldsVersion": 1, + "oldState": "outOfService", + "newState": "inService", + "stateInterface": "", + "additionalFields": { + "macAddress": "01:02:03:04:05:06", + "swVersion": "1.2.3" + } + } + } +} diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_new_old_state.json b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_new_old_state.json new file mode 100644 index 00000000..2c14d468 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_new_old_state.json @@ -0,0 +1,29 @@ +{ + "event": { + "commonEventHeader": { + "version": "4.0.1", + "eventName": "StateChange_cpe_authentication", + "domain": "stateChange", + "eventId": "ab305d54-85b4-a31b-7db2fb6b9e546015", + "eventType": "applicationNf", + "sourceId": "", + "sourceName": "NVendor-Equip_Model-SN1234", + "reportingEntityId": "", + "reportingEntityName": "thirdparty-sdnc-idfromesrrequest", + "priority": "Normal", + "startEpochMicrosec": 1.413378172e+15, + "lastEpochMicrosec": 1.413378172e+15, + "sequence": 0, + "vesEventListenerVersion": "7.1" + }, + "stateChangeFields": { + "stateChangeFieldsVersion": 1, + "oldState": "", + "newState": "", + "stateInterface": "", + "additionalFields": { + "macAddress": "01:02:03:04:05:06" + } + } + } +}
\ No newline at end of file diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_rgmac.json b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_rgmac.json new file mode 100644 index 00000000..21d97259 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_rgmac.json @@ -0,0 +1,30 @@ +{ + "event": { + "commonEventHeader": { + "version": "4.0.1", + "eventName": "StateChange_cpe_authentication", + "domain": "stateChange", + "eventId": "ab305d54-85b4-a31b-7db2fb6b9e546015", + "eventType": "applicationNf", + "sourceId": "", + "sourceName": "NVendor-Equip_Model-SN1234", + "reportingEntityId": "", + "reportingEntityName": "thirdparty-sdnc-idfromesrrequest", + "priority": "Normal", + "startEpochMicrosec": 1.413378172e+15, + "lastEpochMicrosec": 1.413378172e+15, + "sequence": 0, + "vesEventListenerVersion": "7.1" + }, + "stateChangeFields": { + "stateChangeFieldsVersion": 1, + "oldState": "outOfService", + "newState": "inService", + "stateInterface": "", + "additionalFields": { + "macAddress": "", + "swVersion": "1.2.3" + } + } + } +} diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_sourceName.json b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_sourceName.json new file mode 100644 index 00000000..538a56c6 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_sourceName.json @@ -0,0 +1,30 @@ +{ + "event": { + "commonEventHeader": { + "version": "4.0.1", + "eventName": "StateChange_cpe_authentication", + "domain": "stateChange", + "eventId": "ab305d54-85b4-a31b-7db2fb6b9e546015", + "eventType": "applicationNf", + "sourceId": "", + "sourceName": "", + "reportingEntityId": "", + "reportingEntityName": "thirdparty-sdnc-idfromesrrequest", + "priority": "Normal", + "startEpochMicrosec": 1.413378172e+15, + "lastEpochMicrosec": 1.413378172e+15, + "sequence": 0, + "vesEventListenerVersion": "7.1" + }, + "stateChangeFields": { + "stateChangeFieldsVersion": 1, + "oldState": "outOfService", + "newState": "inService", + "stateInterface": "", + "additionalFields": { + "macAddress": "01:02:03:04:05:06", + "swVersion": "1.2.3" + } + } + } +} diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_wrong_sourceName.json b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_wrong_sourceName.json new file mode 100644 index 00000000..39a9e4ae --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_wrong_sourceName.json @@ -0,0 +1,30 @@ +{ + "event": { + "commonEventHeader": { + "version": "4.0.1", + "eventName": "StateChange_cpe_authentication", + "domain": "stateChange", + "eventId": "ab305d54-85b4-a31b-7db2fb6b9e546015", + "eventType": "applicationNf", + "sourceId": "", + "sourceName": "Wrong-PNF-Name", + "reportingEntityId": "", + "reportingEntityName": "thirdparty-sdnc-idfromesrrequest", + "priority": "Normal", + "startEpochMicrosec": 1.413378172e+15, + "lastEpochMicrosec": 1.413378172e+15, + "sequence": 0, + "vesEventListenerVersion": "7.1" + }, + "stateChangeFields": { + "stateChangeFieldsVersion": 1, + "oldState": "outOfService", + "newState": "inService", + "stateInterface": "", + "additionalFields": { + "macAddress": "01:02:03:04:05:06", + "swVersion": "1.2.3" + } + } + } +} diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_without_swversion.json b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_without_swversion.json new file mode 100644 index 00000000..fcacf1ce --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_without_swversion.json @@ -0,0 +1,16 @@ +{ + "event": { + "commonEventHeader": { + "sourceName":"NVendor-Equip_Model-SN1234" + }, + "stateChangeFields": { + "stateChangeFieldsVersion": 1, + "newState": "inService", + "oldState": "outOfService", + "stateInterface": "", + "additionalFields": { + "macAddress": "00:11:22:33:44:55" + } + } + } +} diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/auth_not_json_format.json b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_not_json_format.json new file mode 100644 index 00000000..7801ad69 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_not_json_format.json @@ -0,0 +1,30 @@ +{ + "event": { + "commonEventHeader": { + "version": "4.0.1", + "eventName": "StateChange_cpe_authentication", + "domain": "stateChange", + "eventId": "ab305d54-85b4-a31b-7db2fb6b9e546015", + "eventType": "applicationNf", + "sourceId": "", + "sourceName": "NVendor-Equip_Model-SN1234pnf-11", + "reportingEntityId": "", + "reportingEntityName": "thirdparty-sdnc-idfromesrrequest", + "priority": "Normal", + "startEpochMicrosec": 1.413378172e+15, + "lastEpochMicrosec": 1.413378172e+15, + "sequence": 0, + "vesEventListenerVersion": "7.1" + }, + "stateChangeFields": { + "stateChangeFieldsVersion": 1, + "oldState": "outOfService", + "newState": "inService", + "stateInterface": "", + "additionalFields": { + "macAddress": "01:02:03:04:05:06", + "swVersion": "1.2.3", + } + } + } +} diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/auth_policy_with_all_fields.json b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_policy_with_all_fields.json new file mode 100644 index 00000000..05b15fbf --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/auth_policy_with_all_fields.json @@ -0,0 +1,23 @@ +[ + { + "closedLoopEventClient": "DCAE.BBS_event_processor_mSInstance", + "policyVersion": "1.0.0.5", + "policyName": "CPE_Authentication", + "policyScope": "policyScopeCpeAuth", + "target_type": "VM", + "AAI": + { + "cpe.old-authentication-state": "outOfService", + "cpe.new-authentication-state": "inService", + "cpe.swVersion": "1.2.3", + "service-information.hsia-cfs-service-instance-id": "1923eaa8-8ab7-49ef-b4c2-e185efbbe832" + }, + "closedLoopAlarmStart": 1552997462, + "closedLoopEventStatus": "ONSET", + "closedLoopControlName": "clControlNameCpeAuth", + "version": "1.0.2", + "target": "vserver.vserver-name", + "requestID": "d76541f3-7f55-4c80-b0a0-ec5dee2a56cb", + "from": "DCAE" + } +] diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_all_fields.json b/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_all_fields.json new file mode 100644 index 00000000..6fe23199 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_all_fields.json @@ -0,0 +1,16 @@ +{ + "nf-role":"role", + "equip-type":"Equipment-Type-1", + "equip-vendor":"NVendor", + "equip-model":"Equip_Model", + "serial-number":"SN1234", + "sw-version":"SW-version-1", + "correlationId":"NVendor-Equip_Model-SN1234", + "additionalFields": { + "attachment-point": "olt1-1-1", + "cvlan": "1005", + "svlan": "100", + "remote-id": "some-remote-id" + } + } +
\ No newline at end of file diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_missing_attachment.json b/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_missing_attachment.json new file mode 100644 index 00000000..43d1b212 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_missing_attachment.json @@ -0,0 +1,15 @@ +{ + "nf-role":"role", + "equip-type":"Equipment-Type-1", + "equip-vendor":"NVendor", + "equip-model":"Equip_Model", + "serial-number":"SN1234", + "sw-version":"SW-version-1", + "correlationId":"NVendor-Equip_Model-SN1234", + "additionalFields": { + "attachment-point": "", + "cvlan": "1005", + "svlan": "100", + "remote-id": "some-remote-id" + } + } diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_missing_correlation.json b/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_missing_correlation.json new file mode 100644 index 00000000..a1aaee30 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_missing_correlation.json @@ -0,0 +1,15 @@ +{ + "nf-role":"role", + "equip-type":"Equipment-Type-1", + "equip-vendor":"Vendor", + "equip-model":"Equip_Model", + "serial-number":"SN1234", + "sw-version":"SW-version-1", + "correlationId":"", + "additionalFields": { + "attachment-point": "olt1-1-1", + "cvlan": "1005", + "svlan": "100", + "remote-id": "some-remote-id" + } + } diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_wrong_correlation.json b/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_wrong_correlation.json new file mode 100644 index 00000000..f1dca037 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_wrong_correlation.json @@ -0,0 +1,15 @@ +{ + "nf-role":"role", + "equip-type":"Equipment-Type-1", + "equip-vendor":"NVendor", + "equip-model":"Equip_Model", + "serial-number":"SN1234", + "sw-version":"SW-version-1", + "correlationId":"Wrong-Correlation-Id", + "additionalFields": { + "attachment-point": "olt1-1-1", + "cvlan": "1005", + "svlan": "100", + "remote-id": "some-remote-id" + } + } diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/update_not_json_format.json b/tests/dcaegen2/bbs-testcases/assets/json_events/update_not_json_format.json new file mode 100644 index 00000000..ab5b214a --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/update_not_json_format.json @@ -0,0 +1,15 @@ +{ + "nf-role":"role", + "equip-type":"Equipment-Type-1", + "equip-vendor":"NVendor", + "equip-model":"Equip_Model", + "serial-number":"SN1234", + "sw-version":"SW-version-1", + "correlationId":"NVendor-Equip_Model-SN1234", + "additionalFields": { + "attachment-point": "olt1-1-1", + "cvlan": "1005", + "svlan": "100", + "remote-id": "some-remote-id", + } + } diff --git a/tests/dcaegen2/bbs-testcases/assets/json_events/update_policy_with_all_fields.json b/tests/dcaegen2/bbs-testcases/assets/json_events/update_policy_with_all_fields.json new file mode 100644 index 00000000..49402657 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/assets/json_events/update_policy_with_all_fields.json @@ -0,0 +1,24 @@ +[ + { + "closedLoopEventClient": "DCAE.BBS_event_processor_mSInstance", + "policyVersion": "1.0.0.5", + "policyName": "Nomadic_ONT", + "policyScope": "reRegPolicyScope", + "target_type": "VM", + "AAI":{ + "attachmentPoint": "olt11-1-1", + "service-information.hsia-cfs-service-instance-id": "1923eaa8-8ab7-49ef-b4c2-e185efbbe832", + "cvlan": "1005", + "svlan": "100", + "remoteId": "some-remote-id" + }, + "closedLoopAlarmStart": 1553067455, + "closedLoopEventStatus": "ONSET", + "closedLoopControlName": "reRegControlName", + "version": "1.0.2", + "target": "vserver.vserver-name", + "requestID": + "407a6515-4b10-46ad-a249-efe529a36c69", + "from": "DCAE" + } +] diff --git a/tests/dcaegen2/bbs-testcases/bbs_tests.robot b/tests/dcaegen2/bbs-testcases/bbs_tests.robot new file mode 100644 index 00000000..4721e425 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/bbs_tests.robot @@ -0,0 +1,117 @@ +*** Settings *** +Documentation Integration tests for BBS. +... BBS receives CPE_AUTHENTICATION event from DMaaP and triggers a Policy that updates the CFS service with the PNF. +... BBS receives PNF_UPDATE event from DMaaP and triggers a Policy that updates the CFS service resources associated with the PNF. +Resource resources/bbs_library.robot +Resource ../../common.robot +Suite Setup Run keywords Create header AND Create sessions AND Set AAI Records AND Ensure Container Is Running bbs +Test Teardown Reset Simulators + + +*** Variables *** +${DMAAP_SIMULATOR_SETUP_URL} http://${DMAAP_SIMULATOR_SETUP} +${AAI_SIMULATOR_SETUP_URL} http://${AAI_SIMULATOR_SETUP} +${AUTH_EVENT_WITH_ALL_VALID_REQUIRED_FIELDS} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_all_fields.json +${AUTH_EVENT_WITH_WRONG_SOURCENAME} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_wrong_sourceName.json +${AUTH_EVENT_WITHOUT_SWVERSION} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_without_swversion.json +${AUTH_EVENT_WITH_MISSING_RGMAC} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_rgmac.json +${AUTH_EVENT_WITH_MISSING_STATE} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_new_old_state.json +${AUTH_EVENT_WITH_MISSING_SOURCENAME} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_sourceName.json +${AUTH_NOT_JSON_FORMAT} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/auth_not_json_format.json +${AUTH_POLICY} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/auth_policy_with_all_fields.json +${UPDATE_EVENT_WITH_ALL_VALID_REQUIRED_FIELDS} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_all_fields.json +${UPDATE_EVENT_WITH_WRONG_CORRELATION} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_wrong_correlation.json +${UPDATE_EVENT_WITH_MISSING_ATTACHMENT} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_missing_attachment.json +${UPDATE_EVENT_WITH_MISSING_CORRELATION} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_missing_correlation.json +${UPDATE_NOT_JSON_FORMAT} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/update_not_json_format.json +${UPDATE_POLICY} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/json_events/update_policy_with_all_fields.json +${AAI_PNFS} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/aai_records/aai_pnfs.json +${AAI_SERVICES} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/aai_records/aai_services.json +${AAI_PNF_NOT_FOUND} %{WORKSPACE}/tests/dcaegen2/bbs-testcases/assets/aai_records/aai_pnf_not_found.json + +*** Test Cases *** +Valid DMaaP CPE_AUTHENTICATION event can trigger Policy + [Documentation] BBS get valid CPE_AUTHENTICATION event from DMaaP with required fields - BBS triggers Policy + [Tags] BBS Valid CPE_AUTHENTICATION event + [Template] Valid auth event processing + ${AUTH_EVENT_WITH_ALL_VALID_REQUIRED_FIELDS} + ${AUTH_EVENT_WITHOUT_SWVERSION} + +Invalid DMaaP CPE_AUTHENTICATION event RG MAC cannot trigger Policy + [Documentation] BBS get invalid RG MAC CPE_AUTHENTICATION event from DMaaP with missing required fields - BBS does not trigger Policy + [Tags] BBS Invalid RG MAC CPE_AUTHENTICATION event + [Template] Invalid rgmac auth event processing + ${AUTH_EVENT_WITH_MISSING_RGMAC} + +Invalid DMaaP CPE_AUTHENTICATION event cannot trigger Policy + [Documentation] BBS get invalid CPE_AUTHENTICATION event from DMaaP with missing required fields - BBS does not trigger Policy + [Tags] BBS Invalid CPE_AUTHENTICATION event + [Template] Invalid auth event processing + ${AUTH_EVENT_WITH_MISSING_STATE} + ${AUTH_EVENT_WITH_MISSING_SOURCENAME} + +Get valid CPE_AUTHENTICATION event from DMaaP and PNF record in AAI does not exist + [Documentation] BBS get valid event from DMaaP with all required fields and in AAI record doesn't exist - BBS does not trigger Policy + [Tags] BBS Missing AAI record + [Timeout] 30s + ${data}= Get Data From File ${AUTH_EVENT_WITH_WRONG_SOURCENAME} + Set event in DMaaP ${data} + Wait Until Keyword Succeeds 20x 2000ms Check BBS log Error while retrieving PNF: A&AI Request for (/aai/v14/network/pnfs/pnf/Wrong-PNF-Name?depth=all) + +CPE_AUTHENTICATION Event in DMaaP is not JSON format + [Documentation] BBS CPE_AUTHENTICATION not JSON format event from DMaaP - BBS does not Trigger Policy + [Tags] BBS + ${data}= Get Data From File ${AUTH_NOT_JSON_FORMAT} + Set event in DMaaP ${data} + Wait Until Keyword Succeeds 20x 2000ms Check BBS log DMaaP Consumption Exception: Not a JSON Array: + +# Get valid CPE_AUTHENTICATION event from DMaaP and AAI is not responding +# [Documentation] BBS get valid CPE_AUTHENTICATION event from DMaaP with all required fields and AAI is not responding - BBS does not trigger Policy +# [Tags] BBS AAI Uses containers +# [Timeout] 180s +# ${data}= Get Data From File ${AUTH_EVENT_WITH_ALL_VALID_REQUIRED_FIELDS} +# Ensure Container Is Exited aai_simulator +# Set event in DMaaP ${data} +# Wait Until Keyword Succeeds 20x 2000ms Check BBS log Error while retrieving PNF: aai_simulator: Try again +# Ensure Container Is Running aai_simulator +# Set AAI Records + +Valid DMaaP PNF_UPDATE event can trigger Policy + [Documentation] BBS get valid PNF_UPDATE event from DMaaP with required fields - BBS triggers Policy + [Tags] BBS Valid PNF_UPDATE event + [Template] Valid update event processing + ${UPDATE_EVENT_WITH_ALL_VALID_REQUIRED_FIELDS} + +Invalid DMaaP PNF_UPDATE event cannot trigger Policy + [Documentation] BBS get invalid PNF_UPDATE event from DMaaP with missing required fields - BBS does not trigger Policy + [Tags] BBS Invalid PNF_UPDATE event + [Template] Invalid update event processing + ${UPDATE_EVENT_WITH_MISSING_ATTACHMENT} + ${UPDATE_EVENT_WITH_MISSING_CORRELATION} + +Get valid PNF_UPDATE event from DMaaP and PNF record in AAI does not exist + [Documentation] BBS get valid PNF_UPDATE event from DMaaP with all required fields and in AAI record doesn't exist - BBS does not trigger Policy + [Tags] BBS Missing AAI record + [Timeout] 30s + ${data}= Get Data From File ${UPDATE_EVENT_WITH_WRONG_CORRELATION} + Set event in DMaaP ${data} + Wait Until Keyword Succeeds 20x 2000ms Check BBS log Error while retrieving PNF: A&AI Request for (/aai/v14/network/pnfs/pnf/Wrong-Correlation-Id?depth=all) + + +PNF_UPDATE Event in DMaaP is not JSON format + [Documentation] BBS PNF_UPDATE not JSON format event from DMaaP - BBS does not Trigger Policy + [Tags] BBS + ${data}= Get Data From File ${UPDATE_NOT_JSON_FORMAT} + Set event in DMaaP ${data} + Wait Until Keyword Succeeds 20x 2000ms Check BBS log DMaaP Consumption Exception: Not a JSON Array: + +# Get valid PNF_UPDATE event from DMaaP and AAI is not responding +# [Documentation] BBS get valid PNF_UPDATE event from DMaaP with all required fields and AAI is not responding - BBS does not trigger Policy +# [Tags] BBS AAI Uses containers +# [Timeout] 180s +# ${data}= Get Data From File ${UPDATE_EVENT_WITH_ALL_VALID_REQUIRED_FIELDS} +# Ensure Container Is Exited aai_simulator +# Set event in DMaaP ${data} +# Wait Until Keyword Succeeds 20x 2000ms Check BBS log Error while retrieving PNF: aai_simulator: Try again +# Ensure Container Is Running aai_simulator +# Set AAI Records diff --git a/tests/dcaegen2/bbs-testcases/resources/BbsLibrary.py b/tests/dcaegen2/bbs-testcases/resources/BbsLibrary.py new file mode 100644 index 00000000..8dbdc5a3 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/BbsLibrary.py @@ -0,0 +1,173 @@ +import json + +import docker +import time +from docker.utils.json_stream import json_stream +from collections import OrderedDict + + +class BbsLibrary(object): + + def __init__(self): + pass + + @staticmethod + def check_for_log(search_for): + client = docker.from_env() + container = client.containers.get('bbs') + + alog = container.logs(stream=False, tail=1000) + try: + alog = alog.decode() + except AttributeError: + pass + + found = alog.find(search_for) + if found != -1: + return True + else: + return False + + @staticmethod + def create_pnf_name_from_auth(json_file): + json_to_python = json.loads(json_file) + correlation_id = json_to_python.get("event").get("commonEventHeader").get("sourceName") + return correlation_id + + @staticmethod + def get_invalid_auth_elements(json_file): + """ + Get the correlationId, oldState, newState, stateInterface, macAddress, swVersion elements + from the invalid message and place the elements into a JSON object (string) as fields for comparision + """ + json_to_python = json.loads(json_file) + correlation_id = json_to_python.get("event").get("commonEventHeader").get("sourceName") + oldState = json_to_python.get("event").get("stateChangeFields").get("oldState") + newState = json_to_python.get("event").get("stateChangeFields").get("newState") + stateInterface = json_to_python.get("event").get("stateChangeFields").get("stateInterface") + macAddress = json_to_python.get("event").get("stateChangeFields").get("additionalFields").get("macAddress") + swVersion = json_to_python.get("event").get("stateChangeFields").get("additionalFields").get("swVersion") + if swVersion is None: + swVersion = "" + + inv_fields = OrderedDict() + + #inv_fields = dict() + inv_fields['correlationId'] = correlation_id + inv_fields['oldState'] = oldState + inv_fields['newState'] = newState + inv_fields['stateInterface'] = stateInterface + inv_fields['macAddress'] = macAddress + inv_fields['swVersion'] = swVersion + + # Transform the dictionary to JSON string + json_str = json.dumps(inv_fields) + + # Need to remove spaces between elements + json_str = json_str.replace(', ', ',') + return json_str + + @staticmethod + def get_invalid_update_elements(json_file): + """ + Get the correlationId, attachment-point, remote-id, cvlan, svlan, elements + from the invalid message and place the elements into a JSON object (string) as fields for comparision + """ + json_to_python = json.loads(json_file) + correlation_id = json_to_python.get("correlationId") + attachmentPoint = json_to_python.get("additionalFields").get("attachment-point") + remoteId = json_to_python.get("additionalFields").get("remote-id") + cvlan = json_to_python.get("additionalFields").get("cvlan") + svlan = json_to_python.get("additionalFields").get("svlan") + + inv_fields = OrderedDict() + #inv_fields = dict() + inv_fields['correlationId'] = correlation_id + inv_fields['attachment-point'] = attachmentPoint + inv_fields['remote-id'] = remoteId + inv_fields['cvlan'] = cvlan + inv_fields['svlan'] = svlan + + # Transform the dictionary to JSON string + json_str = json.dumps(inv_fields) + + # Need to remove spaces between elements + json_str = json_str.replace(', ', ',') + return json_str + + @staticmethod + def compare_policy(dmaap_policy, json_policy): + resp = False + try: + python_policy = json.loads(json_policy).pop() + except: + python_policy = "" + + try: + python_dmaap_policy = json.loads(dmaap_policy) + except: + python_dmaap_policy = "" + + try: + d_policy = python_dmaap_policy.get("policyName") + except: + d_policy = "" + + try: + j_policy = python_policy.get("policyName") + except: + return "False" + + resp = "False" + if (d_policy == j_policy): + resp = "True" + return resp + + @staticmethod + def create_pnf_name_from_update(json_file): + json_to_python = json.loads(json_file) + correlation_id = json_to_python.get("correlationId") + return correlation_id + + @staticmethod + def ensure_container_is_running(name): + + client = docker.from_env() + + if not BbsLibrary.is_in_status(client, name, "running"): + print ("starting container", name) + container = client.containers.get(name) + container.start() + BbsLibrary.wait_for_status(client, name, "running") + + BbsLibrary.print_status(client) + + @staticmethod + def ensure_container_is_exited(name): + + client = docker.from_env() + + if not BbsLibrary.is_in_status(client, name, "exited"): + print ("stopping container", name) + container = client.containers.get(name) + container.stop() + BbsLibrary.wait_for_status(client, name, "exited") + + BbsLibrary.print_status(client) + + @staticmethod + def print_status(client): + print("containers status") + for c in client.containers.list(all=True): + print(c.name, " ", c.status) + + @staticmethod + def wait_for_status(client, name, status): + while not BbsLibrary.is_in_status(client, name, status): + print ("waiting for container: ", name, "to be in status: ", status) + time.sleep(3) + + @staticmethod + def is_in_status(client, name, status): + return len(client.containers.list(all=True, filters={"name": "^/"+name+"$", "status": status})) == 1 + diff --git a/tests/dcaegen2/bbs-testcases/resources/bbs_library.robot b/tests/dcaegen2/bbs-testcases/resources/bbs_library.robot new file mode 100644 index 00000000..34c94caa --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/bbs_library.robot @@ -0,0 +1,108 @@ +*** Settings *** +Library RequestsLibrary +Library Collections +Library BbsLibrary.py +Resource ../../../common.robot + +*** Keywords *** +Create header + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json + Set Suite Variable ${suite_headers} ${headers} + +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 + +Reset Simulators + Reset AAI simulator + Reset DMaaP simulator + +Set AAI Records + [Timeout] 30s + ${data}= Get Data From File ${AAI_PNFS} + ${headers}= Create Dictionary Accept=application/json Content-Type=text/html + ${resp} = Put Request ${aai_setup_session} /set_pnfs headers=${headers} data=${data} + Should Be Equal As Strings ${resp.status_code} 200 + ${data}= Get Data From File ${AAI_SERVICES} + ${headers}= Create Dictionary Accept=application/json Content-Type=text/html + ${resp} = Put Request ${aai_setup_session} /set_services headers=${headers} data=${data} + Should Be Equal As Strings ${resp.status_code} 200 + ${data}= Get Data From File ${AAI_PNF_NOT_FOUND} + ${headers}= Create Dictionary Accept=application/json Content-Type=text/html + ${resp} = Put Request ${aai_setup_session} /set_pnf_not_found headers=${headers} data=${data} + Should Be Equal As Strings ${resp.status_code} 200 + +Invalid rgmac auth event processing + [Arguments] ${input_invalid_event_in_dmaap} + [Timeout] 30s + ${data}= Get Data From File ${input_invalid_event_in_dmaap} + Set event in DMaaP ${data} + ${err_msg}= Catenate SEPARATOR= \\n RGW MAC address taken from event (Optional[]) does not match with A&AI metadata corresponding value + Wait Until Keyword Succeeds 20x 2000ms Check BBS log ${err_msg} + +Invalid auth event processing + [Arguments] ${input_invalid_event_in_dmaap} + [Timeout] 30s + ${data}= Get Data From File ${input_invalid_event_in_dmaap} + Set event in DMaaP ${data} + ${json_obj}= Get invalid auth elements ${data} + Wait Until Keyword Succeeds 20x 2000ms Check BBS log Incorrect CPE Authentication JSON event: + Wait Until Keyword Succeeds 20x 2000ms Check BBS log ${json_obj} +Valid auth event processing + [Arguments] ${input_valid_event_in_dmaap} + [Timeout] 30s + ${data}= Get Data From File ${input_valid_event_in_dmaap} + Set event in DMaaP ${data} + Wait Until Keyword Succeeds 20x 2000ms Check policy ${AUTH_POLICY} + +Check policy + [Arguments] ${json_policy_file} + ${resp}= Get Request ${dmaap_setup_session} /events/dcaeClOutput headers=${suite_headers} + ${data}= Get Data From File ${json_policy_file} + ${result}= Compare policy ${resp.text} ${data} + Should Be Equal As Strings ${result} True + +Invalid update event processing + [Arguments] ${input_invalid_event_in_dmaap} + [Timeout] 30s + ${data}= Get Data From File ${input_invalid_event_in_dmaap} + Set event in DMaaP ${data} + ${json_obj}= Get invalid update elements ${data} + Wait Until Keyword Succeeds 20x 2000ms Check BBS log Incorrect Re-Registration + Wait Until Keyword Succeeds 20x 2000ms Check BBS log JSON event: + Wait Until Keyword Succeeds 20x 2000ms Check BBS log ${json_obj} + + +Valid update event processing + [Arguments] ${input_valid_event_in_dmaap} + [Timeout] 30s + ${data}= Get Data From File ${input_valid_event_in_dmaap} + Set event in DMaaP ${data} + Wait Until Keyword Succeeds 20x 2000ms Check policy ${UPDATE_POLICY} + + +Check BBS log + [Arguments] ${searched_log} + ${status}= Check for log ${searched_log} + Should Be Equal As Strings ${status} True + +Set PNF name in AAI + [Arguments] ${pnfs_name} + ${headers}= Create Dictionary Accept=application/json Content-Type=text/html + ${resp} = Put Request ${aai_setup_session} /set_pnfs headers=${headers} data=${pnfs_name} + Should Be Equal As Strings ${resp.status_code} 200 + +Set event in DMaaP + [Arguments] ${event_in_dmaap} + ${resp} = Put Request ${dmaap_setup_session} /set_get_event headers=${suite_headers} data=${event_in_dmaap} + Should Be Equal As Strings ${resp.status_code} 200 + +Reset AAI simulator + ${resp} = Post Request ${aai_setup_session} /reset + Should Be Equal As Strings ${resp.status_code} 200 + +Reset DMaaP simulator + ${resp}= Post Request ${dmaap_setup_session} /reset + Should Be Equal As Strings ${resp.status_code} 200
\ No newline at end of file diff --git a/tests/dcaegen2/bbs-testcases/resources/docker-compose.yml b/tests/dcaegen2/bbs-testcases/resources/docker-compose.yml new file mode 100644 index 00000000..e42c0d29 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/docker-compose.yml @@ -0,0 +1,64 @@ +version: '3' +services: + bbs: + image: nexus3.onap.org:10001/onap/org.onap.dcaegen2.services.components.bbs-event-processor:1.0.0-SNAPSHOT + command: > + --dmaap.dmaapConsumerConfiguration.dmaapHostName=dmaap_simulator + --dmaap.dmaapConsumerConfiguration.dmaapPortNumber=2222 + --dmaap.dmaapProducerConfiguration.dmaapHostName=dmaap_simulator + --dmaap.dmaapProducerConfiguration.dmaapPortNumber=2222 + --aai.aaiClientConfiguration.aaiHostPortNumber=3333 + --aai.aaiClientConfiguration.aaiHost=aai_simulator + --aai.aaiClientConfiguration.aaiProtocol=http + ports: + - "32100:8100" + environment: + CONFIGS_DMAAP_CONSUMER_RE-REGISTRATION_DMAAPHOSTNAME: dmaap_simulator + CONFIGS_DMAAP_CONSUMER_RE-REGISTRATION_DMAAPPORTNUMBER: 2222 + CONFIGS_DMAAP_CONSUMER_RE-REGISTRATION_DMAAPTOPICNAME: /events/unauthenticated_PNF_UPDATE + CONFIGS_DMAAP_CONSUMER_RE-REGISTRATION_CONSUMERGROUP: + CONFIGS_DMAAP_CONSUMER_RE-REGISTRATION_CONSUMERID: + CONFIGS_DMAAP_CONSUMER_CPE-AUTHENTICATION_DMAAPHOSTNAME: dmaap_simulator + CONFIGS_DMAAP_CONSUMER_CPE-AUTHENTICATION_DMAAPPORTNUMBER: 2222 + CONFIGS_DMAAP_CONSUMER_CPE-AUTHENTICATION_DMAAPTOPICNAME: /events/unauthenticated_CPE_AUTHENTICATION + CONFIGS_DMAAP_CONSUMER_CPE-AUTHENTICATION_CONSUMERGROUP: + CONFIGS_DMAAP_CONSUMER_CPE-AUTHENTICATION_CONSUMERID: + CONFIGS_DMAAP_PRODUCER_DMAAPHOSTNAME: dmaap-bc + CONFIGS_DMAAP_PRODUCER_DMAAPPORTNUMBER: 2222 + CONFIGS_DMAAP_PRODUCER_DMAAPTOPICNAME: /events/unauthenticated_DCAE_CL_OUTPUT + CONFIGS_AAI_CLIENT_AAIHOST: aai_simulator + CONFIGS_AAI_CLIENT_AAIPORT: 3333 + CONFIGS_AAI_CLIENT_AAIPROTOCOL: http + CONFIGS_APPLICATION_PIPELINESPOLLINGINTERVALSEC: 15 + CONFIGS_APPLICATION_PIPELINESTIMEOUTSEC: 10 + CONFIGS_APPLICATION_RE-REGISTRATION_POLICYSCOPE: "re-reg_policy_scope" + CONFIGS_APPLICATION_RE-REGISTRATION_CLCONTROLNAME: "re-reg_cl" + CONFIGS_APPLICATION_CPE-AUTHENTICATION_POLICYSCOPE: "cpe-auth_policy_scope" + CONFIGS_APPLICATION_CPE-AUTHENTICATION_CLCONTROLNAME: "cpe-auth_cl" + LOGGING_LEVEL_ORG_ONAP_BBS: TRACE + container_name: bbs + depends_on: + - dmaap-bc + - aai + + dmaap-bc: + image: dmaap-bc:latest + build: + context: simulator + dockerfile: DMaaP_simulator + ports: + - "2222:2222" + - "2223:2223" + - "2224:2224" + container_name: dmaap_simulator + + aai: + image: aai:latest + build: + context: simulator + dockerfile: AAI_simulator + ports: + - "3333:3333" + - "3334:3334" + - "3335:3335" + container_name: aai_simulator diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/AAI.py b/tests/dcaegen2/bbs-testcases/resources/simulator/AAI.py new file mode 100644 index 00000000..ba32582d --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/AAI.py @@ -0,0 +1,108 @@ +import re +import time +from http.server import BaseHTTPRequestHandler +import httpServerLib + +import json + +pnfs = [] +services = [] +pnf_not_found = '[{}]' + +class AAISetup(BaseHTTPRequestHandler): + + def do_PUT(self): + global pnfs + global services + global pnf_not_found + if re.search('/set_pnfs', self.path): + content_length = int(self.headers['Content-Length']) + pnfs = self.rfile.read(content_length) + pnfs = pnfs.decode() + httpServerLib.header_200_and_json(self) + elif re.search('/set_services', self.path): + content_length = int(self.headers['Content-Length']) + services = self.rfile.read(content_length) + services = services.decode() + httpServerLib.header_200_and_json(self) + elif re.search('/set_pnf_not_found', self.path): + content_length = int(self.headers['Content-Length']) + pnf_not_found = self.rfile.read(content_length) + pnf_not_found = pnf_not_found.decode() + httpServerLib.header_200_and_json(self) + + return + + def do_POST(self): + if re.search('/reset', self.path): + httpServerLib.header_200_and_json(self) + + return + + +class AAIHandler(BaseHTTPRequestHandler): + + def do_GET(self): + global pnfs + global services + global pnf_not_found + pnf_path = '/aai/v14/network/pnfs/pnf/' + service_path = '/aai/v14/nodes/service-instances/service-instance/' + found_resource = None + if re.search(pnf_path, self.path): + try: + python_pnfs = json.loads(pnfs) + except AttributeError: + python_pnfs = [] + for pnf_instance in python_pnfs: + try: + pnf_name = pnf_path + pnf_instance.get("pnf-name") + except AttributeError: + pnf_name = "PNF not found" + if re.search(pnf_name, self.path): + found_resource = pnf_instance + break + elif re.search(service_path, self.path): + try: + python_services = json.loads(services) + except AttributeError: + python_services = [] + for service_instance in python_services: + try: + service_name = service_path + service_instance.get("service-instance-id") + except AttributeError: + pnf_name = "Service not found" + if re.search(service_name, self.path): + found_resource = service_instance + break + + if found_resource is not None: + # Prepare the response for DMaaP (byte encoded JSON Object) + found_resource = json.dumps(found_resource) + found_resource = found_resource.encode() + httpServerLib.header_200_and_json(self) + self.wfile.write(found_resource) + else: + # Send a 404 message for not found + pnf_resp = pnf_not_found + # We have to replace the request line data + err_pnf_template = "nodes/pnfs/pnf/Wrong-PNF-Name" + pnf_resp = pnf_resp.replace(err_pnf_template, self.path) + pnf_resp = pnf_resp.encode() + httpServerLib.header_404_and_json(self) + self.wfile.write(pnf_resp) + + + return + +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/org.onap.aai.key", certfile="certs/aai_aai.onap.org.cer", ca_certs="certs/ca_local_0.cer") + httpServerLib.start_http_endpoint(3335, AAISetup) + while 1: + time.sleep(10) + + +if __name__ == '__main__': + _main_() diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/AAI_simulator b/tests/dcaegen2/bbs-testcases/resources/simulator/AAI_simulator new file mode 100644 index 00000000..a906bc58 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/AAI_simulator @@ -0,0 +1,6 @@ +FROM python:3-alpine + +ADD AAI.py httpServerLib.py / +COPY certs/* /certs/ + +CMD [ "python", "./AAI.py" ] diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/DMaaP.py b/tests/dcaegen2/bbs-testcases/resources/simulator/DMaaP.py new file mode 100644 index 00000000..edeec8cf --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/DMaaP.py @@ -0,0 +1,92 @@ +import re +import time +from http.server import BaseHTTPRequestHandler +import httpServerLib + + +posted_event_from_bbs = b'[]' +received_event_to_get_method = b'[]' + + +class DmaapSetup(BaseHTTPRequestHandler): + + """ + This Handler is used by the test harness to prepare the buffers: + test harness places VES events using PUT from the harness into the + "received_event buffer" + test harness will write policy topics from the BBS us to the posted event buffer + """ + def do_PUT(self): + # Read the event from the test harness place it in the received event buffer + if re.search('/set_get_event', self.path): + content_length = int(self.headers['Content-Length']) + global received_event_to_get_method + received_event_to_get_method = self.rfile.read(content_length) + httpServerLib.header_200_and_json(self) + + return + + def do_GET(self): + # The test harness receives the policy triggers from the posted event + # by issuing a get and receiving the response. + if re.search('/events/dcaeClOutput', self.path): + global posted_event_from_bbs + httpServerLib.header_200_and_json(self) + self.wfile.write(posted_event_from_bbs) + + return + + def do_POST(self): + if re.search('/reset', self.path): + global posted_event_from_bbs + global received_event_to_get_method + posted_event_from_bbs = b'[]' + received_event_to_get_method = b'[]' + httpServerLib.header_200_and_json(self) + + return + + +class DMaaPHandler(BaseHTTPRequestHandler): + """ + This Handler is what the BBS uS connects to - The test library has posted the + the VES events in the setup Handler which are then received by the BBS uS via + this handler's do_GET function. + Likewise the policy trigger posted by the BBS uS is received and placed in the + in the posted event buffer which the test harness retrieves using the setup handler. + """ + + def do_POST(self): + # Post of the policy triggers from the BBS uS + if re.search('/events/unauthenticated.DCAE_CL_OUTPUT', self.path): + global posted_event_from_bbs + content_length = int(self.headers['Content-Length']) + posted_event_from_bbs = self.rfile.read(content_length) + httpServerLib.header_200_and_json(self) + + return + + def do_GET(self): + # BBS uS issues a Get to receive VES and PNF UPdate event from DMAAP + global received_event_to_get_method + if re.search('/events/unauthenticated.PNF_UPDATE', self.path): + httpServerLib.header_200_and_json(self) + self.wfile.write(received_event_to_get_method) + elif re.search('/events/unauthenticated_CPE_AUTHENTICATION/OpenDcae-c12/c12', self.path): + httpServerLib.header_200_and_json(self) + self.wfile.write(received_event_to_get_method) + + return + + +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/org.onap.dmaap-bc.key", certfile="certs/dmaap_bc_topic_mgr_dmaap_bc.onap.org.cer", ca_certs="certs/ca_local_0.cer") + httpServerLib.start_http_endpoint(2224, DmaapSetup) + while 1: + time.sleep(10) + + +if __name__ == '__main__': + _main_() diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/DMaaP_simulator b/tests/dcaegen2/bbs-testcases/resources/simulator/DMaaP_simulator new file mode 100644 index 00000000..8139fc33 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/DMaaP_simulator @@ -0,0 +1,6 @@ +FROM python:3-alpine + +ADD DMaaP.py httpServerLib.py / +COPY certs/* /certs/ + +CMD [ "python", "./DMaaP.py" ] diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/certs/aai_aai.onap.org.cer b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/aai_aai.onap.org.cer new file mode 100644 index 00000000..327f57b6 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/aai_aai.onap.org.cer @@ -0,0 +1,55 @@ +-----BEGIN CERTIFICATE----- +MIIE5TCCA82gAwIBAgIJAI5fEseaW2LVMA0GCSqGSIb3DQEBCwUAMEcxCzAJBgNV +BAYTAlVTMQ0wCwYDVQQKDARPTkFQMQ4wDAYDVQQLDAVPU0FBRjEZMBcGA1UEAwwQ +aW50ZXJtZWRpYXRlQ0FfMjAeFw0xODEwMTgxMDM3MzJaFw0xOTA0MTgxMDM3MzJa +MGYxDDAKBgNVBAMMA2FhaTEPMA0GCSqGSIb3DQEJARYAMRkwFwYDVQQLDBBhYWlA +YWFpLm9uYXAub3JnMQ4wDAYDVQQLDAVPU0FBRjENMAsGA1UECgwET05BUDELMAkG +A1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCCnz1BBkcD +y1M73ANgkbfwYANSJPdnU/meXpgHKYvXa8xbEI3Lsi5EnB7o9nthZFdU5dPZRFV5 +uJEOl0pjt3ogmPo0XZGYO++GfRNLq+c2YVmYjTLgFvEz6GzUtLueYjrl2JItGRug +x0wNPXQmaAX3/8wD7nOTAZjlmuSWCeeJu5GBaX4aaiwVOONDGhmZZ7jISTE0xvvU +936ECnUhSZtt/qRvnA1EJB/Hhs5Se4VPx6lTXYf8PXquI0IgDV49hlLhbPMKadQ8 +lo2yitiaSMJHsLZ1Wt6ob9oNFlBcceq3tfXPMVVylssuAI1pc3HsbmV7kMIwg0P1 +fyVoIALHlXgDAgMBAAGjggGzMIIBrzAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIF +4DAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwVAYDVR0jBE0wS4AU +BASNACQ4xpx414BXQWdJBoDmckehMKQuMCwxDjAMBgNVBAsMBU9TQUFGMQ0wCwYD +VQQKDARPTkFQMQswCQYDVQQGEwJVU4IBAjAdBgNVHQ4EFgQUMghLmZ4l0T+MY3uk +AR6YBJP5gwMwgfoGA1UdEQSB8jCB74IDYWFpgoHnYWFpLmFwaS5zaW1wbGVkZW1v +Lm9uYXAub3JnIGFhaS5lbGFzdGljc2VhcmNoLnNpbXBsZWRlbW8ub25hcC5vcmcg +YWFpLmdyZW1saW5zZXJ2ZXIuc2ltcGxlZGVtby5vbmFwLm9yZyBhYWkuaGJhc2Uu +c2ltcGxlZGVtby5vbmFwLm9yZyBhYWkub25hcCBhYWkuc2VhcmNoc2VydmljZS5z +aW1wbGVkZW1vLm9uYXAub3JnIGFhaS5zaW1wbGVkZW1vLm9uYXAub3JnIGFhaS51 +aS5zaW1wbGVkZW1vLm9uYXAub3JnMA0GCSqGSIb3DQEBCwUAA4IBAQBJyXk6ZTfA +f9mYi5ey/ZpchB9egJfwEXXOqSKeYYTjqUr3uXXk+usb8YXsFVoD9Id5do3Hnxv+ +J3ISGmyPTgQfV/9KDmtHPTyclR9mLji+j4GviZnIpAIsI/duPKlEfLcym9smAC7Q ++HYanUQ7s8sjJJ4ORdBLOy1HkfTu9pjNKZ1CcEnJZ8Y5juLOeEj+Xa+QzcywSK2E +iuPXJwFFtcX9fO+ojiQV9g0L9JgABMqm4Q6si03gXofYEgvAUJSxsirydB8kcqPU +jCgw8/XIsHj4VRNNWlwkvzskeX9ZlcFMmn6DTfyDD1Rrij1efotO2ie3OrKUEzpH +N1G5vCuZqOla +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEVDCCAjygAwIBAgIBAjANBgkqhkiG9w0BAQsFADAsMQ4wDAYDVQQLDAVPU0FB +RjENMAsGA1UECgwET05BUDELMAkGA1UEBhMCVVMwHhcNMTgwOTI0MTE0MjE2WhcN +MjMwOTI0MTE0MjE2WjBHMQswCQYDVQQGEwJVUzENMAsGA1UECgwET05BUDEOMAwG +A1UECwwFT1NBQUYxGTAXBgNVBAMMEGludGVybWVkaWF0ZUNBXzIwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjPFeAho7BtWjB4Enww/KXD0tTuoda/Fkc +o/yv2waNNsx+pOYGdJwNHYvNS7/RLBHc8kCN+TbKnYZ6AE97wD1Pzrc7AZ58qpjq +Ob7aTp4u3IAMWR5YOkDyjiibA5X7z9N/wveG/Ei2SgN2pY7O2lK5ucm6igarfxll +rZC1MA9zAXrfmd5bLJQQqACT6q15KQaCIwhqwoXp8w+s0rXcZ2/L303lFIUXoHUp +kzMsIPhJ/ZoEvAEkXIPgT2uFgOwIyWmr8Rg5jYzZhV7vey3bQUBlue9aiMIXih3d +b4AVD6J6eF/NmJygtUfHFrWeTAYLppA0d69BWUQZ+XQgCwjOMLaNAgMBAAGjZjBk +MB0GA1UdDgQWBBQEBI0AJDjGnHjXgFdBZ0kGgOZyRzAfBgNVHSMEGDAWgBTtc8Wb +I4DL8Bm6CVi8//GsTyq8NTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAt4VCLb2UHiZpDfSQbe62vlFzsGlODYKF +k7BhW9Q5jfIXpPhhtBLFwJFEKAWFLVWubz+YIa7I5wtniS6zEPC/5t3JOiEXMJQY +PfaPDSsovZ+eShu0QtrjjldFwL2MiqNsd2IWLSIRQUP63RZGBRTTxSsxB0VAfRyT +cu/8znpmZsHna3DspGZQputm7qsxgUhAcPCdo9RQtG6Ox6L1wTXUJmTPHdKQtZjr +qqSQ7kn8u3i5KQYYapmc3UO+CBbzoLPD5Rrlq+ROBbiNd9R/j5vVgRO7vsU9SHnm +AaKFEjDPTSjDtMOxu1BsTNmftaE2jcYa9/ZW67H8URCuo92NE0cZRxBqHkPUjH3/ +/S43/TBAfjfarF5WW7iMAEZfEGhrQu26JWXBMcZshStuHUEPl2b+RC5LZcBMYKgi +SqSOXzpiJeRNASpXKCQQZG8n03c/jBf1U20HaK/4Z2ikOql5B21suxhUbixG1EQN +DOrFGOFUqG4Eyw+xjUR5rTfDnpKgQfJo0/aohZs9p5x+UwitkrQkJQ1ZmEzeVDjm +7xsmOcAJS2T9DLle6fDWvyh76InymAPxzk1/2AWOp8uw8iwNfFxE+p+M7h0psZxp +SnvlgASASdWlZLcMQtNiiKzMK75FW9SMctQfA/RfohNEwivpp6tNpgJozoKmhoPK +zs5HS/mx8GI= +-----END CERTIFICATE----- diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/certs/ca_local_0.cer b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/ca_local_0.cer new file mode 100644 index 00000000..ff37eaf7 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/ca_local_0.cer @@ -0,0 +1,31 @@ +-----BEGIN CERTIFICATE----- +MIIFPjCCAyagAwIBAgIJAMhpcvbx/8/AMA0GCSqGSIb3DQEBCwUAMCwxDjAMBgNV +BAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQMQswCQYDVQQGEwJVUzAeFw0xODA4MDMx +MzI2NTBaFw0zODA3MjkxMzI2NTBaMCwxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQK +DARPTkFQMQswCQYDVQQGEwJVUzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBAO4j7nmAY9KX/ceFCITuWAMCHAmSoeHCTs+lgkYX7DpXPidsF5t0ijPaElUC +rwwMnXz5h1o8FzXD64FMbqMVEseLUDZGelRZ7Rkz+hy0Y5i8QKsBTfeo7sP7ZEaC +vpqom9imPLFUn4oDeYspCKjMF93Z69Cv8pxFYCFpZwY3eR9V4xOB613k8guBJtHR +ccY9/NbdfbkrtUz5kNuQqwLj5ttvesqxPq0L4m3bPjkubQCb+QiJxx10Xcx6fcfu +wIu7NR63qDlWFYstsDnH/VIT1pSCBHEw+muSEQ44sgPFy+AxB8O8HKd8wRfmkV2d +YNPyotTLD+aLzDlCWtC0pGnTTJimdu9+hZRIZz5YT4m8BdLQ/jTBd6Gx2tVLvWso +9IJSjfkhj6EtVxyZ81jM+rLAnKy3qPXDCN6CIKL07hNuSzIIhCrK2L4f82JWS7dP +mg2acuhCH56qrhEr42Kjeak181KM/QKiRPgNyOSygJ7uRaLbqOQRh46c68NcmW4F +13OwJQAsrjgaQY1ZWnFsvRYK9NnUqK+2XuCQFS7EYm02M2UwO2GCD88In8PCzzv8 +Q0Zj8Hb4h79fVRjG8/3MnQCJ164+9PfXyu9dj5l6XkkSvdj1IsewaSMy9NccGx7Q +rE7yRPMB6FlAnGPj0KbJXHXJyiujPHSCF0D+Hbl9rxU7FRAbAgMBAAGjYzBhMB0G +A1UdDgQWBBTtc8WbI4DL8Bm6CVi8//GsTyq8NTAfBgNVHSMEGDAWgBTtc8WbI4DL +8Bm6CVi8//GsTyq8NTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAN +BgkqhkiG9w0BAQsFAAOCAgEAW4IYy1PUrV/wHblIGFTBo5z7EB33rpHfAJzbDkop +2n5wOlmh78pkeRNb1TOKcSHJPw0MdkwVBPI1wm/SOpHUPmKTW1muO6RUnFjZ68y9 +DiVa6zCW/RBFeG3f8kywxgqPLml1TbikRuMBU0ucOa/bXZ98P2hMLkjWTgeARGSj +QCb7QyqeFzG0mPmAuX6zMj5xwpdyPB0zCoRGXa/BIWEvYjgkaRM+E+9oRWt/6BHQ +4uw11R7gAV4/TSu7qYNfTMllBaLJ0o/1q0QF16e4mV1E4erDfWKlrvUlgCaHCx8Q +3PL7ovM4jjrTNAjnX0q5xtWbF0mlJhJk/NbPDb7hArBv4vp9XoITyRW1vcbe94jv +GzqLKlvBQUxGue4kLYDmUFdog7gaCkEH3N4mH3ad4HZUsOMeanvVgbVZr10VOlNq +TEWqDPATayJdo+VhJCGc6hVa+IJsDTAa/z2MLybqcoOfNT/rxYIdvlX4OjSqAqOj +bSivsCe9c4km56pP2ufA/woPzh+Z46Ukt+krGyFQwKdQQLh5Pp7Yuhvdld/5kd8M +S2fqcBFpzzBSj+huVayw6jFi5qLlISouhCVsc0rBqvnfuQTQwmfFIlfaHBTSjniv +5DdibZEtMqYYXl1VB4XUHTt5dOGHLEX2w/d5887DQVLUbaUKm1mfScb/vPjGgk6/ +re4= +-----END CERTIFICATE----- diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/certs/dmaap_bc_topic_mgr_dmaap_bc.onap.org.cer b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/dmaap_bc_topic_mgr_dmaap_bc.onap.org.cer new file mode 100644 index 00000000..756dd3a0 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/dmaap_bc_topic_mgr_dmaap_bc.onap.org.cer @@ -0,0 +1,51 @@ +-----BEGIN CERTIFICATE----- +MIIELDCCAxSgAwIBAgIJAI5fEseaW2LbMA0GCSqGSIb3DQEBCwUAMEcxCzAJBgNV +BAYTAlVTMQ0wCwYDVQQKDARPTkFQMQ4wDAYDVQQLDAVPU0FBRjEZMBcGA1UEAwwQ +aW50ZXJtZWRpYXRlQ0FfMjAeFw0xODEwMjIxMjM4MTZaFw0xOTA0MjIxMjM4MTZa +MH8xETAPBgNVBAMMCGRtYWFwLWJjMQ8wDQYJKoZIhvcNAQkBFgAxLTArBgNVBAsM +JGRtYWFwLWJjLXRvcGljLW1nckBkbWFhcC1iYy5vbmFwLm9yZzEOMAwGA1UECwwF +T1NBQUYxDTALBgNVBAoMBE9OQVAxCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAs2mQSeSshK4ZrAwc8/QNHZiUVILlQwYyoviPfL27 +8mV1OXSYoTW+PzFU1Tv6HwKEFL3q9i9/y1m0DjhP4frHpNVVTo5KIeCv6fIsAYnp +/p50P3EOh3AJehtZm4AtxN6DeMlaBv11GYUUm6E60Q36Y6Wgklq8u1KDngYJy1/Q +Bl8aAiJbj2vpL64WSI3cyNz/qeI4/PxHsqBHUFI96GcLtLPLDSlIQWoWoZhkiQTH +rU4Sx5/nVdWihfc0R0+jG5IH+mDb8WUNmyHnaHinrt5Er1sypU/NxD+NlRPFO1K4 +Dx40sxfAlu2LFCllDgSS/Xcfse0ny/TrL2RWELoIOz9NjQIDAQABo4HiMIHfMAkG +A1UdEwQCMAAwDgYDVR0PAQH/BAQDAgXgMCAGA1UdJQEB/wQWMBQGCCsGAQUFBwMB +BggrBgEFBQcDAjBUBgNVHSMETTBLgBQEBI0AJDjGnHjXgFdBZ0kGgOZyR6EwpC4w +LDEOMAwGA1UECwwFT1NBQUYxDTALBgNVBAoMBE9OQVAxCzAJBgNVBAYTAlVTggEC +MB0GA1UdDgQWBBTvkTjHV87v4IBJ8N/PqkjjWGKICjArBgNVHREEJDAigghkbWFh +cC1iY4IWZG1hYXAtYmMgZG1hYXAtYmMub25hcDANBgkqhkiG9w0BAQsFAAOCAQEA +EJFyoeQtkjDf/yUyWReewxiOfDdmmrDOO4gbxt6hd3ilOflmC7QolR1NAzmCML3b +vmLS7a8zhwBsUU11wjasN8PI3qG7H36U7hP/NVwvql0YNGIcxvukPJJvDqW6V3MI +fOaCFs4uJexSYeaXRWdk0Rq8GY9gB2j1TUsl+we9zJeErKr2vY2LAJI0iYJ+v6YY +Ug14aPYu4m4ABUDhqfM+4z580h8GA+5ZkWNr5z9xfeJB520jAc6zx86obx9hep74 +OByfVqleMV0QfZeH9oLGYh2FnSSEG60GyWFIf9k76kh2LREVCbU+nOhFfVy9YD5Q ++2TXjh/wMcv3RxAHqSeW9A== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEVDCCAjygAwIBAgIBAjANBgkqhkiG9w0BAQsFADAsMQ4wDAYDVQQLDAVPU0FB +RjENMAsGA1UECgwET05BUDELMAkGA1UEBhMCVVMwHhcNMTgwOTI0MTE0MjE2WhcN +MjMwOTI0MTE0MjE2WjBHMQswCQYDVQQGEwJVUzENMAsGA1UECgwET05BUDEOMAwG +A1UECwwFT1NBQUYxGTAXBgNVBAMMEGludGVybWVkaWF0ZUNBXzIwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjPFeAho7BtWjB4Enww/KXD0tTuoda/Fkc +o/yv2waNNsx+pOYGdJwNHYvNS7/RLBHc8kCN+TbKnYZ6AE97wD1Pzrc7AZ58qpjq +Ob7aTp4u3IAMWR5YOkDyjiibA5X7z9N/wveG/Ei2SgN2pY7O2lK5ucm6igarfxll +rZC1MA9zAXrfmd5bLJQQqACT6q15KQaCIwhqwoXp8w+s0rXcZ2/L303lFIUXoHUp +kzMsIPhJ/ZoEvAEkXIPgT2uFgOwIyWmr8Rg5jYzZhV7vey3bQUBlue9aiMIXih3d +b4AVD6J6eF/NmJygtUfHFrWeTAYLppA0d69BWUQZ+XQgCwjOMLaNAgMBAAGjZjBk +MB0GA1UdDgQWBBQEBI0AJDjGnHjXgFdBZ0kGgOZyRzAfBgNVHSMEGDAWgBTtc8Wb +I4DL8Bm6CVi8//GsTyq8NTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAt4VCLb2UHiZpDfSQbe62vlFzsGlODYKF +k7BhW9Q5jfIXpPhhtBLFwJFEKAWFLVWubz+YIa7I5wtniS6zEPC/5t3JOiEXMJQY +PfaPDSsovZ+eShu0QtrjjldFwL2MiqNsd2IWLSIRQUP63RZGBRTTxSsxB0VAfRyT +cu/8znpmZsHna3DspGZQputm7qsxgUhAcPCdo9RQtG6Ox6L1wTXUJmTPHdKQtZjr +qqSQ7kn8u3i5KQYYapmc3UO+CBbzoLPD5Rrlq+ROBbiNd9R/j5vVgRO7vsU9SHnm +AaKFEjDPTSjDtMOxu1BsTNmftaE2jcYa9/ZW67H8URCuo92NE0cZRxBqHkPUjH3/ +/S43/TBAfjfarF5WW7iMAEZfEGhrQu26JWXBMcZshStuHUEPl2b+RC5LZcBMYKgi +SqSOXzpiJeRNASpXKCQQZG8n03c/jBf1U20HaK/4Z2ikOql5B21suxhUbixG1EQN +DOrFGOFUqG4Eyw+xjUR5rTfDnpKgQfJo0/aohZs9p5x+UwitkrQkJQ1ZmEzeVDjm +7xsmOcAJS2T9DLle6fDWvyh76InymAPxzk1/2AWOp8uw8iwNfFxE+p+M7h0psZxp +SnvlgASASdWlZLcMQtNiiKzMK75FW9SMctQfA/RfohNEwivpp6tNpgJozoKmhoPK +zs5HS/mx8GI= +-----END CERTIFICATE----- diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/certs/keystore.password b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/keystore.password new file mode 100644 index 00000000..39823872 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/keystore.password @@ -0,0 +1 @@ +mYHC98!qX}7h?W}jRv}MIXTJ
\ No newline at end of file diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.aai.key b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.aai.key new file mode 100644 index 00000000..b9a22cf3 --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.aai.key @@ -0,0 +1,29 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCCnz1BBkcDy1M7 +3ANgkbfwYANSJPdnU/meXpgHKYvXa8xbEI3Lsi5EnB7o9nthZFdU5dPZRFV5uJEO +l0pjt3ogmPo0XZGYO++GfRNLq+c2YVmYjTLgFvEz6GzUtLueYjrl2JItGRugx0wN +PXQmaAX3/8wD7nOTAZjlmuSWCeeJu5GBaX4aaiwVOONDGhmZZ7jISTE0xvvU936E +CnUhSZtt/qRvnA1EJB/Hhs5Se4VPx6lTXYf8PXquI0IgDV49hlLhbPMKadQ8lo2y +itiaSMJHsLZ1Wt6ob9oNFlBcceq3tfXPMVVylssuAI1pc3HsbmV7kMIwg0P1fyVo +IALHlXgDAgMBAAECggEATFkLEpC6vWsAsYI9rxo9KxDToBXfTdP1mS2tKrKL/FQT +1D5uwtrY1F10a7J2F0zxBrx3AQ1B8K2Ci8a+Ql6h0Z/YzvbJ/PM7Y56Dwr0tncl0 +9wfA7t46CZ8WzZT9/OtphaL6fcWpMmaK+0oqM7ClnHk1JC8h+pD6b2oDpfcQEJ5r +hxFxdOotKgMzANMqTydteecfefy9l0hzgFiymxLZAo7ktW3HFpXO5HOgh1vkm5Pu +FedGRwiI/RBqad2T59J/XcRH0f5Ky7sgpyCShwqIp23xpdum10N0/MTzY5iu/gvR +pXGaPeYUrSPoLwuoMGAUm9wFbDqskI/mQzw6/rnfsQKBgQDU2O7ogZ/BjDVtjpfL +NntXhLOq02U+dB16ZXSalMbsG//FILVLL/Ths2wutKk/9IIiC1qI4NhDc0smDkgJ +l+oTZTnhVxZhWvOYovz7T3L3mp9VBIA0lW62dTDLK9gT6IRoQGN1fzzXF7ZfgOME +irDQqBSfMqt5YCeQOKNe29eo5QKBgQCdGrLaGHBeWBdhvG8XcybJDk2Q9XnojO69 +2UtfJ64+hzTc2MFvyBlWymZt3/Qq3llP/K9WUYW/ohL9l8rTXHEfBGpQVPzU2roQ +iicbx/zc2qfO79YaE10D/paekX2vrpoJlhtp0yMU/HMEYxrucbYQJEdKx9frcTXo +fQ9l5V+WxwKBgQDKEkYGsQGFk+IpZ+XOhKPmu9KDDH0jJMPTrrxcAYE1KYPSl7Hm +dtoK6Pd9BAFm+XAOeC70olpO9wdSUt6rVPFihojD2ZUiymFX+O0qfgwM7Fv2L/az +dWcNjAbN7IsQo4AJJZAHPcv5/MYkt01Pw4gIIHqrhURsUBBfiJX5ecetzQKBgC9I +NcPFzyvVv1O+7oBUO7wO/fE+r+35XHDu0OxWeO6Aqrw80BrgUh/40lMHL+km+iJE +nlCQQHyoPqbr5DMwgysenRCIQ3+cRJttuM93pPajKBXzwLAgW8I0AQjAKN+S4PE5 +qA51aP2L7OHJIfXZaz34bSxocOd/LwZFfTjhi59JAoGAVc3HAzQOkrCs1GPXvuOx +YwJUyuwLtCzcb05q+ys/5b/02RxTl4QPfOPqj47y8SDUUC7Cbr6ktqAkfsBOyPPj +tSniVhPKa4XdP0Brsil934sd3shvwrpEb9Xs6ialTid+PKaU/rFn1DYWZUP8lNMK +tq0nYLX/Z6N7LHiz32G9Kjs= +-----END PRIVATE KEY----- + diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dcae.jks b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dcae.jks Binary files differnew file mode 100644 index 00000000..e74ce64f --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dcae.jks diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dcae.trust.jks b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dcae.trust.jks Binary files differnew file mode 100644 index 00000000..10103cfb --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dcae.trust.jks diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dmaap-bc.key b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dmaap-bc.key new file mode 100644 index 00000000..880a33bf --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dmaap-bc.key @@ -0,0 +1,29 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCzaZBJ5KyErhms +DBzz9A0dmJRUguVDBjKi+I98vbvyZXU5dJihNb4/MVTVO/ofAoQUver2L3/LWbQO +OE/h+sek1VVOjkoh4K/p8iwBien+nnQ/cQ6HcAl6G1mbgC3E3oN4yVoG/XUZhRSb +oTrRDfpjpaCSWry7UoOeBgnLX9AGXxoCIluPa+kvrhZIjdzI3P+p4jj8/EeyoEdQ +Uj3oZwu0s8sNKUhBahahmGSJBMetThLHn+dV1aKF9zRHT6Mbkgf6YNvxZQ2bIedo +eKeu3kSvWzKlT83EP42VE8U7UrgPHjSzF8CW7YsUKWUOBJL9dx+x7SfL9OsvZFYQ +ugg7P02NAgMBAAECggEAfPetwlqe9DgUt6skS6SVsiTCRO9746iggrXhtECwdlHH +SkL1wWye3INvFKwXN5xYBd6Xl+1T9X/BFBqTQdOdViompnYkGt7XiXvevR+kNm+G +h14ngZ0/bKc6Tj8FIljfeLW/mJjZBPKWfSTbxBwZaWlHpEnBpjT+aobIMbnGO3i8 +iuPEIlSTmI/MmIvwyXkJ8r41phIZpdhtyKACx5LSvSArwPTYzVLyaGBJ63T4Qcat +GY/Oa1nAJkbFT46sP06O+sm1UIVUGbjewzPaDnfdFyJWmae0nGn1xU8VZUPI7rfu +YCf7le2grgtKy16jQo0o69RGYc4ebP27DKGd8YJHHQKBgQDts/7x6sG3fqPvbv9D +M5LDraslrj+noHGVcvCfigcgngvnMGcB/R8IT6YPmNRfATHV/UTLuW++PuqXsR21 +/WwJVbxudZ3alX7sz6CTGvcCQvnvPQm2e/iVW/JFrQu/poPxL1k3talDdKFWTRql +ZvQE05YjdTutlN2hGvqjSTZ1AwKBgQDBOO7GmG4FRQ4jXvUULXKMRUw+UzUy9NAV +io1b3CiwWynsdW2OPp6Jy6GB6+e7Di2M0i35hkpQd5NoeDnVqkm9ERYLnHr9FAs0 +5cKT7DDRC9ddJesJrqdhqGfhZCHMoqEiDRf3kNMBfFMV1TCefdQ0kIFYUuhHgboJ +aK+GqmtGLwKBgEEqmpdaA7e5mVn39TVIO1E4GHahGcRr4RfWxg8G+UNA8QR1qZfK +/Cn8JAucm4RcQHxpDeZINVFT0F676OhOzMKWZa1mw1r8pypnFZ+ewd81221yL2p+ +/Dx+U6I0eccV8JA7qdrzC695lw2g39A+tGFqXHvmFPFWoZgcXGBNnwdfAoGBAJ8y +9mEAhF2pKN3xxgGq9F8oVYpgakuis7Ob5Z5TBd9QLXmawvpZE6y670YphVN0egk1 +vxWBFMe5zeVccWJfHMQ/SKemdRsBob4itC/Gge4rUHV54W6nzVdENtrY8pQ1RofU +u/OJCqGFursZXSaoy+fHTBrmrGUGOK655y0QSrSXAoGBANbSu8DfjJwDHcWTstcn +XJ/bHB6aZmKe4ibOSFBMsOuy0AP1vRxQTgvQhgeRWm5ngv7YhPes2UHqRktadfGz +VUzx9/ILpL5skhIFEzgEP32cO1tQNE1vxODs3zg+U/Wy9gxJt0dLCB/sPQJcGLri +mkzev7AyLLr137K+ssxhczqg +-----END PRIVATE KEY----- + diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/certs/truststore.password b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/truststore.password new file mode 100644 index 00000000..168e64bd --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/truststore.password @@ -0,0 +1 @@ +*TQH?Lnszprs4LmlAj38yds(
\ No newline at end of file diff --git a/tests/dcaegen2/bbs-testcases/resources/simulator/httpServerLib.py b/tests/dcaegen2/bbs-testcases/resources/simulator/httpServerLib.py new file mode 100644 index 00000000..d963169d --- /dev/null +++ b/tests/dcaegen2/bbs-testcases/resources/simulator/httpServerLib.py @@ -0,0 +1,37 @@ +import _thread +import ssl +from http.server import HTTPServer + + +def header_200_and_json(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + +def header_404_and_json(self): + self.send_response(404) + self.send_header('Content-Type', 'application/json') + self.end_headers() + +def start_http_endpoint(port, handler_class): + _thread.start_new_thread(init_http_endpoints, (port, handler_class)) + + +def start_https_endpoint(port, handler_class, keyfile, certfile, ca_certs): + _thread.start_new_thread(init_https_endpoints, (port, handler_class, keyfile, certfile, ca_certs)) + + +def init_http_endpoints(port, handler_class, server_class=HTTPServer): + server = server_class(('', port), handler_class) + sa = server.socket.getsockname() + print("Serving HTTP on", sa[0], "port", sa[1], "for", handler_class, "...") + server.serve_forever() + + +def init_https_endpoints(port, handler_class, keyfile, certfile, ca_certs, server_class=HTTPServer): + server = server_class(('', port), handler_class) + server.socket = ssl.wrap_socket(server.socket, keyfile=keyfile, certfile=certfile, + ca_certs=ca_certs, server_side=True) + sa = server.socket.getsockname() + print("Serving HTTPS on", sa[0], "port", sa[1], "for", handler_class, "...") + server.serve_forever() |