def test_should_fire(self): config = dict(name='test_trigger', expiration='$last + 1d', distinguished_by=['instance_id'], fire_pipeline='test_pipeline', fire_criteria=[dict(event_type='test.thing')], match_criteria=[dict(event_type='test.*')]) tdef = definition.TriggerDefinition(config, self.debug_manager) events1 = [ dict(event_type='test.foobar'), dict(event_type='test.thing'), dict(event_type='test.thing') ] events2 = [ dict(event_type='test.foobar'), dict(event_type='test.thing') ] events3 = [ dict(event_type='test.foobar'), dict(event_type='test.whatsit') ] self.assertTrue(tdef.should_fire(events1)) self.assertTrue(tdef.should_fire(events2)) self.assertFalse(tdef.should_fire(events3)) config = dict(name='test_trigger', expiration='$last + 1d', distinguished_by=['instance_id'], fire_pipeline='test_pipeline', fire_criteria=[dict(event_type='test.thing', number=2)], match_criteria=[dict(event_type='test.*')]) tdef = definition.TriggerDefinition(config, self.debug_manager) self.assertTrue(tdef.should_fire(events1)) self.assertFalse(tdef.should_fire(events2)) self.assertFalse(tdef.should_fire(events3))
def test_match_for_criteria(self): config = dict(name='test_trigger', expiration='$last + 1d', fire_pipeline='test_pipeline', fire_criteria=[dict(event_type='test.thing')], match_criteria=[dict(event_type='test.*')]) tdef = definition.TriggerDefinition(config, self.debug_manager) event1 = dict(event_type='test.thing') event2 = dict(event_type='other.thing') self.assertTrue(tdef.match(event1)) self.assertFalse(tdef.match(event2)) config = dict(name='test_trigger', expiration='$last + 1d', fire_pipeline='test_pipeline', fire_criteria=[dict(event_type='test.thing')], match_criteria=[dict(event_type='test.*'), dict(event_type='other.*')]) tdef = definition.TriggerDefinition(config, self.debug_manager) self.assertTrue(tdef.match(event1)) self.assertTrue(tdef.match(event2))
def test_match_for_distinguished_traits(self): config = dict(name='test_trigger', expiration='$last + 1d', distinguished_by=['instance_id'], fire_pipeline='test_pipeline', fire_criteria=[dict(event_type='test.thing')], match_criteria=[dict(event_type='test.*')]) tdef = definition.TriggerDefinition(config, self.debug_manager) event1 = dict(event_type='test.thing', instance_id='foo') event2 = dict(event_type='test.thing') self.assertTrue(tdef.match(event1)) self.assertFalse(tdef.match(event2))
def test_get_fire_timestamp(self): config = dict(name='test_trigger', expiration='$last + 1d', distinguished_by=['instance_id'], fire_pipeline='test_pipeline', fire_criteria=[dict(event_type='test.thing')], match_criteria=[dict(event_type='test.*')]) tdef = definition.TriggerDefinition(config, self.debug_manager) test_time = datetime.datetime(2014, 8, 1, 20, 4, 23, 444) test_time_plus_1hr = datetime.datetime(2014, 8, 1, 21, 4, 23, 444) ft = tdef.get_fire_timestamp(test_time) self.assertEqual(ft, test_time) config = dict(name='test_trigger', expiration='$last + 1d', fire_delay=3600, distinguished_by=['instance_id'], fire_pipeline='test_pipeline', fire_criteria=[dict(event_type='test.thing')], match_criteria=[dict(event_type='test.*')]) tdef = definition.TriggerDefinition(config, self.debug_manager) ft = tdef.get_fire_timestamp(test_time) self.assertEqual(ft, test_time_plus_1hr)
def test_get_distinguished_traits(self): config = dict(name='test_trigger', expiration='$last + 1d', distinguished_by=['instance_id'], fire_pipeline='test_pipeline', fire_criteria=[dict(event_type='test.thing')], match_criteria=[dict(event_type='test.*')]) event1 = dict(event_type='test.thing', instance_id='foo') tdef = definition.TriggerDefinition(config, self.debug_manager) mcriteria = tdef.match(event1) dt = tdef.get_distinguishing_traits(event1, mcriteria) self.assertEqual(len(dt), 1) self.assertIn('instance_id', dt) self.assertEqual(dt['instance_id'], 'foo')
def test_get_distinguished_traits_with_timeexpression(self): config = dict(name='test_trigger', expiration='$last + 1d', distinguished_by=['instance_id', dict(timestamp='day')], fire_pipeline='test_pipeline', fire_criteria=[dict(event_type='test.thing')], match_criteria=[dict(event_type='test.*')]) event1 = dict(event_type='test.thing', instance_id='foo', timestamp=datetime.datetime(2014, 8, 1, 20, 4, 23, 444)) tdef = definition.TriggerDefinition(config, self.debug_manager) mcriteria = tdef.match(event1) dt = tdef.get_distinguishing_traits(event1, mcriteria) self.assertEqual(len(dt), 2) self.assertIn('instance_id', dt) self.assertEqual(dt['instance_id'], 'foo') timerange = timex.TimeRange(datetime.datetime(2014, 8, 1, 0, 0, 0, 0), datetime.datetime(2014, 8, 2, 0, 0, 0, 0)) self.assertIn('timestamp', dt) self.assertIsInstance(dt['timestamp'], timex.TimeRange) self.assertEqual(dt['timestamp'].begin, timerange.begin) self.assertEqual(dt['timestamp'].end, timerange.end)
def test_config_error_check_and_defaults(self): with self.assertRaises(definition.DefinitionError): definition.TriggerDefinition(dict(), self.debug_manager) with self.assertRaises(definition.DefinitionError): definition.TriggerDefinition(dict(name='test_trigger'), self.debug_manager) with self.assertRaises(definition.DefinitionError): definition.TriggerDefinition( dict(name='test_trigger', expiration='$last + 1d'), self.debug_manager) with self.assertRaises(definition.DefinitionError): definition.TriggerDefinition( dict(name='test_trigger', expiration='$last + 1d', fire_pipeline='test_pipeline'), self.debug_manager) with self.assertRaises(definition.DefinitionError): definition.TriggerDefinition( dict(name='test_trigger', expiration='$last + 1d', fire_pipeline='test_pipeline', fire_criteria=[dict(event_type='test.thing')]), self.debug_manager) tdef = definition.TriggerDefinition( dict(name='test_trigger', expiration='$last + 1d', fire_pipeline='test_pipeline', fire_criteria=[dict(event_type='test.thing')], match_criteria=[dict(event_type='test.*')]), self.debug_manager) self.assertEqual(len(tdef.distinguished_by), 0) self.assertEqual(len(tdef.fire_criteria), 1) self.assertIsInstance(tdef.fire_criteria[0], definition.Criteria) self.assertEqual(len(tdef.match_criteria), 1) self.assertIsInstance(tdef.match_criteria[0], definition.Criteria) self.assertEqual(tdef.fire_delay, 0) self.assertEqual(len(tdef.load_criteria), 0)