diff options
11 files changed, 574 insertions, 108 deletions
diff --git a/plans/dcaegen2-services-pmsh/testsuite/assets/aai-initializer.json b/plans/dcaegen2-services-pmsh/testsuite/assets/aai-initializer.json new file mode 100644 index 00000000..5406f99c --- /dev/null +++ b/plans/dcaegen2-services-pmsh/testsuite/assets/aai-initializer.json @@ -0,0 +1,61 @@ +[ + { + "httpRequest": { + "path": "/aai/v16/query.*" + }, + "httpResponse": { + "statusCode": 200, + "headers": { + "content-type": [ + "application/json" + ] + }, + "body": { + "type": "JSON", + "json": { + "results": [ + { + "id": "303240", + "node-type": "generic-vnf", + "url": "/aai/v16/network/generic-vnfs/generic-vnf/230f339c-3e75-4f6b-8c9c-da4759da8222", + "properties": { + "vnf-id": "230f339c-3e75-4f6b-8c9c-da4759da8222", + "vnf-name": "vcpe_1", + "vnf-type": "demoVCPEInfra/vCPE_infra 0d1234cf-100c 0", + "service-id": "2db01c96-4baa-4393-8d79-af8d7bf4698e", + "prov-status": "PREPROV", + "orchestration-status": "Inventoried", + "in-maint": false, + "is-closed-loop-disabled": false, + "resource-version": "1575542300539", + "model-invariant-id": "c6aef848-e119-4572-9643-0b68da217358", + "model-version-id": "77c1a3d9-422a-4f78-bd8f-f7a357685b25", + "model-customization-id": "1f6a305d-74b6-4b92-b407-cd03284b6432" + } + }, + { + "id": "209096", + "node-type": "pnf", + "url": "/aai/v16/network/pnfs/pnf/pnf-existing", + "properties": { + "pnf-name": "pnf-existing", + "pnf-id": "99700432-df00-473d-8ff9-2fb14243417a", + "equip-type": "Complicated", + "equip-vendor": "Thunder", + "equip-model": "MP63527", + "ipaddress-v4-oam": "10.10.10.32", + "sw-version": "2.1.5", + "in-maint": false, + "serial-number": "6061ZW3", + "ipaddress-v6-oam": "2001:0db8:0:0:0:0:1428:57ab", + "resource-version": "1573053304574", + "nf-role": "gNB", + "orchestration-status": "Active" + } + } + ] + } + } + } + } +] diff --git a/plans/dcaegen2-services-pmsh/testsuite/assets/cbs-initializer.json b/plans/dcaegen2-services-pmsh/testsuite/assets/cbs-initializer.json new file mode 100644 index 00000000..23888098 --- /dev/null +++ b/plans/dcaegen2-services-pmsh/testsuite/assets/cbs-initializer.json @@ -0,0 +1,119 @@ +[ + { + "httpRequest": { + "path": "/service_component_all/.*" + }, + "httpResponse": { + "statusCode": 200, + "headers": { + "content-type": [ + "application/json" + ] + }, + "body": { + "type": "JSON", + "json": { + "policy": { + "subscription": { + "subscriptionName": "ExtraPM-All-gNB-R2B", + "administrativeState": "LOCKED", + "fileBasedGP": 15, + "fileLocation": "/pm/pm.xml", + "nfFilter": { + "swVersions": [ + "1.0.0", + "1.0.1" + ], + "nfNames": [ + "^pnf.*", + "^vnf.*" + ] + }, + "measurementGroups": [ + { + "measurementGroup": { + "measurementTypes": [ + { + "measurementType": "countera" + }, + { + "measurementType": "counterb" + } + ], + "managedObjectDNsBasic": [ + { + "DN": "dna" + }, + { + "DN": "dnb" + } + ] + } + }, + { + "measurementGroup": { + "measurementTypes": [ + { + "measurementType": "counterc" + }, + { + "measurementType": "counterd" + } + ], + "managedObjectDNsBasic": [ + { + "DN": "dnc" + }, + { + "DN": "dnd" + } + ] + } + } + ] + } + }, + "config": { + "control_loop_name": "pmsh-control-loop", + "operational_policy_name": "pmsh-operational-policy", + "cert_path": "/opt/app/pmsh/etc/certs/cert.pem", + "streams_publishes": { + "policy_pm_publisher": { + "dmaap_info": { + "client_id": "1475976809466", + "client_role": "org.onap.dcae.pmPublisher", + "topic_url": "https://mr-sim:1080/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS", + "location": "san-francisco" + }, + "type": "message_router" + } + }, + "streams_subscribes": { + "aai_subscriber": { + "type": "message_router", + "dmaap_info": { + "client_id": "1575976809466", + "client_role": "org.onap.dcae.aaiSub", + "topic_url": "https://mr-sim:1080/events/AAI_EVENT", + "location": "san-francisco" + } + }, + "policy_pm_subscriber": { + "dmaap_info": { + "location": "san-francisco", + "topic_url": "https://mr-sim:1080/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS", + "client_role": "org.onap.dcae.pmSubscriber", + "client_id": "1575876809456" + }, + "type": "message_router" + } + }, + "key_path": "/opt/app/pmsh/etc/certs/key.pem", + "aaf_identity": "dcae@dcae.onap.org", + "aaf_password": "demo123456!" + } + } + } + } + } +] diff --git a/plans/dcaegen2-services-pmsh/testsuite/assets/mr-initializer.json b/plans/dcaegen2-services-pmsh/testsuite/assets/mr-initializer.json new file mode 100644 index 00000000..2eac8406 --- /dev/null +++ b/plans/dcaegen2-services-pmsh/testsuite/assets/mr-initializer.json @@ -0,0 +1,50 @@ +[ + { + "httpRequest": { + "path": "/events/AAI_EVENT/dcae_pmsh_cg/AAI-EVENT" + }, + "httpResponse": { + "statusCode": 200, + "headers": { + "content-type": [ + "application/json" + ] + }, + "body": "{}" + } + }, + { + "httpRequest": { + "path": "/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS" + }, + "httpResponse": { + "statusCode": 200, + "headers": { + "content-type": [ + "application/json" + ] + }, + "body": { + "type": "JSON", + "json": {} + } + } + }, + { + "httpRequest": { + "path": "/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS/dcae_pmsh_cg/policy_response_consumer" + }, + "httpResponse": { + "statusCode": 200, + "headers": { + "content-type": [ + "application/json" + ] + }, + "body": { + "type": "JSON", + "json": {} + } + } + } +] diff --git a/plans/dcaegen2-services-pmsh/testsuite/docker-compose.yml b/plans/dcaegen2-services-pmsh/testsuite/docker-compose.yml index 4ea89dc4..0ad8453e 100644 --- a/plans/dcaegen2-services-pmsh/testsuite/docker-compose.yml +++ b/plans/dcaegen2-services-pmsh/testsuite/docker-compose.yml @@ -1,31 +1,55 @@ version: '3.3' services: - mockserver: - container_name: mockserver + db: + container_name: db + image: postgres + restart: always + environment: + POSTGRES_PASSWORD: $DB_PASSWORD + POSTGRES_USER: $DB_USER + networks: + pmsh-network: + + aai-sim: + container_name: aai-sim image: mockserver/mockserver:mockserver-5.9.0 environment: MOCKSERVER_PROPERTY_FILE: /config/mockserver.properties - MOCKSERVER_INITIALIZATION_JSON_PATH: /config/initializerJson.json + MOCKSERVER_INITIALIZATION_JSON_PATH: /config/aai-initializer.json volumes: - ./assets/mockserver.properties:/config/mockserver.properties - - ./assets/initializerJson.json:/config/initializerJson.json + - ./assets/aai-initializer.json:/config/aai-initializer.json networks: pmsh-network: - db: - container_name: db - image: postgres - restart: always + cbs-sim: + container_name: cbs-sim + image: mockserver/mockserver:mockserver-5.9.0 environment: - POSTGRES_PASSWORD: $DB_PASSWORD - POSTGRES_USER: $DB_USER + MOCKSERVER_PROPERTY_FILE: /config/mockserver.properties + MOCKSERVER_INITIALIZATION_JSON_PATH: /config/cbs-initializer.json + volumes: + - ./assets/mockserver.properties:/config/mockserver.properties + - ./assets/cbs-initializer.json:/config/cbs-initializer.json + networks: + pmsh-network: + + mr-sim: + container_name: mr-sim + image: mockserver/mockserver:mockserver-5.9.0 + environment: + MOCKSERVER_PROPERTY_FILE: /config/mockserver.properties + MOCKSERVER_INITIALIZATION_JSON_PATH: /config/mr-initializer.json + volumes: + - ./assets/mockserver.properties:/config/mockserver.properties + - ./assets/mr-initializer.json:/config/mr-initializer.json networks: pmsh-network: pmsh: container_name: pmsh - image: nexus3.onap.org:10001/onap/org.onap.dcaegen2.services.pmsh + image: nexus3.onap.org:10001/onap/org.onap.dcaegen2.services.pmsh:1.0.1 depends_on: - db volumes: @@ -33,12 +57,12 @@ services: - ./assets/key.pem:/opt/app/pmsh/etc/certs/key.pem environment: HOSTNAME: "dcae-pmsh" - CONFIG_BINDING_SERVICE_SERVICE_HOST: mockserver + CONFIG_BINDING_SERVICE_SERVICE_HOST: cbs-sim CONFIG_BINDING_SERVICE_SERVICE_PORT: 1080 PMSH_PG_URL: db PMSH_PG_USERNAME: $DB_USER PMSH_PG_PASSWORD: $DB_PASSWORD - AAI_SERVICE_HOST: mockserver + AAI_SERVICE_HOST: aai-sim AAI_SERVICE_PORT_AAI_SSL: 1080 networks: pmsh-network: diff --git a/plans/dcaegen2-services-pmsh/testsuite/setup.sh b/plans/dcaegen2-services-pmsh/testsuite/setup.sh index c70e02a1..5c599069 100644 --- a/plans/dcaegen2-services-pmsh/testsuite/setup.sh +++ b/plans/dcaegen2-services-pmsh/testsuite/setup.sh @@ -1,15 +1,12 @@ #!/bin/bash # Place the scripts in run order: -source ${SCRIPTS}/common_functions.sh export DB_USER=pmsh export DB_PASSWORD=pmsh -docker login -u docker -p docker nexus3.onap.org:10001 - TEST_PLANS_DIR=$WORKSPACE/plans/dcaegen2-services-pmsh/testsuite -docker-compose -f $TEST_PLANS_DIR/docker-compose.yml up -d mockserver db +docker-compose -f $TEST_PLANS_DIR/docker-compose.yml up -d db aai-sim cbs-sim mr-sim # Slow machine running CSITs can affect db coming up in time for PMSH echo "Waiting for postgres db to come up..." @@ -45,9 +42,11 @@ done # Wait for initialization of Docker containers containers_ok=false for i in {1..5}; do - if [ $(docker inspect --format '{{ .State.Running }}' mockserver) ] && \ - [ $(docker inspect --format '{{ .State.Running }}' db) ] && \ - [ $(docker inspect --format '{{ .State.Running }}' pmsh) ] + if [ $(docker inspect --format '{{ .State.Running }}' cbs-sim) ] && \ + [ $(docker inspect --format '{{ .State.Running }}' aai-sim) ] && \ + [ $(docker inspect --format '{{ .State.Running }}' mr-sim) ] && \ + [ $(docker inspect --format '{{ .State.Running }}' db) ] && \ + [ $(docker inspect --format '{{ .State.Running }}' pmsh) ] then echo "All required docker containers are up." containers_ok=true @@ -58,5 +57,9 @@ for i in {1..5}; do done [ "$containers_ok" = "false" ] && echo "Error: required container not running." && exit 1 +DB_IP_ADDRESS=$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" db) +MR_SIM_IP_ADDRESS=$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" mr-sim) +CBS_SIM_IP_ADDRESS=$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" cbs-sim) + #Pass any variables required by Robot test suites in ROBOT_VARIABLES -ROBOT_VARIABLES="-v PMSH_IP:${PMSH_IP}" +ROBOT_VARIABLES="-v PMSH_IP:${PMSH_IP} -v MR_SIM_IP_ADDRESS:${MR_SIM_IP_ADDRESS} -v DB_IP_ADDRESS:${DB_IP_ADDRESS} -v CBS_SIM_IP_ADDRESS:${CBS_SIM_IP_ADDRESS}" diff --git a/plans/dcaegen2-services-pmsh/testsuite/assets/initializerJson.json b/tests/dcaegen2-services-pmsh/testcases/assets/cbs-expectation-unlocked-config.json index 222aafd5..6f6972f4 100644 --- a/plans/dcaegen2-services-pmsh/testsuite/assets/initializerJson.json +++ b/tests/dcaegen2-services-pmsh/testcases/assets/cbs-expectation-unlocked-config.json @@ -19,7 +19,6 @@ "administrativeState": "UNLOCKED", "fileBasedGP": 15, "fileLocation": "/pm/pm.xml", - "nfTypeModelInvariantId": "2829292", "nfFilter": { "swVersions": [ "1.0.0", @@ -75,25 +74,18 @@ } }, "config": { + "control_loop_name": "pmsh-control-loop", + "operational_policy_name": "pmsh-operational-policy", "cert_path": "/opt/app/pmsh/etc/certs/cert.pem", "streams_publishes": { "policy_pm_publisher": { "dmaap_info": { "client_id": "1475976809466", "client_role": "org.onap.dcae.pmPublisher", - "topic_url": "https://node:30226/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS", + "topic_url": "https://mr-sim:1080/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS", "location": "san-francisco" }, "type": "message_router" - }, - "other_publisher": { - "dmaap_info": { - "location": "san-francisco", - "topic_url": "https://node:30226/events/org.onap.dmaap.mr.SOME_OTHER_TOPIC", - "client_role": "org.onap.dcae.pmControlPub", - "client_id": "1875976809466" - }, - "type": "message_router" } }, "streams_subscribes": { @@ -102,14 +94,14 @@ "dmaap_info": { "client_id": "1575976809466", "client_role": "org.onap.dcae.aaiSub", - "topic_url": "https://node:30226/events/AAI_EVENT", + "topic_url": "https://mr-sim:1080/events/AAI_EVENT", "location": "san-francisco" } }, "policy_pm_subscriber": { "dmaap_info": { "location": "san-francisco", - "topic_url": "https://node:30226/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS", + "topic_url": "https://mr-sim:1080/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS", "client_role": "org.onap.dcae.pmSubscriber", "client_id": "1575876809456" }, @@ -123,63 +115,5 @@ } } } - }, - { - "httpRequest": { - "path": "/aai/v16/query.*" - }, - "httpResponse": { - "statusCode": 200, - "headers": { - "content-type": [ - "application/json" - ] - }, - "body": { - "type": "JSON", - "json": { - "results": [ - { - "id": "327736", - "node-type": "pnf", - "url": "/aai/v16/network/pnfs/pnf/pnf207", - "properties": { - "pnf-name": "pnf207", - "pnf-id": "55e57cd1-ab8b-40cd-97d5-cfc774fef616", - "equip-type": "val8", - "equip-vendor": "Nokia", - "equip-model": "val6", - "ipaddress-v4-oam": "10.10.10.26", - "sw-version": "val7", - "in-maint": false, - "serial-number": "6061ZW3", - "ipaddress-v6-oam": "2001:0db8:0:0:0:0:1428:57ab", - "resource-version": "1573066346347", - "nf-role": "gNB" - } - }, - { - "id": "241864", - "node-type": "generic-vnf", - "url": "/aai/v16/network/generic-vnfs/generic-vnf/1083ecbb-f3b3-49da-b5f5-b5962140ee99", - "properties": { - "vnf-id": "1083ecbb-f3b3-49da-b5f5-b5962140ee99", - "vnf-name": "vnf", - "vnf-type": "demoVCPEvBNG/vCPE_vbng 5eb5661a-0cb6 0", - "service-id": "2db01c96-4baa-4393-8d79-af8d7bf4698e", - "prov-status": "PREPROV", - "orchestration-status": "Inventoried", - "in-maint": false, - "is-closed-loop-disabled": false, - "resource-version": "1575541662410", - "model-invariant-id": "7129e420-d396-4efb-af02-6b83499b12f8", - "model-version-id": "e80a6ae3-cafd-4d24-850d-e14c084a5ca9", - "model-customization-id": "376dbe87-e9c5-4f2b-80e2-a420b373ee87" - } - } - ] - } - } - } } ] diff --git a/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-aai-pnf-created.json b/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-aai-pnf-created.json new file mode 100644 index 00000000..9c9dc6e5 --- /dev/null +++ b/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-aai-pnf-created.json @@ -0,0 +1,36 @@ +[ + { + "httpRequest": { + "path": "/events/AAI_EVENT/dcae_pmsh_cg/AAI-EVENT" + }, + "httpResponse": { + "statusCode": 200, + "headers": { + "content-type": [ + "application/json" + ] + }, + "body": [ + "{\"cambria.partition\":\"AAI\",\"event-header\":{\"severity\":\"NORMAL\",\"entity-type\":\"pnf\",\"top-entity-type\":\"pnf\",\"entity-link\":\"/aai/v16/network/pnfs/pnf/pnf_newly_discovered\",\"event-type\":\"AAI-EVENT\",\"domain\":\"dev\",\"action\":\"UPDATE\",\"sequence-number\":\"0\",\"id\":\"db09e090-196e-4f84-9645-e449b1cd3640\",\"source-name\":\"dcae-curl\",\"version\":\"v16\",\"timestamp\":\"20200203-15:14:08:807\"},\"entity\":{\"ipaddress-v4-oam\":\"10.10.10.37\",\"nf-role\":\"gNB\",\"equip-type\":\"val8\",\"relationship-list\":{\"relationship\":[{\"related-to\":\"service-instance\",\"relationship-data\":[{\"relationship-value\":\"Demonstration\",\"relationship-key\":\"customer.global-customer-id\"},{\"relationship-value\":\"vCPE\",\"relationship-key\":\"service-subscription.service-type\"},{\"relationship-value\":\"2c03b2a8-e31a-4749-9e99-3089ab441400\",\"relationship-key\":\"service-instance.service-instance-id\"}],\"related-link\":\"/aai/v16/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vCPE/service-instances/service-instance/2c03b2a8-e31a-4749-9e99-3089ab441400\",\"relationship-label\":\"org.onap.relationships.inventory.ComposedOf\",\"related-to-property\":[{\"property-key\":\"service-instance.service-instance-name\",\"property-value\":\"Svc6_1\"}]}]},\"equip-vendor\":\"Ericsson\",\"serial-number\":\"6061ZW3\",\"ipaddress-v6-oam\":\"2001:0db8:0:0:0:0:1428:57ab\",\"equip-model\":\"val6\",\"in-maint\":false,\"resource-version\":\"1578668956804\",\"sw-version\":\"val7\",\"pnf-id\":\"eabcfaf7-b7f3-45fb-94e7-e6112fb3e8b8\",\"pnf-name\":\"pnf_newly_discovered\",\"orchestration-status\":\"Active\"}}" + ] + }, + "times": { + "remainingTimes": 1, + "unlimited": false + } + }, + { + "httpRequest": { + "path": "/events/AAI_EVENT/dcae_pmsh_cg/AAI-EVENT" + }, + "httpResponse": { + "statusCode": 200, + "headers": { + "content-type": [ + "application/json" + ] + }, + "body": "{}" + } + } +] diff --git a/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-aai-pnf-deleted.json b/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-aai-pnf-deleted.json new file mode 100644 index 00000000..c0accc8c --- /dev/null +++ b/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-aai-pnf-deleted.json @@ -0,0 +1,36 @@ +[ + { + "httpRequest": { + "path": "/events/AAI_EVENT/dcae_pmsh_cg/AAI-EVENT" + }, + "httpResponse": { + "statusCode": 200, + "headers": { + "content-type": [ + "application/json" + ] + }, + "body": [ + "{\"cambria.partition\":\"AAI\",\"event-header\":{\"severity\":\"NORMAL\",\"entity-type\":\"pnf\",\"top-entity-type\":\"pnf\",\"entity-link\":\"/aai/v16/network/pnfs/pnf/pnf_newly_discovered\",\"event-type\":\"AAI-EVENT\",\"domain\":\"dev\",\"action\":\"DELETE\",\"sequence-number\":\"0\",\"id\":\"db09e090-196e-4f84-9645-e449b1cd3640\",\"source-name\":\"dcae-curl\",\"version\":\"v16\",\"timestamp\":\"20200203-15:14:08:807\"},\"entity\":{\"ipaddress-v4-oam\":\"10.10.10.37\",\"nf-role\":\"gNB\",\"equip-type\":\"val8\",\"relationship-list\":{\"relationship\":[{\"related-to\":\"service-instance\",\"relationship-data\":[{\"relationship-value\":\"Demonstration\",\"relationship-key\":\"customer.global-customer-id\"},{\"relationship-value\":\"vCPE\",\"relationship-key\":\"service-subscription.service-type\"},{\"relationship-value\":\"2c03b2a8-e31a-4749-9e99-3089ab441400\",\"relationship-key\":\"service-instance.service-instance-id\"}],\"related-link\":\"/aai/v16/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vCPE/service-instances/service-instance/2c03b2a8-e31a-4749-9e99-3089ab441400\",\"relationship-label\":\"org.onap.relationships.inventory.ComposedOf\",\"related-to-property\":[{\"property-key\":\"service-instance.service-instance-name\",\"property-value\":\"Svc6_1\"}]}]},\"equip-vendor\":\"Ericsson\",\"serial-number\":\"6061ZW3\",\"ipaddress-v6-oam\":\"2001:0db8:0:0:0:0:1428:57ab\",\"equip-model\":\"val6\",\"in-maint\":false,\"resource-version\":\"1578668956804\",\"sw-version\":\"val7\",\"pnf-id\":\"eabcfaf7-b7f3-45fb-94e7-e6112fb3e8b8\",\"pnf-name\":\"pnf_newly_discovered\",\"orchestration-status\":\"Active\"}}" + ] + }, + "times": { + "remainingTimes": 1, + "unlimited": false + } + }, + { + "httpRequest": { + "path": "/events/AAI_EVENT/dcae_pmsh_cg/AAI-EVENT" + }, + "httpResponse": { + "statusCode": 200, + "headers": { + "content-type": [ + "application/json" + ] + }, + "body": "{}" + } + } +] diff --git a/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-policy-subscription-created-pnf-existing.json b/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-policy-subscription-created-pnf-existing.json new file mode 100644 index 00000000..cc14f3c9 --- /dev/null +++ b/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-policy-subscription-created-pnf-existing.json @@ -0,0 +1,39 @@ +[ + { + "httpRequest": { + "path": "/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS/dcae_pmsh_cg/policy_response_consumer" + }, + "httpResponse": { + "statusCode": 200, + "headers": { + "content-type": [ + "application/json" + ] + }, + "body": [ + "{\"name\": \"ResponseEvent\", \"nameSpace\": \"org.onap.policy.apex.onap.pmcontrol\", \"source\": \"APEX\", \"target\": \"DCAE\", \"version\": \"0.0.1\", \"status\": {\"subscriptionName\": \"ExtraPM-All-gNB-R2B\", \"nfName\": \"pnf-existing\", \"changeType\": \"CREATE\", \"message\": \"success\"}}" + ] + }, + "times": { + "remainingTimes": 1, + "unlimited": false + } + }, + { + "httpRequest": { + "path": "/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS/dcae_pmsh_cg/policy_response_consumer" + }, + "httpResponse": { + "statusCode": 200, + "headers": { + "content-type": [ + "application/json" + ] + }, + "body": { + "type": "JSON", + "json": {} + } + } + } +] diff --git a/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-policy-subscription-created-pnf-new.json b/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-policy-subscription-created-pnf-new.json new file mode 100644 index 00000000..79bfb44f --- /dev/null +++ b/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-policy-subscription-created-pnf-new.json @@ -0,0 +1,39 @@ +[ + { + "httpRequest": { + "path": "/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS/dcae_pmsh_cg/policy_response_consumer" + }, + "httpResponse": { + "statusCode": 200, + "headers": { + "content-type": [ + "application/json" + ] + }, + "body": [ + "{\"name\": \"ResponseEvent\", \"nameSpace\": \"org.onap.policy.apex.onap.pmcontrol\", \"source\": \"APEX\", \"target\": \"DCAE\", \"version\": \"0.0.1\", \"status\": {\"subscriptionName\": \"ExtraPM-All-gNB-R2B\", \"nfName\": \"pnf_new\", \"changeType\": \"CREATE\", \"message\": \"success\"}}" + ] + }, + "times": { + "remainingTimes": 1, + "unlimited": false + } + }, + { + "httpRequest": { + "path": "/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS/dcae_pmsh_cg/policy_response_consumer" + }, + "httpResponse": { + "statusCode": 200, + "headers": { + "content-type": [ + "application/json" + ] + }, + "body": { + "type": "JSON", + "json": {} + } + } + } +] diff --git a/tests/dcaegen2-services-pmsh/testcases/pmsh.robot b/tests/dcaegen2-services-pmsh/testcases/pmsh.robot index 74a575cd..95b78c25 100644 --- a/tests/dcaegen2-services-pmsh/testcases/pmsh.robot +++ b/tests/dcaegen2-services-pmsh/testcases/pmsh.robot @@ -1,38 +1,163 @@ *** Settings *** Documentation Testing PMSH functionality + Library OperatingSystem Library RequestsLibrary Library String +Library Process + +Resource ../../common.robot -Test Setup Create Session pmsh_session ${PMSH_BASE_URL} +Test Setup CreateSessions Test Teardown Delete All Sessions *** Variables *** + ${PMSH_BASE_URL} https://${PMSH_IP}:8443 +${MR_BASE_URL} http://${MR_SIM_IP_ADDRESS}:1080 +${CBS_BASE_URL} http://${CBS_SIM_IP_ADDRESS}:1080 ${HEALTHCHECK_ENDPOINT} /healthcheck +${MR_EXPECTATION_AAI_PNF_CREATED} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-aai-pnf-created.json +${MR_EXPECTATION_AAI_PNF_REMOVED} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-aai-pnf-deleted.json +${MR_EXPECTATION_POLICY_RESPONSE_PNF_NEW} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-policy-subscription-created-pnf-new.json +${MR_EXPECTATION_POLICY_RESPONSE_PNF_EXISTING} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/mr-expectation-policy-subscription-created-pnf-existing.json +${CBS_EXPECTATION_ADMIN_STATE_UNLOCKED} %{WORKSPACE}/tests/dcaegen2-services-pmsh/testcases/assets/cbs-expectation-unlocked-config.json + +${ADMIN_STATE_LOCKED_PATTERN} 'administrativeState': 'LOCKED' +${ADMIN_STATE_UNLOCKED_PATTERN} 'administrativeState': 'UNLOCKED' +${CLI_EXEC_GET_CBS_CONFIG_FIRST} docker exec pmsh /bin/sh -c "grep -m 1 'PMSH Configuration from Configbinding Service' /var/log/ONAP/dcaegen2/services/pmsh/debug.log" +${CLI_EXEC_GET_CBS_CONFIG_LAST} docker exec pmsh /bin/sh -c "grep 'PMSH Configuration from Configbinding Service' /var/log/ONAP/dcaegen2/services/pmsh/debug.log | tail -1" + +${DB_CMD_NETWORK_FUNCTIONS_COUNT} docker exec db bash -c "psql -U pmsh -d pmsh -A -t -c 'select count(*) from network_functions;'" +${DB_CMD_NF_TO_SUB_REL_COUNT} docker exec db bash -c "psql -U pmsh -d pmsh -A -t -c 'select count(*) from nf_to_sub_rel;'" +${DB_CMD_SUBSCRIPTIONS_COUNT} docker exec db bash -c "psql -U pmsh -d pmsh -A -t -c 'select count(*) from subscriptions;'" + +${CLI_GET_NETWORK_FUNCTIONS_DB_TABLE} docker exec db bash -c "psql -U pmsh -d pmsh -A -t -c 'select nf_name, orchestration_status from network_functions;'" +${CLI_GET_NF_TO_SUB_REL_DB_TABLE} docker exec db bash -c "psql -U pmsh -d pmsh -A -t -c 'select subscription_name, nf_name, nf_sub_status from nf_to_sub_rel;'" +${CLI_GET_SUBSCRIPTIONS_DB_TABLE} docker exec db bash -c "psql -U pmsh -d pmsh -A -t -c 'select subscription_name, status from subscriptions;'" + *** Test Cases *** -Verify Health Check returns 200 when a REST GET request to healthcheck url + +Verify PMSH health check returns 200 and has a status of healthy [Tags] PMSH_01 - [Documentation] Verify Health Check returns 200 when a REST GET request to healthcheck url - [Timeout] 1 minute + [Documentation] Verify the PMSH health check api call functions correctly + [Timeout] 10 seconds ${resp}= Get Request pmsh_session ${HEALTHCHECK_ENDPOINT} - VerifyResponse ${resp.status_code} 200 + Should Be True ${resp.status_code} == 200 + Should Match Regexp ${resp.text} healthy -Verify Health Check response includes healthy status +Verify Administrative State in PMSH log file is LOCKED [Tags] PMSH_02 - [Documentation] Verify Health Check response includes healthy status - [Timeout] 1 minute - ${resp}= Get Request pmsh_session ${HEALTHCHECK_ENDPOINT} - VerifyResponseContains ${resp.text} healthy + [Documentation] Verify Administrative State as logged in PMSH log file is LOCKED + [Timeout] 10 seconds + Sleep 3 Allow time for PMSH to flush to logs + ${cli_cmd_output}= Run Process ${CLI_EXEC_GET_CBS_CONFIG_FIRST} shell=yes + Should Be True ${cli_cmd_output.rc} == 0 + Should Contain ${cli_cmd_output.stdout} ${ADMIN_STATE_LOCKED_PATTERN} + +Verify database tables exist and are empty + [Tags] PMSH_03 + [Documentation] Verify database has been created and is empty + [Timeout] 10 seconds + VerifyDatabaseEmpty + +Verify PNF detected in AAI when administrative state unlocked + [Tags] PMSH_04 + [Documentation] Verify PNF detected when administrative state unlocked + [Timeout] 40 seconds + SetAdministrativeStateToUnlocked + Sleep 31 Allow PMSH time to pick up changes in CBS config + VerifyCommandOutputContains ${CLI_EXEC_GET_CBS_CONFIG_LAST} ${ADMIN_STATE_UNLOCKED_PATTERN} + VerifyCommandOutputIs ${cli_get_subscriptions_db_table} ExtraPM-All-gNB-R2B|UNLOCKED + VerifyCommandOutputIs ${cli_get_network_functions_db_table} pnf-existing|Active + VerifyCommandOutputIs ${cli_get_nf_to_sub_rel_db_table} ExtraPM-All-gNB-R2B|pnf-existing|PENDING_CREATE + +Verify Policy response on MR is handled + [Tags] PMSH_05 + [Documentation] Verify policy response on MR is handled + [Timeout] 40 seconds + SimulatePolicyResponse ${MR_EXPECTATION_POLICY_RESPONSE_PNF_EXISTING} + Sleep 7 seconds Ensure Policy response on MR is picked up + VerifyCommandOutputIs ${cli_get_nf_to_sub_rel_db_table} ExtraPM-All-gNB-R2B|pnf-existing|CREATED + +Verify AAI event on MR detailing new PNF being detected is handled + [Tags] PMSH_06 + [Documentation] Verify PNF created AAI event on MR is handled + [Timeout] 30 seconds + SimulateNewPNF + Sleep 12 seconds Ensure AAI event on MR is picked up + VerifyCommandOutputIs ${CLI_GET_SUBSCRIPTIONS_DB_TABLE} ExtraPM-All-gNB-R2B|UNLOCKED + VerifyCommandOutputIs ${CLI_GET_NETWORK_FUNCTIONS_DB_TABLE} pnf-existing|Active\npnf_newly_discovered|Active + VerifyCommandOutputIs ${CLI_GET_NF_TO_SUB_REL_DB_TABLE} ExtraPM-All-gNB-R2B|pnf-existing|CREATED\nExtraPM-All-gNB-R2B|pnf_newly_discovered|PENDING_CREATE + +Verify AAI event on MR detailing PNF being deleted is handled + [Tags] PMSH_07 + [Documentation] Verify PNF deleted AAI event on MR is handled + [Timeout] 30 seconds + SimulateDeletedPNF + Sleep 12 seconds Ensure AAI event on MR is picked up + VerifyNumberOfRecordsInDbTable ${DB_CMD_NETWORK_FUNCTIONS_COUNT} 1 + VerifyNumberOfRecordsInDbTable ${DB_CMD_NF_TO_SUB_REL_COUNT} 1 *** Keywords *** -VerifyResponse - [Arguments] ${actual_response_value} ${expected_response_value} - Should Be Equal As Strings ${actual_response_value} ${expected_response_value} -VerifyResponseContains - [Arguments] ${response_content} ${string_to_check_for} - Should Contain ${response_content} ${string_to_check_for} +CreateSessions + Create Session pmsh_session ${PMSH_BASE_URL} + Create Session mr_sim_session ${MR_BASE_URL} + Create Session cbs_sim_session ${CBS_BASE_URL} + +SetAdministrativeStateToUnlocked + ${data}= Get Data From File ${CBS_EXPECTATION_ADMIN_STATE_UNLOCKED} + ${resp} = Put Request cbs_sim_session /clear data={"path": "/service_component_all/.*"} + Should Be True ${resp.status_code} == 200 + Sleep 2 Allow CBS time to set expectation + ${resp} = Put Request cbs_sim_session /expectation data=${data} + Should Be True ${resp.status_code} == 201 + +VerifyCommandOutputContains + [Arguments] ${cli_command} ${string_to_check_for} + ${cli_cmd_output}= Run Process ${cli_command} shell=yes + Should Be True ${cli_cmd_output.rc} == 0 + Should Contain ${cli_cmd_output.stdout} ${string_to_check_for} + +VerifyCommandOutputIs + [Arguments] ${cli_cmd} ${expected_contents} + ${cli_cmd_output}= Run Process ${cli_cmd} shell=yes + Log ${cli_cmd_output.stdout} + Should Be True ${cli_cmd_output.rc} == 0 + Should Be Equal As Strings ${cli_cmd_output.stdout} ${expected_contents} + +SimulateNewPNF + ${data}= Get Data From File ${MR_EXPECTATION_AAI_PNF_CREATED} + ${resp} = Put Request mr_sim_session /clear data={"path": "/events/AAI_EVENT/dcae_pmsh_cg/AAI-EVENT"} + Should Be True ${resp.status_code} == 200 + ${resp} = Put Request mr_sim_session /expectation data=${data} + Should Be True ${resp.status_code} == 201 + +SimulatePolicyResponse + [Arguments] ${expected_contents} + ${data}= Get Data From File ${expected_contents} + ${resp} = Put Request mr_sim_session /clear data={"path": "/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS/dcae_pmsh_cg/policy_response_consumer"} + Should Be True ${resp.status_code} == 200 + ${resp} = Put Request mr_sim_session /expectation data=${data} + Should Be True ${resp.status_code} == 201 + +SimulateDeletedPNF + ${data}= Get Data From File ${MR_EXPECTATION_AAI_PNF_REMOVED} + ${resp} = Put Request mr_sim_session /clear data={"path": "/events/AAI_EVENT/dcae_pmsh_cg/AAI-EVENT"} + Should Be True ${resp.status_code} == 200 + ${resp} = Put Request mr_sim_session /expectation data=${data} + Should Be True ${resp.status_code} == 201 + +VerifyNumberOfRecordsInDbTable + [Arguments] ${db_query} ${expected_count} + ${db_count} Run Process ${db_query} shell=yes + Should Be True ${db_count.stdout} == ${expected_count} + +VerifyDatabaseEmpty + VerifyNumberOfRecordsInDbTable ${DB_CMD_NETWORK_FUNCTIONS_COUNT} 0 + VerifyNumberOfRecordsInDbTable ${DB_CMD_NF_TO_SUB_REL_COUNT} 0 + VerifyNumberOfRecordsInDbTable ${DB_CMD_SUBSCRIPTIONS_COUNT} 0 |