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

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

Issue 1224913002: luci-config: fine-grained acls (Closed) Base URL: git@github.com:luci/luci-py.git@master
Patch Set: identities in configs 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
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2015 The Swarming Authors. All rights reserved. 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 3 # Use of this source code is governed by the Apache v2.0 license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import logging 6 import logging
7 import re 7 import re
8 import sys 8 import sys
9 import unittest 9 import unittest
10 import yaml 10 import yaml
(...skipping 26 matching lines...) Expand all
37 self.assertEqual(validating_func.call_count, 1) 37 self.assertEqual(validating_func.call_count, 1)
38 38
39 validating_func.side_effect = lambda cfg, ctx: ctx.error('bad') 39 validating_func.side_effect = lambda cfg, ctx: ctx.error('bad')
40 with self.assertRaises(ValueError): 40 with self.assertRaises(ValueError):
41 self.rule_set.validate('projects/foo', 'bar.cfg', 'param: "valid config"') 41 self.rule_set.validate('projects/foo', 'bar.cfg', 'param: "valid config"')
42 42
43 # Different config_set/path 43 # Different config_set/path
44 self.rule_set.validate('projects/foo', 'baz.cfg', 'wrong') 44 self.rule_set.validate('projects/foo', 'baz.cfg', 'wrong')
45 self.rule_set.validate('projects/baz', 'bar.cfg', 'wrong') 45 self.rule_set.validate('projects/baz', 'bar.cfg', 'wrong')
46 46
47 def test_patterns(self):
48 validation.rule(
49 'projects/foo', 'bar.cfg', test_config_pb2.Config,
50 rule_set=self.rule_set)
51 validation.rule(
52 'services/foo', 'foo.cfg', test_config_pb2.Config,
53 rule_set=self.rule_set)
54 validation.rule(
55 'services/foo', 'foo.cfg', test_config_pb2.Config,
56 rule_set=self.rule_set)
57 self.assertEqual(
58 self.rule_set.patterns(),
59 {
60 validation.ConfigPattern('projects/foo', 'bar.cfg'),
61 validation.ConfigPattern('services/foo', 'foo.cfg'),
62 validation.ConfigPattern('services/foo', 'foo.cfg'),
63 }
64 )
65
47 def test_context_metadata(self): 66 def test_context_metadata(self):
48 ctx = validation.Context() 67 ctx = validation.Context()
49 68
50 ctx.config_set = 'services/foo' 69 ctx.config_set = 'services/foo'
51 self.assertEqual(ctx.service_id, 'foo') 70 self.assertEqual(ctx.service_id, 'foo')
52 self.assertEqual(ctx.project_id, None) 71 self.assertEqual(ctx.project_id, None)
53 self.assertEqual(ctx.ref, None) 72 self.assertEqual(ctx.ref, None)
54 73
55 ctx.config_set = 'projects/foo' 74 ctx.config_set = 'projects/foo'
56 self.assertEqual(ctx.service_id, None) 75 self.assertEqual(ctx.service_id, None)
57 self.assertEqual(ctx.project_id, 'foo') 76 self.assertEqual(ctx.project_id, 'foo')
58 self.assertEqual(ctx.ref, None) 77 self.assertEqual(ctx.ref, None)
59 78
60 ctx.config_set = 'projects/foo/refs/a' 79 ctx.config_set = 'projects/foo/refs/a'
61 self.assertEqual(ctx.service_id, None) 80 self.assertEqual(ctx.service_id, None)
62 self.assertEqual(ctx.project_id, 'foo') 81 self.assertEqual(ctx.project_id, 'foo')
63 self.assertEqual(ctx.ref, 'refs/a') 82 self.assertEqual(ctx.ref, 'refs/a')
64 83
65 def test_regex_pattern_and_no_dest_type(self): 84 def test_regex_pattern_and_no_dest_type(self):
66 rule = validation.rule( 85 rule = validation.rule(
67 config_set=re.compile('^projects/f[^/]+$').match, 86 config_set='regex:projects/f[^/]+',
68 path=lambda p: p.endswith('.yaml'), 87 path='regex:.+.yaml',
69 rule_set=self.rule_set) 88 rule_set=self.rule_set)
70 def validate_yaml(cfg, ctx): 89 def validate_yaml(cfg, ctx):
71 try: 90 try:
72 yaml.safe_load(cfg) 91 yaml.safe_load(cfg)
73 except Exception as ex: 92 except Exception as ex:
74 ctx.error(ex) 93 ctx.error(ex)
75 rule(validate_yaml) 94 rule(validate_yaml)
76 95
77 self.rule_set.validate('projects/foo', 'bar.cfg', '}{') 96 self.rule_set.validate('projects/foo', 'bar.cfg', '}{')
78 self.rule_set.validate('projects/bar', 'bar.yaml', '}{') 97 self.rule_set.validate('projects/bar', 'bar.yaml', '}{')
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 rule = validation.rule( 131 rule = validation.rule(
113 'projects/foo', 'bar.cfg', test_config_pb2.Config, 132 'projects/foo', 'bar.cfg', test_config_pb2.Config,
114 rule_set=self.rule_set) 133 rule_set=self.rule_set)
115 134
116 with self.assertRaises(ValueError): 135 with self.assertRaises(ValueError):
117 self.rule_set.validate('projects/foo', 'bar.cfg', 'invalid config') 136 self.rule_set.validate('projects/foo', 'bar.cfg', 'invalid config')
118 137
119 rule.remove() 138 rule.remove()
120 self.rule_set.validate('projects/foo', 'bar.cfg', 'invalid config') 139 self.rule_set.validate('projects/foo', 'bar.cfg', 'invalid config')
121 140
141 def test_compile_pattern(self):
142 self.assertTrue(validation.compile_pattern('abc')('abc'))
143 self.assertTrue(validation.compile_pattern('text:abc')('abc'))
144 self.assertFalse(validation.compile_pattern('text:abc')('abcd'))
145
146 self.assertTrue(validation.compile_pattern('regex:abc')('abc'))
147 self.assertTrue(validation.compile_pattern('regex:\w+')('abc'))
148 self.assertTrue(validation.compile_pattern('regex:^(\w+)c$')('abc'))
149 self.assertFalse(validation.compile_pattern('regex:\d+')('a123b'))
150
122 151
123 if __name__ == '__main__': 152 if __name__ == '__main__':
124 if '-v' in sys.argv: 153 if '-v' in sys.argv:
125 unittest.TestCase.maxDiff = None 154 unittest.TestCase.maxDiff = None
126 unittest.main() 155 unittest.main()
OLDNEW
« no previous file with comments | « appengine/components/components/config/validation.py ('k') | appengine/components/components/net.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698