PRH simulators refactor
[integration/csit.git] / tests / dcaegen2 / prh-testcases / resources / simulator / AAI.py
1 import logging
2 import json
3 import sys
4 import re
5 import time
6 from http.server import BaseHTTPRequestHandler
7 from os.path import basename
8 import httpServerLib
9
10 ch = logging.StreamHandler(sys.stdout)
11 handlers = [ch]
12 logging.basicConfig(
13     level=logging.DEBUG,
14     format='[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s',
15     handlers=handlers
16 )
17
18 logger = logging.getLogger('AAI-simulator-logger')
19
20 AAI_RESOURCE_NOT_FOUND = b'{}'
21
22 pnf_entries = {}
23 patched_pnf = AAI_RESOURCE_NOT_FOUND
24 created_logical_link = AAI_RESOURCE_NOT_FOUND
25
26 class AAISetup(BaseHTTPRequestHandler):
27
28     def do_GET(self):
29         try:
30             if re.search('/setup/patched_pnf', self.path):
31                 httpServerLib.set_response_200_ok(self, payload = patched_pnf)
32                 logger.debug('AAISetup GET /setup/patched_pnf -> 200 OK')
33             elif re.search('/setup/created_logical_link', self.path):
34                 httpServerLib.set_response_200_ok(self, payload = created_logical_link)
35                 logger.debug('AAISetup GET /setup/created_logical_link -> 200 OK')
36             else:
37                 httpServerLib.set_response_404_not_found(self)
38                 logger.info('AAISetup GET ' + self.path + ' -> 404 Not found')
39         except Exception as e:
40             logger.error(e)
41             httpServerLib.set_response_500_server_error(self)
42
43     def do_PUT(self):
44         try:
45             if re.search('/setup/add_pnf_entry', self.path):
46                 pnf_entry = httpServerLib.get_payload(self)
47                 pnf_name = json.loads(pnf_entry).get("pnf-name")
48                 if pnf_name == None:
49                     raise Exception("Invalid PNF entry, could not extract `pnf-name`")
50
51                 global pnf_entries
52                 pnf_entries[pnf_name] = pnf_entry
53
54                 httpServerLib.set_response_200_ok(self)
55                 logger.debug('AAISetup PUT /setup/add_pnf_entry [' + pnf_name + '] -> 200 OK')
56             elif re.search('/set_pnf', self.path):
57                 pnf_name = httpServerLib.get_payload(self).decode()
58                 pnf_entries[pnf_name] = AAI_RESOURCE_NOT_FOUND
59                 httpServerLib.set_response_200_ok(self)
60             else:
61                 httpServerLib.set_response_404_not_found(self)
62                 logger.info('AAISetup PUT ' + self.path + ' -> 404 Not found')
63         except Exception as e:
64             logger.error(e)
65             httpServerLib.set_response_500_server_error(self)
66
67     def do_POST(self):
68         try:
69             if re.search('/reset', self.path):
70                 global pnf_entries
71                 global patched_pnf
72                 global created_logical_link
73                 pnf_entries = {}
74                 patched_pnf = AAI_RESOURCE_NOT_FOUND
75                 created_logical_link = AAI_RESOURCE_NOT_FOUND
76
77                 httpServerLib.set_response_200_ok(self)
78                 logger.debug('AAISetup POST /reset -> 200 OK')
79             else:
80                 httpServerLib.set_response_404_not_found(self)
81                 logger.info('AAISetup POST ' + self.path + ' -> 404 Not found')
82         except Exception as e:
83             logger.error(e)
84             httpServerLib.set_response_500_server_error(self)
85
86 class AAIHandler(BaseHTTPRequestHandler):
87
88     def do_GET(self):
89         try:
90             if re.search('/aai/v12/network/pnfs/pnf/[^/]*$', self.path):
91                 pnf_name = basename(self.path)
92                 if pnf_name in pnf_entries:
93                     httpServerLib.set_response_200_ok(self, payload = pnf_entries[pnf_name])
94                     logger.debug('AAIHandler GET /aai/v12/network/pnfs/pnf/' + pnf_name + ' -> 200 OK')
95                 else:
96                     httpServerLib.set_response_404_not_found(self)
97                     logger.info('AAIHandler GET /aai/v12/network/pnfs/pnf/' + pnf_name + ' -> 404 Not found, actual entries: ' + str(pnf_entries.keys()))
98             else:
99                 httpServerLib.set_response_404_not_found(self)
100                 logger.info('AAIHandler GET ' + self.path + ' -> 404 Not found')
101         except Exception as e:
102             logger.error(e)
103             httpServerLib.set_response_500_server_error(self)
104
105     def do_PATCH(self):
106         try:
107             if re.search('/aai/v12/network/pnfs/pnf/[^/]*$', self.path):
108                 pnf_name = basename(self.path)
109                 if pnf_name in pnf_entries:
110                     global patched_pnf
111                     patched_pnf = httpServerLib.get_payload(self)
112
113                     httpServerLib.set_response_200_ok(self)
114                     logger.debug('AAIHandler PATCH /aai/v12/network/pnfs/pnf/' + pnf_name + ' -> 200 OK')
115                 else:
116                     httpServerLib.set_response_404_not_found(self)
117                     logger.info('AAIHandler PATCH /aai/v12/network/pnfs/pnf/' + pnf_name + ' -> 404 Not found, actual entries: ' + str(pnf_entries.keys()))
118             else:
119                 httpServerLib.set_response_404_not_found(self)
120                 logger.info('AAIHandler PATCH ' + self.path + ' -> 404 Not found')
121         except Exception as e:
122             logger.error(e)
123             httpServerLib.set_response_500_server_error(self)
124
125     def do_PUT(self):
126         try:
127             if re.search('/aai/v12/network/logical-links/logical-link/[^/]*$', self.path):
128                 global created_logical_link
129                 created_logical_link = httpServerLib.get_payload(self)
130
131                 httpServerLib.set_response_200_ok(self)
132                 logger.debug('AAIHandler PUT /aai/v12/network/logical-links/logical-link/' + created_logical_link + ' -> 200 OK')
133             else:
134                 httpServerLib.set_response_404_not_found(self)
135                 logger.info('AAIHandler PUT ' + self.path + ' -> 404 Not found')
136         except Exception as e:
137             logger.error(e)
138             httpServerLib.set_response_500_server_error(self)
139
140
141 def _main_(handler_class=AAIHandler, protocol="HTTP/1.0"):
142     handler_class.protocol_version = protocol
143     httpServerLib.start_http_endpoint(3333, AAIHandler)
144     httpServerLib.start_https_endpoint(3334, AAIHandler, keyfile="certs/org.onap.aai.key", certfile="certs/aai_aai.onap.org.cer", ca_certs="certs/ca_local_0.cer")
145     httpServerLib.start_http_endpoint(3335, AAISetup)
146     while 1:
147         time.sleep(10)
148
149
150 if __name__ == '__main__':
151     _main_()