Move notifications test into notifications package
This commit is contained in:
parent
ce56031846
commit
5739e2ef4d
3 changed files with 176 additions and 184 deletions
|
@ -67,6 +67,11 @@ class NotificationEvent(object):
|
||||||
|
|
||||||
raise InvalidNotificationEventException('Unable to find event: %s' % eventname)
|
raise InvalidNotificationEventException('Unable to find event: %s' % eventname)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def event_names(cls):
|
||||||
|
for subc in cls.__subclasses__():
|
||||||
|
if subc.event_name() is not None:
|
||||||
|
yield subc.event_name()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_event(cls, eventname):
|
def _get_event(cls, eventname):
|
||||||
|
|
171
notifications/test/test_notifications.py
Normal file
171
notifications/test/test_notifications.py
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from notifications.notificationevent import (BuildSuccessEvent, NotificationEvent,
|
||||||
|
VulnerabilityFoundEvent)
|
||||||
|
from util.morecollections import AttrDict
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('event_kind', NotificationEvent.event_names())
|
||||||
|
def test_create_notifications(event_kind):
|
||||||
|
assert NotificationEvent.get_event(event_kind) is not None
|
||||||
|
|
||||||
|
|
||||||
|
def test_build_emptyjson():
|
||||||
|
notification_data = AttrDict({
|
||||||
|
'event_config_dict': None,
|
||||||
|
})
|
||||||
|
|
||||||
|
# No build data at all.
|
||||||
|
assert BuildSuccessEvent().should_perform({}, notification_data)
|
||||||
|
|
||||||
|
def test_build_nofilter():
|
||||||
|
notification_data = AttrDict({
|
||||||
|
'event_config_dict': {},
|
||||||
|
})
|
||||||
|
|
||||||
|
# No build data at all.
|
||||||
|
assert BuildSuccessEvent().should_perform({}, notification_data)
|
||||||
|
|
||||||
|
# With trigger metadata but no ref.
|
||||||
|
assert BuildSuccessEvent().should_perform({
|
||||||
|
'trigger_metadata': {},
|
||||||
|
}, notification_data)
|
||||||
|
|
||||||
|
# With trigger metadata and a ref.
|
||||||
|
assert BuildSuccessEvent().should_perform({
|
||||||
|
'trigger_metadata': {
|
||||||
|
'ref': 'refs/heads/somebranch',
|
||||||
|
},
|
||||||
|
}, notification_data)
|
||||||
|
|
||||||
|
|
||||||
|
def test_build_emptyfilter():
|
||||||
|
notification_data = AttrDict({
|
||||||
|
'event_config_dict': {"ref-regex": ""},
|
||||||
|
})
|
||||||
|
|
||||||
|
# No build data at all.
|
||||||
|
assert BuildSuccessEvent().should_perform({}, notification_data)
|
||||||
|
|
||||||
|
# With trigger metadata but no ref.
|
||||||
|
assert BuildSuccessEvent().should_perform({
|
||||||
|
'trigger_metadata': {},
|
||||||
|
}, notification_data)
|
||||||
|
|
||||||
|
# With trigger metadata and a ref.
|
||||||
|
assert BuildSuccessEvent().should_perform({
|
||||||
|
'trigger_metadata': {
|
||||||
|
'ref': 'refs/heads/somebranch',
|
||||||
|
},
|
||||||
|
}, notification_data)
|
||||||
|
|
||||||
|
|
||||||
|
def test_build_invalidfilter():
|
||||||
|
notification_data = AttrDict({
|
||||||
|
'event_config_dict': {"ref-regex": "]["},
|
||||||
|
})
|
||||||
|
|
||||||
|
# No build data at all.
|
||||||
|
assert not BuildSuccessEvent().should_perform({}, notification_data)
|
||||||
|
|
||||||
|
# With trigger metadata but no ref.
|
||||||
|
assert not BuildSuccessEvent().should_perform({
|
||||||
|
'trigger_metadata': {},
|
||||||
|
}, notification_data)
|
||||||
|
|
||||||
|
# With trigger metadata and a ref.
|
||||||
|
assert not BuildSuccessEvent().should_perform({
|
||||||
|
'trigger_metadata': {
|
||||||
|
'ref': 'refs/heads/somebranch',
|
||||||
|
},
|
||||||
|
}, notification_data)
|
||||||
|
|
||||||
|
|
||||||
|
def test_build_withfilter():
|
||||||
|
notification_data = AttrDict({
|
||||||
|
'event_config_dict': {"ref-regex": "refs/heads/master"},
|
||||||
|
})
|
||||||
|
|
||||||
|
# No build data at all.
|
||||||
|
assert not BuildSuccessEvent().should_perform({}, notification_data)
|
||||||
|
|
||||||
|
# With trigger metadata but no ref.
|
||||||
|
assert not BuildSuccessEvent().should_perform({
|
||||||
|
'trigger_metadata': {},
|
||||||
|
}, notification_data)
|
||||||
|
|
||||||
|
# With trigger metadata and a not-matching ref.
|
||||||
|
assert not BuildSuccessEvent().should_perform({
|
||||||
|
'trigger_metadata': {
|
||||||
|
'ref': 'refs/heads/somebranch',
|
||||||
|
},
|
||||||
|
}, notification_data)
|
||||||
|
|
||||||
|
# With trigger metadata and a matching ref.
|
||||||
|
assert BuildSuccessEvent().should_perform({
|
||||||
|
'trigger_metadata': {
|
||||||
|
'ref': 'refs/heads/master',
|
||||||
|
},
|
||||||
|
}, notification_data)
|
||||||
|
|
||||||
|
|
||||||
|
def test_build_withwildcardfilter():
|
||||||
|
notification_data = AttrDict({
|
||||||
|
'event_config_dict': {"ref-regex": "refs/heads/.+"},
|
||||||
|
})
|
||||||
|
|
||||||
|
# No build data at all.
|
||||||
|
assert not BuildSuccessEvent().should_perform({}, notification_data)
|
||||||
|
|
||||||
|
# With trigger metadata but no ref.
|
||||||
|
assert not BuildSuccessEvent().should_perform({
|
||||||
|
'trigger_metadata': {},
|
||||||
|
}, notification_data)
|
||||||
|
|
||||||
|
# With trigger metadata and a not-matching ref.
|
||||||
|
assert not BuildSuccessEvent().should_perform({
|
||||||
|
'trigger_metadata': {
|
||||||
|
'ref': 'refs/tags/sometag',
|
||||||
|
},
|
||||||
|
}, notification_data)
|
||||||
|
|
||||||
|
# With trigger metadata and a matching ref.
|
||||||
|
assert BuildSuccessEvent().should_perform({
|
||||||
|
'trigger_metadata': {
|
||||||
|
'ref': 'refs/heads/master',
|
||||||
|
},
|
||||||
|
}, notification_data)
|
||||||
|
|
||||||
|
# With trigger metadata and another matching ref.
|
||||||
|
assert BuildSuccessEvent().should_perform({
|
||||||
|
'trigger_metadata': {
|
||||||
|
'ref': 'refs/heads/somebranch',
|
||||||
|
},
|
||||||
|
}, notification_data)
|
||||||
|
|
||||||
|
|
||||||
|
def test_vulnerability_notification_nolevel():
|
||||||
|
notification_data = AttrDict({
|
||||||
|
'event_config_dict': {},
|
||||||
|
})
|
||||||
|
|
||||||
|
# No level specified.
|
||||||
|
assert VulnerabilityFoundEvent().should_perform({}, notification_data)
|
||||||
|
|
||||||
|
|
||||||
|
def test_vulnerability_notification_nopvulninfo():
|
||||||
|
notification_data = AttrDict({
|
||||||
|
'event_config_dict': {"level": 3},
|
||||||
|
})
|
||||||
|
|
||||||
|
# No vuln info.
|
||||||
|
assert not VulnerabilityFoundEvent().should_perform({}, notification_data)
|
||||||
|
|
||||||
|
|
||||||
|
def test_vulnerability_notification_normal():
|
||||||
|
notification_data = AttrDict({
|
||||||
|
'event_config_dict': {"level": 3},
|
||||||
|
})
|
||||||
|
|
||||||
|
info = {"vulnerability": {"priority": "Critical"}}
|
||||||
|
assert VulnerabilityFoundEvent().should_perform(info, notification_data)
|
|
@ -1,184 +0,0 @@
|
||||||
import unittest
|
|
||||||
|
|
||||||
from notifications.notificationevent import (BuildSuccessEvent, NotificationEvent,
|
|
||||||
VulnerabilityFoundEvent)
|
|
||||||
from util.morecollections import AttrDict
|
|
||||||
|
|
||||||
class TestCreate(unittest.TestCase):
|
|
||||||
def test_create_notifications(self):
|
|
||||||
self.assertIsNotNone(NotificationEvent.get_event('repo_push'))
|
|
||||||
self.assertIsNotNone(NotificationEvent.get_event('build_queued'))
|
|
||||||
self.assertIsNotNone(NotificationEvent.get_event('build_success'))
|
|
||||||
self.assertIsNotNone(NotificationEvent.get_event('build_failure'))
|
|
||||||
self.assertIsNotNone(NotificationEvent.get_event('build_start'))
|
|
||||||
self.assertIsNotNone(NotificationEvent.get_event('build_cancelled'))
|
|
||||||
self.assertIsNotNone(NotificationEvent.get_event('vulnerability_found'))
|
|
||||||
|
|
||||||
|
|
||||||
class TestShouldPerform(unittest.TestCase):
|
|
||||||
def test_build_emptyjson(self):
|
|
||||||
notification_data = AttrDict({
|
|
||||||
'event_config_dict': None,
|
|
||||||
})
|
|
||||||
|
|
||||||
# No build data at all.
|
|
||||||
self.assertTrue(BuildSuccessEvent().should_perform({}, notification_data))
|
|
||||||
|
|
||||||
def test_build_nofilter(self):
|
|
||||||
notification_data = AttrDict({
|
|
||||||
'event_config_dict': {},
|
|
||||||
})
|
|
||||||
|
|
||||||
# No build data at all.
|
|
||||||
self.assertTrue(BuildSuccessEvent().should_perform({}, notification_data))
|
|
||||||
|
|
||||||
# With trigger metadata but no ref.
|
|
||||||
self.assertTrue(BuildSuccessEvent().should_perform({
|
|
||||||
'trigger_metadata': {},
|
|
||||||
}, notification_data))
|
|
||||||
|
|
||||||
# With trigger metadata and a ref.
|
|
||||||
self.assertTrue(BuildSuccessEvent().should_perform({
|
|
||||||
'trigger_metadata': {
|
|
||||||
'ref': 'refs/heads/somebranch',
|
|
||||||
},
|
|
||||||
}, notification_data))
|
|
||||||
|
|
||||||
|
|
||||||
def test_build_emptyfilter(self):
|
|
||||||
notification_data = AttrDict({
|
|
||||||
'event_config_dict': {"ref-regex": ""},
|
|
||||||
})
|
|
||||||
|
|
||||||
# No build data at all.
|
|
||||||
self.assertTrue(BuildSuccessEvent().should_perform({}, notification_data))
|
|
||||||
|
|
||||||
# With trigger metadata but no ref.
|
|
||||||
self.assertTrue(BuildSuccessEvent().should_perform({
|
|
||||||
'trigger_metadata': {},
|
|
||||||
}, notification_data))
|
|
||||||
|
|
||||||
# With trigger metadata and a ref.
|
|
||||||
self.assertTrue(BuildSuccessEvent().should_perform({
|
|
||||||
'trigger_metadata': {
|
|
||||||
'ref': 'refs/heads/somebranch',
|
|
||||||
},
|
|
||||||
}, notification_data))
|
|
||||||
|
|
||||||
|
|
||||||
def test_build_invalidfilter(self):
|
|
||||||
notification_data = AttrDict({
|
|
||||||
'event_config_dict': {"ref-regex": "]["},
|
|
||||||
})
|
|
||||||
|
|
||||||
# No build data at all.
|
|
||||||
self.assertFalse(BuildSuccessEvent().should_perform({}, notification_data))
|
|
||||||
|
|
||||||
# With trigger metadata but no ref.
|
|
||||||
self.assertFalse(BuildSuccessEvent().should_perform({
|
|
||||||
'trigger_metadata': {},
|
|
||||||
}, notification_data))
|
|
||||||
|
|
||||||
# With trigger metadata and a ref.
|
|
||||||
self.assertFalse(BuildSuccessEvent().should_perform({
|
|
||||||
'trigger_metadata': {
|
|
||||||
'ref': 'refs/heads/somebranch',
|
|
||||||
},
|
|
||||||
}, notification_data))
|
|
||||||
|
|
||||||
|
|
||||||
def test_build_withfilter(self):
|
|
||||||
notification_data = AttrDict({
|
|
||||||
'event_config_dict': {"ref-regex": "refs/heads/master"},
|
|
||||||
})
|
|
||||||
|
|
||||||
# No build data at all.
|
|
||||||
self.assertFalse(BuildSuccessEvent().should_perform({}, notification_data))
|
|
||||||
|
|
||||||
# With trigger metadata but no ref.
|
|
||||||
self.assertFalse(BuildSuccessEvent().should_perform({
|
|
||||||
'trigger_metadata': {},
|
|
||||||
}, notification_data))
|
|
||||||
|
|
||||||
# With trigger metadata and a not-matching ref.
|
|
||||||
self.assertFalse(BuildSuccessEvent().should_perform({
|
|
||||||
'trigger_metadata': {
|
|
||||||
'ref': 'refs/heads/somebranch',
|
|
||||||
},
|
|
||||||
}, notification_data))
|
|
||||||
|
|
||||||
# With trigger metadata and a matching ref.
|
|
||||||
self.assertTrue(BuildSuccessEvent().should_perform({
|
|
||||||
'trigger_metadata': {
|
|
||||||
'ref': 'refs/heads/master',
|
|
||||||
},
|
|
||||||
}, notification_data))
|
|
||||||
|
|
||||||
|
|
||||||
def test_build_withwildcardfilter(self):
|
|
||||||
notification_data = AttrDict({
|
|
||||||
'event_config_dict': {"ref-regex": "refs/heads/.+"},
|
|
||||||
})
|
|
||||||
|
|
||||||
# No build data at all.
|
|
||||||
self.assertFalse(BuildSuccessEvent().should_perform({}, notification_data))
|
|
||||||
|
|
||||||
# With trigger metadata but no ref.
|
|
||||||
self.assertFalse(BuildSuccessEvent().should_perform({
|
|
||||||
'trigger_metadata': {},
|
|
||||||
}, notification_data))
|
|
||||||
|
|
||||||
# With trigger metadata and a not-matching ref.
|
|
||||||
self.assertFalse(BuildSuccessEvent().should_perform({
|
|
||||||
'trigger_metadata': {
|
|
||||||
'ref': 'refs/tags/sometag',
|
|
||||||
},
|
|
||||||
}, notification_data))
|
|
||||||
|
|
||||||
# With trigger metadata and a matching ref.
|
|
||||||
self.assertTrue(BuildSuccessEvent().should_perform({
|
|
||||||
'trigger_metadata': {
|
|
||||||
'ref': 'refs/heads/master',
|
|
||||||
},
|
|
||||||
}, notification_data))
|
|
||||||
|
|
||||||
# With trigger metadata and another matching ref.
|
|
||||||
self.assertTrue(BuildSuccessEvent().should_perform({
|
|
||||||
'trigger_metadata': {
|
|
||||||
'ref': 'refs/heads/somebranch',
|
|
||||||
},
|
|
||||||
}, notification_data))
|
|
||||||
|
|
||||||
|
|
||||||
def test_vulnerability_notification_nolevel(self):
|
|
||||||
notification_data = AttrDict({
|
|
||||||
'event_config_dict': {},
|
|
||||||
})
|
|
||||||
|
|
||||||
# No level specified.
|
|
||||||
self.assertTrue(VulnerabilityFoundEvent().should_perform({}, notification_data))
|
|
||||||
|
|
||||||
|
|
||||||
def test_vulnerability_notification_nopvulninfo(self):
|
|
||||||
notification_data = AttrDict({
|
|
||||||
'event_config_dict': {"level": 3},
|
|
||||||
})
|
|
||||||
|
|
||||||
# No vuln info.
|
|
||||||
self.assertFalse(VulnerabilityFoundEvent().should_perform({}, notification_data))
|
|
||||||
|
|
||||||
|
|
||||||
def test_vulnerability_notification_normal(self):
|
|
||||||
notification_data = AttrDict({
|
|
||||||
'event_config_dict': {"level": 3},
|
|
||||||
})
|
|
||||||
|
|
||||||
info = {"vulnerability": {"priority": "Critical"}}
|
|
||||||
self.assertTrue(VulnerabilityFoundEvent().should_perform(info, notification_data))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
unittest.main()
|
|
||||||
|
|
Reference in a new issue