Index: infra_libs/ts_mon/test/config_test.py |
diff --git a/infra_libs/ts_mon/test/config_test.py b/infra_libs/ts_mon/test/config_test.py |
deleted file mode 100644 |
index c736acd262715edc5e98f8abd4039ae158e62079..0000000000000000000000000000000000000000 |
--- a/infra_libs/ts_mon/test/config_test.py |
+++ /dev/null |
@@ -1,393 +0,0 @@ |
-# Copyright 2015 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-import argparse |
-import json |
-import os |
-import requests |
-import tempfile |
-import unittest |
- |
-import mock |
- |
-from testing_support import auto_stub |
- |
-from infra_libs.ts_mon import config |
-from infra_libs.ts_mon.common import interface |
-from infra_libs.ts_mon.common import standard_metrics |
-from infra_libs.ts_mon.common import monitors |
-from infra_libs.ts_mon.common import targets |
-from infra_libs.ts_mon.common.test import stubs |
-import infra_libs |
- |
- |
-DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data') |
- |
- |
-class GlobalsTest(auto_stub.TestCase): |
- |
- def setUp(self): |
- super(GlobalsTest, self).setUp() |
- self.mock(config, 'load_machine_config', lambda x: {}) |
- |
- def tearDown(self): |
- # It's important to call close() before un-setting the mock state object, |
- # because any FlushThread started by the test is stored in that mock state |
- # and needs to be stopped before running any other tests. |
- interface.close() |
- # This should probably live in interface.close() |
- interface.state = interface.State() |
- super(GlobalsTest, self).tearDown() |
- |
- @mock.patch('requests.get', autospec=True) |
- @mock.patch('socket.getfqdn', autospec=True) |
- def test_pubsub_monitor_args(self, fake_fqdn, fake_get): |
- fake_fqdn.return_value = 'slave1-a1.reg.tld' |
- fake_get.return_value.side_effect = requests.exceptions.ConnectionError |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args([ |
- '--ts-mon-credentials', '/path/to/creds.p8.json', |
- '--ts-mon-endpoint', 'pubsub://invalid-project/invalid-topic']) |
- |
- config.process_argparse_options(args) |
- |
- self.assertIsInstance(interface.state.global_monitor, |
- monitors.PubSubMonitor) |
- |
- self.assertIsInstance(interface.state.target, targets.DeviceTarget) |
- self.assertEquals(interface.state.target.hostname, 'slave1-a1') |
- self.assertEquals(interface.state.target.region, 'reg') |
- self.assertEquals(args.ts_mon_flush, 'auto') |
- self.assertIsNotNone(interface.state.flush_thread) |
- self.assertTrue(standard_metrics.up.get()) |
- |
- @mock.patch('requests.get', autospec=True) |
- @mock.patch('socket.getfqdn', autospec=True) |
- @mock.patch('infra_libs.ts_mon.common.monitors.HttpsMonitor.' |
- '_load_credentials', autospec=True) |
- def test_https_monitor_args(self, _load_creds, fake_fqdn, fake_get): |
- print [_load_creds, fake_fqdn, fake_get] |
- fake_fqdn.return_value = 'slave1-a1.reg.tld' |
- fake_get.return_value.side_effect = requests.exceptions.ConnectionError |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args([ |
- '--ts-mon-credentials', '/path/to/creds.p8.json', |
- '--ts-mon-endpoint', 'https://test/random:insert']) |
- |
- config.process_argparse_options(args) |
- |
- self.assertIsInstance(interface.state.global_monitor, |
- monitors.HttpsMonitor) |
- |
- self.assertIsInstance(interface.state.target, targets.DeviceTarget) |
- self.assertEquals(interface.state.target.hostname, 'slave1-a1') |
- self.assertEquals(interface.state.target.region, 'reg') |
- self.assertEquals(args.ts_mon_flush, 'auto') |
- self.assertIsNotNone(interface.state.flush_thread) |
- self.assertTrue(standard_metrics.up.get()) |
- |
- @mock.patch('requests.get', autospec=True) |
- @mock.patch('socket.getfqdn', autospec=True) |
- def test_default_target_uppercase_fqdn(self, fake_fqdn, fake_get): |
- fake_fqdn.return_value = 'SLAVE1-A1.REG.TLD' |
- fake_get.return_value.side_effect = requests.exceptions.ConnectionError |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args([ |
- '--ts-mon-credentials', '/path/to/creds.p8.json', |
- '--ts-mon-endpoint', 'unsupported://www.googleapis.com/some/api']) |
- config.process_argparse_options(args) |
- self.assertIsInstance(interface.state.target, targets.DeviceTarget) |
- self.assertEquals(interface.state.target.hostname, 'slave1-a1') |
- self.assertEquals(interface.state.target.region, 'reg') |
- |
- @mock.patch('requests.get', autospec=True) |
- @mock.patch('socket.getfqdn', autospec=True) |
- def test_default_target_fqdn_without_domain(self, fake_fqdn, fake_get): |
- fake_fqdn.return_value = 'SLAVE1-A1' |
- fake_get.return_value.side_effect = requests.exceptions.ConnectionError |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args([ |
- '--ts-mon-credentials', '/path/to/creds.p8.json', |
- '--ts-mon-endpoint', 'unsupported://www.googleapis.com/some/api']) |
- config.process_argparse_options(args) |
- self.assertIsInstance(interface.state.target, targets.DeviceTarget) |
- self.assertEquals(interface.state.target.hostname, 'slave1-a1') |
- self.assertEquals(interface.state.target.region, '') |
- |
- @mock.patch('requests.get', autospec=True) |
- @mock.patch('socket.getfqdn', autospec=True) |
- def test_fallback_monitor_args(self, fake_fqdn, fake_get): |
- fake_fqdn.return_value = 'foo' |
- fake_get.return_value.side_effect = requests.exceptions.ConnectionError |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args([ |
- '--ts-mon-credentials', '/path/to/creds.p8.json', |
- '--ts-mon-endpoint', 'unsupported://www.googleapis.com/some/api']) |
- config.process_argparse_options(args) |
- |
- self.assertIsInstance(interface.state.global_monitor, |
- monitors.NullMonitor) |
- |
- @mock.patch('requests.get', autospec=True) |
- @mock.patch('socket.getfqdn', autospec=True) |
- def test_explicit_disable_args(self, fake_fqdn, fake_get): |
- fake_fqdn.return_value = 'foo' |
- fake_get.return_value.side_effect = requests.exceptions.ConnectionError |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args([ |
- '--ts-mon-credentials', '/path/to/creds.p8.json', |
- '--ts-mon-endpoint', 'none']) |
- config.process_argparse_options(args) |
- |
- self.assertIsInstance(interface.state.global_monitor, |
- monitors.NullMonitor) |
- |
- @mock.patch('requests.get', autospec=True) |
- @mock.patch('socket.getfqdn', autospec=True) |
- def test_manual_flush(self, fake_fqdn, fake_get): |
- fake_fqdn.return_value = 'foo' |
- fake_get.return_value.side_effect = requests.exceptions.ConnectionError |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args(['--ts-mon-flush', 'manual']) |
- |
- config.process_argparse_options(args) |
- self.assertIsNone(interface.state.flush_thread) |
- |
- @mock.patch('infra_libs.ts_mon.common.monitors.PubSubMonitor', autospec=True) |
- def test_pubsub_args(self, fake_monitor): |
- singleton = mock.Mock() |
- fake_monitor.return_value = singleton |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args(['--ts-mon-credentials', '/path/to/creds.p8.json', |
- '--ts-mon-endpoint', 'pubsub://mytopic/myproject']) |
- config.process_argparse_options(args) |
- fake_monitor.assert_called_once_with( |
- '/path/to/creds.p8.json', 'mytopic', 'myproject', |
- use_instrumented_http=True) |
- self.assertIs(interface.state.global_monitor, singleton) |
- |
- @mock.patch('infra_libs.ts_mon.common.monitors.PubSubMonitor', autospec=True) |
- def test_pubsub_without_credentials(self, fake_monitor): |
- # safety net, not supposed to be called. |
- singleton = mock.Mock() |
- fake_monitor.return_value = singleton |
- |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args(['--ts-mon-config-file', |
- os.path.join(DATA_DIR, 'empty-config-file.json'), |
- '--ts-mon-endpoint', 'pubsub://mytopic/myproject']) |
- config.process_argparse_options(args) |
- self.assertIsInstance(interface.state.global_monitor, monitors.NullMonitor) |
- |
- @mock.patch('infra_libs.ts_mon.common.monitors.DebugMonitor', auto_spec=True) |
- def test_dryrun_args(self, fake_monitor): |
- singleton = mock.Mock() |
- fake_monitor.return_value = singleton |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args(['--ts-mon-endpoint', 'file://foo.txt']) |
- config.process_argparse_options(args) |
- fake_monitor.assert_called_once_with('foo.txt') |
- self.assertIs(interface.state.global_monitor, singleton) |
- |
- def test_device_args(self): |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args(['--ts-mon-credentials', '/path/to/creds.p8.json', |
- '--ts-mon-target-type', 'device', |
- '--ts-mon-device-region', 'reg', |
- '--ts-mon-device-role', 'role', |
- '--ts-mon-device-network', 'net', |
- '--ts-mon-device-hostname', 'host']) |
- config.process_argparse_options(args) |
- self.assertEqual(interface.state.target.region, 'reg') |
- self.assertEqual(interface.state.target.role, 'role') |
- self.assertEqual(interface.state.target.network, 'net') |
- self.assertEqual(interface.state.target.hostname, 'host') |
- |
- def test_autogen_device_args(self): |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args(['--ts-mon-credentials', '/path/to/creds.p8.json', |
- '--ts-mon-target-type', 'device', |
- '--ts-mon-device-region', 'reg', |
- '--ts-mon-device-role', 'role', |
- '--ts-mon-device-network', 'net', |
- '--ts-mon-device-hostname', 'host', |
- '--ts-mon-autogen-hostname']) |
- config.process_argparse_options(args) |
- self.assertEqual(interface.state.target.region, 'reg') |
- self.assertEqual(interface.state.target.role, 'role') |
- self.assertEqual(interface.state.target.network, 'net') |
- self.assertEqual(interface.state.target.hostname, 'autogen:host') |
- |
- def test_autogen_device_config(self): |
- self.mock(config, 'load_machine_config', lambda x: { |
- 'autogen_hostname': True, |
- 'credentials': '/path/to/creds.p8.json', |
- 'endpoint': 'test://endpoint'}) |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args([ |
- '--ts-mon-target-type', 'device', |
- '--ts-mon-device-region', 'reg', |
- '--ts-mon-device-role', 'role', |
- '--ts-mon-device-network', 'net', |
- '--ts-mon-device-hostname', 'host']) |
- config.process_argparse_options(args) |
- self.assertEqual(interface.state.target.region, 'reg') |
- self.assertEqual(interface.state.target.role, 'role') |
- self.assertEqual(interface.state.target.network, 'net') |
- self.assertEqual(interface.state.target.hostname, 'autogen:host') |
- |
- |
- def test_task_args(self): |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args(['--ts-mon-credentials', '/path/to/creds.p8.json', |
- '--ts-mon-target-type', 'task', |
- '--ts-mon-task-service-name', 'serv', |
- '--ts-mon-task-job-name', 'job', |
- '--ts-mon-task-region', 'reg', |
- '--ts-mon-task-hostname', 'host', |
- '--ts-mon-task-number', '1']) |
- config.process_argparse_options(args) |
- self.assertEqual(interface.state.target.service_name, 'serv') |
- self.assertEqual(interface.state.target.job_name, 'job') |
- self.assertEqual(interface.state.target.region, 'reg') |
- self.assertEqual(interface.state.target.hostname, 'host') |
- self.assertEqual(interface.state.target.task_num, 1) |
- |
- def test_autogen_task_args(self): |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args(['--ts-mon-credentials', '/path/to/creds.p8.json', |
- '--ts-mon-target-type', 'task', |
- '--ts-mon-task-service-name', 'serv', |
- '--ts-mon-task-job-name', 'job', |
- '--ts-mon-task-region', 'reg', |
- '--ts-mon-task-hostname', 'host', |
- '--ts-mon-task-number', '1', |
- '--ts-mon-autogen-hostname']) |
- config.process_argparse_options(args) |
- self.assertEqual(interface.state.target.service_name, 'serv') |
- self.assertEqual(interface.state.target.job_name, 'job') |
- self.assertEqual(interface.state.target.region, 'reg') |
- self.assertEqual(interface.state.target.hostname, 'autogen:host') |
- self.assertEqual(interface.state.target.task_num, 1) |
- |
- def test_autogen_task_config(self): |
- self.mock(config, 'load_machine_config', lambda x: { |
- 'autogen_hostname': True, |
- 'credentials': '/path/to/creds.p8.json', |
- 'endpoint': 'test://endpoint'}) |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args(['--ts-mon-target-type', 'task', |
- '--ts-mon-task-service-name', 'serv', |
- '--ts-mon-task-job-name', 'job', |
- '--ts-mon-task-region', 'reg', |
- '--ts-mon-task-hostname', 'host', |
- '--ts-mon-task-number', '1']) |
- config.process_argparse_options(args) |
- self.assertEqual(interface.state.target.service_name, 'serv') |
- self.assertEqual(interface.state.target.job_name, 'job') |
- self.assertEqual(interface.state.target.region, 'reg') |
- self.assertEqual(interface.state.target.hostname, 'autogen:host') |
- self.assertEqual(interface.state.target.task_num, 1) |
- |
- def test_task_args_missing_service_name(self): |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args(['--ts-mon-credentials', '/path/to/creds.p8.json', |
- '--ts-mon-target-type', 'task', |
- '--ts-mon-task-job-name', 'job', |
- '--ts-mon-task-region', 'reg', |
- '--ts-mon-task-hostname', 'host', |
- '--ts-mon-task-number', '1']) |
- with self.assertRaises(SystemExit): |
- config.process_argparse_options(args) |
- |
- def test_task_args_missing_job_name(self): |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args(['--ts-mon-credentials', '/path/to/creds.p8.json', |
- '--ts-mon-target-type', 'task', |
- '--ts-mon-task-service-name', 'serv', |
- '--ts-mon-task-region', 'reg', |
- '--ts-mon-task-hostname', 'host', |
- '--ts-mon-task-number', '1']) |
- with self.assertRaises(SystemExit): |
- config.process_argparse_options(args) |
- |
- def test_metric_name_prefix(self): |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args(['--ts-mon-metric-name-prefix', '/test/random/']) |
- config.process_argparse_options(args) |
- self.assertEqual('/test/random/', interface.state.metric_name_prefix) |
- |
- @mock.patch('infra_libs.ts_mon.common.monitors.NullMonitor', autospec=True) |
- def test_no_args(self, fake_monitor): |
- singleton = mock.Mock() |
- fake_monitor.return_value = singleton |
- p = argparse.ArgumentParser() |
- config.add_argparse_options(p) |
- args = p.parse_args([]) |
- config.process_argparse_options(args) |
- self.assertEqual(1, len(fake_monitor.mock_calls)) |
- self.assertEqual('/chrome/infra/', interface.state.metric_name_prefix) |
- self.assertIs(interface.state.global_monitor, singleton) |
- |
- @mock.patch('requests.get', autospec=True) |
- def test_gce_region(self, mock_get): |
- r = mock_get.return_value |
- r.status_code = 200 |
- r.text = 'projects/182615506979/zones/us-central1-f' |
- |
- self.assertEquals('us-central1-f', config._default_region('foo.golo')) |
- |
- @mock.patch('requests.get', autospec=True) |
- def test_gce_region_timeout(self, mock_get): |
- mock_get.side_effect = requests.exceptions.Timeout |
- self.assertEquals('golo', config._default_region('foo.golo')) |
- |
- @mock.patch('requests.get', autospec=True) |
- def test_gce_region_404(self, mock_get): |
- r = mock_get.return_value |
- r.status_code = 404 |
- |
- self.assertEquals('golo', config._default_region('foo.golo')) |
- |
- |
-class ConfigTest(unittest.TestCase): |
- |
- def test_load_machine_config(self): |
- with infra_libs.temporary_directory() as temp_dir: |
- filename = os.path.join(temp_dir, 'config') |
- with open(filename, 'w') as fh: |
- json.dump({'foo': 'bar'}, fh) |
- |
- self.assertEquals({'foo': 'bar'}, config.load_machine_config(filename)) |
- |
- def test_load_machine_config_bad(self): |
- with infra_libs.temporary_directory() as temp_dir: |
- filename = os.path.join(temp_dir, 'config') |
- with open(filename, 'w') as fh: |
- fh.write('not a json file') |
- |
- with self.assertRaises(ValueError): |
- config.load_machine_config(filename) |
- |
- def test_load_machine_config_not_exists(self): |
- self.assertEquals({}, config.load_machine_config('does not exist')) |