OLD | NEW |
| (Empty) |
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 | |
3 # found in the LICENSE file. | |
4 | |
5 import os | |
6 import unittest | |
7 | |
8 import mock | |
9 | |
10 from monacq import acquisition_api | |
11 | |
12 from infra_libs.ts_mon import api_monitor | |
13 from infra_libs.ts_mon.protos import metrics_pb2 | |
14 import infra_libs | |
15 | |
16 | |
17 class ApiMonitorTest(unittest.TestCase): | |
18 | |
19 def test_logging_callback(self): | |
20 """Smoke test for coverage: should not crash.""" | |
21 api_monitor._logging_callback(200, "OK") | |
22 | |
23 @mock.patch('infra_libs.ts_mon.api_monitor.acquisition_api', auto_spec=True) | |
24 def test_init(self, fake_api): | |
25 _ = api_monitor.ApiMonitor('/path/to/creds.p8.json', 'https://www.tld/api') | |
26 # ApiMonitor calls abspath on the credential filename before passing it to | |
27 # AcquisitionCredential.Load. That doesn't change anything on Linux, but | |
28 # on Windows it prepends a drive letter and turns /s into \s. | |
29 fake_api.AcquisitionCredential.Load.assert_called_once_with( | |
30 os.path.abspath('/path/to/creds.p8.json')) | |
31 fake_api.AcquisitionApi.assert_called_once_with( | |
32 fake_api.AcquisitionCredential.Load.return_value, | |
33 'https://www.tld/api') | |
34 | |
35 def test_init_gce_credential(self): | |
36 with self.assertRaises(NotImplementedError): | |
37 api_monitor.ApiMonitor(':gce', 'https://www.tld/api') | |
38 | |
39 @mock.patch('infra_libs.ts_mon.api_monitor.acquisition_api', auto_spec=True) | |
40 def test_send(self, _fake_api): | |
41 m = api_monitor.ApiMonitor('/path/to/creds.p8.json', 'https://www.tld/api') | |
42 metric1 = metrics_pb2.MetricsData(name='m1') | |
43 m.send(metric1) | |
44 metric2 = metrics_pb2.MetricsData(name='m2') | |
45 m.send([metric1, metric2]) | |
46 collection = metrics_pb2.MetricsCollection(data=[metric1, metric2]) | |
47 m.send(collection) | |
48 self.assertEquals(m._api.Send.call_count, 3) | |
49 | |
50 @mock.patch('infra_libs.ts_mon.api_monitor.acquisition_api', auto_spec=True) | |
51 def test_instrumented(self, fake_api): | |
52 m = api_monitor.ApiMonitor('/path/to/creds.p8.json', 'https://www.tld/api') | |
53 m.send(metrics_pb2.MetricsData(name='m1')) | |
54 | |
55 api = fake_api.AcquisitionApi.return_value | |
56 api.SetHttp.assert_called_once() | |
57 self.assertIsInstance(api.SetHttp.call_args[0][0], | |
58 infra_libs.httplib2_utils.InstrumentedHttp) | |
59 | |
60 @mock.patch('infra_libs.ts_mon.api_monitor.acquisition_api', auto_spec=True) | |
61 def test_not_instrumented(self, fake_api): | |
62 m = api_monitor.ApiMonitor('/path/to/creds.p8.json', 'https://www.tld/api', | |
63 use_instrumented_http=False) | |
64 m.send(metrics_pb2.MetricsData(name='m1')) | |
65 | |
66 self.assertFalse(fake_api.SetHttp.called) | |
67 | |
68 @mock.patch('infra_libs.ts_mon.api_monitor.acquisition_api.' | |
69 'AcquisitionCredential', auto_spec=True) | |
70 @mock.patch('infra_libs.ts_mon.api_monitor.acquisition_api.AcquisitionApi', | |
71 auto_spec=True) | |
72 def test_failed_request_should_not_crash(self, _fake_api, _fake_creds): | |
73 m = api_monitor.ApiMonitor('/path/to/creds.p8.json', 'https://www.tld/api') | |
74 m._api.Send.side_effect = acquisition_api.AcquisitionApiRequestException() | |
75 m.send(metrics_pb2.MetricsData(name='m1')) | |
76 | |
OLD | NEW |