| 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 |