OLD | NEW |
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 Loading... |
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 Loading... |
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() |
OLD | NEW |