From 2fa8397e0c4e6085f0a410be722c56eeba5b0dfe Mon Sep 17 00:00:00 2001 From: Pawel Date: Wed, 22 Apr 2020 11:03:54 +0200 Subject: Create local CSITs to verify simulator flow with VES Issue-ID: INT-1544 Signed-off-by: Pawel Change-Id: Id54a6674fef815b91b0a6d10e73d2c8d2c431ef4 --- README.md | 4 ++ pnfsimulator/Makefile | 13 +++++++ sanitycheck/Makefile | 40 +++++++++++++++++++ sanitycheck/README.md | 52 +++++++++++++++++++++++++ sanitycheck/dmaap-simulator/Dockerfile | 7 ++++ sanitycheck/dmaap-simulator/Makefile | 23 +++++++++++ sanitycheck/dmaap-simulator/README.md | 23 +++++++++++ sanitycheck/dmaap-simulator/requirements.txt | 6 +++ sanitycheck/dmaap-simulator/simulator.py | 47 ++++++++++++++++++++++ sanitycheck/events/eventToVes.json | 37 ++++++++++++++++++ sanitycheck/events/fewEventsToVes.json | 32 +++++++++++++++ sanitycheck/events/vesAddressConfiguration.json | 3 ++ sanitycheck/ves/Makefile | 23 +++++++++++ sanitycheck/ves/README.md | 21 ++++++++++ sanitycheck/ves/docker-compose.yml | 20 ++++++++++ 15 files changed, 351 insertions(+) create mode 100644 pnfsimulator/Makefile create mode 100644 sanitycheck/Makefile create mode 100644 sanitycheck/README.md create mode 100644 sanitycheck/dmaap-simulator/Dockerfile create mode 100644 sanitycheck/dmaap-simulator/Makefile create mode 100644 sanitycheck/dmaap-simulator/README.md create mode 100644 sanitycheck/dmaap-simulator/requirements.txt create mode 100644 sanitycheck/dmaap-simulator/simulator.py create mode 100644 sanitycheck/events/eventToVes.json create mode 100644 sanitycheck/events/fewEventsToVes.json create mode 100644 sanitycheck/events/vesAddressConfiguration.json create mode 100644 sanitycheck/ves/Makefile create mode 100644 sanitycheck/ves/README.md create mode 100644 sanitycheck/ves/docker-compose.yml diff --git a/README.md b/README.md index 6300184..ff9da7a 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,10 @@ mvn clean package mvn clean package -P docker -DskipTests=true ``` +##Sanity check + +See README.md in sanitycheck directory + ## Sonar https://sonarcloud.io/dashboard?id=onap_integration-pnf-simulator diff --git a/pnfsimulator/Makefile b/pnfsimulator/Makefile new file mode 100644 index 0000000..58de699 --- /dev/null +++ b/pnfsimulator/Makefile @@ -0,0 +1,13 @@ +all: start + +.PHONY: start + +start: + @echo "##### Start PNF simulator #####" + docker-compose up -d + @echo "##### DONE #####" + +stop: + @echo "##### Stop PNF simulator #####" + docker-compose down + @echo "##### DONE #####" diff --git a/sanitycheck/Makefile b/sanitycheck/Makefile new file mode 100644 index 0000000..37f2669 --- /dev/null +++ b/sanitycheck/Makefile @@ -0,0 +1,40 @@ +all: start + +.PHONY: start + +build: + @echo "##### build (dmaap sim) #####" + make -C dmaap-simulator build + @echo "##### DONE #####" + +start: build + @echo "##### start (dmaap sim,ves,pnf sim) #####" + make -C ves start + make -C ../pnfsimulator start + @echo "##### DONE #####" + +stop: + @echo "##### Stop (dmaap sim,ves,pnf sim) #####" + make -C ves stop + make -C ../pnfsimulator stop + @echo "##### DONE #####" + +generate-event: + @echo "##### Trigger PNF Simulator to generate event #####" + curl -X POST http://localhost:5000/simulator/event -d @events/eventToVes.json --header "Content-Type: application/json" + @echo "\n##### DONE #####" + +reconfigure-ves-url: + @echo "##### Change VES address configuration in PNF Simulator #####" + curl -X PUT http://localhost:5000/simulator/config -d @events/vesAddressConfiguration.json --header "Content-Type: application/json" + @echo "\n##### DONE #####" + +generate-multiple-events: + @echo "\n##### Trigger PNF Simulator to generate multiple events #####" + curl -X POST http://localhost:5000/simulator/start -d @events/fewEventsToVes.json --header "Content-Type: application/json" + @echo "\n##### DONE #####" + +check-dmaap: + @echo "##### Check dmaap simulator for collected events #####" + make -C dmaap-simulator get-data + @echo "\n##### DONE #####" \ No newline at end of file diff --git a/sanitycheck/README.md b/sanitycheck/README.md new file mode 100644 index 0000000..9fb4929 --- /dev/null +++ b/sanitycheck/README.md @@ -0,0 +1,52 @@ +### Run test case pnfsimulator -> ves collector -> dmaap simulator + +### Prerequisites +* Check your docker network ip: +``` +ip a | grep docker0 | grep inet +``` +If the IP address is different than 172.17.0.1/16: +inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 + +You have to change the IP address in file events/vesAddressConfiguration.json +``` +{ + "vesServerUrl": "http://:8080/eventListener/v7" +} +``` +and in file events/eventToVes.json + +``` +{ +"vesServerUrl": "http://:8080/eventListener/v7", +"event": { ... +``` +### 1. Build Projects +``` +make start +``` +### 2. Send one event +``` +make generate-event +``` +### 2.1 Check dmaap sim +``` +make check-dmaap +``` +### 3. Send few events: +### 3.1 Reconfigure ves url +``` +make reconfigure-ves-url +``` +### 3.2 Send events +``` +make generate-multiple-events +``` +### 3.3 Check dmaap sim +``` +make check-dmaap +``` +### 4. Clear environment +``` +make stop +``` diff --git a/sanitycheck/dmaap-simulator/Dockerfile b/sanitycheck/dmaap-simulator/Dockerfile new file mode 100644 index 0000000..f84cac2 --- /dev/null +++ b/sanitycheck/dmaap-simulator/Dockerfile @@ -0,0 +1,7 @@ +FROM python:3 +WORKDIR /application +COPY ./simulator.py ./ +COPY ./requirements.txt ./ +RUN pip install -r ./requirements.txt +ENV FLASK_APP=./simulator.py +CMD ["python", "./simulator.py"] diff --git a/sanitycheck/dmaap-simulator/Makefile b/sanitycheck/dmaap-simulator/Makefile new file mode 100644 index 0000000..af8f162 --- /dev/null +++ b/sanitycheck/dmaap-simulator/Makefile @@ -0,0 +1,23 @@ +all: build + +.PHONY: build + +build: + @echo "##### Build dmaap simulator image #####" + docker build . -t dmaap-simulator + @echo "##### DONE #####" + +start: + @echo "##### Start dmaap simulator #####" + docker run -d -p 3904:3904 --name dmaap-simulator dmaap-simulator + @echo "##### DONE #####" + +stop: + @echo "##### Stop dmaap simulator #####" + docker rm -f dmaap-simulator + @echo "##### DONE #####" + +get-data: + @echo "##### Get data fetched by dmaap-simulator #####\n" + curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://localhost:3904/events + @echo "\n\n##### DONE #####" diff --git a/sanitycheck/dmaap-simulator/README.md b/sanitycheck/dmaap-simulator/README.md new file mode 100644 index 0000000..c06afdf --- /dev/null +++ b/sanitycheck/dmaap-simulator/README.md @@ -0,0 +1,23 @@ +DMaaP simulator +--------------- + + +### Build an image +``` +make build +``` + +### Start +``` +make start +``` + +### Stop +``` +make stop +``` + +### Get fetched events +``` +make get-data +``` diff --git a/sanitycheck/dmaap-simulator/requirements.txt b/sanitycheck/dmaap-simulator/requirements.txt new file mode 100644 index 0000000..a6d2d3a --- /dev/null +++ b/sanitycheck/dmaap-simulator/requirements.txt @@ -0,0 +1,6 @@ +Click==7.0 +Flask==1.1.1 +itsdangerous==1.1.0 +Jinja2==2.10.3 +MarkupSafe==1.1.1 +Werkzeug==0.16.0 diff --git a/sanitycheck/dmaap-simulator/simulator.py b/sanitycheck/dmaap-simulator/simulator.py new file mode 100644 index 0000000..3437442 --- /dev/null +++ b/sanitycheck/dmaap-simulator/simulator.py @@ -0,0 +1,47 @@ +import json +import logging as sys_logging + +from flask import Flask, request, logging +app = Flask(__name__) + +sys_logging.basicConfig(level=sys_logging.DEBUG) +logger = logging.create_logger(app) +events = [] + +@app.route("/events/unauthenticated.VES_NOTIFICATION_OUTPUT", methods=['POST']) +def event_ves_notification_output(): + return handle_new_event(request) + +@app.route("/events/unauthenticated.SEC_FAULT_OUTPUT", methods=['POST']) +def event_sec_fault_output(): + return handle_new_event(request) + +def handle_new_event(http_request): + receive_events = decode_request_data(http_request.data) + for event in receive_events: + events.append(json.loads(event)) + return {}, 200 + +@app.route("/events", methods=['GET']) +def get_events(): + return json.dumps(events), 200 + +def decode_request_data(request_data): + data = request_data.decode("utf-8") + receive_events = data.split("\n") + receive_events = receive_events[:-1] + logger.info("received events: " + str(receive_events)) + correct_events = [] + for event in receive_events: + logger.info("received event: " + str(event)) + correct_events.append(get_correct_json(event)) + return correct_events + +def get_correct_json(incorrect_json): + json_start_position = incorrect_json.find("{") + correct_json = incorrect_json[json_start_position:] + correct_json = correct_json.replace("\r", "").replace("\t", "").replace(" ", "") + return correct_json + +if __name__ == "__main__": + app.run(host='0.0.0.0', port=3904) diff --git a/sanitycheck/events/eventToVes.json b/sanitycheck/events/eventToVes.json new file mode 100644 index 0000000..7299306 --- /dev/null +++ b/sanitycheck/events/eventToVes.json @@ -0,0 +1,37 @@ +{ + "vesServerUrl": "http://172.17.0.1:8080/eventListener/v7", + "event": { + "event": { + "commonEventHeader": { + "version": "4.0.1", + "vesEventListenerVersion": "7.0.1", + "domain": "fault", + "eventName": "Fault_Vscf:Acs-Ericcson_PilotNumberPoolExhaustion", + "eventId": "fault0000245", + "sequence": 1, + "priority": "High", + "reportingEntityId": "cc305d54-75b4-431b-adb2-eb6b9e541234", + "reportingEntityName": "ibcx0001vm002oam001", + "sourceId": "de305d54-75b4-431b-adb2-eb6b9e546014", + "sourceName": "scfx0001vm002cap001", + "nfVendorName": "Ericsson", + "nfNamingCode": "scfx", + "nfcNamingCode": "ssc", + "startEpochMicrosec": 1413378172000000, + "lastEpochMicrosec": 1413378172000000, + "timeZoneOffset": "UTC-05:30" + }, + "faultFields": { + "faultFieldsVersion": "4.0", + "alarmCondition": "PilotNumberPoolExhaustion", + "eventSourceType": "other", + "specificProblem": "Calls cannot complete - pilot numbers are unavailable", + "eventSeverity": "CRITICAL", + "vfStatus": "Active", + "alarmAdditionalInformation": { + "PilotNumberPoolSize": "1000" + } + } + } + } +} diff --git a/sanitycheck/events/fewEventsToVes.json b/sanitycheck/events/fewEventsToVes.json new file mode 100644 index 0000000..9733469 --- /dev/null +++ b/sanitycheck/events/fewEventsToVes.json @@ -0,0 +1,32 @@ +{ + "simulatorParams": { + "repeatCount": 4, + "repeatInterval": 1 + }, + "templateName": "notification.json", + "patch": { + "event": { + "commonEventHeader": { + "domain": "notification", + "eventName": "vFirewallBroadcastPackets", + "eventId": "#RandomString(10)", + "priority": "Normal", + "reportingEntityName": "myVNF", + "sequence": 1, + "sourceName": "ClosedLoopVNF", + "startEpochMicrosec": 1531616794, + "lastEpochMicrosec": 1531719042, + "vesEventListenerVersion": "7.0.1", + "version": "4.0.1" + } + } + }, + "variables": { + "dN": "NRNB=5, NRCEL=1234", + "dn": "Test_dn", + "attributeList": { + "threshXHighQ": "50", + "threshXHighP": "52" + } + } +} diff --git a/sanitycheck/events/vesAddressConfiguration.json b/sanitycheck/events/vesAddressConfiguration.json new file mode 100644 index 0000000..9c6aa22 --- /dev/null +++ b/sanitycheck/events/vesAddressConfiguration.json @@ -0,0 +1,3 @@ +{ + "vesServerUrl": "http://172.17.0.1:8080/eventListener/v7" +} diff --git a/sanitycheck/ves/Makefile b/sanitycheck/ves/Makefile new file mode 100644 index 0000000..4fe5e4b --- /dev/null +++ b/sanitycheck/ves/Makefile @@ -0,0 +1,23 @@ +all: start + +.PHONY: start + +start: + @echo "##### Start VES with DMAAP simulator #####" + docker-compose up -d + @echo "##### DONE #####" + +stop: + @echo "##### Stop VES with DMAAP simulator #####" + docker-compose down + @echo "##### DONE #####" + +health-check: + @echo "##### Health check #####\n" + + @echo "##### DMAAP simulator is ready #####\n" + curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://localhost:3904/events + + @echo "\n\n##### VES is ready #####\n" + curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET GET http://localhost:8080/healthcheck + @echo "\n\n##### DONE #####" diff --git a/sanitycheck/ves/README.md b/sanitycheck/ves/README.md new file mode 100644 index 0000000..29309a4 --- /dev/null +++ b/sanitycheck/ves/README.md @@ -0,0 +1,21 @@ +VES with DMAAP simulator +------------------------ + +### Prerequisites +* DMaaP Simulator image available. + +See README.md in dmaap-simulator directory + +### Start +``` +make start +``` + +### Health check +``` +make health-check +``` + +### Stop +``` +make stop \ No newline at end of file diff --git a/sanitycheck/ves/docker-compose.yml b/sanitycheck/ves/docker-compose.yml new file mode 100644 index 0000000..d9666d8 --- /dev/null +++ b/sanitycheck/ves/docker-compose.yml @@ -0,0 +1,20 @@ +version: '3' +services: + ves: + container_name: ves + image: nexus3.onap.org:10003/onap/org.onap.dcaegen2.collectors.ves.vescollector:latest + ports: + - "8080:8080" + - "8443:8443" + networks: + - vesnetwork + onap-dmaap: + container_name: dmaap + image: dmaap-simulator + ports: + - "3904:3904" + networks: + - vesnetwork +networks: + vesnetwork: + driver: bridge -- cgit 1.2.3-korg