def test_power_type_set_but_no_parameters(self): # When power_type is valid, it is set. However, if power_parameters is # not specified, the node's power_parameters is left alone, and the # node is saved. power_type = factory.pick_power_type() self.request.POST = {"power_type": power_type} store_node_power_parameters(self.node, self.request) self.assertEqual(power_type, self.node.power_type) self.assertEqual({}, self.node.power_parameters) self.save.assert_called_once_with()
def test__sets_power_type(self): rack = factory.make_RackController() power_type = factory.pick_power_type() form = ControllerForm(data={ 'power_type': power_type, 'power_parameters_skip_check': 'true', }, instance=rack) rack = form.save() self.assertEqual(power_type, rack.power_type)
def test_power_type_set_with_invalid_parameters(self): # When power_type is valid, but power_parameters is invalid JSON, the # node is not saved, and an exception is raised. power_type = factory.pick_power_type() self.request.POST = { "power_type": power_type, "power_parameters": "Not JSON.", } self.assertRaises(MAASAPIBadRequest, store_node_power_parameters, self.node, self.request) self.save.assert_has_calls([])
def test_sets_power_type(self): rack = factory.make_RackController() power_type = factory.pick_power_type() form = ControllerForm( data={ "power_type": power_type, "power_parameters_skip_check": "true", }, instance=rack, ) rack = form.save() self.assertEqual(power_type, rack.power_type)
def test_power_type_set_with_parameters(self): # When power_type is valid, and power_parameters is valid JSON, both # fields are set on the node, and the node is saved. power_type = factory.pick_power_type() power_parameters = {"foo": [1, 2, 3]} self.request.POST = { "power_type": power_type, "power_parameters": json.dumps(power_parameters), } store_node_power_parameters(self.node, self.request) self.assertEqual(power_type, self.node.power_type) self.assertEqual(power_parameters, self.node.power_parameters) self.save.assert_called_once_with()
def test_AdminMachineForm_doesnt_change_power_type(self): power_type = factory.pick_power_type() node = factory.make_Node(power_type=power_type) hostname = factory.make_string() arch = make_usable_architecture(self) form = AdminMachineForm(data={ 'hostname': hostname, 'architecture': arch, 'power_parameters_skip_check': 'true', }, instance=node) node = form.save() self.assertEqual(power_type, node.power_type)
def test_no_connected_rack_controllers(self): # When get_driver_types returns empty dictionary. mock_get_driver_types = self.patch(nodes_module, "get_driver_types") mock_get_driver_types.return_value = {} power_type = factory.pick_power_type() self.request.POST = {"power_type": power_type} error = self.assertRaises(ClusterUnavailable, store_node_power_parameters, self.node, self.request) self.assertEqual( "No rack controllers connected to validate the power_type.", str(error)) self.assertThat(mock_get_driver_types, MockCalledOnceWith(ignore_errors=True))
def test_AdminMachineForm_changes_power_type(self): node = factory.make_Node() hostname = factory.make_string() power_type = factory.pick_power_type() arch = make_usable_architecture(self) form = AdminMachineForm( data={ "hostname": hostname, "architecture": arch, "power_type": power_type, "power_parameters_skip_check": "true", }, instance=node, ) node = form.save() self.assertEqual(power_type, node.power_type)
def test_AdminMachineForm_changes_power_parameters_with_skip_check(self): node = factory.make_Node() hostname = factory.make_string() power_type = factory.pick_power_type() power_parameters_field = factory.make_string() arch = make_usable_architecture(self) form = AdminMachineForm(data={ 'hostname': hostname, 'architecture': arch, 'power_type': power_type, 'power_parameters_field': power_parameters_field, 'power_parameters_skip_check': 'true', }, instance=node) form.save() self.assertEqual((hostname, power_type, { 'field': power_parameters_field }), (node.hostname, node.power_type, node.power_parameters))
def test_AdminMachineForm_changes_power_parameters_with_skip_check(self): node = factory.make_Node(interface=True) hostname = factory.make_string() power_type = factory.pick_power_type(but_not=["lxd"]) power_parameters_field = factory.make_string() arch = make_usable_architecture(self) form = AdminMachineForm( data={ "hostname": hostname, "architecture": arch, "power_type": power_type, "power_parameters_field": power_parameters_field, "power_parameters_skip_check": "true", }, instance=node, ) form.save() self.assertEqual( (hostname, power_type, {"field": power_parameters_field}), (node.hostname, node.power_type, node.power_parameters), )