blob: 625e872b058fa53be513b9d4119db21a9d62dfa5 [file] [log] [blame]
hamidbfbc3dd2017-09-30 16:23:30 +05001from connection import Connection
2import unittest
3import sys
4import jsmin
5import json
6import os
7import time
8from jsmin import jsmin
prithiv9eb50a72017-10-04 14:19:25 +01009sys.path.append("../../test/core/")
10from test_producer import KafkaProducer
hamidbfbc3dd2017-09-30 16:23:30 +050011from kafka import KafkaConsumer
12try:
13 import boto
14 import boto.ec2
15 import boto.vpc
16 import boto.ec2.cloudwatch
17 import boto.ec2.connection
18except:
19 exit("Boto not avialable. Try activating your virtualenv OR `pip install boto`")
20
21#--------------------------------------------------------------------------------------------------------------------------------------
22
23# Test Producer object to generate request
24
25producer = KafkaProducer('')
26obj = Connection()
27connections = obj.setEnvironment()
28connections_res = obj.connection_instance()
29cloudwatch_conn = connections_res['cloudwatch_connection']
30
31# Consumer Object to consume response from message bus
32server = {'server': 'localhost:9092', 'topic': 'metric_request'}
33_consumer = KafkaConsumer(bootstrap_servers=server['server'])
34_consumer.subscribe(['metric_response'])
35
36#--------------------------------------------------------------------------------------------------------------------------------------
37
38'''Test E2E Flow : Test cases has been tested one at a time.
prithiv9eb50a72017-10-04 14:19:25 +0100391) Commom Request is generated using request function in test_producer.py(/core/message-bus)
hamidbfbc3dd2017-09-30 16:23:30 +0500402) The request is then consumed by the comsumer (plugin)
413) The response is sent back on the message bus in plugin_metrics.py using
42 response functions in producer.py(/core/message-bus)
434) The response is then again consumed by the unit_tests_metrics.py
44 and the test cases has been applied on the response.
45'''
46class test_create_metrics(unittest.TestCase):
47
48 def test_status_positive(self):
49 time.sleep(2)
50 # To generate Request of testing valid meric_name in create metrics requests
prithiv9eb50a72017-10-04 14:19:25 +010051 producer.request("create_metrics/create_metric_req_valid.json",'create_metric_request', '','metric_request')
hamidbfbc3dd2017-09-30 16:23:30 +050052
53 for message in _consumer:
54 if message.key == "create_metric_response":
55 resp = json.loads(json.loads(json.loads(message.value)))
56 time.sleep(1)
57 self.assertTrue(resp['metric_create_response']['status'])
58 self.assertEqual(resp['metric_create_response']['metric_uuid'],0)
59 return
60
61 def test_status_negative(self):
62 time.sleep(2)
63 # To generate Request of testing invalid meric_name in create metrics requests
prithiv9eb50a72017-10-04 14:19:25 +010064 producer.request("create_metrics/create_metric_req_invalid.json",'create_metric_request', '','metric_request')
hamidbfbc3dd2017-09-30 16:23:30 +050065
66 for message in _consumer:
67 if message.key == "create_metric_response":
68 resp = json.loads(json.loads(json.loads(message.value)))
69 time.sleep(1)
70 self.assertFalse(resp['metric_create_response']['status'])
71 self.assertEqual(resp['metric_create_response']['metric_uuid'],None)
72 return
73
74class test_metrics_data(unittest.TestCase):
75
76 def test_met_name_positive(self):
77 time.sleep(2)
78 # To generate Request of testing valid meric_name in read_metric_data_request
prithiv9eb50a72017-10-04 14:19:25 +010079 producer.request("read_metrics_data/read_metric_name_req_valid.json",'read_metric_data_request', '','metric_request')
hamidbfbc3dd2017-09-30 16:23:30 +050080 for message in _consumer:
81 if message.key == "read_metric_data_response":
82 resp = json.loads(json.loads(json.loads(message.value)))
83 time.sleep(1)
84 self.assertEqual(type(resp['metrics_data']),dict)
85 return
86
87 def test_met_name_negative(self):
88 time.sleep(2)
89 # To generate Request of testing invalid meric_name in read_metric_data_request
prithiv9eb50a72017-10-04 14:19:25 +010090 producer.request("read_metrics_data/read_metric_name_req_invalid.json",'read_metric_data_request', '','metric_request')
hamidbfbc3dd2017-09-30 16:23:30 +050091 for message in _consumer:
92 if message.key == "read_metric_data_response":
93 resp = json.loads(json.loads(json.loads(message.value)))
94 time.sleep(1)
95 self.assertFalse(resp['metrics_data'])
96 return
97
98 def test_coll_period_positive(self):
99 # To generate Request of testing valid collection_period in read_metric_data_request
100 # For AWS metric_data_stats collection period should be a multiple of 60
101 time.sleep(2)
prithiv9eb50a72017-10-04 14:19:25 +0100102 producer.request("read_metrics_data/read_coll_period_req_valid.json",'read_metric_data_request', '','metric_request')
hamidbfbc3dd2017-09-30 16:23:30 +0500103 for message in _consumer:
104 if message.key == "read_metric_data_response":
105 resp = json.loads(json.loads(json.loads(message.value)))
106 time.sleep(1)
107 self.assertEqual(type(resp),dict)
108 return
109
110 def test_coll_period_negative(self):
111 time.sleep(2)
112 # To generate Request of testing invalid collection_period in read_metric_data_request
prithiv9eb50a72017-10-04 14:19:25 +0100113 producer.request("read_metrics_data/read_coll_period_req_invalid.json",'read_metric_data_request', '','metric_request')
hamidbfbc3dd2017-09-30 16:23:30 +0500114 for message in _consumer:
115 if message.key == "read_metric_data_response":
116 resp = json.loads(json.loads(json.loads(message.value)))
117 time.sleep(1)
118 self.assertFalse(resp['metrics_data'])
119 return
120
121class test_update_metrics(unittest.TestCase):
122
123 def test_upd_status_positive(self):
124 time.sleep(2)
125 # To generate Request of testing valid meric_name in update metrics requests
prithiv9eb50a72017-10-04 14:19:25 +0100126 producer.request("update_metrics/update_metric_req_valid.json",'update_metric_request', '','metric_request')
hamidbfbc3dd2017-09-30 16:23:30 +0500127 for message in _consumer:
128 if message.key == "update_metric_response":
129 resp = json.loads(json.loads(json.loads(message.value)))
130 time.sleep(1)
131 self.assertTrue(resp['metric_update_response']['status'])
132 self.assertEqual(resp['metric_update_response']['metric_uuid'],0)
133 return
134
135 def test_upd_status_negative(self):
136 time.sleep(2)
137 # To generate Request of testing invalid meric_name in update metrics requests
prithiv9eb50a72017-10-04 14:19:25 +0100138 producer.request("update_metrics/update_metric_req_invalid.json",'update_metric_request', '','metric_request')
hamidbfbc3dd2017-09-30 16:23:30 +0500139 for message in _consumer:
140 if message.key == "update_metric_response":
141 resp = json.loads(json.loads(json.loads(message.value)))
142 time.sleep(1)
143 self.assertFalse(resp['metric_update_response']['status'])
144 self.assertEqual(resp['metric_update_response']['metric_uuid'],None)
145 return
146
147class test_delete_metrics(unittest.TestCase):
148
149 def test_del_met_name_positive(self):
150 time.sleep(2)
151 # To generate Request of testing valid meric_name in delete metrics requests
prithiv9eb50a72017-10-04 14:19:25 +0100152 producer.request("delete_metrics/delete_metric_req_valid.json",'delete_metric_request', '','metric_request')
hamidbfbc3dd2017-09-30 16:23:30 +0500153 for message in _consumer:
154 if message.key == "delete_metric_response":
155 resp = json.loads(json.loads(json.loads(message.value)))
156 time.sleep(1)
157 self.assertFalse(resp['status'])
158 return
159
160 def test_del_met_name_negative(self):
161 time.sleep(2)
162 # To generate Request of testing invalid meric_name in delete metrics requests
prithiv9eb50a72017-10-04 14:19:25 +0100163 producer.request("delete_metrics/delete_metric_req_invalid.json",'delete_metric_request', '','metric_request')
hamidbfbc3dd2017-09-30 16:23:30 +0500164 for message in _consumer:
165 if message.key == "delete_metric_response":
166 resp = json.loads(json.loads(json.loads(message.value)))
167 time.sleep(1)
168 self.assertFalse(resp)
169 return
170
171class test_list_metrics(unittest.TestCase):
172
173 def test_list_met_name_positive(self):
174 time.sleep(2)
175 # To generate Request of testing valid meric_name in list metrics requests
prithiv9eb50a72017-10-04 14:19:25 +0100176 producer.request("list_metrics/list_metric_req_valid.json",'list_metric_request', '','metric_request')
hamidbfbc3dd2017-09-30 16:23:30 +0500177 for message in _consumer:
178 if message.key == "list_metrics_response":
179 resp = json.loads(json.loads(json.loads(message.value)))
180 time.sleep(1)
181 self.assertEqual(type(resp['metrics_list']),list)
182 return
183
184 def test_list_met_name_negitive(self):
185 time.sleep(2)
186 # To generate Request of testing invalid meric_name in list metrics requests
prithiv9eb50a72017-10-04 14:19:25 +0100187 producer.request("list_metrics/list_metric_req_invalid.json",'list_metric_request', '','metric_request')
hamidbfbc3dd2017-09-30 16:23:30 +0500188 for message in _consumer:
189 if message.key == "list_metrics_response":
190 resp = json.loads(json.loads(json.loads(message.value)))
191 time.sleep(1)
192 self.assertFalse(resp['metrics_list'])
193 return
194
195
196if __name__ == '__main__':
197
198 # Saving test reults in Log file
199
200 log_file = 'log_file.txt'
201 f = open(log_file, "w")
202 runner = unittest.TextTestRunner(f)
203 unittest.main(testRunner=runner)
204 f.close()
205
206 # For printing results on Console
207 # unittest.main()
208