Merge ~blake-rouse/maas:fix-1846141 into maas:master

Proposed by Blake Rouse
Status: Merged
Approved by: Blake Rouse
Approved revision: d1b4ed1ef5a1f7a3c8a4fb5169ae90142edbb2e6
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~blake-rouse/maas:fix-1846141
Merge into: maas:master
Diff against target: 140 lines (+89/-0)
4 files modified
src/maasserver/triggers/testing.py (+4/-0)
src/maasserver/triggers/tests/test_init.py (+3/-0)
src/maasserver/triggers/tests/test_websocket_listener.py (+70/-0)
src/maasserver/triggers/websocket.py (+12/-0)
Reviewer Review Type Date Requested Status
Alberto Donato (community) Approve
Review via email: mp+373873@code.launchpad.net

Commit message

Fixes LP: #1846141 - Add triggers for creating, updating, and deleting SSL keys.

To post a comment you must log in.
Revision history for this message
Alberto Donato (ack) wrote :

+1

review: Approve
~blake-rouse/maas:fix-1846141 updated
d1b4ed1... by Blake Rouse

Switch to str casting.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/src/maasserver/triggers/testing.py b/src/maasserver/triggers/testing.py
index fd39916..9e31c36 100644
--- a/src/maasserver/triggers/testing.py
+++ b/src/maasserver/triggers/testing.py
@@ -648,6 +648,10 @@ class TransactionalHelpersMixin:
648 return factory.make_SSLKey(**params)648 return factory.make_SSLKey(**params)
649649
650 @transactional650 @transactional
651 def update_sslkey(self, id, params, **kwargs):
652 return apply_update_to_model(SSLKey, id, params, **kwargs)
653
654 @transactional
651 def delete_sslkey(self, id):655 def delete_sslkey(self, id):
652 key = SSLKey.objects.get(id=id)656 key = SSLKey.objects.get(id=id)
653 key.delete()657 key.delete()
diff --git a/src/maasserver/triggers/tests/test_init.py b/src/maasserver/triggers/tests/test_init.py
index 756cff3..140ed7d 100644
--- a/src/maasserver/triggers/tests/test_init.py
+++ b/src/maasserver/triggers/tests/test_init.py
@@ -244,6 +244,9 @@ class TestTriggersUsed(MAASServerTestCase):
244 "sshkey_sshkey_update_notify",244 "sshkey_sshkey_update_notify",
245 "sshkey_user_sshkey_link_notify",245 "sshkey_user_sshkey_link_notify",
246 "sshkey_user_sshkey_unlink_notify",246 "sshkey_user_sshkey_unlink_notify",
247 "sslkey_sslkey_create_notify",
248 "sslkey_sslkey_delete_notify",
249 "sslkey_sslkey_update_notify",
247 "sslkey_user_sslkey_link_notify",250 "sslkey_user_sslkey_link_notify",
248 "sslkey_user_sslkey_unlink_notify",251 "sslkey_user_sslkey_unlink_notify",
249 "staticipaddress_ipaddress_domain_delete_notify",252 "staticipaddress_ipaddress_domain_delete_notify",
diff --git a/src/maasserver/triggers/tests/test_websocket_listener.py b/src/maasserver/triggers/tests/test_websocket_listener.py
index 3ee85f2..9ec10af 100644
--- a/src/maasserver/triggers/tests/test_websocket_listener.py
+++ b/src/maasserver/triggers/tests/test_websocket_listener.py
@@ -27,6 +27,7 @@ from maasserver.models.config import Config
27from maasserver.models.node import Node27from maasserver.models.node import Node
28from maasserver.models.partition import MIN_PARTITION_SIZE28from maasserver.models.partition import MIN_PARTITION_SIZE
29from maasserver.models.switch import Switch29from maasserver.models.switch import Switch
30from maasserver.testing import get_data
30from maasserver.testing.factory import factory31from maasserver.testing.factory import factory
31from maasserver.testing.testcase import MAASTransactionServerTestCase32from maasserver.testing.testcase import MAASTransactionServerTestCase
32from maasserver.triggers.testing import TransactionalHelpersMixin33from maasserver.triggers.testing import TransactionalHelpersMixin
@@ -3626,6 +3627,75 @@ class TestUserSSLKeyListener(
3626 yield listener.stopService()3627 yield listener.stopService()
36273628
36283629
3630class TestSSLKeyListener(
3631 MAASTransactionServerTestCase, TransactionalHelpersMixin):
3632 """End-to-end test of both the listeners code and the maasserver_sslkey
3633 table."""
3634
3635 @wait_for_reactor
3636 @inlineCallbacks
3637 def test__calls_handler_on_create(self):
3638 yield deferToDatabase(register_websocket_triggers)
3639 user = yield deferToDatabase(self.create_user)
3640
3641 listener = self.make_listener_without_delay()
3642 dv = DeferredValue()
3643 listener.register("sslkey", lambda *args: dv.set(args))
3644 yield listener.startService()
3645 try:
3646 obj = yield deferToDatabase(self.create_sslkey, {"user": user})
3647 yield dv.get(timeout=2)
3648 self.assertEqual(('create', str(obj.id)), dv.value)
3649 finally:
3650 yield listener.stopService()
3651
3652 @wait_for_reactor
3653 @inlineCallbacks
3654 def test__calls_handler_on_update(self):
3655 yield deferToDatabase(register_websocket_triggers)
3656 user = yield deferToDatabase(self.create_user)
3657 sslkey = yield deferToDatabase(self.create_sslkey, {"user": user})
3658 other_sslkey = yield deferToDatabase(
3659 self.create_sslkey, {
3660 "user": user,
3661 "key_string": get_data('data/test_x509_1.pem'),
3662 })
3663 contents = other_sslkey.key
3664 yield deferToDatabase(self.delete_sslkey, other_sslkey.id)
3665
3666 listener = self.make_listener_without_delay()
3667 dv = DeferredValue()
3668 listener.register("sslkey", lambda *args: dv.set(args))
3669 yield listener.startService()
3670 try:
3671 # Force the update because the key contents could be the same.
3672 yield deferToDatabase(
3673 self.update_sslkey, sslkey.id, {'key': contents},
3674 force_update=True)
3675 yield dv.get(timeout=2)
3676 self.assertEqual(('update', str(sslkey.id)), dv.value)
3677 finally:
3678 yield listener.stopService()
3679
3680 @wait_for_reactor
3681 @inlineCallbacks
3682 def test__calls_handler_on_delete(self):
3683 yield deferToDatabase(register_websocket_triggers)
3684 user = yield deferToDatabase(self.create_user)
3685 sslkey = yield deferToDatabase(self.create_sslkey, {"user": user})
3686
3687 listener = self.make_listener_without_delay()
3688 dv = DeferredValue()
3689 listener.register("sslkey", lambda *args: dv.set(args))
3690 yield listener.startService()
3691 try:
3692 yield deferToDatabase(self.delete_sslkey, sslkey.id)
3693 yield dv.get(timeout=2)
3694 self.assertEqual(('delete', str(sslkey.id)), dv.value)
3695 finally:
3696 yield listener.stopService()
3697
3698
3629class TestDHCPSnippetListener(3699class TestDHCPSnippetListener(
3630 MAASTransactionServerTestCase, TransactionalHelpersMixin):3700 MAASTransactionServerTestCase, TransactionalHelpersMixin):
3631 """End-to-end test of both the listeners code and the cluster3701 """End-to-end test of both the listeners code and the cluster
diff --git a/src/maasserver/triggers/websocket.py b/src/maasserver/triggers/websocket.py
index 47e393d..9b8ce17 100644
--- a/src/maasserver/triggers/websocket.py
+++ b/src/maasserver/triggers/websocket.py
@@ -2064,6 +2064,18 @@ def register_websocket_triggers():
2064 register_trigger(2064 register_trigger(
2065 "maasserver_sslkey", "user_sslkey_unlink_notify", "delete")2065 "maasserver_sslkey", "user_sslkey_unlink_notify", "delete")
20662066
2067 # SSL key table.
2068 register_procedure(
2069 render_notification_procedure(
2070 'sslkey_create_notify', 'sslkey_create', 'NEW.id'))
2071 register_procedure(
2072 render_notification_procedure(
2073 'sslkey_update_notify', 'sslkey_update', 'NEW.id'))
2074 register_procedure(
2075 render_notification_procedure(
2076 'sslkey_delete_notify', 'sslkey_delete', 'OLD.id'))
2077 register_triggers("maasserver_sslkey", "sslkey")
2078
2067 # DHCPSnippet table2079 # DHCPSnippet table
2068 register_procedure(2080 register_procedure(
2069 render_notification_procedure(2081 render_notification_procedure(

Subscribers

People subscribed via source and target branches