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
1diff --git a/src/maasserver/triggers/testing.py b/src/maasserver/triggers/testing.py
2index fd39916..9e31c36 100644
3--- a/src/maasserver/triggers/testing.py
4+++ b/src/maasserver/triggers/testing.py
5@@ -648,6 +648,10 @@ class TransactionalHelpersMixin:
6 return factory.make_SSLKey(**params)
7
8 @transactional
9+ def update_sslkey(self, id, params, **kwargs):
10+ return apply_update_to_model(SSLKey, id, params, **kwargs)
11+
12+ @transactional
13 def delete_sslkey(self, id):
14 key = SSLKey.objects.get(id=id)
15 key.delete()
16diff --git a/src/maasserver/triggers/tests/test_init.py b/src/maasserver/triggers/tests/test_init.py
17index 756cff3..140ed7d 100644
18--- a/src/maasserver/triggers/tests/test_init.py
19+++ b/src/maasserver/triggers/tests/test_init.py
20@@ -244,6 +244,9 @@ class TestTriggersUsed(MAASServerTestCase):
21 "sshkey_sshkey_update_notify",
22 "sshkey_user_sshkey_link_notify",
23 "sshkey_user_sshkey_unlink_notify",
24+ "sslkey_sslkey_create_notify",
25+ "sslkey_sslkey_delete_notify",
26+ "sslkey_sslkey_update_notify",
27 "sslkey_user_sslkey_link_notify",
28 "sslkey_user_sslkey_unlink_notify",
29 "staticipaddress_ipaddress_domain_delete_notify",
30diff --git a/src/maasserver/triggers/tests/test_websocket_listener.py b/src/maasserver/triggers/tests/test_websocket_listener.py
31index 3ee85f2..9ec10af 100644
32--- a/src/maasserver/triggers/tests/test_websocket_listener.py
33+++ b/src/maasserver/triggers/tests/test_websocket_listener.py
34@@ -27,6 +27,7 @@ from maasserver.models.config import Config
35 from maasserver.models.node import Node
36 from maasserver.models.partition import MIN_PARTITION_SIZE
37 from maasserver.models.switch import Switch
38+from maasserver.testing import get_data
39 from maasserver.testing.factory import factory
40 from maasserver.testing.testcase import MAASTransactionServerTestCase
41 from maasserver.triggers.testing import TransactionalHelpersMixin
42@@ -3626,6 +3627,75 @@ class TestUserSSLKeyListener(
43 yield listener.stopService()
44
45
46+class TestSSLKeyListener(
47+ MAASTransactionServerTestCase, TransactionalHelpersMixin):
48+ """End-to-end test of both the listeners code and the maasserver_sslkey
49+ table."""
50+
51+ @wait_for_reactor
52+ @inlineCallbacks
53+ def test__calls_handler_on_create(self):
54+ yield deferToDatabase(register_websocket_triggers)
55+ user = yield deferToDatabase(self.create_user)
56+
57+ listener = self.make_listener_without_delay()
58+ dv = DeferredValue()
59+ listener.register("sslkey", lambda *args: dv.set(args))
60+ yield listener.startService()
61+ try:
62+ obj = yield deferToDatabase(self.create_sslkey, {"user": user})
63+ yield dv.get(timeout=2)
64+ self.assertEqual(('create', str(obj.id)), dv.value)
65+ finally:
66+ yield listener.stopService()
67+
68+ @wait_for_reactor
69+ @inlineCallbacks
70+ def test__calls_handler_on_update(self):
71+ yield deferToDatabase(register_websocket_triggers)
72+ user = yield deferToDatabase(self.create_user)
73+ sslkey = yield deferToDatabase(self.create_sslkey, {"user": user})
74+ other_sslkey = yield deferToDatabase(
75+ self.create_sslkey, {
76+ "user": user,
77+ "key_string": get_data('data/test_x509_1.pem'),
78+ })
79+ contents = other_sslkey.key
80+ yield deferToDatabase(self.delete_sslkey, other_sslkey.id)
81+
82+ listener = self.make_listener_without_delay()
83+ dv = DeferredValue()
84+ listener.register("sslkey", lambda *args: dv.set(args))
85+ yield listener.startService()
86+ try:
87+ # Force the update because the key contents could be the same.
88+ yield deferToDatabase(
89+ self.update_sslkey, sslkey.id, {'key': contents},
90+ force_update=True)
91+ yield dv.get(timeout=2)
92+ self.assertEqual(('update', str(sslkey.id)), dv.value)
93+ finally:
94+ yield listener.stopService()
95+
96+ @wait_for_reactor
97+ @inlineCallbacks
98+ def test__calls_handler_on_delete(self):
99+ yield deferToDatabase(register_websocket_triggers)
100+ user = yield deferToDatabase(self.create_user)
101+ sslkey = yield deferToDatabase(self.create_sslkey, {"user": user})
102+
103+ listener = self.make_listener_without_delay()
104+ dv = DeferredValue()
105+ listener.register("sslkey", lambda *args: dv.set(args))
106+ yield listener.startService()
107+ try:
108+ yield deferToDatabase(self.delete_sslkey, sslkey.id)
109+ yield dv.get(timeout=2)
110+ self.assertEqual(('delete', str(sslkey.id)), dv.value)
111+ finally:
112+ yield listener.stopService()
113+
114+
115 class TestDHCPSnippetListener(
116 MAASTransactionServerTestCase, TransactionalHelpersMixin):
117 """End-to-end test of both the listeners code and the cluster
118diff --git a/src/maasserver/triggers/websocket.py b/src/maasserver/triggers/websocket.py
119index 47e393d..9b8ce17 100644
120--- a/src/maasserver/triggers/websocket.py
121+++ b/src/maasserver/triggers/websocket.py
122@@ -2064,6 +2064,18 @@ def register_websocket_triggers():
123 register_trigger(
124 "maasserver_sslkey", "user_sslkey_unlink_notify", "delete")
125
126+ # SSL key table.
127+ register_procedure(
128+ render_notification_procedure(
129+ 'sslkey_create_notify', 'sslkey_create', 'NEW.id'))
130+ register_procedure(
131+ render_notification_procedure(
132+ 'sslkey_update_notify', 'sslkey_update', 'NEW.id'))
133+ register_procedure(
134+ render_notification_procedure(
135+ 'sslkey_delete_notify', 'sslkey_delete', 'OLD.id'))
136+ register_triggers("maasserver_sslkey", "sslkey")
137+
138 # DHCPSnippet table
139 register_procedure(
140 render_notification_procedure(

Subscribers

People subscribed via source and target branches