def test_metadata(self): rule_set = validation.RuleSet() self.mock(validation, 'DEFAULT_RULE_SET', rule_set) validation.rule('projects/foo', 'bar.cfg', rule_set=rule_set) validation.rule('services/foo', 'foo.cfg', rule_set=rule_set) self.mock(auth, 'is_admin', lambda: True) resp = self.call_api('get_metadata', {}).json_body self.assertEqual( resp, { 'version': '1.0', 'validation': { 'url': 'https://localhost:80/_ah/api/config/v1/validate', 'patterns': [ { 'config_set': 'projects/foo', 'path': 'bar.cfg' }, { 'config_set': 'services/foo', 'path': 'foo.cfg' }, ], }, })
def test_remove_rule(self): rule = validation.rule( 'projects/foo', 'bar.cfg', test_config_pb2.Config, rule_set=self.rule_set) with self.assertRaises(ValueError): self.rule_set.validate('projects/foo', 'bar.cfg', 'invalid config') rule.remove() self.rule_set.validate('projects/foo', 'bar.cfg', 'invalid config')
def test_remove_rule(self): rule = validation.rule('projects/foo', 'bar.cfg', test_config_pb2.Config, rule_set=self.rule_set) with self.assertRaises(ValueError): self.rule_set.validate('projects/foo', 'bar.cfg', 'invalid config') rule.remove() self.rule_set.validate('projects/foo', 'bar.cfg', 'invalid config')
def test_metadata(self): rule_set = validation.RuleSet() self.mock(endpoint, 'get_default_rule_set', lambda: rule_set) validation.rule('projects/foo', 'bar.cfg', rule_set=rule_set) validation.rule('services/foo', 'foo.cfg', rule_set=rule_set) self.mock(auth, 'is_admin', lambda: True) resp = self.call_api('get_metadata', {}).json_body self.assertEqual( resp, { 'version': '1.0', 'validation': { 'url': 'https://localhost:80/_ah/api/config/v1/validate', 'patterns': [ {'config_set': 'projects/foo', 'path': 'bar.cfg'}, {'config_set': 'services/foo', 'path': 'foo.cfg'}, ], }, } )
def test_regex_pattern_and_no_dest_type(self): rule = validation.rule( config_set='regex:projects/f[^/]+', path='regex:.+.yaml', rule_set=self.rule_set) def validate_yaml(cfg, ctx): try: yaml.safe_load(cfg) except Exception as ex: ctx.error(ex) rule(validate_yaml) self.rule_set.validate('projects/foo', 'bar.cfg', '}{') self.rule_set.validate('projects/bar', 'bar.yaml', '}{') self.rule_set.validate('projects/foo', 'bar.yaml', '{}') with self.assertRaises(ValueError): self.rule_set.validate('projects/foo', 'bar.yaml', '}{')
def test_regex_pattern_and_no_dest_type(self): rule = validation.rule(config_set='regex:projects/f[^/]+', path='regex:.+.yaml', rule_set=self.rule_set) def validate_yaml(cfg, ctx): try: yaml.safe_load(cfg) except Exception as ex: ctx.error('%s', ex) rule(validate_yaml) self.rule_set.validate('projects/foo', 'bar.cfg', '}{') self.rule_set.validate('projects/bar', 'bar.yaml', '}{') self.rule_set.validate('projects/foo', 'bar.yaml', '{}') with self.assertRaises(ValueError): self.rule_set.validate('projects/foo', 'bar.yaml', '}{')
def test_rule(self): validating_func = mock.Mock() rule = validation.rule( 'projects/foo', 'bar.cfg', test_config_pb2.Config, rule_set=self.rule_set) rule(validating_func) self.rule_set.validate('projects/foo', 'bar.cfg', 'param: "valid config"') with self.assertRaises(ValueError): self.rule_set.validate('projects/foo', 'bar.cfg', 'wrong123') self.assertEqual(validating_func.call_count, 1) validating_func.side_effect = lambda cfg, ctx: ctx.error('bad') with self.assertRaises(ValueError): self.rule_set.validate('projects/foo', 'bar.cfg', 'param: "valid config"') # Different config_set/path self.rule_set.validate('projects/foo', 'baz.cfg', 'wrong') self.rule_set.validate('projects/baz', 'bar.cfg', 'wrong')
def test_rule(self): validating_func = mock.Mock() rule = validation.rule('projects/foo', 'bar.cfg', test_config_pb2.Config, rule_set=self.rule_set) rule(validating_func) self.rule_set.validate('projects/foo', 'bar.cfg', 'param: "valid config"') with self.assertRaises(ValueError): self.rule_set.validate('projects/foo', 'bar.cfg', 'wrong123') self.assertEqual(validating_func.call_count, 1) validating_func.side_effect = lambda cfg, ctx: ctx.error('bad') with self.assertRaises(ValueError): self.rule_set.validate('projects/foo', 'bar.cfg', 'param: "valid config"') # Different config_set/path self.rule_set.validate('projects/foo', 'baz.cfg', 'wrong') self.rule_set.validate('projects/baz', 'bar.cfg', 'wrong')
def test_patterns(self): validation.rule( 'projects/foo', 'bar.cfg', test_config_pb2.Config, rule_set=self.rule_set) validation.rule( 'services/foo', 'foo.cfg', test_config_pb2.Config, rule_set=self.rule_set) validation.rule( 'services/foo', 'foo.cfg', test_config_pb2.Config, rule_set=self.rule_set) self.assertEqual( self.rule_set.patterns(), { validation.ConfigPattern('projects/foo', 'bar.cfg'), validation.ConfigPattern('services/foo', 'foo.cfg'), validation.ConfigPattern('services/foo', 'foo.cfg'), } )
def test_patterns(self): validation.rule('projects/foo', 'bar.cfg', test_config_pb2.Config, rule_set=self.rule_set) validation.rule('services/foo', 'foo.cfg', test_config_pb2.Config, rule_set=self.rule_set) validation.rule('services/foo', 'foo.cfg', test_config_pb2.Config, rule_set=self.rule_set) self.assertEqual( self.rule_set.patterns(), { validation.ConfigPattern('projects/foo', 'bar.cfg'), validation.ConfigPattern('services/foo', 'foo.cfg'), validation.ConfigPattern('services/foo', 'foo.cfg'), })