def test_instance_age(self): data = { 'policies': [ {'name': 'ancient-instances', 'resource': 'ec2', 'query': [{'instance-state-name': 'running'}], 'filters': [{'days': 60, 'type': 'instance-age'}] }]} schema = generate(['ec2']) validator = Validator(schema) errors = list(validator.iter_errors(data)) self.assertEqual(len(errors), 0)
def test_runtime(self): data = lambda runtime: { 'policies': [{ 'name': 'test', 'resource': 's3', 'mode': { 'type': 'periodic', 'runtime': runtime}}] } errors_with = lambda r: list(Validator(generate()).iter_errors(data(r))) self.assertEqual(len(errors_with('python2.7')), 0) self.assertEqual(len(errors_with('python3.6')), 0) self.assertEqual(len(errors_with('python4.5')), 1)
def test_instance_age(self): data = { "policies": [ { "name": "ancient-instances", "resource": "ec2", "query": [{"instance-state-name": "running"}], "filters": [{"days": 60, "type": "instance-age"}], } ] } schema = generate(["ec2"]) validator = Validator(schema) errors = list(validator.iter_errors(data)) self.assertEqual(len(errors), 0)
def test_value_filter_short_form_invalid(self): for rtype in ["elb", "rds", "ec2"]: data = { 'policies': [ {'name': 'instance-policy', 'resource': 'elb', 'filters': [ {"tag:Role": "webserver"}]} ]} schema = generate([rtype]) # Disable standard value short form schema['definitions']['filters']['valuekv'] = {'type': 'number'} validator = Validator(schema) errors = list(validator.iter_errors(data)) self.assertEqual(len(errors), 1)
def test_mark_for_op(self): data = { "policies": [ { "name": "ebs-mark-delete", "resource": "ebs", "filters": [], "actions": [{"type": "mark-for-op", "op": "delete", "days": 30}], } ] } schema = generate(["ebs"]) validator = Validator(schema) errors = list(validator.iter_errors(data)) self.assertEqual(len(errors), 0)
def test_mark_for_op(self): data = { 'policies': [{ 'name': 'ebs-mark-delete', 'resource': 'ebs', 'filters': [], 'actions': [{ 'type': 'mark-for-op', 'op': 'delete', 'days': 30}]}] } schema = generate(['ebs']) validator = Validator(schema) errors = list(validator.iter_errors(data)) self.assertEqual(len(errors), 0)
def test_value_filter_short_form_invalid(self): for rtype in ["elb", "rds", "ec2"]: data = { "policies": [ { "name": "instance-policy", "resource": "elb", "filters": [{"tag:Role": "webserver"}], } ] } schema = generate([rtype]) # Disable standard value short form schema["definitions"]["filters"]["valuekv"] = {"type": "number"} validator = Validator(schema) errors = list(validator.iter_errors(data)) self.assertEqual(len(errors), 1)
def test_offhours_stop(self): data = { 'policies': [ {'name': 'ec2-offhours-stop', 'resource': 'ec2', 'filters': [ {'tag:aws:autoscaling:groupName': 'absent'}, {'type': 'offhour', 'tag': 'c7n_downtime', 'default_tz': 'et', 'offhour': 19}] }] } schema = generate(['ec2']) validator = Validator(schema) errors = list(validator.iter_errors(data)) self.assertEqual(len(errors), 0)
def test_runtime(self): data = lambda runtime: { # NOQA "policies": [ { "name": "test", "resource": "s3", "mode": { "execution-options": {"metrics_enabled": False}, "type": "periodic", "schedule": "xyz", "runtime": runtime, }, } ] } errors_with = lambda r: list( # NOQA Validator(generate()).iter_errors(data(r))) self.assertEqual(len(errors_with("python2.7")), 0) self.assertEqual(len(errors_with("python3.6")), 0) self.assertEqual(len(errors_with("python4.5")), 1)
def test_runtime(self): data = lambda runtime: { 'policies': [{ 'name': 'test', 'resource': 's3', 'mode': { 'execution-options': { 'metrics_enabled': False }, 'type': 'periodic', 'schedule': 'xyz', 'runtime': runtime } }] } errors_with = lambda r: list( Validator(generate()).iter_errors(data(r))) self.assertEqual(len(errors_with('python2.7')), 0) self.assertEqual(len(errors_with('python3.6')), 0) self.assertEqual(len(errors_with('python4.5')), 1)
def test_offhours_stop(self): data = { "policies": [ { "name": "ec2-offhours-stop", "resource": "ec2", "filters": [ {"tag:aws:autoscaling:groupName": "absent"}, { "type": "offhour", "tag": "c7n_downtime", "default_tz": "et", "offhour": 19, }, ], } ] } schema = generate(["ec2"]) validator = Validator(schema) errors = list(validator.iter_errors(data)) self.assertEqual(len(errors), 0)
def setUp(self): if not self.validator: self.validator = Validator(generate())