def test_consolidate_query_filter(self): session_factory = self.replay_flight_data('test_emr_query_ids') ctx = Bag(session_factory=session_factory, log_dir='', options=Config.empty()) query = { 'query': [{ 'tag:foo': 'val1' }, { 'tag:foo': 'val2' }, { 'tag:bar': 'val3' }] } mgr = emr.EMRCluster(ctx, query) self.assertEqual(mgr.consolidate_query_filter(), [{ 'Values': ['val1', 'val2'], 'Name': 'tag:foo' }, { 'Values': ['val3'], 'Name': 'tag:bar' }])
def get_s3_output(self): output = S3Output( ExecutionContext( None, Bag(name="xyz"), Config.empty(output_dir="s3://cloud-custodian/policies"))) self.addCleanup(shutil.rmtree, output.root_dir) return output
def test_get_emr_by_ids(self): session_factory = self.replay_flight_data('test_emr_query_ids') ctx = Bag(session_factory=session_factory, log_dir='', options=Config.empty()) mgr = emr.EMRCluster(ctx, {}) resources = mgr.get_resources(["j-1EJMJNTXC63JW"]) self.assertEqual(resources[0]['Id'], "j-1EJMJNTXC63JW")
def test_event_filter(self): b = Bag(data={'mode': []}) event = event_data('event-instance-state.json') f = {'type': 'event', 'key': 'detail.state', 'value': 'pending'} ef = filters.factory(f, b) self.assertTrue(ef.process([instance()], event)) # event is None self.assertEqual(ef.process('resources'), 'resources') # event is not None, but is not "true" either self.assertEqual(ef.process('resources', []), [])
def test_resource_permissions(self): self.capture_logging('c7n.cache') missing = [] cfg = Config.empty() for k, v in manager.resources.items(): p = Bag({'name': 'permcheck', 'resource': k}) ctx = self.get_context(config=cfg, policy=p) mgr = v(ctx, p) perms = mgr.get_permissions() if not perms: missing.append(k) for n, a in v.action_registry.items(): p['actions'] = [n] perms = a({}, mgr).get_permissions() found = bool(perms) if not isinstance(perms, (list, tuple, set)): found = False if not found: missing.append("%s.actions.%s" % ( k, n)) for n, f in v.filter_registry.items(): if n in ('and', 'or', 'not'): continue p['filters'] = [n] perms = f({}, mgr).get_permissions() if not isinstance(perms, (tuple, list, set)): missing.append("%s.filters.%s" % ( k, n)) # in memory filters if n in ('event', 'value', 'tag-count', 'marked-for-op', 'offhour', 'onhour', 'age', 'state-age', 'egress', 'ingress', 'capacity-delta', 'is-ssl', 'global-grants', 'missing-policy-statement', 'missing-statement', 'healthcheck-protocol-mismatch', 'image-age', 'has-statement', 'instance-age', 'ephemeral', 'instance-uptime'): continue if not perms: missing.append("%s.filters.%s" % ( k, n)) if missing: self.fail("Missing permissions %d on \n\t%s" % ( len(missing), "\n\t".join(sorted(missing))))
def test_consolidate_query_filter(self): session_factory = self.replay_flight_data('test_emr_query_ids') ctx = Bag(session_factory=session_factory, log_dir='', options=Config.empty()) query = { 'query': [{ 'tag:foo': 'val1' }, { 'tag:foo': 'val2' }, { 'tag:bar': 'val3' }] } mgr = emr.EMRCluster(ctx, query) self.assertEqual( mgr.consolidate_query_filter(), [ { 'Values': ['val1', 'val2'], 'Name': 'tag:foo' }, { 'Values': ['val3'], 'Name': 'tag:bar' }, # default query { 'Values': ['WAITING', 'RUNNING', 'BOOTSTRAPPING'], 'Name': 'ClusterStates', }, ]) query = { 'query': [ { 'tag:foo': 'val1' }, { 'tag:foo': 'val2' }, { 'tag:bar': 'val3' }, { 'ClusterStates': 'terminated' }, ] } mgr = emr.EMRCluster(ctx, query) self.assertEqual( mgr.consolidate_query_filter(), [ { 'Values': ['val1', 'val2'], 'Name': 'tag:foo' }, { 'Values': ['val3'], 'Name': 'tag:bar' }, # verify default is overridden { 'Values': ['terminated'], 'Name': 'ClusterStates', }, ])
def get_values_from(self, data, content): mgr = Bag({'session_factory': None, '_cache': None}) values = ValuesFrom(data, mgr) values.resolver = FakeResolver(content) return values
def test_event_no_mode(self): b = Bag(data={'resource': 'something'}) f = {'type': 'event', 'key': 'detail.state', 'value': 'pending'} self.assertRaises(base_filters.FilterValidationError, filters.factory, f, b)
def get_manager(self, data, config=None, session_factory=None): ctx = ExecutionContext(session_factory, Bag({'name': 'test-policy'}), config or Config.empty()) return EC2(ctx, data)