Merge ~bjornt/maas:get-projects-accept-cert into maas:master

Proposed by Björn Tillenius
Status: Merged
Approved by: Björn Tillenius
Approved revision: 2cfdb3eb31f1ff2ef01bdc877faa1c5fb6a45990
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~bjornt/maas:get-projects-accept-cert
Merge into: maas:master
Diff against target: 167 lines (+92/-21)
1 file modified
src/maasserver/websockets/handlers/tests/test_pod.py (+92/-21)
Reviewer Review Type Date Requested Status
Alberto Donato (community) Approve
MAAS Lander Needs Fixing
Review via email: mp+407884@code.launchpad.net

Commit message

Add tests ensuring that pod.get_projects accepts credentials.

The pod.get_projects websocket method already can pass through the
certificate and private key.

This branch adds test to ensure that it works, and will continue
working. The mocking is moved to the RPC layer, so that this test will
start to fail if we change the RPC call to be more strict in the future.

To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b get-projects-accept-cert lp:~bjornt/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/10822/console
COMMIT: 2cfdb3eb31f1ff2ef01bdc877faa1c5fb6a45990

review: Needs Fixing
Revision history for this message
Alberto Donato (ack) wrote :

nice, +1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/websockets/handlers/tests/test_pod.py b/src/maasserver/websockets/handlers/tests/test_pod.py
2index cad5986..6a00d2b 100644
3--- a/src/maasserver/websockets/handlers/tests/test_pod.py
4+++ b/src/maasserver/websockets/handlers/tests/test_pod.py
5@@ -8,17 +8,22 @@ from unittest.mock import MagicMock
6 from crochet import wait_for
7 from testtools.matchers import Equals
8 from twisted.internet.defer import inlineCallbacks, succeed
9+from twisted.internet.threads import deferToThread
10
11 from maasserver.enum import INTERFACE_TYPE
12 from maasserver.forms import pods
13 from maasserver.forms.pods import PodForm
14 from maasserver.models import Pod, PodStoragePool
15 from maasserver.models.virtualmachine import MB, VirtualMachineInterface
16+from maasserver.rpc.testing.fixtures import MockLiveRegionToClusterRPCFixture
17+from maasserver.testing.eventloop import (
18+ RegionEventLoopFixture,
19+ RunningEventLoopFixture,
20+)
21 from maasserver.testing.factory import factory
22 from maasserver.testing.testcase import MAASTransactionServerTestCase
23 from maasserver.utils.orm import reload_object
24 from maasserver.utils.threads import deferToDatabase
25-from maasserver.websockets.handlers import pod
26 from maasserver.websockets.handlers.pod import ComposeMachineForm, PodHandler
27 from maastesting.matchers import MockCalledOnceWith
28 from provisioningserver.drivers.pod import (
29@@ -28,6 +33,7 @@ from provisioningserver.drivers.pod import (
30 DiscoveredPodProject,
31 InterfaceAttachType,
32 )
33+from provisioningserver.rpc.cluster import DiscoverPodProjects
34
35 wait_for_reactor = wait_for(30) # 30 seconds.
36
37@@ -577,9 +583,35 @@ class TestPodHandler(MAASTransactionServerTestCase):
38 self.assertEqual(result["resources"]["numa"], [])
39 self.assertEqual(result["resources"]["vms"], [])
40
41+ def get_rack_rpc_protocol(self, rack_controller, *commands):
42+ self.useFixture(RegionEventLoopFixture("rpc"))
43+ self.useFixture(RunningEventLoopFixture())
44+
45+ fixture = self.useFixture(MockLiveRegionToClusterRPCFixture())
46+ return fixture.makeCluster(rack_controller, *commands)
47+
48 @wait_for_reactor
49 @inlineCallbacks
50- def test_get_projects(self):
51+ def test_get_projects_with_password(self):
52+ rack_controller = yield deferToDatabase(factory.make_RackController)
53+ protocol = yield deferToThread(
54+ self.get_rack_rpc_protocol, rack_controller, DiscoverPodProjects
55+ )
56+ protocol.DiscoverPodProjects.return_value = succeed(
57+ {
58+ "projects": [
59+ DiscoveredPodProject(
60+ name="foo",
61+ description="Project foo",
62+ ),
63+ DiscoveredPodProject(
64+ name="bar",
65+ description="Project bar",
66+ ),
67+ ]
68+ }
69+ )
70+
71 user = yield deferToDatabase(factory.make_admin)
72 handler = PodHandler(user, {}, None)
73 params = {
74@@ -587,23 +619,9 @@ class TestPodHandler(MAASTransactionServerTestCase):
75 "power_address": "1.2.3.4",
76 "project": "p1",
77 "password": "secret",
78+ "certificate": "mycert",
79+ "key": "mykey",
80 }
81- mock_discover_pod_projects = self.patch(pod, "discover_pod_projects")
82- mock_discover_pod_projects.return_value = succeed(
83- (
84- {
85- "my-rack": [
86- DiscoveredPodProject(
87- name="foo", description="Project foo"
88- ),
89- DiscoveredPodProject(
90- name="bar", description="Project bar"
91- ),
92- ]
93- },
94- None,
95- )
96- )
97 projects = yield handler.execute("get_projects", params)
98 self.assertEqual(
99 projects,
100@@ -612,12 +630,65 @@ class TestPodHandler(MAASTransactionServerTestCase):
101 {"name": "bar", "description": "Project bar"},
102 ],
103 )
104- mock_discover_pod_projects.assert_called_once_with(
105- "lxd",
106- {
107+ protocol.DiscoverPodProjects.assert_called_once_with(
108+ protocol,
109+ type="lxd",
110+ context={
111 "power_address": "1.2.3.4",
112 "project": "p1",
113 "password": "secret",
114+ "certificate": "mycert",
115+ "key": "mykey",
116+ },
117+ )
118+
119+ @wait_for_reactor
120+ @inlineCallbacks
121+ def test_get_projects_without_password(self):
122+ rack_controller = yield deferToDatabase(factory.make_RackController)
123+ protocol = yield deferToThread(
124+ self.get_rack_rpc_protocol, rack_controller, DiscoverPodProjects
125+ )
126+ protocol.DiscoverPodProjects.return_value = succeed(
127+ {
128+ "projects": [
129+ DiscoveredPodProject(
130+ name="foo",
131+ description="Project foo",
132+ ),
133+ DiscoveredPodProject(
134+ name="bar",
135+ description="Project bar",
136+ ),
137+ ]
138+ }
139+ )
140+
141+ user = yield deferToDatabase(factory.make_admin)
142+ handler = PodHandler(user, {}, None)
143+ params = {
144+ "type": "lxd",
145+ "power_address": "1.2.3.4",
146+ "project": "p1",
147+ "certificate": "mycert",
148+ "key": "mykey",
149+ }
150+ projects = yield handler.execute("get_projects", params)
151+ self.assertEqual(
152+ projects,
153+ [
154+ {"name": "foo", "description": "Project foo"},
155+ {"name": "bar", "description": "Project bar"},
156+ ],
157+ )
158+ protocol.DiscoverPodProjects.assert_called_once_with(
159+ protocol,
160+ type="lxd",
161+ context={
162+ "power_address": "1.2.3.4",
163+ "project": "p1",
164+ "certificate": "mycert",
165+ "key": "mykey",
166 },
167 )
168

Subscribers

People subscribed via source and target branches