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

Side by Side Diff: appengine/config_service/services_test.py

Issue 1221643020: config services: services.cfg and validation (Closed) Base URL: git@github.com:luci/luci-py.git@master
Patch Set: Created 5 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 | « appengine/config_service/services.py ('k') | appengine/config_service/validation.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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()
OLDNEW
« no previous file with comments | « appengine/config_service/services.py ('k') | appengine/config_service/validation.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698