aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plans/aaf/certservice/setup.sh30
-rw-r--r--plans/aaf/certservice/teardown.sh18
-rwxr-xr-xplans/aaf/certservice/testplan.txt3
-rw-r--r--plans/dcaegen2-services-pmsh/testsuite/assets/cert.pem32
-rw-r--r--plans/dcaegen2-services-pmsh/testsuite/assets/initializerJson.json185
-rw-r--r--plans/dcaegen2-services-pmsh/testsuite/assets/key.pem52
-rw-r--r--plans/dcaegen2-services-pmsh/testsuite/assets/mockserver.properties26
-rw-r--r--plans/dcaegen2-services-pmsh/testsuite/docker-compose.yml48
-rw-r--r--plans/dcaegen2-services-pmsh/testsuite/setup.sh62
-rw-r--r--plans/dcaegen2-services-pmsh/testsuite/teardown.sh8
-rw-r--r--plans/dcaegen2-services-pmsh/testsuite/testplan.txt3
-rw-r--r--tests/aaf/certservice/assets/invalid.csr1
-rw-r--r--tests/aaf/certservice/assets/invalid.key1
-rw-r--r--tests/aaf/certservice/assets/valid.csr1
-rw-r--r--tests/aaf/certservice/assets/valid.key1
-rw-r--r--tests/aaf/certservice/cert-service-test.robot44
-rw-r--r--tests/aaf/certservice/resources/cert-service-keywords.robot55
-rw-r--r--tests/aaf/certservice/resources/cert-service-properties.robot9
-rw-r--r--tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/A20181004.0000-1000-0015-1000_5G.xml88
-rw-r--r--tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/C20190329.0000-0015.xml49
-rw-r--r--tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/valid_metadata.json12
-rw-r--r--tests/dcaegen2-pmmapper/pmmapper/pmmapper.robot19
-rw-r--r--tests/dcaegen2-services-pmsh/testcases/__init__.robot2
-rw-r--r--tests/dcaegen2-services-pmsh/testcases/pmsh.robot38
24 files changed, 787 insertions, 0 deletions
diff --git a/plans/aaf/certservice/setup.sh b/plans/aaf/certservice/setup.sh
new file mode 100644
index 00000000..48bf00b9
--- /dev/null
+++ b/plans/aaf/certservice/setup.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+#
+# Copyright 2017 ZTE Corporation.
+#
+# 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.
+#
+
+AAFCERT_IMAGE=nexus3.onap.org:10001/onap/org.onap.aaf.certservice.aaf-certservice-api:latest
+
+echo AAFCERT_IMAGE=${AAFCERT_IMAGE}
+
+# Start AAF Cert Srevice
+docker run -p 8080:8080 -d --name aafcert ${AAFCERT_IMAGE}
+
+AAFCERT_IP=`get-instance-ip.sh aafcert`
+export AAFCERT_IP=${AAFCERT_IP}
+
+# Wait container ready
+sleep 5
+
diff --git a/plans/aaf/certservice/teardown.sh b/plans/aaf/certservice/teardown.sh
new file mode 100644
index 00000000..a613944d
--- /dev/null
+++ b/plans/aaf/certservice/teardown.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# Copyright 2017 ZTE, 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 aafcert \ No newline at end of file
diff --git a/plans/aaf/certservice/testplan.txt b/plans/aaf/certservice/testplan.txt
new file mode 100755
index 00000000..270fc6d4
--- /dev/null
+++ b/plans/aaf/certservice/testplan.txt
@@ -0,0 +1,3 @@
+# Test suites are relative paths under [integration/csit.git]/tests/.
+# Place the suites in run order.
+aaf/certservice
diff --git a/plans/dcaegen2-services-pmsh/testsuite/assets/cert.pem b/plans/dcaegen2-services-pmsh/testsuite/assets/cert.pem
new file mode 100644
index 00000000..1f789ba2
--- /dev/null
+++ b/plans/dcaegen2-services-pmsh/testsuite/assets/cert.pem
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFbTCCA1WgAwIBAgIUWBWdddkqFoaTksLso+0fNNWSeKkwDQYJKoZIhvcNAQEL
+BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
+GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAgFw0yMDAyMTcxNjM2NTdaGA8yMDUw
+MDIwOTE2MzY1N1owRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx
+ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCAiIwDQYJKoZIhvcN
+AQEBBQADggIPADCCAgoCggIBAM8+IPmw6dYR1zgtpjiiXQS3Z1sYcnH0fx5N2mUw
+nOENZu9OZxAcMzL+kPavcqTG3eF+0Ow9/vuzDqf15B+TuYFAbGw9iPUVl+k4SOeF
+vgaeJCUEQSfrIcq1AR4/CApVMK2jwHJ2zSUHkXxaNtRCD+wj5n5E1ljJvh3YCJmW
+MiS7DXxs/Mi0I85rRXcUOdmr14dqF0xlzWwAfoo43GSKnDIVRxzMtb6AqIZTMtk9
+0/0qkeju8eTMNEswtkOs4Q3vTqqkgeOaN4TXXO2x34waM2bCDDCBNzpYGSWs+pwo
+i3qOZRP/kZZWI9SwU5RUygpA/i9PGD1Wfxx6HIGzfmVAaJR5YH4ow9hM5xGkiV//
+BAb4C/3J3GTugfypsc+0/JRtlYoaNplHHqNRBcvqPq+G0Pfi9kYDrNw4iTGCxuHT
+20CfrkxGdWQBPmtjcKNcVKP9e+u0YS47H29x5gDKxxwTmqNjyCz0XmvyFQI3ie1L
+K7NhVV1llh02s/4wOBzEutR7iVc9yJK4tmJ25xLYGZU1NJiUBAgeLKwko3kGBwVE
+eeh6TadEkRK3Y7BxJmIvTVsu+sGDVtgzaJyYW2+Ze6qVd7+qZ6jeIBrjnOzLm/R/
+8gweuPn3sJ5N+pU4R6A5Mm4FJQykAE4fgcHLYSsd4gsmShbgF9w6rFzajSW/QmPG
+E6VLAgMBAAGjUzBRMB0GA1UdDgQWBBSGIDaR8NMacFBkNUJ6wJKPUXsrGjAfBgNV
+HSMEGDAWgBSGIDaR8NMacFBkNUJ6wJKPUXsrGjAPBgNVHRMBAf8EBTADAQH/MA0G
+CSqGSIb3DQEBCwUAA4ICAQBuS+g5V2bpNZTxwYpOjUuLLexabns1xOjG61bFu8Aa
+nOyHHMPeQSDMC+RGpcmspo6v0nsL/98sxKeJTfy58kbLricg8MMpHg1HmWGthQiY
+4/MZfMkZaJxkH9OWJZjzHWn4elv+rg655e5mD8nGIXiS4vxyeDy4WP4CFtuIG4Ul
+HFgYsyhkaYa+q9knzhgPjYLPk9z27mltSNFdh9tBlWDZJ6nzUfbKUTBZZTG9Zv0S
+knNX+bFS/Q+MccGO+J1xPItGa/C42F/N/6MP5Nwt2eTzegJEn6+d7ICFUV6sShV0
+ErR82mg3eakrvM4TkMThSAskVIOSh51BkTkuMjOJ9xVclCVLLDeo7Zsg2oWMW3eC
+GG5/naaJBzKi38Bm1h6o9l2gOS1qjG+77fx5tbYwLYVTYuRQURyRkFdwRH75lqxR
+HOFK+epYzBSOegJA3SvlkRv/Ub+TSMwWlWX1fgWijvbGTUla3cLRl1kQsY5Gzwl3
+XMCAgGcNKlmOWtdDEPUoNUaN9Qvj3Jdk/Szeli370k+qIc8Vt5U5CcC4RJF78Emr
+A5EVnjxW61yFopcaAvjeRqH/tKtZBrEqzLmpyqbFlMaSVyJ+4L3G+DPZUbX0ypod
+9ouIpBUmGIUyVZYKZdtZgDcz8gEVyHVvReRegpWK4PqTK1Sp5V4AL+KsvtB/Lkk1
+WA==
+-----END CERTIFICATE-----
diff --git a/plans/dcaegen2-services-pmsh/testsuite/assets/initializerJson.json b/plans/dcaegen2-services-pmsh/testsuite/assets/initializerJson.json
new file mode 100644
index 00000000..222aafd5
--- /dev/null
+++ b/plans/dcaegen2-services-pmsh/testsuite/assets/initializerJson.json
@@ -0,0 +1,185 @@
+[
+ {
+ "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": "UNLOCKED",
+ "fileBasedGP": 15,
+ "fileLocation": "/pm/pm.xml",
+ "nfTypeModelInvariantId": "2829292",
+ "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": {
+ "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",
+ "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": {
+ "aai_subscriber": {
+ "type": "message_router",
+ "dmaap_info": {
+ "client_id": "1575976809466",
+ "client_role": "org.onap.dcae.aaiSub",
+ "topic_url": "https://node:30226/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",
+ "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!"
+ }
+ }
+ }
+ }
+ },
+ {
+ "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/plans/dcaegen2-services-pmsh/testsuite/assets/key.pem b/plans/dcaegen2-services-pmsh/testsuite/assets/key.pem
new file mode 100644
index 00000000..eddafc1f
--- /dev/null
+++ b/plans/dcaegen2-services-pmsh/testsuite/assets/key.pem
@@ -0,0 +1,52 @@
+-----BEGIN PRIVATE KEY-----
+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
+hbGjpWWdg2ta42RD3MB/wgEAesncd+r4
+-----END PRIVATE KEY-----
diff --git a/plans/dcaegen2-services-pmsh/testsuite/assets/mockserver.properties b/plans/dcaegen2-services-pmsh/testsuite/assets/mockserver.properties
new file mode 100644
index 00000000..9c592303
--- /dev/null
+++ b/plans/dcaegen2-services-pmsh/testsuite/assets/mockserver.properties
@@ -0,0 +1,26 @@
+#######################################
+# MockServer & Proxy Example Settings #
+#######################################
+
+# Socket & Port Settings
+
+# socket timeout in milliseconds (default 120000)
+mockserver.maxSocketTimeout=120000
+
+# Certificate Generation
+
+# delete KeyStore file on JVM shutdown (default true)
+mockserver.deleteGeneratedKeyStoreOnExit=true
+# certificate domain name (default "localhost")
+mockserver.sslCertificateDomainName=localhost
+# comma separated list of domain names for Subject Alternative Name domain names (default empty list)
+mockserver.sslSubjectAlternativeNameDomains=www.example.com,www.another.com
+# comma separated list of ip addresses for Subject Alternative Name ips (default empty list)
+mockserver.sslSubjectAlternativeNameIps=127.0.0.1
+
+# CORS
+
+# enable CORS for MockServer REST API
+mockserver.enableCORSForAPI=true
+# enable CORS for all responses
+mockserver.enableCORSForAllResponses=true
diff --git a/plans/dcaegen2-services-pmsh/testsuite/docker-compose.yml b/plans/dcaegen2-services-pmsh/testsuite/docker-compose.yml
new file mode 100644
index 00000000..4ea89dc4
--- /dev/null
+++ b/plans/dcaegen2-services-pmsh/testsuite/docker-compose.yml
@@ -0,0 +1,48 @@
+version: '3.3'
+
+services:
+ mockserver:
+ container_name: mockserver
+ image: mockserver/mockserver:mockserver-5.9.0
+ environment:
+ MOCKSERVER_PROPERTY_FILE: /config/mockserver.properties
+ MOCKSERVER_INITIALIZATION_JSON_PATH: /config/initializerJson.json
+ volumes:
+ - ./assets/mockserver.properties:/config/mockserver.properties
+ - ./assets/initializerJson.json:/config/initializerJson.json
+ networks:
+ pmsh-network:
+
+ db:
+ container_name: db
+ image: postgres
+ restart: always
+ environment:
+ POSTGRES_PASSWORD: $DB_PASSWORD
+ POSTGRES_USER: $DB_USER
+ networks:
+ pmsh-network:
+
+ pmsh:
+ container_name: pmsh
+ image: nexus3.onap.org:10001/onap/org.onap.dcaegen2.services.pmsh
+ depends_on:
+ - db
+ volumes:
+ - ./assets/cert.pem:/opt/app/pmsh/etc/certs/cert.pem
+ - ./assets/key.pem:/opt/app/pmsh/etc/certs/key.pem
+ environment:
+ HOSTNAME: "dcae-pmsh"
+ CONFIG_BINDING_SERVICE_SERVICE_HOST: mockserver
+ 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_PORT_AAI_SSL: 1080
+ networks:
+ pmsh-network:
+
+networks:
+ pmsh-network:
+ driver: bridge
diff --git a/plans/dcaegen2-services-pmsh/testsuite/setup.sh b/plans/dcaegen2-services-pmsh/testsuite/setup.sh
new file mode 100644
index 00000000..c70e02a1
--- /dev/null
+++ b/plans/dcaegen2-services-pmsh/testsuite/setup.sh
@@ -0,0 +1,62 @@
+#!/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
+
+# Slow machine running CSITs can affect db coming up in time for PMSH
+echo "Waiting for postgres db to come up..."
+for i in {1..30}; do
+ docker exec -i db bash -c "PGPASSWORD=$DB_PASSWORD;psql -U $DB_USER -c '\q'"
+ db_response=$?
+ if [ "$db_response" = "0" ]
+ then
+ break
+ else
+ sleep 2
+ fi
+done
+[ "$db_response" != "0" ] && echo "Error: postgres db not accessible" && exit 1
+
+docker-compose -f $TEST_PLANS_DIR/docker-compose.yml up -d pmsh
+
+PMSH_IP=$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" pmsh)
+
+# Slow machine running CSITs can affect PMSH coming up before CSITs are run
+echo "Waiting for PMSH to come up..."
+for i in {1..30}; do
+ pmsh_response=$(curl -k -s -o /dev/null -w "%{http_code}" https://$PMSH_IP:8443/healthcheck)
+ if [ "$pmsh_response" = "200" ]
+ then
+ break
+ else
+ sleep 2
+ fi
+done
+[ "$pmsh_response" != "200" ] && echo "Error: PMSH container state not healthy" && exit 1
+
+# 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) ]
+ then
+ echo "All required docker containers are up."
+ containers_ok=true
+ break
+ else
+ sleep $i
+ fi
+done
+[ "$containers_ok" = "false" ] && echo "Error: required container not running." && exit 1
+
+#Pass any variables required by Robot test suites in ROBOT_VARIABLES
+ROBOT_VARIABLES="-v PMSH_IP:${PMSH_IP}"
diff --git a/plans/dcaegen2-services-pmsh/testsuite/teardown.sh b/plans/dcaegen2-services-pmsh/testsuite/teardown.sh
new file mode 100644
index 00000000..c5bac315
--- /dev/null
+++ b/plans/dcaegen2-services-pmsh/testsuite/teardown.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+echo "Starting teardown script"
+TEST_PLANS_DIR=$WORKSPACE/plans/dcaegen2-services-pmsh/testsuite
+mkdir -p $WORKSPACE/archives
+docker exec pmsh /bin/sh -c "ls -l /var/log/ONAP/dcaegen2/services/pmsh/"
+docker exec pmsh /bin/sh -c "cat /var/log/ONAP/dcaegen2/services/pmsh/*"
+docker-compose -f $TEST_PLANS_DIR/docker-compose.yml logs --no-color > $WORKSPACE/archives/pmsh-docker-compose.log
+docker-compose -f $TEST_PLANS_DIR/docker-compose.yml down -v
diff --git a/plans/dcaegen2-services-pmsh/testsuite/testplan.txt b/plans/dcaegen2-services-pmsh/testsuite/testplan.txt
new file mode 100644
index 00000000..3bf1dd6b
--- /dev/null
+++ b/plans/dcaegen2-services-pmsh/testsuite/testplan.txt
@@ -0,0 +1,3 @@
+# Test suites are relative paths under [integration/csit.git]/tests/.
+# Place the suites in run order.
+dcaegen2-services-pmsh/testcases
diff --git a/tests/aaf/certservice/assets/invalid.csr b/tests/aaf/certservice/assets/invalid.csr
new file mode 100644
index 00000000..7284ab4d
--- /dev/null
+++ b/tests/aaf/certservice/assets/invalid.csr
@@ -0,0 +1 @@
+aaaa \ No newline at end of file
diff --git a/tests/aaf/certservice/assets/invalid.key b/tests/aaf/certservice/assets/invalid.key
new file mode 100644
index 00000000..6484fb6f
--- /dev/null
+++ b/tests/aaf/certservice/assets/invalid.key
@@ -0,0 +1 @@
+bbbb \ No newline at end of file
diff --git a/tests/aaf/certservice/assets/valid.csr b/tests/aaf/certservice/assets/valid.csr
new file mode 100644
index 00000000..aa9387bf
--- /dev/null
+++ b/tests/aaf/certservice/assets/valid.csr
@@ -0,0 +1 @@
+LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJRExEQ0NBaFFDQVFBd2daQXhDekFKQmdOVkJBWVRBbEJNTVJZd0ZBWURWUVFJREExTWIzZGxjaTFUYVd4bGMybGhNUkF3RGdZRFZRUUhEQWRYY205amJHRjNNUTR3REFZRFZRUUtEQVZPYjJ0cFlURU5NQXNHQTFVRUN3d0VUMDVCVURFWE1CVUdBMVVFQXd3T2RHVnpkQzV1YjJ0cFlTNWpiMjB4SHpBZEJna3Foa2lHOXcwQkNRRVdFSFJsYzNSbGNrQnViMnRwWVM1amIyMHdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFERzMwWUZKMDk3bS83dDJQV1pFbExBNmJ5bFc5Z1k0cDNod3NidC9paENqKzFqRG9YRFdpQk0wMXVGd1BqWmNiaXhwR3BQdXdVU3ZWREUzOUtwUDFHS3NCYVcrMHdLZG02Sit4YmN6ZTBEc0N6QUhCTnNYVXJEK3VzZC9jVUxOVm5UeXRZYzZubkF1VSswQzg0U1l6OGVkVHJ4UWVkSmF4MDBaS3YrdHluVnZvWUtyVVFsMlFrTDI4bFhhaWsxdWIzd1FGeFNQdndEM2xuMU81N2k0Wk9hOHlNcWx2NlpsTkxZYng2UFhsc1RqanBWTldPUllPKzdzeWdieEZ0bHYvbEgyN1BISHZJT3BUUmtGd0lVLzRHWXU2blQ0bDBqYkl0VEE0b2dhUFR6b3hodG5jaStLT1VVeVZ4OWk4eWd3cVBUb3d5UFkyNGpSb2xTd3RBQWpDYkJBZ01CQUFHZ1ZqQlVCZ2txaGtpRzl3MEJDUTR4UnpCRk1FTUdBMVVkRVFROE1EcUNEM1JsYzNReUxtNXZhMmxoTG1OdmJZSVBkR1Z6ZEM1dWIyc3VhWFF1WTI5dGdoWjBaWE4wTG1sdWRDNXVaWFF1Ym05cmFXRXVZMjl0TUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFBUmRlNnpiT2R2TXdKSkFETGV0TmlXT0p3TU9Ec0RJeFduUDBjbXkwTVovb21KK21JZFJSb1NZV0t2VDl5OXd3a3A1Sllzb2htMUN4c0RvS1pBZHFWWTloeENMSUJWRktEL2FveUlRUzRhM3prZFBVa0lnWW00UzJxMkI3bTFjT2YxTHpYNzVSQ3BKN3N2SDZ3RFlqV2dEOTBsVW5uamphNUF2VnJTWnRCVUhEQWZsUG5DTmhXU3hMREhTSkZhWHhERkpGbjhpT1FhdDkvUmNERHc2M0lrbWVaLzBWWDhVRjRsaWp2VWcxSGc4WUFrdXVOQnNwTmRDY2FFVFZFUHJwS3BjaFQxdDg1YnA2RnppSHczc3ZCVTM2cmhzUGNQVU5IM1NYT2tVcmZlOXp0RmJzUFB4dmJtZWx1MWEwS2FudmhDbEU0Z1dMT2tWb1k2Q0hlUktYeU0KLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0t \ No newline at end of file
diff --git a/tests/aaf/certservice/assets/valid.key b/tests/aaf/certservice/assets/valid.key
new file mode 100644
index 00000000..6783af52
--- /dev/null
+++ b/tests/aaf/certservice/assets/valid.key
@@ -0,0 +1 @@
+LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRREczMFlGSjA5N20vN3QyUFdaRWxMQTZieWxXOWdZNHAzaHdzYnQvaWhDaisxakRvWERXaUJNMDF1RndQalpjYml4cEdwUHV3VVN2VkRFMzlLcFAxR0tzQmFXKzB3S2RtNkoreGJjemUwRHNDekFIQk5zWFVyRCt1c2QvY1VMTlZuVHl0WWM2bm5BdVUrMEM4NFNZejhlZFRyeFFlZEpheDAwWkt2K3R5blZ2b1lLclVRbDJRa0wyOGxYYWlrMXViM3dRRnhTUHZ3RDNsbjFPNTdpNFpPYTh5TXFsdjZabE5MWWJ4NlBYbHNUampwVk5XT1JZTys3c3lnYnhGdGx2L2xIMjdQSEh2SU9wVFJrRndJVS80R1l1Nm5UNGwwamJJdFRBNG9nYVBUem94aHRuY2krS09VVXlWeDlpOHlnd3FQVG93eVBZMjRqUm9sU3d0QUFqQ2JCQWdNQkFBRUNnZ0VBTHdIcHFDQXhubk15SUFCdmxSNEtwNFRZVFhIWE01S2xaUTdJUE1zZHN4WVlNNWprTDFmbldLR0ErYTJ5Wkp1SDM1MlFiNFl5WGNxWUErRXdCMGRyTzlBQmx2Q1JlY3VpdDBTOWs3V3ROM2oyS3ZhMzlKNWNwTlJ6ck9RbUprOFhDNFBmZG5oS0RTOEFVdnVUV3k5UVpSK3FyZ280NUZiSVVYRVdZcC9pNkoyMGR3WW44Sm9HamV5WkFBdVhKQktOYzRJNDRndmNQUHJ4ZHBzMUh6dG5WU2RXbE1wL2lDZnc2YnNlRG94aCtkcXYrTXBrbUhROEV6WVZyVUNmbnhsTWNoMmtwenJpOXdTS3ZrZmMzckFieUpTWnhPQ3hYd2ZvTit3M05JQlpOQzh3WStIZC9nVzJPdFNkY2JOaHJ5UWdjMUVWVGtBdVdzTG1jNXZiTjRZQUVRS0JnUUR1WUdCUmVGZ3FUT1BhNHJJVEZhY1BSZm1qdGNmRnpqSEJLNDA5emhSL0VEWERDNGdxVmpxYWZGSkNIWFp4USt2Q1N3UXBvYVpQcTgraWFmc0pVTUdlcjhLNGdQR0xJTmVueFF2ZEF2c2M4NnA2MzZlakYxbFVLdzA4Rmhzam5zL3pyeGxhZnB3eWpGb0RIcFBoWGg2R25sNGx1NmEycGF2bm8wK3dzWGNRZFFLQmdRRFZremhzY1h1SG0wMnZTTE9KN1RZOHEzQSthbUZrb2hBOVY0YmpJYVpBZ2ZoVHZjMS9aSWM4THNRQmZBL2RKZ0R1eldOYjVqckJ5S0NQMWZDU1FZZ2VybmpSYXFRRlB6ZC82bmswSWZzNjUreUJ6bHlBVDVQNjB0Qjk2NEhsSjBYODRnc1owZlMweFlBRTNxWW83UG1QRUNDRXJPQ05FZTlLRXZabjBVanpuUUtCZ1FEYVAyMFFTbkhXVU0yeFl5c05KQjd2Y2U3TlA2cW5aVkRTZnJCemJOSUJQL01wSDg3TWpHUmRld1BKT3JadG4zVWtUNUNCR1ZwdXlXeHlWRHdlWEV6Wm9DeFV4dUhmc3ZNZnpONCt2UEx5bi9sdlJJUjBZdlZMaFpzNWJ6ZnIxZ1NwSktDKzVQclhvUDdzcWp0VTlOcFlBSGxNYk5HSG1vbVlyRUpURVRoazNRS0JnR1FCRm5kNHY4M2tnNENpK3lhSFExRXZPVlNRZldBZ25wZ0todWVObHdvM2tXNnN2aTk3Zy9ORE5wWTNZRG8rRkV1OU1sd1N0c3FNUmRwejQ3eW9JTE8xSUc5MmpxekNTQnVHVUJDQUpPSVZQT0lmSGFNYklBQmZmQzZwK3QyeEFRMkRUbzFkaVVhbi8rVEgyR2ZyWm9OOW1xeGxRcFBycE84N1o5Tis1TGpsQW9HQVhFQXI5Vmo5WmF3bE5yV0VZYjgyN1J6NVNFZkFjSmFFeTVhVzFUVWNzZVc0bWgwYmNuTzVCSHQvYTFmN3VoQmJoY2xQVFlPOTBSNGpLcUtGK2lVa2VDRHV0TmcrM09ncTdKaS9PWk5vajRSaUM1WWV4TWs5d1kxc3NVV0pqbDVoUURpd1BRQU5Zc09TSWxOT3Z2SWpydG81RnhNWVN5UndHamYrYnRSTzIyYz0KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQ== \ No newline at end of file
diff --git a/tests/aaf/certservice/cert-service-test.robot b/tests/aaf/certservice/cert-service-test.robot
new file mode 100644
index 00000000..aa2691a7
--- /dev/null
+++ b/tests/aaf/certservice/cert-service-test.robot
@@ -0,0 +1,44 @@
+*** Settings ***
+
+Documentation Run healthcheck
+Library RequestsLibrary
+Resource ./resources/cert-service-keywords.robot
+
+Suite Setup Create sessions
+
+*** Test Cases ***
+
+AAF Cert Service API Health Check
+ [Tags] AAF-CERT-SERVICE
+ [Documentation] Run healthcheck
+ Run Healthcheck
+
+AAF Cert Service API Reload Configuration
+ [Tags] AAF-CERT-SERVICE
+ [Documentation] Reload configuration
+ Send Post Request And Validate Response /actuator/refresh 200
+
+AAF Cert Service API Send Valid CSR and Valid PK
+ [Tags] AAF-CERT-SERVICE
+ [Documentation] Send request to /v1/certificate/test endpoint and expect 200
+ Send Get Request with Header And Validate Response ${CERT_PATH} ${VALID_CSR_FILE} ${VALID_PK_FILE} 200
+
+AAF Cert Service API Send Valid CSR and Valid PK to Wrong Path
+ [Tags] AAF-CERT-SERVICE
+ [Documentation] Send request to /v1/certificate/ endpoint and expect 404
+ Send Get Request with Header And Validate Response /v1/certificate/ ${VALID_CSR_FILE} ${VALID_PK_FILE} 404
+
+AAF Cert Service API Send Request without Header
+ [Tags] AAF-CERT-SERVICE
+ [Documentation] Send request to /v1/certificate/ endpoint and expect 400
+ Send Get Request And Validate Response ${CERT_PATH} 400
+
+AAF Cert Service API Send Invalid CSR and Valid PK
+ [Tags] AAF-CERT-SERVICE
+ [Documentation] Send request to /v1/certificate/test endpoint and expect 400
+ Send Get Request with Header And Validate Response ${CERT_PATH} ${INVALID_CSR_FILE} ${VALID_PK_FILE} 400
+
+AAF Cert Service API Send Valid CSR and Invalid PK
+ [Tags] AAF-CERT-SERVICE
+ [Documentation] Send request to /v1/certificate/test endpoint and expect 400
+ Send Get Request with Header And Validate Response ${CERT_PATH} ${VALID_CSR_FILE} ${INVALID_PK_FILE} 400 \ No newline at end of file
diff --git a/tests/aaf/certservice/resources/cert-service-keywords.robot b/tests/aaf/certservice/resources/cert-service-keywords.robot
new file mode 100644
index 00000000..b40da524
--- /dev/null
+++ b/tests/aaf/certservice/resources/cert-service-keywords.robot
@@ -0,0 +1,55 @@
+*** Settings ***
+
+Library RequestsLibrary
+Library HttpLibrary.HTTP
+Library Collections
+Resource ../../../common.robot
+Resource ./cert-service-properties.robot
+
+*** Keywords ***
+
+Create sessions
+ [Documentation] Create all required sessions
+ Create Session aaf_cert_service_url ${AAFCERT_URL}
+ Set Suite Variable ${http_session} aaf_cert_service_url
+
+Run Healthcheck
+ [Documentation] Run Healthcheck
+ ${resp}= Get Request ${http_session} /actuator/health
+ Should Be Equal As Strings ${resp.status_code} 200
+ Validate Recieved Response ${resp} status UP
+
+Validate Recieved Response
+ [Documentation] Validare message that has been received
+ [Arguments] ${resp} ${key} ${expected_value}
+ ${json}= Parse Json ${resp.content}
+ ${value}= Get From Dictionary ${json} ${key}
+ Should Be Equal As Strings ${value} ${expected_value}
+
+Send Get Request And Validate Response
+ [Documentation] Send request to passed url and validate received response
+ [Arguments] ${path} ${resp_code}
+ ${resp}= Get Request ${http_session} ${path}
+ Should Be Equal As Strings ${resp.status_code} ${resp_code}
+
+Send Get Request with Header And Validate Response
+ [Documentation] Send request to passed url and validate received response
+ [Arguments] ${path} ${csr_file} ${pk_file} ${resp_code}
+ ${headers}= Create Header with CSR and PK ${csr_file} ${pk_file}
+ ${resp}= Get Request ${http_session} ${path} headers=${headers}
+ Should Be Equal As Strings ${resp.status_code} ${resp_code}
+
+Create Header with CSR and PK
+ [Documentation] Create header with CSR and PK
+ [Arguments] ${csr_file} ${pk_file}
+ [Return] ${headers}
+ ${csr}= Get Data From File ${csr_file}
+ ${pk}= Get Data From File ${pk_file}
+ ${headers}= Create Dictionary CSR=${csr} PK=${pk}
+
+Send Post Request And Validate Response
+ [Documentation] Send request to passed url and validate received response
+ [Arguments] ${path} ${resp_code}
+ ${resp}= Post Request ${http_session} ${path}
+ Should Be Equal As Strings ${resp.status_code} ${resp_code}
+ \ No newline at end of file
diff --git a/tests/aaf/certservice/resources/cert-service-properties.robot b/tests/aaf/certservice/resources/cert-service-properties.robot
new file mode 100644
index 00000000..e911133d
--- /dev/null
+++ b/tests/aaf/certservice/resources/cert-service-properties.robot
@@ -0,0 +1,9 @@
+*** Variables ***
+
+${AAFCERT_URL} http://%{AAFCERT_IP}:8080
+${CAName} test
+${CERT_PATH} /v1/certificate/${CAName}
+${VALID_CSR_FILE} %{WORKSPACE}/tests/aaf/certservice/assets/valid.csr
+${VALID_PK_FILE} %{WORKSPACE}/tests/aaf/certservice/assets/valid.key
+${INVALID_CSR_FILE} %{WORKSPACE}/tests/aaf/certservice/assets/invalid.csr
+${INVALID_PK_FILE} %{WORKSPACE}/tests/aaf/certservice/assets/invalid.key
diff --git a/tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/A20181004.0000-1000-0015-1000_5G.xml b/tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/A20181004.0000-1000-0015-1000_5G.xml
new file mode 100644
index 00000000..d826157e
--- /dev/null
+++ b/tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/A20181004.0000-1000-0015-1000_5G.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="MeasDataCollection.xsl"?>
+<MeasDataFile xmlns="http://www.3gpp.org/ftp/specs/archive/28_series/28.550#measData"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://www.3gpp.org/ftp/specs/archive/28_series/28.550#measData http://www.3gpp.org/ftp/specs/archive/28_series/28.550#measData">
+ <fileHeader fileFormatVersion="28.550 V7.0" vendorName="Company NN" dnPrefix="DC=a1.companyNN.com,SubNetwork=1,IRPAgent=1">
+ <fileSender senderName="SubNetwork=CountryNN,MeContext=MEC-Gbg-1,ManagedElement=RNC-Gbg-1"/>
+ <MeasData beginTime="2000-03-01T14:00:00+02:00"/>
+ </fileHeader>
+ <measData>
+ <measuredEntity localDn="SubNetwork=CountryNN,MeContext=MEC-Gbg-1,ManagedElement=RNC-Gbg-1" userLabel="RNC Telecomville"/>
+ <measInfo>
+ <job jobId="1231"/>
+ <granPeriod duration="PT900S" endTime="2000-03-01T14:14:30+02:00"/>
+ <repPeriod duration="PT1800S"/>
+ <measType p="1">attTCHSeizures</measType>
+ <measType p="2">succTCHSeizures</measType>
+ <measType p="3">attImmediateAssignProcs</measType>
+ <measType p="4">succImmediateAssignProcs</measType>
+ <measValue measObjLdn="RncFunction=RF-1,UtranCell=Gbg-997">
+ <r p="1">234</r>
+ <r p="2">345</r>
+ <r p="3">567</r>
+ <r p="4">789</r>
+ </measValue>
+ <measValue measObjLdn="RncFunction=RF-1,UtranCell=Gbg-998">
+ <r p="1">890</r>
+ <r p="2">901</r>
+ <r p="3">123</r>
+ <r p="4">234</r>
+ </measValue>
+ <measValue measObjLdn="RncFunction=RF-1,UtranCell=Gbg-999">
+ <r p="1">456</r>
+ <r p="2">567</r>
+ <r p="3">678</r>
+ <r p="4">789</r>
+ <suspect>true</suspect>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="ENodeBFunction">
+ <job jobId="1232"/>
+ <granPeriod duration="PT900S" endTime="2000-03-01T14:14:30+02:00"/>
+ <repPeriod duration="PT1800S"/>
+ <measType p="1">attTCHSeizures1</measType>
+ <measType p="2">succTCHSeizures2</measType>
+ <measType p="3">attImmediateAssignProcs3</measType>
+ <measType p="4">succImmediateAssignProcs4</measType>
+ <measValue measObjLdn="ManagedElement=RNC-Gbg-1,ENodeBFunction=1">
+ <r p="1">4</r>
+ <r p="2">86,87,2,6,77,96,75,33,24</r>
+ <r p="3">40</r>
+ <r p="4">90</r>
+ <suspect>false</suspect>
+ </measValue>
+ </measInfo>
+ <measInfo>
+ <job jobId="1233"/>
+ <granPeriod duration="PT900S" endTime="2000-03-01T14:14:30+02:00"/>
+ <repPeriod duration="PT1800S"/>
+ <measType p="1">attTCHSeizures5</measType>
+ <measType p="2">succTCHSeizures6</measType>
+ <measType p="3">attImmediateAssignProcs7</measType>
+ <measType p="4">succImmediateAssignProcs8</measType>
+ <measValue measObjLdn="RncFunction=RF-1,UtranCell=Gbg-997">
+ <r p="1">238</r>
+ <r p="2">344</r>
+ <r p="3">563</r>
+ <r p="4">787</r>
+ </measValue>
+ <measValue measObjLdn="RncFunction=RF-1,UtranCell=Gbg-998">
+ <r p="1">898</r>
+ <r p="2">905</r>
+ <r p="3">127</r>
+ <r p="4">238</r>
+ </measValue>
+ <measValue measObjLdn="RncFunction=RF-1,UtranCell=Gbg-999">
+ <r p="1">454</r>
+ <r p="2">569</r>
+ <r p="3">672</r>
+ <r p="4">785</r>
+ <suspect>true</suspect>
+ </measValue>
+ </measInfo>
+ </measData>
+ <fileFooter>
+ <MeasData endTime="2000-03-01T14:15:00+02:00"/>
+ </fileFooter>
+</MeasDataFile>
diff --git a/tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/C20190329.0000-0015.xml b/tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/C20190329.0000-0015.xml
new file mode 100644
index 00000000..439d5768
--- /dev/null
+++ b/tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/C20190329.0000-0015.xml
@@ -0,0 +1,49 @@
+<MeasDataFile xmlns="http://www.3gpp.org/ftp/specs/archive/28_series/28.550#measData">
+ <fileHeader dnPrefix="some dnPrefix" vendorName="FooBar Ltd"
+ fileFormatVersion="28.550 V1.0">
+ <fileSender senderName="Dublin"/>
+ <MeasData beginTime="2018-10-02T12:00:00+01:00"/>
+ </fileHeader>
+ <measData>
+ <measuredEntity swVersion="r0.1" localDn="Dublin1"/>
+ <measInfo measInfoId="measInfoId1">
+ <job jobId="jobId1"/>
+ <granPeriod endTime="2001-10-02T12:15:00Z" duration="PT100S"/>
+ <repPeriod duration="PT100S"/>
+ <measTypes>z1 a1 zz1 b1</measTypes>
+ <measValue measObjLdn="objLdn">
+ <measResults>1 11 111 1111</measResults>
+ <suspect>false</suspect>
+ </measValue>
+ </measInfo>
+ </measData>
+ <measData>
+ <measuredEntity swVersion="r0.2" localDn="Dublin2"/>
+ <measInfo measInfoId="measInfoId2">
+ <job jobId="jobId"/>
+ <granPeriod endTime="2002-10-02T12:15:00Z" duration="PT200S"/>
+ <repPeriod duration="PT200S"/>
+ <measTypes>attTCHSeizures succTCHSeizures2 zz2 b2</measTypes>
+ <measValue measObjLdn="objLdn">
+ <measResults>2 22 222 2222</measResults>
+ <suspect>false</suspect>
+ </measValue>
+ </measInfo>
+ </measData>
+ <measData>
+ <measuredEntity swVersion="r0.3" localDn="Dublin3"/>
+ <measInfo measInfoId="measInfoId3">
+ <job jobId="jobId"/>
+ <granPeriod endTime="2003-10-02T12:15:00Z" duration="PT300S"/>
+ <repPeriod duration="PT300S"/>
+ <measTypes>z3 a3 zz3 succImmediateAssignProcs8</measTypes>
+ <measValue measObjLdn="objLdn">
+ <measResults>3 33 333 3333</measResults>
+ <suspect>false</suspect>
+ </measValue>
+ </measInfo>
+ </measData>
+ <fileFooter>
+ <MeasData endTime="2018-10-02T12:15:00+01:00"/>
+ </fileFooter>
+</MeasDataFile>
diff --git a/tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/valid_metadata.json b/tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/valid_metadata.json
new file mode 100644
index 00000000..4c5c84f1
--- /dev/null
+++ b/tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/valid_metadata.json
@@ -0,0 +1,12 @@
+{
+ "productName": "gnb",
+ "vendorName": "Ericsson",
+ "lastEpochMicrosec": "1538478000000",
+ "sourceName": "oteNB5309",
+ "startEpochMicrosec": "1538478900000",
+ "timeZoneOffset": "UTC+05.00",
+ "location": "ftpes://192.168.0.101:22/ftp/rop/A20161224.1045-1100.bin.gz",
+ "compression": "gzip",
+ "fileFormatType": "org.3GPP.28.550#measData",
+ "fileFormatVersion": "V9"
+}
diff --git a/tests/dcaegen2-pmmapper/pmmapper/pmmapper.robot b/tests/dcaegen2-pmmapper/pmmapper/pmmapper.robot
index dfd2b66b..96d33a86 100644
--- a/tests/dcaegen2-pmmapper/pmmapper/pmmapper.robot
+++ b/tests/dcaegen2-pmmapper/pmmapper/pmmapper.robot
@@ -20,12 +20,15 @@ ${RECONFIGURE_ENDPOINT} /reconfigure
${NO_MANAGED_ELEMENT_PATH} %{WORKSPACE}/tests/dcaegen2-pmmapper/pmmapper/assets/A_no_managed_element.xml
${NO_MEASDATA_PATH} %{WORKSPACE}/tests/dcaegen2-pmmapper/pmmapper/assets/A_no_measdata.xml
${VALID_METADATA_PATH} %{WORKSPACE}/tests/dcaegen2-pmmapper/pmmapper/assets/valid_metadata.json
+${NR_VALID_METADATA_PATH} %{WORKSPACE}/tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/valid_metadata.json
${DIFF_VENDOR_METADATA} %{WORKSPACE}/tests/dcaegen2-pmmapper/pmmapper/assets/diff_vendor_metadata.json
${NON_XML_FILE} %{WORKSPACE}/tests/dcaegen2-pmmapper/pmmapper/assets/diff_vendor_metadata.json
${CLI_EXEC_CLI_PM_LOG} docker exec pmmapper /bin/sh -c "tail -15 /var/log/ONAP/dcaegen2/services/pm-mapper/pm-mapper_output.log"
${PUBLISH_NODE_URL} https://${DR_NODE_IP}:8443/publish/1
${TYPE-A_PM_DATA_FILE_PATH} %{WORKSPACE}/tests/dcaegen2-pmmapper/pmmapper/assets/A20181002.0000-1000-0015-1000_5G.xml
${TYPE-C_PM_DATA_FILE_PATH} %{WORKSPACE}/tests/dcaegen2-pmmapper/pmmapper/assets/C20190328.0000-0015.xml
+${NR-TYPE-A_PM_DATA_FILE_PATH} %{WORKSPACE}/tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/A20181004.0000-1000-0015-1000_5G.xml
+${NR-TYPE-C_PM_DATA_FILE_PATH} %{WORKSPACE}/tests/dcaegen2-pmmapper/pmmapper/assets/new_radio/C20190329.0000-0015.xml
${CLI_EXEC_VENDOR_FILTER} curl 'http://${CONSUL_IP}:8500/v1/kv/pmmapper?dc=dc1' -X PUT -H 'Accept: application/^Con' -H 'Content-Type: application/json' -H 'X-Requested-With: XMLHttpRequest' --data @$WORKSPACE/tests/dcaegen2-pmmapper/pmmapper/assets/vendor_filter_config.json
${CLI_EXEC_PM_FILTER} curl 'http://${CONSUL_IP}:8500/v1/kv/pmmapper?dc=dc1' -X PUT -H 'Accept: application/^Con' -H 'Content-Type: application/json' -H 'X-Requested-With: XMLHttpRequest' --data @$WORKSPACE/tests/dcaegen2-pmmapper/pmmapper/assets/pm_filter_config.json
${CLI_MESSAGE_ROUTER_TOPIC} curl http://${DMAAP_MR_IP}:3904/events/PM_MAPPER/CG1/C1?timeout=1000 > /tmp/mr.log
@@ -118,6 +121,22 @@ Verify that PM Mapper correctly identifies a non-xml file.
CheckLog ${CLI_EXEC_CLI_PM_LOG} PM measurement file must have an extension of .xml
CheckLog ${CLI_EXEC_CLI_PM_LOG} RequestID=8
+Verify that PM Mapper correctly maps an NR Type-A file based on counter filtering and publish 3gpp perf VES events to message router.
+ [Tags] PM_MAPPER_11
+ [Documentation] Verify 3GPP PM Mapper maps an NR Type-A file and publish 3gpp perf VES evnets to message router.
+ [Timeout] 1 minute
+ ${cli_cmd_output}= Run Process ${CLI_EXEC_PM_FILTER} shell=yes
+ ${resp}= Get Request mapper_session ${RECONFIGURE_ENDPOINT}
+ Sleep 5s
+ SendToDatarouter ${NR-TYPE-A_PM_DATA_FILE_PATH} ${NR_VALID_METADATA_PATH} X-ONAP-RequestID=11
+ CheckLog ${CLI_EXEC_CLI_PM_LOG} Successfully published VES events to messagerouter
+
+Verify that PM Mapper correctly maps an NR Type-C file based on counter filtering and publish 3gpp perf VES events to message router.
+ [Tags] PM_MAPPER_12
+ [Documentation] Verify that PM Mapper maps an NR Type-C xml file and publish 3gpp perf VES evnets to message router.
+ [Timeout] 1 minute
+ SendToDatarouter ${NR-TYPE-C_PM_DATA_FILE_PATH} ${NR_VALID_METADATA_PATH} X-ONAP-RequestID=12
+ CheckLog ${CLI_EXEC_CLI_PM_LOG} Successfully published VES events to messagerouter
*** Keywords ***
diff --git a/tests/dcaegen2-services-pmsh/testcases/__init__.robot b/tests/dcaegen2-services-pmsh/testcases/__init__.robot
new file mode 100644
index 00000000..47abe8bb
--- /dev/null
+++ b/tests/dcaegen2-services-pmsh/testcases/__init__.robot
@@ -0,0 +1,2 @@
+*** Settings ***
+Documentation PMSH Testcases
diff --git a/tests/dcaegen2-services-pmsh/testcases/pmsh.robot b/tests/dcaegen2-services-pmsh/testcases/pmsh.robot
new file mode 100644
index 00000000..74a575cd
--- /dev/null
+++ b/tests/dcaegen2-services-pmsh/testcases/pmsh.robot
@@ -0,0 +1,38 @@
+*** Settings ***
+Documentation Testing PMSH functionality
+Library OperatingSystem
+Library RequestsLibrary
+Library String
+
+Test Setup Create Session pmsh_session ${PMSH_BASE_URL}
+Test Teardown Delete All Sessions
+
+
+*** Variables ***
+${PMSH_BASE_URL} https://${PMSH_IP}:8443
+${HEALTHCHECK_ENDPOINT} /healthcheck
+
+
+*** Test Cases ***
+Verify Health Check returns 200 when a REST GET request to healthcheck url
+ [Tags] PMSH_01
+ [Documentation] Verify Health Check returns 200 when a REST GET request to healthcheck url
+ [Timeout] 1 minute
+ ${resp}= Get Request pmsh_session ${HEALTHCHECK_ENDPOINT}
+ VerifyResponse ${resp.status_code} 200
+
+Verify Health Check response includes healthy status
+ [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
+
+*** 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}