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
diff --git a/src/maasserver/websockets/handlers/tests/test_pod.py b/src/maasserver/websockets/handlers/tests/test_pod.py
index cad5986..6a00d2b 100644
--- a/src/maasserver/websockets/handlers/tests/test_pod.py
+++ b/src/maasserver/websockets/handlers/tests/test_pod.py
@@ -8,17 +8,22 @@ from unittest.mock import MagicMock
8from crochet import wait_for8from crochet import wait_for
9from testtools.matchers import Equals9from testtools.matchers import Equals
10from twisted.internet.defer import inlineCallbacks, succeed10from twisted.internet.defer import inlineCallbacks, succeed
11from twisted.internet.threads import deferToThread
1112
12from maasserver.enum import INTERFACE_TYPE13from maasserver.enum import INTERFACE_TYPE
13from maasserver.forms import pods14from maasserver.forms import pods
14from maasserver.forms.pods import PodForm15from maasserver.forms.pods import PodForm
15from maasserver.models import Pod, PodStoragePool16from maasserver.models import Pod, PodStoragePool
16from maasserver.models.virtualmachine import MB, VirtualMachineInterface17from maasserver.models.virtualmachine import MB, VirtualMachineInterface
18from maasserver.rpc.testing.fixtures import MockLiveRegionToClusterRPCFixture
19from maasserver.testing.eventloop import (
20 RegionEventLoopFixture,
21 RunningEventLoopFixture,
22)
17from maasserver.testing.factory import factory23from maasserver.testing.factory import factory
18from maasserver.testing.testcase import MAASTransactionServerTestCase24from maasserver.testing.testcase import MAASTransactionServerTestCase
19from maasserver.utils.orm import reload_object25from maasserver.utils.orm import reload_object
20from maasserver.utils.threads import deferToDatabase26from maasserver.utils.threads import deferToDatabase
21from maasserver.websockets.handlers import pod
22from maasserver.websockets.handlers.pod import ComposeMachineForm, PodHandler27from maasserver.websockets.handlers.pod import ComposeMachineForm, PodHandler
23from maastesting.matchers import MockCalledOnceWith28from maastesting.matchers import MockCalledOnceWith
24from provisioningserver.drivers.pod import (29from provisioningserver.drivers.pod import (
@@ -28,6 +33,7 @@ from provisioningserver.drivers.pod import (
28 DiscoveredPodProject,33 DiscoveredPodProject,
29 InterfaceAttachType,34 InterfaceAttachType,
30)35)
36from provisioningserver.rpc.cluster import DiscoverPodProjects
3137
32wait_for_reactor = wait_for(30) # 30 seconds.38wait_for_reactor = wait_for(30) # 30 seconds.
3339
@@ -577,9 +583,35 @@ class TestPodHandler(MAASTransactionServerTestCase):
577 self.assertEqual(result["resources"]["numa"], [])583 self.assertEqual(result["resources"]["numa"], [])
578 self.assertEqual(result["resources"]["vms"], [])584 self.assertEqual(result["resources"]["vms"], [])
579585
586 def get_rack_rpc_protocol(self, rack_controller, *commands):
587 self.useFixture(RegionEventLoopFixture("rpc"))
588 self.useFixture(RunningEventLoopFixture())
589
590 fixture = self.useFixture(MockLiveRegionToClusterRPCFixture())
591 return fixture.makeCluster(rack_controller, *commands)
592
580 @wait_for_reactor593 @wait_for_reactor
581 @inlineCallbacks594 @inlineCallbacks
582 def test_get_projects(self):595 def test_get_projects_with_password(self):
596 rack_controller = yield deferToDatabase(factory.make_RackController)
597 protocol = yield deferToThread(
598 self.get_rack_rpc_protocol, rack_controller, DiscoverPodProjects
599 )
600 protocol.DiscoverPodProjects.return_value = succeed(
601 {
602 "projects": [
603 DiscoveredPodProject(
604 name="foo",
605 description="Project foo",
606 ),
607 DiscoveredPodProject(
608 name="bar",
609 description="Project bar",
610 ),
611 ]
612 }
613 )
614
583 user = yield deferToDatabase(factory.make_admin)615 user = yield deferToDatabase(factory.make_admin)
584 handler = PodHandler(user, {}, None)616 handler = PodHandler(user, {}, None)
585 params = {617 params = {
@@ -587,23 +619,9 @@ class TestPodHandler(MAASTransactionServerTestCase):
587 "power_address": "1.2.3.4",619 "power_address": "1.2.3.4",
588 "project": "p1",620 "project": "p1",
589 "password": "secret",621 "password": "secret",
622 "certificate": "mycert",
623 "key": "mykey",
590 }624 }
591 mock_discover_pod_projects = self.patch(pod, "discover_pod_projects")
592 mock_discover_pod_projects.return_value = succeed(
593 (
594 {
595 "my-rack": [
596 DiscoveredPodProject(
597 name="foo", description="Project foo"
598 ),
599 DiscoveredPodProject(
600 name="bar", description="Project bar"
601 ),
602 ]
603 },
604 None,
605 )
606 )
607 projects = yield handler.execute("get_projects", params)625 projects = yield handler.execute("get_projects", params)
608 self.assertEqual(626 self.assertEqual(
609 projects,627 projects,
@@ -612,12 +630,65 @@ class TestPodHandler(MAASTransactionServerTestCase):
612 {"name": "bar", "description": "Project bar"},630 {"name": "bar", "description": "Project bar"},
613 ],631 ],
614 )632 )
615 mock_discover_pod_projects.assert_called_once_with(633 protocol.DiscoverPodProjects.assert_called_once_with(
616 "lxd",634 protocol,
617 {635 type="lxd",
636 context={
618 "power_address": "1.2.3.4",637 "power_address": "1.2.3.4",
619 "project": "p1",638 "project": "p1",
620 "password": "secret",639 "password": "secret",
640 "certificate": "mycert",
641 "key": "mykey",
642 },
643 )
644
645 @wait_for_reactor
646 @inlineCallbacks
647 def test_get_projects_without_password(self):
648 rack_controller = yield deferToDatabase(factory.make_RackController)
649 protocol = yield deferToThread(
650 self.get_rack_rpc_protocol, rack_controller, DiscoverPodProjects
651 )
652 protocol.DiscoverPodProjects.return_value = succeed(
653 {
654 "projects": [
655 DiscoveredPodProject(
656 name="foo",
657 description="Project foo",
658 ),
659 DiscoveredPodProject(
660 name="bar",
661 description="Project bar",
662 ),
663 ]
664 }
665 )
666
667 user = yield deferToDatabase(factory.make_admin)
668 handler = PodHandler(user, {}, None)
669 params = {
670 "type": "lxd",
671 "power_address": "1.2.3.4",
672 "project": "p1",
673 "certificate": "mycert",
674 "key": "mykey",
675 }
676 projects = yield handler.execute("get_projects", params)
677 self.assertEqual(
678 projects,
679 [
680 {"name": "foo", "description": "Project foo"},
681 {"name": "bar", "description": "Project bar"},
682 ],
683 )
684 protocol.DiscoverPodProjects.assert_called_once_with(
685 protocol,
686 type="lxd",
687 context={
688 "power_address": "1.2.3.4",
689 "project": "p1",
690 "certificate": "mycert",
691 "key": "mykey",
621 },692 },
622 )693 )
623694

Subscribers

People subscribed via source and target branches