Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: infra_libs/ts_mon/common/test/monitors_test.py

Issue 2127373005: Fix RetriableHttp (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Fix RetriableHttp Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « infra_libs/ts_mon/common/monitors.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import base64 5 import base64
6 import httplib2 6 import httplib2
7 import json 7 import json
8 import os 8 import os
9 import tempfile 9 import tempfile
10 import unittest 10 import unittest
11 11
12 from googleapiclient import errors 12 from googleapiclient import errors
13 import mock 13 import mock
14 14
15 from infra_libs import httplib2_utils
15 from infra_libs.ts_mon.common import interface 16 from infra_libs.ts_mon.common import interface
16 from infra_libs.ts_mon.common import monitors 17 from infra_libs.ts_mon.common import monitors
17 from infra_libs.ts_mon.common import pb_to_popo 18 from infra_libs.ts_mon.common import pb_to_popo
18 from infra_libs.ts_mon.common import targets 19 from infra_libs.ts_mon.common import targets
19 from infra_libs.ts_mon.protos import metrics_pb2 20 from infra_libs.ts_mon.protos import metrics_pb2
20 import infra_libs 21 import infra_libs
21 22
22 23
23 class MonitorTest(unittest.TestCase): 24 class MonitorTest(unittest.TestCase):
24 25
25 def test_send(self): 26 def test_send(self):
26 m = monitors.Monitor() 27 m = monitors.Monitor()
27 metric1 = metrics_pb2.MetricsData(name='m1') 28 metric1 = metrics_pb2.MetricsData(name='m1')
28 with self.assertRaises(NotImplementedError): 29 with self.assertRaises(NotImplementedError):
29 m.send(metric1) 30 m.send(metric1)
30 31
31 class HttpsMonitorTest(unittest.TestCase): 32 class HttpsMonitorTest(unittest.TestCase):
32 33
33 def setUp(self): 34 def setUp(self):
34 super(HttpsMonitorTest, self).setUp() 35 super(HttpsMonitorTest, self).setUp()
35 36
36 def message(self, pb): 37 def message(self, pb):
37 pb = monitors.Monitor._wrap_proto(pb) 38 pb = monitors.Monitor._wrap_proto(pb)
38 return json.dumps({'resource': pb_to_popo.convert(pb) }) 39 return json.dumps({'resource': pb_to_popo.convert(pb) })
39 40
40 def _test_send(self, http): 41 def _test_send(self, http):
41 mon = monitors.HttpsMonitor('endpoint', '/path/to/creds.p8.json', http=http) 42 mon = monitors.HttpsMonitor('endpoint', ':gce', http=http)
42 resp = mock.MagicMock(spec=httplib2.Response, status=200) 43 resp = mock.MagicMock(spec=httplib2.Response, status=200)
43 mon._http.request = mock.MagicMock(return_value=[resp, ""]) 44 mon._http.request = mock.MagicMock(return_value=[resp, ""])
44 45
45 metric1 = metrics_pb2.MetricsData(name='m1') 46 metric1 = metrics_pb2.MetricsData(name='m1')
46 mon.send(metric1) 47 mon.send(metric1)
47 metric2 = metrics_pb2.MetricsData(name='m2') 48 metric2 = metrics_pb2.MetricsData(name='m2')
48 mon.send([metric1, metric2]) 49 mon.send([metric1, metric2])
49 collection = metrics_pb2.MetricsCollection(data=[metric1, metric2]) 50 collection = metrics_pb2.MetricsCollection(data=[metric1, metric2])
50 mon.send(collection) 51 mon.send(collection)
51 52
52 mon._http.request.assert_has_calls([ 53 mon._http.request.assert_has_calls([
53 mock.call('endpoint', method='POST', body=self.message(metric1)), 54 mock.call('endpoint', method='POST', body=self.message(metric1)),
54 mock.call('endpoint', method='POST', 55 mock.call('endpoint', method='POST',
55 body=self.message([metric1, metric2])), 56 body=self.message([metric1, metric2])),
56 mock.call('endpoint', method='POST', body=self.message(collection)), 57 mock.call('endpoint', method='POST', body=self.message(collection)),
57 ]) 58 ])
58 59
59 @mock.patch('infra_libs.ts_mon.common.monitors.HttpsMonitor.' 60 def test_default_send(self):
60 '_load_credentials', autospec=True)
61 def test_default_send(self, _load_creds):
62 self._test_send(None) 61 self._test_send(None)
63 62
64 @mock.patch('infra_libs.ts_mon.common.monitors.HttpsMonitor.' 63 def test_http_send(self):
65 '_load_credentials', autospec=True)
66 def test_nondefault_send(self, _load_creds):
67 self._test_send(httplib2.Http()) 64 self._test_send(httplib2.Http())
68 65
66 def test_instrumented_http_send(self):
67 self._test_send(httplib2_utils.InstrumentedHttp('test'))
68
69 @mock.patch('infra_libs.ts_mon.common.monitors.HttpsMonitor.' 69 @mock.patch('infra_libs.ts_mon.common.monitors.HttpsMonitor.'
70 '_load_credentials', autospec=True) 70 '_load_credentials', autospec=True)
71 def test_send_resp_failure(self, _load_creds): 71 def test_send_resp_failure(self, _load_creds):
72 mon = monitors.HttpsMonitor('endpoint', '/path/to/creds.p8.json') 72 mon = monitors.HttpsMonitor('endpoint', '/path/to/creds.p8.json')
73 resp = mock.MagicMock(spec=httplib2.Response, status=400) 73 resp = mock.MagicMock(spec=httplib2.Response, status=400)
74 mon._http.request = mock.MagicMock(return_value=[resp, ""]) 74 mon._http.request = mock.MagicMock(return_value=[resp, ""])
75 75
76 metric1 = metrics_pb2.MetricsData(name='m1') 76 metric1 = metrics_pb2.MetricsData(name='m1')
77 mon.send(metric1) 77 mon.send(metric1)
78 78
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 collection = metrics_pb2.MetricsCollection(data=[metric1, metric2]) 288 collection = metrics_pb2.MetricsCollection(data=[metric1, metric2])
289 m.send(collection) 289 m.send(collection)
290 290
291 291
292 class NullMonitorTest(unittest.TestCase): 292 class NullMonitorTest(unittest.TestCase):
293 293
294 def test_send(self): 294 def test_send(self):
295 m = monitors.NullMonitor() 295 m = monitors.NullMonitor()
296 metric1 = metrics_pb2.MetricsData(name='m1') 296 metric1 = metrics_pb2.MetricsData(name='m1')
297 m.send(metric1) 297 m.send(metric1)
OLDNEW
« no previous file with comments | « infra_libs/ts_mon/common/monitors.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698