|
21 | 21 | import time |
22 | 22 | import uuid |
23 | 23 |
|
| 24 | +from retrying import retry |
| 25 | + |
24 | 26 | import unittest |
25 | 27 |
|
26 | 28 | PROJECT = os.environ.get('GCLOUD_PROJECT_PYTHON') |
27 | 29 |
|
28 | 30 | HOST_PORT = 'localhost:8000' |
29 | 31 | BASE_URL = 'http://localhost:8000/' |
30 | 32 |
|
| 33 | +RETRY_WAIT_PERIOD = 8000 # Wait 8 seconds between each retry |
| 34 | +RETRY_MAX_ATTEMPT = 10 # Retry 10 times |
| 35 | + |
31 | 36 |
|
32 | 37 | def wait_app_to_start(): |
33 | 38 | """Wait the application to start running.""" |
@@ -92,114 +97,154 @@ def test_django_request_trace(self): |
92 | 97 | BASE_URL, |
93 | 98 | headers=self.headers_trace) |
94 | 99 |
|
95 | | - time.sleep(5) |
| 100 | + @retry(wait_fixed=RETRY_WAIT_PERIOD, stop_max_attempt_number=RETRY_MAX_ATTEMPT) |
| 101 | + def test_with_retry(self): |
| 102 | + trace = self.client.get_trace(trace_id=self.trace_id) |
| 103 | + spans = trace.get('spans') |
96 | 104 |
|
97 | | - trace = self.client.get_trace(trace_id=self.trace_id) |
98 | | - spans = trace.get('spans') |
| 105 | + self.assertEqual(trace.get('projectId'), PROJECT) |
| 106 | + self.assertEqual(trace.get('traceId'), str(self.trace_id)) |
| 107 | + self.assertEqual(len(spans), 1) |
| 108 | + self.assertEqual( |
| 109 | + spans[0].get('parentSpanId'), |
| 110 | + str(self.span_id)) |
99 | 111 |
|
100 | | - self.assertEqual(trace.get('projectId'), PROJECT) |
101 | | - self.assertEqual(trace.get('traceId'), str(self.trace_id)) |
102 | | - self.assertEqual(len(spans), 1) |
103 | | - self.assertEqual( |
104 | | - spans[0].get('parentSpanId'), |
105 | | - str(self.span_id)) |
| 112 | + for span in spans: |
| 113 | + labels = span.get('labels') |
| 114 | + self.assertEqual(labels.get('/http/status_code'), '200') |
106 | 115 |
|
107 | | - for span in spans: |
108 | | - labels = span.get('labels') |
109 | | - self.assertEqual(labels.get('/http/status_code'), '200') |
| 116 | + test_with_retry(self) |
110 | 117 |
|
111 | 118 | def test_mysql_trace(self): |
112 | 119 | requests.get( |
113 | 120 | '{}mysql'.format(BASE_URL), |
114 | 121 | headers=self.headers_trace) |
115 | 122 |
|
116 | | - time.sleep(5) |
| 123 | + @retry(wait_fixed=RETRY_WAIT_PERIOD, stop_max_attempt_number=RETRY_MAX_ATTEMPT) |
| 124 | + def test_with_retry(self): |
| 125 | + trace = self.client.get_trace(trace_id=self.trace_id) |
| 126 | + spans = trace.get('spans') |
| 127 | + |
| 128 | + self.assertEqual(trace.get('projectId'), PROJECT) |
| 129 | + self.assertEqual(trace.get('traceId'), str(self.trace_id)) |
117 | 130 |
|
118 | | - trace = self.client.get_trace(trace_id=self.trace_id) |
119 | | - spans = trace.get('spans') |
| 131 | + # Should have 2 spans, one for django request, one for mysql query |
| 132 | + self.assertEqual(len(spans), 2) |
| 133 | + self.assertEqual( |
| 134 | + spans[0].get('parentSpanId'), |
| 135 | + str(self.span_id)) |
120 | 136 |
|
121 | | - self.assertEqual(trace.get('projectId'), PROJECT) |
122 | | - self.assertEqual(trace.get('traceId'), str(self.trace_id)) |
| 137 | + request_succeeded = False |
123 | 138 |
|
124 | | - # Should have 2 spans, one for django request, one for mysql query |
125 | | - self.assertEqual(len(spans), 2) |
126 | | - self.assertEqual( |
127 | | - spans[0].get('parentSpanId'), |
128 | | - str(self.span_id)) |
| 139 | + for span in spans: |
| 140 | + labels = span.get('labels') |
| 141 | + if '/http/status_code' in labels.keys(): |
| 142 | + self.assertEqual(labels.get('/http/status_code'), '200') |
| 143 | + request_succeeded = True |
129 | 144 |
|
130 | | - for span in spans: |
131 | | - labels = span.get('labels') |
132 | | - self.assertEqual(labels.get('/http/status_code'), '200') |
| 145 | + if span.get('name') == '[mysql.query]SELECT 2*3': |
| 146 | + self.assertEqual(labels.get('mysql/cursor/method/name'), 'execute') |
| 147 | + self.assertEqual(labels.get('mysql/query'), 'SELECT 2*3') |
133 | 148 |
|
134 | | - if span.get('name') == '[mysql.query]SELECT 2*3': |
135 | | - self.assertEqual(labels.get('mysql/cursor/method/name'), 'execute') |
136 | | - self.assertEqual(labels.get('mysql/query'), 'SELECT 2*3') |
| 149 | + self.assertTrue(request_succeeded) |
| 150 | + |
| 151 | + test_with_retry(self) |
137 | 152 |
|
138 | 153 | def test_postgresql_trace(self): |
139 | 154 | requests.get( |
140 | 155 | '{}postgresql'.format(BASE_URL), |
141 | 156 | headers=self.headers_trace) |
142 | 157 |
|
143 | | - time.sleep(5) |
| 158 | + @retry(wait_fixed=RETRY_WAIT_PERIOD, stop_max_attempt_number=RETRY_MAX_ATTEMPT) |
| 159 | + def test_with_retry(self): |
| 160 | + trace = self.client.get_trace(trace_id=self.trace_id) |
| 161 | + spans = trace.get('spans') |
| 162 | + |
| 163 | + self.assertEqual(trace.get('projectId'), PROJECT) |
| 164 | + self.assertEqual(trace.get('traceId'), str(self.trace_id)) |
| 165 | + |
| 166 | + # Should have 2 spans, one for django request, one for postgresql query |
| 167 | + self.assertEqual(len(trace.get('spans')), 2) |
| 168 | + self.assertEqual( |
| 169 | + spans[0].get('parentSpanId'), |
| 170 | + str(self.span_id)) |
144 | 171 |
|
145 | | - trace = self.client.get_trace(trace_id=self.trace_id) |
146 | | - spans = trace.get('spans') |
| 172 | + request_succeeded = False |
147 | 173 |
|
148 | | - self.assertEqual(trace.get('projectId'), PROJECT) |
149 | | - self.assertEqual(trace.get('traceId'), str(self.trace_id)) |
| 174 | + for span in spans: |
| 175 | + labels = span.get('labels') |
| 176 | + if '/http/status_code' in labels.keys(): |
| 177 | + self.assertEqual(labels.get('/http/status_code'), '200') |
| 178 | + request_succeeded = True |
150 | 179 |
|
151 | | - # Should have 2 spans, one for django request, one for postgresql query |
152 | | - self.assertEqual(len(trace.get('spans')), 2) |
153 | | - self.assertEqual( |
154 | | - spans[0].get('parentSpanId'), |
155 | | - str(self.span_id)) |
| 180 | + if span.get('name') == '[postgresql.query]SELECT 2*3': |
| 181 | + self.assertEqual(labels.get('postgresql/cursor/method/name'), 'execute') |
| 182 | + self.assertEqual(labels.get('postgresql/query'), 'SELECT 2*3') |
156 | 183 |
|
157 | | - for span in spans: |
158 | | - labels = span.get('labels') |
159 | | - self.assertEqual(labels.get('/http/status_code'), '200') |
| 184 | + self.assertTrue(request_succeeded) |
160 | 185 |
|
161 | | - if span.get('name') == '[postgresql.query]SELECT 2*3': |
162 | | - self.assertEqual(labels.get('postgresql/cursor/method/name'), 'execute') |
163 | | - self.assertEqual(labels.get('postgresql/query'), 'SELECT 2*3') |
| 186 | + test_with_retry(self) |
164 | 187 |
|
165 | 188 | def test_sqlalchemy_mysql_trace(self): |
166 | 189 | requests.get( |
167 | 190 | '{}sqlalchemy_mysql'.format(BASE_URL), |
168 | 191 | headers=self.headers_trace) |
169 | 192 |
|
170 | | - time.sleep(5) |
| 193 | + @retry(wait_fixed=RETRY_WAIT_PERIOD, stop_max_attempt_number=RETRY_MAX_ATTEMPT) |
| 194 | + def test_with_retry(self): |
| 195 | + trace = self.client.get_trace(trace_id=self.trace_id) |
| 196 | + spans = trace.get('spans') |
171 | 197 |
|
172 | | - trace = self.client.get_trace(trace_id=self.trace_id) |
173 | | - spans = trace.get('spans') |
| 198 | + self.assertEqual(trace.get('projectId'), PROJECT) |
| 199 | + self.assertEqual(trace.get('traceId'), str(self.trace_id)) |
| 200 | + self.assertNotEqual(len(trace.get('spans')), 0) |
174 | 201 |
|
175 | | - self.assertEqual(trace.get('projectId'), PROJECT) |
176 | | - self.assertEqual(trace.get('traceId'), str(self.trace_id)) |
177 | | - self.assertNotEqual(len(trace.get('spans')), 0) |
178 | | - self.assertEqual( |
179 | | - trace.get('spans')[0].get('parentSpanId'), |
180 | | - str(self.span_id)) |
| 202 | + has_parent_span = False |
| 203 | + request_succeeded = False |
181 | 204 |
|
182 | | - for span in spans: |
183 | | - labels = span.get('labels') |
184 | | - self.assertEqual(labels.get('/http/status_code'), '200') |
| 205 | + for span in spans: |
| 206 | + labels = span.get('labels') |
| 207 | + if '/http/status_code' in labels.keys(): |
| 208 | + self.assertEqual(labels.get('/http/status_code'), '200') |
| 209 | + request_succeeded = True |
| 210 | + |
| 211 | + if span.get('name') == 'app.views.sqlalchemy_mysql_trace': |
| 212 | + self.assertEqual(span.get('parentSpanId'), str(self.span_id)) |
| 213 | + has_parent_span = True |
| 214 | + |
| 215 | + self.assertTrue(has_parent_span) |
| 216 | + self.assertTrue(request_succeeded) |
| 217 | + |
| 218 | + test_with_retry(self) |
185 | 219 |
|
186 | 220 | def test_sqlalchemy_postgresql_trace(self): |
187 | 221 | requests.get( |
188 | 222 | '{}sqlalchemy_postgresql'.format(BASE_URL), |
189 | 223 | headers=self.headers_trace) |
190 | 224 |
|
191 | | - time.sleep(5) |
| 225 | + @retry(wait_fixed=RETRY_WAIT_PERIOD, stop_max_attempt_number=RETRY_MAX_ATTEMPT) |
| 226 | + def test_with_retry(self): |
| 227 | + trace = self.client.get_trace(trace_id=self.trace_id) |
| 228 | + spans = trace.get('spans') |
| 229 | + |
| 230 | + self.assertEqual(trace.get('projectId'), PROJECT) |
| 231 | + self.assertEqual(trace.get('traceId'), str(self.trace_id)) |
| 232 | + self.assertNotEqual(len(trace.get('spans')), 0) |
| 233 | + |
| 234 | + has_parent_span = False |
| 235 | + request_succeeded = False |
| 236 | + |
| 237 | + for span in spans: |
| 238 | + labels = span.get('labels') |
| 239 | + if '/http/status_code' in labels.keys(): |
| 240 | + self.assertEqual(labels.get('/http/status_code'), '200') |
| 241 | + request_succeeded = True |
192 | 242 |
|
193 | | - trace = self.client.get_trace(trace_id=self.trace_id) |
194 | | - spans = trace.get('spans') |
| 243 | + if span.get('name') == 'app.views.sqlalchemy_postgresql_trace': |
| 244 | + self.assertEqual(span.get('parentSpanId'), str(self.span_id)) |
| 245 | + has_parent_span = True |
195 | 246 |
|
196 | | - self.assertEqual(trace.get('projectId'), PROJECT) |
197 | | - self.assertEqual(trace.get('traceId'), str(self.trace_id)) |
198 | | - self.assertNotEqual(len(trace.get('spans')), 0) |
199 | | - self.assertEqual( |
200 | | - trace.get('spans')[0].get('parentSpanId'), |
201 | | - str(self.span_id)) |
| 247 | + self.assertTrue(has_parent_span) |
| 248 | + self.assertTrue(request_succeeded) |
202 | 249 |
|
203 | | - for span in spans: |
204 | | - labels = span.get('labels') |
205 | | - self.assertEqual(labels.get('/http/status_code'), '200') |
| 250 | + test_with_retry(self) |
0 commit comments