1
# Copyright 2012 Canonical Ltd. This software is licensed under the
2
# GNU Affero General Public License version 3 (see the file LICENSE).
4
"""Test maasserver clusters views."""
6
from __future__ import (
17
from django.core.urlresolvers import reverse
18
from maasserver.enum import (
20
NODEGROUPINTERFACE_MANAGEMENT,
22
from maasserver.models import (
26
from maasserver.testing import (
31
from maasserver.testing.factory import factory
32
from maasserver.testing.testcase import (
33
AdminLoggedInTestCase,
35
from maastesting.matchers import ContainsAll
36
from testtools.matchers import MatchesStructure
39
class ClusterListingTest(AdminLoggedInTestCase):
41
def test_settings_contains_links_to_edit_and_delete_clusters(self):
43
factory.make_node_group(status=NODEGROUP_STATUS.ACCEPTED),
44
factory.make_node_group(status=NODEGROUP_STATUS.PENDING),
45
factory.make_node_group(status=NODEGROUP_STATUS.REJECTED),
47
links = get_content_links(self.client.get(reverse('settings')))
48
nodegroup_edit_links = [
49
reverse('cluster-edit', args=[nodegroup.uuid])
50
for nodegroup in nodegroups]
51
nodegroup_delete_links = [
52
reverse('cluster-delete', args=[nodegroup.uuid])
53
for nodegroup in nodegroups]
56
ContainsAll(nodegroup_edit_links + nodegroup_delete_links))
59
class ClusterDeleteTest(AdminLoggedInTestCase):
61
def test_can_delete_cluster(self):
62
nodegroup = factory.make_node_group()
63
delete_link = reverse('cluster-delete', args=[nodegroup.uuid])
64
response = self.client.post(delete_link, {'post': 'yes'})
66
(httplib.FOUND, reverse('settings')),
67
(response.status_code, extract_redirect(response)))
69
NodeGroup.objects.filter(uuid=nodegroup.uuid).exists())
72
class ClusterEditTest(AdminLoggedInTestCase):
74
def test_cluster_page_contains_links_to_edit_and_delete_interfaces(self):
75
nodegroup = factory.make_node_group()
78
interface = factory.make_node_group_interface(
80
management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED)
81
interfaces.add(interface)
82
links = get_content_links(
83
self.client.get(reverse('cluster-edit', args=[nodegroup.uuid])))
84
interface_edit_links = [
85
reverse('cluster-interface-edit',
86
args=[nodegroup.uuid, interface.interface])
87
for interface in interfaces]
88
interface_delete_links = [
89
reverse('cluster-interface-delete',
90
args=[nodegroup.uuid, interface.interface])
91
for interface in interfaces]
94
ContainsAll(interface_edit_links + interface_delete_links))
96
def test_can_edit_cluster(self):
97
nodegroup = factory.make_node_group()
98
edit_link = reverse('cluster-edit', args=[nodegroup.uuid])
100
'cluster_name': factory.make_name('cluster_name'),
101
'name': factory.make_name('name'),
102
'status': factory.getRandomEnum(NODEGROUP_STATUS),
104
response = self.client.post(edit_link, data)
105
self.assertEqual(httplib.FOUND, response.status_code, response.content)
107
reload_object(nodegroup),
108
MatchesStructure.byEquality(**data))
111
class ClusterInterfaceDeleteTest(AdminLoggedInTestCase):
113
def test_can_delete_cluster_interface(self):
114
nodegroup = factory.make_node_group()
115
interface = factory.make_node_group_interface(
117
management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED)
118
delete_link = reverse(
119
'cluster-interface-delete',
120
args=[nodegroup.uuid, interface.interface])
121
response = self.client.post(delete_link, {'post': 'yes'})
123
(httplib.FOUND, reverse('cluster-edit', args=[nodegroup.uuid])),
124
(response.status_code, extract_redirect(response)))
126
NodeGroupInterface.objects.filter(id=interface.id).exists())
129
class ClusterInterfaceEditTest(AdminLoggedInTestCase):
131
def test_can_edit_cluster_interface(self):
132
nodegroup = factory.make_node_group(
133
management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED)
134
interface = factory.make_node_group_interface(
137
'cluster-interface-edit',
138
args=[nodegroup.uuid, interface.interface])
139
data = factory.get_interface_fields()
140
response = self.client.post(edit_link, data)
141
self.assertEqual(httplib.FOUND, response.status_code, response.content)
143
reload_object(interface),
144
MatchesStructure.byEquality(**data))