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

Side by Side Diff: appengine/components/components/config/remote_test.py

Issue 2778533002: config: store binary configs (Closed)
Patch Set: addressed comments Created 3 years, 8 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
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 The LUCI Authors. All rights reserved. 2 # Copyright 2014 The LUCI Authors. All rights reserved.
3 # Use of this source code is governed under the Apache License, Version 2.0 3 # Use of this source code is governed under the Apache License, Version 2.0
4 # that can be found in the LICENSE file. 4 # that can be found in the LICENSE file.
5 5
6 import base64 6 import base64
7 import datetime 7 import datetime
8 import sys 8 import sys
9 import unittest 9 import unittest
10 10
11 from test_support import test_env 11 from test_support import test_env
12 test_env.setup_test_env() 12 test_env.setup_test_env()
13 13
14 import mock 14 import mock
15 15
16 from google.appengine.ext import ndb 16 from google.appengine.ext import ndb
17 17
18 from components import auth 18 from components import auth
19 from components import net 19 from components import net
20 from components.config import remote 20 from components.config import remote
21 from test_support import test_case 21 from test_support import test_case
22 22
23 import test_config_pb2
24
23 25
24 class RemoteTestCase(test_case.TestCase): 26 class RemoteTestCase(test_case.TestCase):
25 def setUp(self): 27 def setUp(self):
26 super(RemoteTestCase, self).setUp() 28 super(RemoteTestCase, self).setUp()
27 self.mock(net, 'json_request_async', mock.Mock()) 29 self.mock(net, 'json_request_async', mock.Mock())
28 net.json_request_async.side_effect = self.json_request_async 30 net.json_request_async.side_effect = self.json_request_async
29 31
30 self.provider = remote.Provider('luci-config.appspot.com') 32 self.provider = remote.Provider('luci-config.appspot.com')
31 provider_future = ndb.Future() 33 provider_future = ndb.Future()
32 provider_future.set_result(self.provider) 34 provider_future.set_result(self.provider)
33 self.mock(remote, 'get_provider_async', lambda: provider_future) 35 self.mock(remote, 'get_provider_async', lambda: provider_future)
34 36
35 @ndb.tasklet 37 @ndb.tasklet
36 def json_request_async(self, url, **kwargs): 38 def json_request_async(self, url, **kwargs):
37 assert kwargs['scopes'] 39 assert kwargs['scopes']
38 URL_PREFIX = 'https://luci-config.appspot.com/_ah/api/config/v1/' 40 URL_PREFIX = 'https://luci-config.appspot.com/_ah/api/config/v1/'
39 if url == URL_PREFIX + 'config_sets/services%2Ffoo/config/bar.cfg': 41 if url == URL_PREFIX + 'config_sets/services%2Ffoo/config/bar.cfg':
40 assert kwargs['params']['hash_only'] 42 assert kwargs['params']['hash_only']
41 raise ndb.Return({ 43 raise ndb.Return({
42 'content_hash': 'deadbeef', 44 'content_hash': 'deadbeef',
43 'revision': 'aaaabbbb', 45 'revision': 'aaaabbbb',
44 }) 46 })
47 if url == URL_PREFIX + 'config_sets/services%2Ffoo/config/baz.cfg':
48 assert kwargs['params']['hash_only']
49 raise ndb.Return({
50 'content_hash': 'badcoffee',
51 'revision': 'aaaabbbb',
52 })
45 53
46 if url == URL_PREFIX + 'config/deadbeef': 54 if url == URL_PREFIX + 'config/deadbeef':
47 raise ndb.Return({ 55 raise ndb.Return({
48 'content': base64.b64encode('a config'), 56 'content': base64.b64encode('a config'),
49 }) 57 })
58 if url == URL_PREFIX + 'config/badcoffee':
59 raise ndb.Return({
60 'content': base64.b64encode('param: "qux"'),
61 })
50 62
51 if url == URL_PREFIX + 'projects': 63 if url == URL_PREFIX + 'projects':
52 raise ndb.Return({ 64 raise ndb.Return({
53 'projects':[ 65 'projects':[
54 { 66 {
55 'id': 'chromium', 67 'id': 'chromium',
56 'repo_type': 'GITILES', 68 'repo_type': 'GITILES',
57 'repo_url': 'https://chromium.googlesource.com/chromium/src', 69 'repo_url': 'https://chromium.googlesource.com/chromium/src',
58 'name': 'Chromium browser' 70 'name': 'Chromium browser'
59 }, 71 },
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 r = self.provider.get_config_set_location_async('services/abc').get_result() 189 r = self.provider.get_config_set_location_async('services/abc').get_result()
178 self.assertEqual(r, 'http://example.com') 190 self.assertEqual(r, 'http://example.com')
179 net.json_request_async.assert_called_once_with( 191 net.json_request_async.assert_called_once_with(
180 'https://luci-config.appspot.com/_ah/api/config/v1/mapping', 192 'https://luci-config.appspot.com/_ah/api/config/v1/mapping',
181 scopes=net.EMAIL_SCOPE, 193 scopes=net.EMAIL_SCOPE,
182 params={'config_set': 'services/abc'}) 194 params={'config_set': 'services/abc'})
183 195
184 def test_cron_update_last_good_configs(self): 196 def test_cron_update_last_good_configs(self):
185 self.provider.get_async( 197 self.provider.get_async(
186 'services/foo', 'bar.cfg', store_last_good=True).get_result() 198 'services/foo', 'bar.cfg', store_last_good=True).get_result()
199 self.provider.get_async(
200 'services/foo', 'baz.cfg', dest_type=test_config_pb2.Config,
201 store_last_good=True).get_result()
187 202
188 # Will be removed. 203 # Will be removed.
189 old_cfg = remote.LastGoodConfig( 204 old_cfg = remote.LastGoodConfig(
190 id='projects/old:foo.cfg', 205 id='projects/old:foo.cfg',
191 content_hash='aaaa', 206 content_hash='aaaa',
192 content='content', 207 content='content',
193 last_access_ts=datetime.datetime(2010, 1, 1)) 208 last_access_ts=datetime.datetime(2010, 1, 1))
194 old_cfg.put() 209 old_cfg.put()
195 210
196 remote.cron_update_last_good_configs() 211 remote.cron_update_last_good_configs()
197 212
198 revision, content = self.provider.get_async( 213 revision, config = self.provider.get_async(
199 'services/foo', 'bar.cfg', store_last_good=True).get_result() 214 'services/foo', 'bar.cfg', store_last_good=True).get_result()
200 self.assertEqual(revision, 'aaaabbbb') 215 self.assertEqual(revision, 'aaaabbbb')
201 self.assertEqual(content, 'a config') 216 self.assertEqual(config, 'a config')
217
218 revision, config = self.provider.get_async(
219 'services/foo', 'baz.cfg', dest_type=test_config_pb2.Config,
220 store_last_good=True).get_result()
221 self.assertEqual(revision, 'aaaabbbb')
222 self.assertEqual(config.param, 'qux')
223
224 baz_cfg = remote.LastGoodConfig.get_by_id(id='services/foo:baz.cfg')
225 self.assertIsNotNone(baz_cfg)
226 self.assertEquals(baz_cfg.content_binary, config.SerializeToString())
227
202 self.assertIsNone(old_cfg.key.get()) 228 self.assertIsNone(old_cfg.key.get())
203 229
204 230
205 if __name__ == '__main__': 231 if __name__ == '__main__':
206 if '-v' in sys.argv: 232 if '-v' in sys.argv:
207 unittest.TestCase.maxDiff = None 233 unittest.TestCase.maxDiff = None
208 unittest.main() 234 unittest.main()
OLDNEW
« no previous file with comments | « appengine/components/components/config/remote.py ('k') | appengine/components/components/config/test_config_pb2.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698