CSIT tests for bbs-event-processor 06/83506/7
authorStavros Kanarakis <stavros.kanarakis@nokia.com>
Wed, 27 Mar 2019 17:11:43 +0000 (19:11 +0200)
committerStavros Kanarakis <stavros.kanarakis@nokia.com>
Fri, 5 Apr 2019 06:25:54 +0000 (09:25 +0300)
Change-Id: Iaf4d5f47754489b111a0af90bf3cdf819d4e62f7
Issue-ID: DCAEGEN2-1355
Signed-off-by: Stavros Kanarakis <stavros.kanarakis@nokia.com>
39 files changed:
plans/dcaegen2-services-bbs-event-processor/bbs-testsuites/setup.sh [new file with mode: 0644]
plans/dcaegen2-services-bbs-event-processor/bbs-testsuites/teardown.sh [new file with mode: 0644]
plans/dcaegen2-services-bbs-event-processor/bbs-testsuites/testplan.txt [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/__init__.robot [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/aai_records/aai_pnf_not_found.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/aai_records/aai_pnfs.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/aai_records/aai_services.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_all_fields.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_new_old_state.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_rgmac.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_missing_sourceName.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_with_wrong_sourceName.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/auth_event_without_swversion.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/auth_not_json_format.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/auth_policy_with_all_fields.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_all_fields.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_missing_attachment.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_missing_correlation.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/update_event_with_wrong_correlation.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/update_not_json_format.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/assets/json_events/update_policy_with_all_fields.json [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/bbs_tests.robot [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/BbsLibrary.py [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/bbs_library.robot [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/docker-compose.yml [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/AAI.py [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/AAI_simulator [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/DMaaP.py [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/DMaaP_simulator [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/certs/aai_aai.onap.org.cer [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/certs/ca_local_0.cer [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/certs/dmaap_bc_topic_mgr_dmaap_bc.onap.org.cer [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/certs/keystore.password [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.aai.key [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dcae.jks [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dcae.trust.jks [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dmaap-bc.key [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/certs/truststore.password [new file with mode: 0644]
tests/dcaegen2/bbs-testcases/resources/simulator/httpServerLib.py [new file with mode: 0644]

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 (file)
index 0000000..9551ce4
--- /dev/null
@@ -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 (file)
index 0000000..6cc85f5
--- /dev/null
@@ -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 (file)
index 0000000..9f1794b
--- /dev/null
@@ -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 (file)
index 0000000..d9957dd
--- /dev/null
@@ -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 (file)
index 0000000..23c169f
--- /dev/null
@@ -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 (file)
index 0000000..4ea7827
--- /dev/null
@@ -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 (file)
index 0000000..351cc78
--- /dev/null
@@ -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 (file)
index 0000000..3ad1fec
--- /dev/null
@@ -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 (file)
index 0000000..2c14d46
--- /dev/null
@@ -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 (file)
index 0000000..21d9725
--- /dev/null
@@ -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 (file)
index 0000000..538a56c
--- /dev/null
@@ -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 (file)
index 0000000..39a9e4a
--- /dev/null
@@ -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 (file)
index 0000000..fcacf1c
--- /dev/null
@@ -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 (file)
index 0000000..7801ad6
--- /dev/null
@@ -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 (file)
index 0000000..05b15fb
--- /dev/null
@@ -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 (file)
index 0000000..6fe2319
--- /dev/null
@@ -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 (file)
index 0000000..43d1b21
--- /dev/null
@@ -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 (file)
index 0000000..a1aaee3
--- /dev/null
@@ -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 (file)
index 0000000..f1dca03
--- /dev/null
@@ -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 (file)
index 0000000..ab5b214
--- /dev/null
@@ -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 (file)
index 0000000..4940265
--- /dev/null
@@ -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 (file)
index 0000000..4721e42
--- /dev/null
@@ -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 (file)
index 0000000..8dbdc5a
--- /dev/null
@@ -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 (file)
index 0000000..34c94ca
--- /dev/null
@@ -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 (file)
index 0000000..e42c0d2
--- /dev/null
@@ -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 (file)
index 0000000..ba32582
--- /dev/null
@@ -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 (file)
index 0000000..a906bc5
--- /dev/null
@@ -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 (file)
index 0000000..edeec8c
--- /dev/null
@@ -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 (file)
index 0000000..8139fc3
--- /dev/null
@@ -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 (file)
index 0000000..327f57b
--- /dev/null
@@ -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 (file)
index 0000000..ff37eaf
--- /dev/null
@@ -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 (file)
index 0000000..756dd3a
--- /dev/null
@@ -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 (file)
index 0000000..3982387
--- /dev/null
@@ -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 (file)
index 0000000..b9a22cf
--- /dev/null
@@ -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
new file mode 100644 (file)
index 0000000..e74ce64
Binary files /dev/null and b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dcae.jks differ
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
new file mode 100644 (file)
index 0000000..10103cf
Binary files /dev/null and b/tests/dcaegen2/bbs-testcases/resources/simulator/certs/org.onap.dcae.trust.jks differ
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 (file)
index 0000000..880a33b
--- /dev/null
@@ -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 (file)
index 0000000..168e64b
--- /dev/null
@@ -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 (file)
index 0000000..d963169
--- /dev/null
@@ -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()