Refactors the default notification option. Also ensures that notifications and destinations are easier to test. (#437)
This commit is contained in:
parent
72a390c563
commit
96e42c793e
|
@ -153,9 +153,10 @@ def install_plugins(app):
|
||||||
"""
|
"""
|
||||||
Installs new issuers that are not currently bundled with Lemur.
|
Installs new issuers that are not currently bundled with Lemur.
|
||||||
|
|
||||||
:param settings:
|
:param app:
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
from lemur.plugins import plugins
|
||||||
from lemur.plugins.base import register
|
from lemur.plugins.base import register
|
||||||
# entry_points={
|
# entry_points={
|
||||||
# 'lemur.plugins': [
|
# 'lemur.plugins': [
|
||||||
|
@ -170,3 +171,11 @@ def install_plugins(app):
|
||||||
app.logger.error("Failed to load plugin %r:\n%s\n" % (ep.name, traceback.format_exc()))
|
app.logger.error("Failed to load plugin %r:\n%s\n" % (ep.name, traceback.format_exc()))
|
||||||
else:
|
else:
|
||||||
register(plugin)
|
register(plugin)
|
||||||
|
|
||||||
|
# ensure that we have some way to notify
|
||||||
|
with app.app_context():
|
||||||
|
try:
|
||||||
|
slug = app.config.get("LEMUR_DEFAULT_NOTIFICATION_PLUGIN", "email-notification")
|
||||||
|
plugins.get(slug)
|
||||||
|
except KeyError:
|
||||||
|
raise Exception("Unable to location notification plugin: {slug}. Ensure that LEMUR_DEFAULT_NOTIFICATION_PLUGIN is set to a valid and installed notification plugin.".format(slug=slug))
|
||||||
|
|
|
@ -236,7 +236,7 @@ def create_default_expiration_notifications(name, recipients):
|
||||||
inter.extend(options)
|
inter.extend(options)
|
||||||
n = create(
|
n = create(
|
||||||
label="{name}_{interval}_DAY".format(name=name, interval=i),
|
label="{name}_{interval}_DAY".format(name=name, interval=i),
|
||||||
plugin_name="email-notification",
|
plugin_name=current_app.config.get("LEMUR_DEFAULT_NOTIFICATION_PLUGIN", "email-notification"),
|
||||||
options=list(inter),
|
options=list(inter),
|
||||||
description="Default {interval} day expiration notification".format(interval=i),
|
description="Default {interval} day expiration notification".format(interval=i),
|
||||||
certificates=[]
|
certificates=[]
|
||||||
|
|
|
@ -46,7 +46,6 @@ LEMUR_DEFAULT_LOCATION = 'Los Gatos'
|
||||||
LEMUR_DEFAULT_ORGANIZATION = 'Example, Inc.'
|
LEMUR_DEFAULT_ORGANIZATION = 'Example, Inc.'
|
||||||
LEMUR_DEFAULT_ORGANIZATIONAL_UNIT = 'Example'
|
LEMUR_DEFAULT_ORGANIZATIONAL_UNIT = 'Example'
|
||||||
|
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
|
|
||||||
# modify this if you are not using a local database
|
# modify this if you are not using a local database
|
||||||
|
@ -54,7 +53,6 @@ SQLALCHEMY_DATABASE_URI = 'postgresql://lemur:lemur@localhost:5432/lemur'
|
||||||
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
||||||
|
|
||||||
# AWS
|
# AWS
|
||||||
|
|
||||||
LEMUR_INSTANCE_PROFILE = 'Lemur'
|
LEMUR_INSTANCE_PROFILE = 'Lemur'
|
||||||
|
|
||||||
# Issuers
|
# Issuers
|
||||||
|
|
|
@ -140,6 +140,22 @@ def issuer_plugin():
|
||||||
return TestIssuerPlugin
|
return TestIssuerPlugin
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def notification_plugin():
|
||||||
|
from lemur.plugins.base import register
|
||||||
|
from .plugins.notification_plugin import TestNotificationPlugin
|
||||||
|
register(TestNotificationPlugin)
|
||||||
|
return TestNotificationPlugin
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def destination_plugin():
|
||||||
|
from lemur.plugins.base import register
|
||||||
|
from .plugins.destination_plugin import TestDestinationPlugin
|
||||||
|
register(TestDestinationPlugin)
|
||||||
|
return TestDestinationPlugin
|
||||||
|
|
||||||
|
|
||||||
@pytest.yield_fixture(scope="function")
|
@pytest.yield_fixture(scope="function")
|
||||||
def logged_in_user(session, app):
|
def logged_in_user(session, app):
|
||||||
with app.test_request_context():
|
with app.test_request_context():
|
||||||
|
|
|
@ -137,7 +137,7 @@ class AuthorityFactory(BaseFactory):
|
||||||
|
|
||||||
class DestinationFactory(BaseFactory):
|
class DestinationFactory(BaseFactory):
|
||||||
"""Destination factory."""
|
"""Destination factory."""
|
||||||
plugin_name = Sequence(lambda n: 'destination{0}'.format(n))
|
plugin_name = 'test-destination'
|
||||||
label = Sequence(lambda n: 'destination{0}'.format(n))
|
label = Sequence(lambda n: 'destination{0}'.format(n))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -147,7 +147,7 @@ class DestinationFactory(BaseFactory):
|
||||||
|
|
||||||
class NotificationFactory(BaseFactory):
|
class NotificationFactory(BaseFactory):
|
||||||
"""Notification factory."""
|
"""Notification factory."""
|
||||||
plugin_name = Sequence(lambda n: 'notification{0}'.format(n))
|
plugin_name = 'test-notification'
|
||||||
label = Sequence(lambda n: 'notification{0}'.format(n))
|
label = Sequence(lambda n: 'notification{0}'.format(n))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
from lemur.plugins.bases import DestinationPlugin
|
||||||
|
|
||||||
|
|
||||||
|
class TestDestinationPlugin(DestinationPlugin):
|
||||||
|
title = 'Test'
|
||||||
|
slug = 'test-destination'
|
||||||
|
description = 'Enables testing'
|
||||||
|
|
||||||
|
author = 'Kevin Glisson'
|
||||||
|
author_url = 'https://github.com/netflix/lemur.git'
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(TestDestinationPlugin, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
def upload(self, name, body, private_key, cert_chain, options, **kwargs):
|
||||||
|
return
|
|
@ -0,0 +1,17 @@
|
||||||
|
from lemur.plugins.bases import NotificationPlugin
|
||||||
|
|
||||||
|
|
||||||
|
class TestNotificationPlugin(NotificationPlugin):
|
||||||
|
title = 'Test'
|
||||||
|
slug = 'test-notification'
|
||||||
|
description = 'Enables testing'
|
||||||
|
|
||||||
|
author = 'Kevin Glisson'
|
||||||
|
author_url = 'https://github.com/netflix/lemur.git'
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(TestNotificationPlugin, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def send(event_type, message, targets, options, **kwargs):
|
||||||
|
return
|
|
@ -6,7 +6,7 @@ from lemur.destinations.views import * # noqa
|
||||||
from .vectors import VALID_ADMIN_HEADER_TOKEN, VALID_USER_HEADER_TOKEN
|
from .vectors import VALID_ADMIN_HEADER_TOKEN, VALID_USER_HEADER_TOKEN
|
||||||
|
|
||||||
|
|
||||||
def test_destination_input_schema(client, destination):
|
def test_destination_input_schema(client, destination_plugin, destination):
|
||||||
from lemur.destinations.schemas import DestinationInputSchema
|
from lemur.destinations.schemas import DestinationInputSchema
|
||||||
|
|
||||||
input_data = {
|
input_data = {
|
||||||
|
@ -15,7 +15,7 @@ def test_destination_input_schema(client, destination):
|
||||||
'description': 'my destination',
|
'description': 'my destination',
|
||||||
'active': True,
|
'active': True,
|
||||||
'plugin': {
|
'plugin': {
|
||||||
'slug': 'aws-destination'
|
'slug': 'test-destination'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ from lemur.notifications.views import * # noqa
|
||||||
from .vectors import VALID_ADMIN_HEADER_TOKEN, VALID_USER_HEADER_TOKEN
|
from .vectors import VALID_ADMIN_HEADER_TOKEN, VALID_USER_HEADER_TOKEN
|
||||||
|
|
||||||
|
|
||||||
def test_notification_input_schema(client, notification):
|
def test_notification_input_schema(client, notification_plugin, notification):
|
||||||
from lemur.notifications.schemas import NotificationInputSchema
|
from lemur.notifications.schemas import NotificationInputSchema
|
||||||
|
|
||||||
input_data = {
|
input_data = {
|
||||||
|
@ -15,7 +15,7 @@ def test_notification_input_schema(client, notification):
|
||||||
'description': 'my notification',
|
'description': 'my notification',
|
||||||
'active': True,
|
'active': True,
|
||||||
'plugin': {
|
'plugin': {
|
||||||
'slug': 'email-notification'
|
'slug': 'test-notification'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,8 +29,8 @@ def test_notification_input_schema(client, notification):
|
||||||
(VALID_ADMIN_HEADER_TOKEN, 200),
|
(VALID_ADMIN_HEADER_TOKEN, 200),
|
||||||
('', 401)
|
('', 401)
|
||||||
])
|
])
|
||||||
def test_notification_get(client, token, status):
|
def test_notification_get(client, notification_plugin, notification, token, status):
|
||||||
assert client.get(api.url_for(Notifications, notification_id=1), headers=token).status_code == status
|
assert client.get(api.url_for(Notifications, notification_id=notification.id), headers=token).status_code == status
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("token,status", [
|
@pytest.mark.parametrize("token,status", [
|
||||||
|
@ -83,7 +83,7 @@ def test_notification_list_post_(client, token, status):
|
||||||
(VALID_ADMIN_HEADER_TOKEN, 200),
|
(VALID_ADMIN_HEADER_TOKEN, 200),
|
||||||
('', 401)
|
('', 401)
|
||||||
])
|
])
|
||||||
def test_notification_list_get(client, token, status):
|
def test_notification_list_get(client, notification_plugin, notification, token, status):
|
||||||
assert client.get(api.url_for(NotificationsList), headers=token).status_code == status
|
assert client.get(api.url_for(NotificationsList), headers=token).status_code == status
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue