CSIT tests update for Synchronous VES collector
[integration/csit.git] / tests / dcaegen2 / testcases / resources / robot_library / dmaap_simulator / DMaaPHandler.py
1 '''
2 Created on Aug 15, 2017
3
4 @author: sw6830
5 '''
6 import os
7 import posixpath
8 import BaseHTTPServer
9 import urllib
10 import urlparse
11 import cgi
12 import sys
13 import shutil
14 import mimetypes
15 from robot_library import DcaeVariables
16
17 try:
18     from cStringIO import StringIO
19 except ImportError:
20     from StringIO import StringIO
21
22 class DMaaPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
23
24     DEFAULT_SUCCES_RESPONSE_CODE=200
25     succes_response_code=DEFAULT_SUCCES_RESPONSE_CODE
26
27     def __init__(self, dmaap_simulator, *args):
28         self.dmaap_simulator = dmaap_simulator
29         BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, *args)
30
31     def do_POST(self):
32         if 'POST' not in self.requestline:
33             resp_code = 405
34         else:
35             resp_code = self.parse_the_posted_data()
36
37         if resp_code == 0:
38             self.send_successful_response()
39         else:
40             self.send_response(resp_code)
41
42     def parse_the_posted_data(self):
43         topic = self.extract_topic_from_path()
44         content_len = self.get_content_length()
45         post_body = self.rfile.read(content_len)
46         post_body = self.get_json_part_of_post_body(post_body)
47         event = "{\"" + topic + "\":" + post_body + "}"
48         if self.dmaap_simulator.enque_event(event):
49             resp_code = 0
50         else:
51             print "enque event fails"
52             resp_code = 500
53         return resp_code
54
55     def get_json_part_of_post_body(self, post_body):
56         indx = post_body.index("{")
57         if indx != 0:
58             post_body = post_body[indx:]
59         return post_body
60
61     def extract_topic_from_path(self):
62         return self.path["/events/".__len__():]
63
64     def get_content_length(self):
65         return int(self.headers.getheader('content-length', 0))
66
67     def send_successful_response(self):
68         if 'clientThrottlingState' in self.requestline:
69             self.send_response(204)
70         else:
71             self.send_response(self.succes_response_code)
72             self.send_header('Content-Type', 'application/json')
73             self.end_headers()
74             self.wfile.write("{'count': 1, 'serverTimeMs': 3}")
75             self.wfile.close()