Пример #1
0
    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'
                        },
                    ],
                },
            })
Пример #2
0
  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')
Пример #3
0
    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')
Пример #4
0
  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'},
            ],
          },
        }
    )
Пример #5
0
  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', '}{')
Пример #6
0
    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', '}{')
Пример #7
0
  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')
Пример #8
0
    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')
Пример #9
0
 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'),
     }
   )
Пример #10
0
 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'),
         })