Merge "Fix PM_MAPPER_01 test - use a non-generic log"
[integration/csit.git] / tests / dcaegen2 / testcases / resources / DcaeLibrary.py
1 '''
2 Created on Aug 18, 2017
3
4 @author: sw6830
5 '''
6 from robot.api import logger
7 from Queue import Queue
8 import uuid
9 import time
10 import datetime
11 import json
12 import threading
13 import os
14 import platform
15 import subprocess
16 import paramiko
17 import DcaeVariables
18 import DMaaP
19
20
21 class DcaeLibrary(object):
22     
23     def __init__(self):
24         pass 
25     
26     @staticmethod
27     def setup_dmaap_server(port_num=3904):
28         if DcaeVariables.HttpServerThread is not None:
29             DMaaP.clean_up_event()
30             logger.console("Clean up event from event queue before test")
31             logger.info("DMaaP Server already started")
32             return "true"
33         
34         DcaeVariables.IsRobotRun = True
35         DMaaP.test(port=port_num)
36         try:
37             DcaeVariables.VESEventQ = Queue()
38             DcaeVariables.HttpServerThread = threading.Thread(name='DMAAP_HTTPServer', target=DMaaP.DMaaPHttpd.serve_forever)
39             DcaeVariables.HttpServerThread.start()
40             logger.console("DMaaP Mockup Sever started")
41             time.sleep(2)
42             return "true"
43         except Exception as e:
44             print (str(e))
45             return "false"
46             
47     @staticmethod
48     def shutdown_dmaap():
49         if DcaeVariables.HTTPD is not None:
50             DcaeVariables.HTTPD.shutdown()
51             logger.console("DMaaP Server shut down")
52             time.sleep(3)
53             return "true"
54         else:
55             return "false"
56             
57     @staticmethod
58     def cleanup_ves_events():
59         if DcaeVariables.HttpServerThread is not None:
60             DMaaP.clean_up_event()
61             logger.console("DMaaP event queue is cleaned up")
62             return "true"
63         logger.console("DMaaP server not started yet")
64         return "false"
65     
66     @staticmethod
67     def enable_vesc_with_certBasicAuth():
68         global client
69         if 'Windows' in platform.system():
70             try:
71                 client = paramiko.SSHClient()
72                 client.load_system_host_keys()
73                 # client.set_missing_host_key_policy(paramiko.WarningPolicy)
74                 client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
75                 
76                 client.connect(os.environ['CSIT_IP'], port=22, username=os.environ['CSIT_USER'], password=os.environ['CSIT_PD'])
77                 stdin, stdout, stderr = client.exec_command('%{WORKSPACE}/tests/dcaegen2/testcases/resources/vesc_enable_https_auth.sh')
78                 logger.console(stdout.read())    
79             finally:
80                 client.close()
81             return
82         ws = os.environ['WORKSPACE']
83         script2run = ws + "/tests/dcaegen2/testcases/resources/vesc_enable_https_auth.sh"
84         logger.info("Running script: " + script2run)
85         logger.console("Running script: " + script2run)
86         subprocess.call(script2run)
87         time.sleep(5)
88         return
89
90     @staticmethod
91     def dmaap_message_receive_on_topic(evtobj, topic):
92
93         evt_str = DMaaP.deque_event()
94         while evt_str != None:
95             if evtobj in evt_str and topic in evt_str:
96                 logger.info("DMaaP Receive Expected Publish Event:\n" + evt_str)
97                 logger.info("On Expected Topic:\n" + topic)
98                 return 'true'
99             evt_str = DMaaP.deque_event()
100         return 'false'
101
102     @staticmethod
103     def dmaap_message_receive(evtobj, action='contain'):
104         
105         evt_str = DMaaP.deque_event()
106         while evt_str != None:
107             if action == 'contain':
108                 if evtobj in evt_str:
109                     logger.info("DMaaP Receive Expected Publish Event:\n" + evt_str)
110                     return 'true'
111             if action == 'sizematch':
112                 if len(evtobj) == len(evt_str):
113                     return 'true'
114             if action == 'dictmatch':
115                 evt_dict = json.loads(evt_str)
116                 if cmp(evtobj, evt_dict) == 0:
117                     return 'true'
118             evt_str = DMaaP.deque_event()
119         return 'false'
120
121     @staticmethod
122     def is_json_empty(resp):
123         logger.info("Enter is_json_empty: resp.text: " + resp.text)
124         if resp.text is None or len(resp.text) < 2:
125             return 'True'
126         return 'False'
127     
128     @staticmethod
129     def generate_uuid():
130         """generate a uuid"""
131         return uuid.uuid4()
132     
133     @staticmethod
134     def get_json_value_list(jsonstr, keyval):
135         logger.info("Enter Get_Json_Key_Value_List")
136         if jsonstr is None or len(jsonstr) < 2:
137             logger.info("No Json data found")
138             return []
139         try:
140             data = json.loads(jsonstr)   
141             nodelist = []
142             for item in data:
143                 nodelist.append(item[keyval])
144             return nodelist
145         except Exception as e:
146             logger.info("Json data parsing fails")
147             print str(e)
148             return []
149         
150     @staticmethod
151     def generate_millitimestamp_uuid():
152         """generate a millisecond timestamp uuid"""
153         then = datetime.datetime.now()
154         return int(time.mktime(then.timetuple())*1e3 + then.microsecond/1e3)
155     
156     @staticmethod
157     def test():
158         import json
159         from pprint import pprint
160
161         with open('robot/assets/dcae/ves_volte_single_fault_event.json') as data_file:    
162             data = json.load(data_file)
163
164         data['event']['commonEventHeader']['version'] = '5.0'
165         pprint(data)
166
167
168 if __name__ == '__main__':
169     '''
170     dictStr = "action=getTable,Accept=application/json,Content-Type=application/json,X-FromAppId=1234908903284"
171     cls = DcaeLibrary()
172     #dict = cls.create_header_from_string(dictStr)
173     #print str(dict)
174     jsonStr = "[{'Node': 'onapfcnsl00', 'CheckID': 'serfHealth', 'Name': 'Serf Health Status', 'ServiceName': '', 'Notes': '', 'ModifyIndex': 6, 'Status': 'passing', 'ServiceID': '', 'ServiceTags': [], 'Output': 'Agent alive and reachable', 'CreateIndex': 6}]"
175     lsObj = cls.get_json_value_list(jsonStr, 'Status')
176     print lsObj
177     '''
178     
179     lib = DcaeLibrary()
180     lib.enable_vesc_https_auth()
181     
182     ret = lib.setup_dmaap_server()
183     print ret
184     time.sleep(100000)