OLD | NEW |
(Empty) | |
| 1 #!/usr/bin/env python |
| 2 # Copyright 2015 The Swarming Authors. All rights reserved. |
| 3 # Use of this source code is governed by the Apache v2.0 license that can be |
| 4 # found in the LICENSE file. |
| 5 |
| 6 from test_env import future |
| 7 import test_env |
| 8 test_env.setup_test_env() |
| 9 |
| 10 import mock |
| 11 |
| 12 from components import net |
| 13 from test_support import test_case |
| 14 |
| 15 from proto import service_config_pb2 |
| 16 import common |
| 17 import services |
| 18 import storage |
| 19 |
| 20 |
| 21 class ProjectsTestCase(test_case.TestCase): |
| 22 def setUp(self): |
| 23 super(ProjectsTestCase, self).setUp() |
| 24 self.mock(storage, 'get_self_config_async', mock.Mock()) |
| 25 storage.get_self_config_async.return_value = future( |
| 26 service_config_pb2.ServicesCfg( |
| 27 services=[ |
| 28 service_config_pb2.Service( |
| 29 id='foo', metadata_url='https://foo.com/metadata'), |
| 30 service_config_pb2.Service(id='metadataless'), |
| 31 ] |
| 32 )) |
| 33 |
| 34 def test_dict_to_dynamic_metadata(self): |
| 35 with self.assertRaises(services.DynamicMetadataError): |
| 36 services._dict_to_dynamic_metadata([]) |
| 37 |
| 38 self.assertEqual( |
| 39 services._dict_to_dynamic_metadata({ |
| 40 'validation': { |
| 41 'url': 'https://a.com/validate', |
| 42 'patterns': [ |
| 43 {'config_set': 'projects/foo', 'path': 'bar.cfg'}, |
| 44 {'config_set': 'regex:services/.+', 'path': 'regex:.+'}, |
| 45 ] |
| 46 } |
| 47 }), |
| 48 service_config_pb2.ServiceDynamicMetadata( |
| 49 validation=service_config_pb2.Validator( |
| 50 url='https://a.com/validate', |
| 51 patterns=[ |
| 52 service_config_pb2.ConfigPattern( |
| 53 config_set='projects/foo', path='bar.cfg'), |
| 54 service_config_pb2.ConfigPattern( |
| 55 config_set='regex:services/.+', path='regex:.+'), |
| 56 ] |
| 57 ) |
| 58 ) |
| 59 ) |
| 60 |
| 61 def test_get_metadata_async(self): |
| 62 self.mock(storage, 'get_self_config_async', mock.Mock()) |
| 63 storage.get_self_config_async.return_value = future( |
| 64 service_config_pb2.ServicesCfg( |
| 65 services=[ |
| 66 service_config_pb2.Service( |
| 67 id='foo', metadata_url='https://foo.com/metadata') |
| 68 ] |
| 69 )) |
| 70 |
| 71 self.mock(net, 'json_request_async', mock.Mock()) |
| 72 net.json_request_async.return_value = future({ |
| 73 'validation': { |
| 74 'url': 'https://a.com/validate', |
| 75 'patterns': [ |
| 76 {'config_set': 'projects/foo', 'path': 'bar.cfg'}, |
| 77 {'config_set': 'regex:services/.+', 'path': 'regex:.+'}, |
| 78 ] |
| 79 } |
| 80 }) |
| 81 |
| 82 metadata = services.get_metadata_async('foo').get_result() |
| 83 self.assertEqual( |
| 84 metadata, |
| 85 service_config_pb2.ServiceDynamicMetadata( |
| 86 validation=service_config_pb2.Validator( |
| 87 url='https://a.com/validate', |
| 88 patterns=[ |
| 89 service_config_pb2.ConfigPattern( |
| 90 config_set='projects/foo', path='bar.cfg'), |
| 91 service_config_pb2.ConfigPattern( |
| 92 config_set='regex:services/.+', path='regex:.+'), |
| 93 ] |
| 94 ) |
| 95 ) |
| 96 ) |
| 97 |
| 98 net.json_request_async.assert_called_once_with( |
| 99 'https://foo.com/metadata', scopes=net.EMAIL_SCOPE) |
| 100 |
| 101 storage.get_self_config_async.assert_called_once_with( |
| 102 common.SERVICES_REGISTRY_FILENAME, service_config_pb2.ServicesCfg) |
| 103 |
| 104 def test_get_metadata_async_not_found(self): |
| 105 with self.assertRaises(services.ServiceNotFoundError): |
| 106 services.get_metadata_async('non-existent').get_result() |
| 107 |
| 108 def test_get_metadata_async_no_metadata(self): |
| 109 metadata = services.get_metadata_async('metadataless').get_result() |
| 110 self.assertIsNotNone(metadata) |
| 111 self.assertFalse(metadata.validation.patterns) |
| 112 |
| 113 |
| 114 if __name__ == '__main__': |
| 115 test_env.main() |
OLD | NEW |