[SO] SO release image for CSIT testing
[integration/csit.git] / tests / dcaegen2 / prh-testcases / resources / simulator / DMaaP.py
1 import logging
2 import re
3 import sys
4 import time
5 import json
6 from http.server import BaseHTTPRequestHandler
7 import httpServerLib
8
9 ch = logging.StreamHandler(sys.stdout)
10 handlers = [ch]
11 logging.basicConfig(
12     level=logging.DEBUG,
13     format='[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s',
14     handlers=handlers
15 )
16
17 logger = logging.getLogger('DMaaP-simulator-logger')
18
19 DMAAP_EMPTY = b'[]'
20
21 event_ves = DMAAP_EMPTY
22 event_pnf_ready = DMAAP_EMPTY
23 event_pnf_update = DMAAP_EMPTY
24
25 class DmaapSetup(BaseHTTPRequestHandler):
26
27     def do_GET(self):
28         try:
29             if re.search('/verify/pnf_ready', self.path):
30                 global event_pnf_ready
31                 httpServerLib.set_response_200_ok(self, payload = event_pnf_ready)
32                 logger.debug('DmaapSetup GET /verify/pnf_ready -> 200 OK')
33             elif re.search('/verify/pnf_update', self.path):
34                 global event_pnf_update
35                 httpServerLib.set_response_200_ok(self, payload = event_pnf_update)
36                 logger.debug('DmaapSetup GET /verify/pnf_ready -> 200 OK')
37             else:
38                 httpServerLib.set_response_404_not_found(self)
39                 logger.info('DmaapSetup GET ' + self.path + ' -> 404 Not found')
40         except Exception as e:
41             logger.error(e)
42             httpServerLib.set_response_500_server_error(self)
43
44     def do_PUT(self):
45         try:
46             if re.search('/setup/ves_event', self.path):
47                 global event_ves
48                 event_ves = httpServerLib.get_payload(self)
49                 httpServerLib.set_response_200_ok(self)
50                 logger.debug('DmaapSetup PUT /setup/ves_event -> 200 OK, content: ' + event_ves.decode("utf-8"))
51             else:
52                 httpServerLib.set_response_404_not_found(self)
53                 logger.info('DmaapSetup PUT ' + self.path + ' -> 404 Not found')
54         except Exception as e:
55             logger.error(e)
56             httpServerLib.set_response_500_server_error(self)
57
58     def do_POST(self):
59         try:
60             if re.search('/reset', self.path):
61                 global event_ves
62                 global event_pnf_ready
63                 global event_pnf_update
64                 event_ves = DMAAP_EMPTY
65                 event_pnf_ready = DMAAP_EMPTY
66                 event_pnf_update = DMAAP_EMPTY
67                 httpServerLib.set_response_200_ok(self)
68                 logger.debug('DmaapSetup POST /reset -> 200 OK')
69             else:
70                 httpServerLib.set_response_404_not_found(self)
71                 logger.info('DmaapSetup POST ' + self.path + ' -> 404 Not found')
72         except Exception as e:
73             logger.error(e)
74             httpServerLib.set_response_500_server_error(self)
75
76 class DMaaPHandler(BaseHTTPRequestHandler):
77
78     def do_POST(self):
79         try:
80             if re.search('/events/unauthenticated.PNF_READY', self.path):
81                 global event_pnf_ready
82                 event_pnf_ready = httpServerLib.get_payload(self)
83                 httpServerLib.set_response_200_ok(self)
84                 logger.debug('DMaaPHandler POST /events/unauthenticated.PNF_READY -> 200, content: '
85                              + event_pnf_ready.decode("utf-8"))
86             elif re.search('/events/unauthenticated.PNF_UPDATE', self.path):
87                 global event_pnf_update
88                 event_pnf_update = httpServerLib.get_payload(self)
89                 httpServerLib.set_response_200_ok(self)
90                 logger.debug('DMaaPHandler POST /events/unauthenticated.PNF_READY -> 200, content: '
91                              + event_pnf_update.decode("utf-8"))
92             else:
93                 httpServerLib.set_response_404_not_found(self)
94                 logger.info('DMaaPHandler POST ' + self.path + ' -> 404 Not found')
95         except Exception as e:
96             logger.error(e)
97             httpServerLib.set_response_500_server_error(self)
98
99     def do_GET(self):
100         try:
101             if re.search('/events/unauthenticated.VES_PNFREG_OUTPUT/OpenDCAE-c12/c12', self.path):
102                 global event_ves
103                 httpServerLib.set_response_200_ok(self, payload=self.pack_event_json_as_quoted_string_into_array(event_ves))
104                 logger.debug(
105                     'DMaaPHandler GET /events/unauthenticated.VES_PNFREG_OUTPUT/OpenDcae-c12/c12 -> 200, content: '
106                     + event_ves.decode("utf-8"))
107                 event_ves = DMAAP_EMPTY
108                 logger.debug('DMaaPHandler GET /events/unauthenticated.VES_PNFREG_OUTPUT/OpenDcae-c12/c12 -> 200')
109             else:
110                 httpServerLib.set_response_404_not_found(self)
111                 logger.info('DMaaPHandler GET ' + self.path + ' -> 404 Not found')
112         except Exception as e:
113             logger.error(e)
114             httpServerLib.set_response_500_server_error(self)
115
116     def pack_event_json_as_quoted_string_into_array(self, event):
117         if event == DMAAP_EMPTY:
118             return DMAAP_EMPTY
119         else:
120             decoded = event_ves.decode("utf-8")
121             packed = '[' + json.dumps(decoded) + ']'
122             logger.info("prepared response: " + packed)
123             return packed.encode()
124         
125
126 def _main_(handler_class=DMaaPHandler, protocol="HTTP/1.0"):
127     handler_class.protocol_version = protocol
128     httpServerLib.start_http_endpoint(2222, DMaaPHandler)
129     httpServerLib.start_https_endpoint(2223, DMaaPHandler, keyfile="certs/dmaap-mr.key", certfile="certs/dmaap-mr.crt", ca_certs="certs/root.crt")
130     httpServerLib.start_http_endpoint(2224, DmaapSetup)
131     while 1:
132         time.sleep(10)
133
134 if __name__ == '__main__':
135     _main_()