334
343
after_commissioning_action, node.after_commissioning_action)
335
344
self.assertEqual(power_type, node.power_type)
346
def test_AdminNodeForm_refuses_to_update_hostname_on_allocated_node(self):
347
old_name = factory.make_name('old-hostname')
348
new_name = factory.make_name('new-hostname')
349
node = factory.make_node(
350
hostname=old_name, status=NODE_STATUS.ALLOCATED)
351
form = AdminNodeForm(
353
'hostname': new_name,
354
'architecture': node.architecture,
357
self.assertFalse(form.is_valid())
359
["Can't change hostname to %s: node is in use." % new_name],
360
form._errors['hostname'])
362
def test_AdminNodeForm_accepts_unchanged_hostname_on_allocated_node(self):
363
old_name = factory.make_name('old-hostname')
364
node = factory.make_node(
365
hostname=old_name, status=NODE_STATUS.ALLOCATED)
366
form = AdminNodeForm(
368
'hostname': old_name,
369
'architecture': node.architecture,
372
self.assertTrue(form.is_valid(), form._errors)
374
self.assertEqual(old_name, reload_object(node).hostname)
337
376
def test_remove_None_values_removes_None_values_in_dict(self):
338
377
random_input = factory.getRandomString()
339
378
self.assertEqual(
837
876
nodegroup.management for nodegroup in
838
877
nodegroup.nodegroupinterface_set.all()
881
def make_unrenamable_nodegroup_with_node():
882
"""Create a `NodeGroup` that can't be renamed, and `Node`.
884
Node groups can't be renamed while they are in an accepted state, have
885
DHCP and DNS management enabled, and have a node that is in allocated
888
:return: tuple: (`NodeGroup`, `Node`).
890
name = factory.make_name('original-name')
891
nodegroup = factory.make_node_group(
892
name=name, status=NODEGROUP_STATUS.ACCEPTED)
893
interface = nodegroup.get_managed_interface()
894
interface.management = NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS
896
node = factory.make_node(nodegroup=nodegroup, status=NODE_STATUS.ALLOCATED)
897
return nodegroup, node
900
class TestNodeGroupEdit(TestCase):
902
def make_form_data(self, nodegroup):
903
"""Create `NodeGroupEdit` form data based on `nodegroup`."""
905
'name': nodegroup.name,
906
'cluster_name': nodegroup.cluster_name,
907
'status': nodegroup.status,
910
def test_changes_name(self):
911
nodegroup = factory.make_node_group(name=factory.make_name('old-name'))
912
new_name = factory.make_name('new-name')
913
data = self.make_form_data(nodegroup)
914
data['name'] = new_name
915
form = NodeGroupEdit(instance=nodegroup, data=data)
916
self.assertTrue(form.is_valid())
918
self.assertEqual(new_name, reload_object(nodegroup).name)
920
def test_refuses_name_change_if_dns_managed_and_nodes_in_use(self):
921
nodegroup, node = make_unrenamable_nodegroup_with_node()
922
data = self.make_form_data(nodegroup)
923
data['name'] = factory.make_name('new-name')
924
form = NodeGroupEdit(instance=nodegroup, data=data)
925
self.assertFalse(form.is_valid())
927
def test_accepts_unchanged_name(self):
928
nodegroup, node = make_unrenamable_nodegroup_with_node()
929
original_name = nodegroup.name
930
form = NodeGroupEdit(
931
instance=nodegroup, data=self.make_form_data(nodegroup))
932
self.assertTrue(form.is_valid())
934
self.assertEqual(original_name, reload_object(nodegroup).name)
936
def test_accepts_omitted_name(self):
937
nodegroup, node = make_unrenamable_nodegroup_with_node()
938
original_name = nodegroup.name
939
data = self.make_form_data(nodegroup)
941
form = NodeGroupEdit(instance=nodegroup, data=data)
942
self.assertTrue(form.is_valid())
944
self.assertEqual(original_name, reload_object(nodegroup).name)
946
def test_accepts_name_change_if_nodegroup_not_accepted(self):
947
nodegroup, node = make_unrenamable_nodegroup_with_node()
948
nodegroup.status = NODEGROUP_STATUS.PENDING
949
data = self.make_form_data(nodegroup)
950
data['name'] = factory.make_name('new-name')
951
form = NodeGroupEdit(instance=nodegroup, data=data)
952
self.assertTrue(form.is_valid())
954
def test_accepts_name_change_if_dns_managed_but_no_nodes_in_use(self):
955
nodegroup, node = make_unrenamable_nodegroup_with_node()
956
node.status = NODE_STATUS.READY
958
data = self.make_form_data(nodegroup)
959
data['name'] = factory.make_name('new-name')
960
form = NodeGroupEdit(instance=nodegroup, data=data)
961
self.assertTrue(form.is_valid())
963
self.assertEqual(data['name'], reload_object(nodegroup).name)
965
def test_accepts_name_change_if_nodes_in_use_but_dns_not_managed(self):
966
nodegroup, node = make_unrenamable_nodegroup_with_node()
967
interface = nodegroup.get_managed_interface()
968
interface.management = NODEGROUPINTERFACE_MANAGEMENT.DHCP
970
data = self.make_form_data(nodegroup)
971
data['name'] = factory.make_name('new-name')
972
form = NodeGroupEdit(instance=nodegroup, data=data)
973
self.assertTrue(form.is_valid())
975
self.assertEqual(data['name'], reload_object(nodegroup).name)
977
def test_accepts_name_change_if_nodegroup_has_no_interface(self):
978
nodegroup, node = make_unrenamable_nodegroup_with_node()
979
NodeGroupInterface.objects.filter(nodegroup=nodegroup).delete()
980
data = self.make_form_data(nodegroup)
981
data['name'] = factory.make_name('new-name')
982
form = NodeGroupEdit(instance=nodegroup, data=data)
983
self.assertTrue(form.is_valid())
985
self.assertEqual(data['name'], reload_object(nodegroup).name)