diff options
Diffstat (limited to 'test/csit/tests/dcaegen2/prh-testcases')
8 files changed, 313 insertions, 0 deletions
diff --git a/test/csit/tests/dcaegen2/prh-testcases/__init__.robot b/test/csit/tests/dcaegen2/prh-testcases/__init__.robot new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/test/csit/tests/dcaegen2/prh-testcases/__init__.robot diff --git a/test/csit/tests/dcaegen2/prh-testcases/prh_tests.robot b/test/csit/tests/dcaegen2/prh-testcases/prh_tests.robot new file mode 100644 index 000000000..e507dcba7 --- /dev/null +++ b/test/csit/tests/dcaegen2/prh-testcases/prh_tests.robot @@ -0,0 +1,97 @@ +*** Settings *** +Library RequestsLibrary +Library Process +Library resources/PrhLibrary.py + +*** Variables *** +${DMAAP_SIM_URL} http://${DMAAP_SIMULATOR} +${AAI_SIM_URL} http://${AAI_SIMULATOR} +${PRH_URL} http://${PRH} + +*** Test Cases *** +Getting and Consuming Positive Scenario + [Documentation] Get message from new topic and consume it - positive scenarios + [Tags] PRH + [Setup] Start prh + [Template] Run Getting and Consuming + {"pnfName":"NOKQTFCOC540002E","ipv4":"10.16.123.234","ipv6":"2001:0db8:85a3:0000:0000:8a2e:0370:7334"} NOKQTFCOC540002E {"event": {"commonEventHeader": {"sourceId":"QTFCOC540002E", "startEpochMicrosec":1519837825682, "eventId":"QTFCOC540002E-reg", "nfcNamingCode":"5DU", "internalHeaderFields":{"collectorTimeStamp":"Fri, 04 27 2018 09:01:10 GMT"}, "eventType":"pnfRegistration", "priority":"Normal", "version":3, "reportingEntityName":"5GRAN_DU", "sequence":0, "domain":"other", "lastEpochMicrosec":1519837825682, "eventName":"pnfRegistration_5GDU", "sourceName":"5GRAN_DU", "nfNamingCode":"5GRAN"}, "otherFields": {"pnfLastServiceDate":1517206400, "pnfOamIpv6Address":"2001:0db8:85a3:0000:0000:8a2e:0370:7334", "pnfVendorName":"Nokia", "pnfModelNumber":"AJ02", "pnfFamily":"BBU", "pnfType":"AirScale", "otherFieldsVersion":1, "pnfOamIpv4Address":"10.16.123.234", "pnfSoftwareVersion":"v4.5.0.1", "pnfSerialNumber":"QTFCOC540002E", "pnfManufactureDate":1516406400}}} + {"pnfName":"NOKQTFCOC540002F","ipv4":"","ipv6":"2001:0db8:85a3:0000:0000:8a2e:0370:7334"} NOKQTFCOC540002F {"event": {"commonEventHeader": {"sourceId":"QTFCOC540002F", "startEpochMicrosec":1519837825682, "eventId":"QTFCOC540002F-reg", "nfcNamingCode":"5DU", "internalHeaderFields":{"collectorTimeStamp":"Fri, 04 27 2018 09:01:10 GMT"}, "eventType":"pnfRegistration", "priority":"Normal", "version":3, "reportingEntityName":"5GRAN_DU", "sequence":0, "domain":"other", "lastEpochMicrosec":1519837825682, "eventName":"pnfRegistration_5GDU", "sourceName":"5GRAN_DU", "nfNamingCode":"5GRAN"}, "otherFields": {"pnfLastServiceDate":1517206400, "pnfOamIpv6Address":"2001:0db8:85a3:0000:0000:8a2e:0370:7334", "pnfVendorName":"Nokia", "pnfModelNumber":"AJ02", "pnfFamily":"BBU", "pnfType":"AirScale", "otherFieldsVersion":1, "pnfOamIpv4Address":"", "pnfSoftwareVersion":"v4.5.0.1", "pnfSerialNumber":"QTFCOC540002F", "pnfManufactureDate":1516406400}}} + {"pnfName":"NOKQTFCOC540002G","ipv4":"10.16.123.234","ipv6":""} NOKQTFCOC540002G {"event": {"commonEventHeader": {"sourceId":"QTFCOC540002G", "startEpochMicrosec":1519837825682, "eventId":"QTFCOC540002G-reg", "nfcNamingCode":"5DU", "internalHeaderFields":{"collectorTimeStamp":"Fri, 04 27 2018 09:01:10 GMT"}, "eventType":"pnfRegistration", "priority":"Normal", "version":3, "reportingEntityName":"5GRAN_DU", "sequence":0, "domain":"other", "lastEpochMicrosec":1519837825682, "eventName":"pnfRegistration_5GDU", "sourceName":"5GRAN_DU", "nfNamingCode":"5GRAN"}, "otherFields": {"pnfLastServiceDate":1517206400, "pnfOamIpv6Address":"", "pnfVendorName":"Nokia", "pnfModelNumber":"AJ02", "pnfFamily":"BBU", "pnfType":"AirScale", "otherFieldsVersion":1, "pnfOamIpv4Address":"10.16.123.234", "pnfSoftwareVersion":"v4.5.0.1", "pnfSerialNumber":"QTFCOC540002G", "pnfManufactureDate":1516406400}}} + {"pnfName":"ERIQTFCOC5400000","ipv4":"10.16.123.23","ipv6":""} ERIQTFCOC5400000 {"event": {"commonEventHeader": {"sourceId":"QTFCOC5400000", "startEpochMicrosec":1519837825682, "eventId":"QTFCOC5400000-reg", "nfcNamingCode":"5DU", "internalHeaderFields":{"collectorTimeStamp":"Fri, 04 27 2018 09:01:10 GMT"}, "eventType":"pnfRegistration", "priority":"Normal", "version":3, "reportingEntityName":"5GRAN_DU", "sequence":0, "domain":"other", "lastEpochMicrosec":1519837825682, "eventName":"pnfRegistration_5GDU", "sourceName":"5GRAN_DU", "nfNamingCode":"5GRAN"}, "otherFields": {"pnfLastServiceDate":1517206400, "pnfOamIpv6Address":"", "pnfVendorName":"Ericsson", "pnfModelNumber":"AJ02", "pnfFamily":"BBU", "pnfType":"AirScale", "otherFieldsVersion":1, "pnfOamIpv4Address":"10.16.123.23", "pnfSoftwareVersion":"v4.5.0.1", "pnfSerialNumber":"QTFCOC5400000", "pnfManufactureDate":1516406400}}} + [Teardown] Stop prh + +Missing IPv4 and IPv6 + [Documentation] Test get event from DMaaP without IPv4 and IPv6 + [Tags] PRH no_IPv4 no_IPv6 + [Setup] Start prh + Missing IP {"event": {"commonEventHeader": {"sourceId":"QTFCOC540002E", "startEpochMicrosec":1519837825682, "eventId":"QTFCOC540002E-reg", "nfcNamingCode":"5DU", "internalHeaderFields":{"collectorTimeStamp":"Fri, 04 27 2018 09:01:10 GMT"}, "eventType":"pnfRegistration", "priority":"Normal", "version":3, "reportingEntityName":"5GRAN_DU", "sequence":0, "domain":"other", "lastEpochMicrosec":1519837825682, "eventName":"pnfRegistration_5GDU", "sourceName":"5GRAN_DU", "nfNamingCode":"5GRAN"}, "otherFields": {"pnfLastServiceDate":1517206400, "pnfOamIpv6Address":"", "pnfVendorName":"Nokia", "pnfModelNumber":"AJ02", "pnfFamily":"BBU", "pnfType":"AirScale", "otherFieldsVersion":1, "pnfOamIpv4Address":"", "pnfSoftwareVersion":"v4.5.0.1", "pnfSerialNumber":"QTFCOC540002E", "pnfManufactureDate":1516406400}}} + [Teardown] Stop prh + +Wrong AAI record + [Documentation] Wrong or missing record in AAI + [Tags] PRH AAI + [Setup] Start prh + Wrong AAI record {"event": {"commonEventHeader": {"sourceId":"QTFCOC540002E", "startEpochMicrosec":1519837825682, "eventId":"QTFCOC540002E-reg", "nfcNamingCode":"5DU", "internalHeaderFields":{"collectorTimeStamp":"Fri, 04 27 2018 09:01:10 GMT"}, "eventType":"pnfRegistration", "priority":"Normal", "version":3, "reportingEntityName":"5GRAN_DU", "sequence":0, "domain":"other", "lastEpochMicrosec":1519837825682, "eventName":"pnfRegistration_5GDU", "sourceName":"5GRAN_DU", "nfNamingCode":"5GRAN"}, "otherFields": {"pnfLastServiceDate":1517206400, "pnfOamIpv6Address":"2001:0db8:85a3:0000:0000:8a2e:0370:7334", "pnfVendorName":"Nokia", "pnfModelNumber":"AJ02", "pnfFamily":"BBU", "pnfType":"AirScale", "otherFieldsVersion":1, "pnfOamIpv4Address":"10.16.123.234", "pnfSoftwareVersion":"v4.5.0.1", "pnfSerialNumber":"QTFCOC540002E", "pnfManufactureDate":1516406400}}} + [Teardown] Stop prh + +*** Keywords *** +Wrong AAI record + [Arguments] ${event_in_dmaap} + [Timeout] 1m + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json + Set get event in DMAAP ${event_in_dmaap} ${headers} + Set pnfs name in AAI wrong_aai_record + ${check}= check for log org.onap.dcaegen2.services.prh.exceptions.AAINotFoundException: Incorrect response code for continuation of tasks workflow + Should Be Equal As Strings ${check} True + +Missing IP + [Arguments] ${event_in_dmaap} + [Timeout] 1m + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json + Set get event in DMAAP ${event_in_dmaap} ${headers} + ${check}= check for log org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException: IPV4 and IPV6 are empty + Should Be Equal As Strings ${check} True + +Run Getting and Consuming + [Arguments] ${posted_event_to_dmaap} ${pnfs_name} ${event_in_dmaap} + [Timeout] 1m + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json + Set pnfs name in AAI ${pnfs_name} + Set get event in DMAAP ${event_in_dmaap} ${headers} + : FOR ${Index} IN RANGE 1 30 + \ Create Session prh_ready ${DMAAP_SIM_URL} + \ ${resp}= Get Request prh_ready /events/pnfReady headers=${headers} + \ Exit For Loop If '${resp.text}' == '${posted_event_to_dmaap}' + \ Sleep 1s + Should Be Equal ${resp.text} ${posted_event_to_dmaap} + +Start prh + [Timeout] 1m + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json + Create Session prh_start ${PRH_URL} + ${resp}= Get Request prh_start /start headers=${headers} + Should Be Equal ${resp.text} "PRH Service has been started!" + +Stop prh + [Timeout] 1m + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json + Create Session prh_stop ${PRH_URL} + ${resp}= Get Request prh_stop /stopPrh headers=${headers} + Should Be Equal ${resp.text} "PRH Service has already been stopped!" + +Set pnfs name in AAI + [Arguments] ${pnfs_name} + [Timeout] 1 minute + ${headers}= Create Dictionary Accept=application/json Content-Type=text/html + Create Session set_pnfs_in_aai ${AAI_SIM_URL} + ${resp}= Put Request set_pnfs_in_aai /set_pnfs headers=${headers} data=${pnfs_name} + Should Be Equal As Strings ${resp.status_code} 200 + Log To Console ${resp.text} + +Set get event in DMAAP + [Arguments] ${event_in_dmaap} ${headers} + [Timeout] 1m + Create Session set_get_event ${DMAAP_SIM_URL} + ${resp}= Put Request set_get_event /set_get_event headers=${headers} data=${event_in_dmaap} + Should Be Equal As Strings ${resp.status_code} 200 + Log To Console ${resp.text} diff --git a/test/csit/tests/dcaegen2/prh-testcases/resources/PrhLibrary.py b/test/csit/tests/dcaegen2/prh-testcases/resources/PrhLibrary.py new file mode 100644 index 000000000..f07f385f5 --- /dev/null +++ b/test/csit/tests/dcaegen2/prh-testcases/resources/PrhLibrary.py @@ -0,0 +1,16 @@ +import docker + +class PrhLibrary(object): + + def __init__(self): + pass + + def check_for_log(self, search_for): + client = docker.from_env() + container = client.containers.get('prh') + for line in container.logs(stream=True): + if search_for in line.strip(): + return True + else: + return False +
\ No newline at end of file diff --git a/test/csit/tests/dcaegen2/prh-testcases/resources/docker-compose.yml b/test/csit/tests/dcaegen2/prh-testcases/resources/docker-compose.yml new file mode 100644 index 000000000..e773b76a9 --- /dev/null +++ b/test/csit/tests/dcaegen2/prh-testcases/resources/docker-compose.yml @@ -0,0 +1,44 @@ +version: '3' +services: + prh: + image: nexus3.onap.org:10003/onap/org.onap.dcaegen2.services.prh.prh-app-server + command: > + --dmaap.dmaapConsumerConfiguration.dmaapPortNumber=2222 + --dmaap.dmaapProducerConfiguration.dmaapPortNumber=2222 + --aai.aaiClientConfiguration.aaiHostPortNumber=3333 + --aai.aaiClientConfiguration.aaiProtocol=http + entrypoint: + - java + - -Dspring.profiles.active=dev + - -Dlogging.level.org.onap.dcaegen2.services.prh=TRACE + - -jar + - /opt/prh-app-server.jar + ports: + - "8100:8100" + - "8433:8433" + container_name: prh + + dmaap_simulator: + build: + context: simulator + dockerfile: DMaaP_simulator + args: + - https_proxy=${HTTPS_PROXY} + ports: + - "2222:2222" + container_name: dmaap_simulator + depends_on: + - prh + + aai_simulator: + build: + context: simulator + dockerfile: AAI_simulator + args: + - https_proxy=${HTTPS_PROXY} + ports: + - "3333:3333" + container_name: aai_simulator + depends_on: + - prh + diff --git a/test/csit/tests/dcaegen2/prh-testcases/resources/simulator/AAI.py b/test/csit/tests/dcaegen2/prh-testcases/resources/simulator/AAI.py new file mode 100644 index 000000000..2c0b42dcd --- /dev/null +++ b/test/csit/tests/dcaegen2/prh-testcases/resources/simulator/AAI.py @@ -0,0 +1,59 @@ +import BaseHTTPServer +import re +import sys + +from robot.api import logger + +pnfs = 'Empty' + +class AAIHandler(BaseHTTPServer.BaseHTTPRequestHandler): + def do_PUT(self): + if re.search('/set_pnfs', self.path): + global pnfs + content_length = int(self.headers['Content-Length']) + pnfs = self.rfile.read(content_length) + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + + return + + def do_PATCH(self): + pnfs_name = '/aai/v12/network/pnfs/pnf/' + pnfs + if re.search('wrong_aai_record', self.path): + self.send_response(400) + self.end_headers() + elif re.search(pnfs_name, self.path): + self.send_response(200) + self.end_headers() + + return + + def do_GET(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + self.wfile.write('GET') + self.wfile.close() + + return + +def _main_ (HandlerClass = AAIHandler, + ServerClass = BaseHTTPServer.HTTPServer, protocol="HTTP/1.0"): + + if sys.argv[1:]: + port = int(sys.argv[1]) + else: + port = 3333 + + server_address = ('', port) + + HandlerClass.protocol_version = protocol + httpd = ServerClass(server_address, HandlerClass) + + sa = httpd.socket.getsockname() + print "Serving HTTP on", sa[0], "port", sa[1], "..." + httpd.serve_forever() + +if __name__ == '__main__': + _main_() diff --git a/test/csit/tests/dcaegen2/prh-testcases/resources/simulator/AAI_simulator b/test/csit/tests/dcaegen2/prh-testcases/resources/simulator/AAI_simulator new file mode 100644 index 000000000..2d96d8925 --- /dev/null +++ b/test/csit/tests/dcaegen2/prh-testcases/resources/simulator/AAI_simulator @@ -0,0 +1,11 @@ +FROM python:2 + +ENV https_proxy "$https_proxy" + +ADD AAI.py / + +RUN pip install robotframework + +EXPOSE 3333 + +CMD [ "python", "./AAI.py" ] diff --git a/test/csit/tests/dcaegen2/prh-testcases/resources/simulator/DMaaP.py b/test/csit/tests/dcaegen2/prh-testcases/resources/simulator/DMaaP.py new file mode 100644 index 000000000..af716fd06 --- /dev/null +++ b/test/csit/tests/dcaegen2/prh-testcases/resources/simulator/DMaaP.py @@ -0,0 +1,75 @@ +import BaseHTTPServer +import re +import sys + +from robot.api import logger + +posted_event_from_prh = 'Empty' +received_event_to_get_method = 'Empty' + +class DMaaPHandler(BaseHTTPServer.BaseHTTPRequestHandler): + def do_PUT(self): + if re.search('/set_get_event', self.path): + global received_event_to_get_method + content_length = int(self.headers['Content-Length']) + received_event_to_get_method = self.rfile.read(content_length) + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + + return + + def do_POST(self): + if re.search('/events/pnfReady', self.path): + global posted_event_from_prh + content_length = int(self.headers['Content-Length']) + posted_event_from_prh = self.rfile.read(content_length) + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + + return + + def do_GET(self): + if re.search('/events/unauthenticated.SEC_OTHER_OUTPUT', self.path): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + self.wfile.write(received_event_to_get_method) + self.wfile.close() + elif re.search('/events/pnfReady', self.path): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + self.wfile.write(posted_event_from_prh) + global posted_event_from_prh + posted_event_from_prh = 'Empty' + self.wfile.close() + else: + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + self.wfile.write('GET else') + self.wfile.close() + + return + +def _main_ (HandlerClass = DMaaPHandler, + ServerClass = BaseHTTPServer.HTTPServer, protocol="HTTP/1.0"): + + if sys.argv[1:]: + port = int(sys.argv[1]) + else: + port = 2222 + + server_address = ('', port) + + HandlerClass.protocol_version = protocol + httpd = ServerClass(server_address, HandlerClass) + + sa = httpd.socket.getsockname() + print "Serving HTTP on", sa[0], "port", sa[1], "..." + httpd.serve_forever() + +if __name__ == '__main__': + _main_() diff --git a/test/csit/tests/dcaegen2/prh-testcases/resources/simulator/DMaaP_simulator b/test/csit/tests/dcaegen2/prh-testcases/resources/simulator/DMaaP_simulator new file mode 100644 index 000000000..4de65393d --- /dev/null +++ b/test/csit/tests/dcaegen2/prh-testcases/resources/simulator/DMaaP_simulator @@ -0,0 +1,11 @@ +FROM python:2 + +ENV https_proxy "$https_proxy" + +ADD DMaaP.py / + +RUN pip install robotframework + +EXPOSE 2222 + +CMD [ "python", "./DMaaP.py" ] |