class AdminPasswordTestV21(test.NoDBTestCase): validation_error = exception.ValidationError def setUp(self): super(AdminPasswordTestV21, self).setUp() self.stub_out('nova.compute.api.API.set_admin_password', fake_set_admin_password) self.stub_out('nova.compute.api.API.get', fake_get) self.fake_req = fakes.HTTPRequest.blank('') def _get_action(self): return admin_password_v21.AdminPasswordController().change_password def _check_status(self, expected_status, res, controller_method): self.assertEqual(expected_status, controller_method.wsgi_code) def test_change_password(self): body = {'changePassword': {'adminPass': '******'}} res = self._get_action()(self.fake_req, '1', body=body) self._check_status(202, res, self._get_action()) def test_change_password_empty_string(self): body = {'changePassword': {'adminPass': ''}} res = self._get_action()(self.fake_req, '1', body=body) self._check_status(202, res, self._get_action()) @mock.patch('nova.compute.api.API.set_admin_password', side_effect=NotImplementedError()) def test_change_password_with_non_implement(self, mock_set_admin_password): body = {'changePassword': {'adminPass': '******'}} self.assertRaises(webob.exc.HTTPNotImplemented, self._get_action(), self.fake_req, '1', body=body) @mock.patch('nova.compute.api.API.get', side_effect=exception.InstanceNotFound(instance_id='1')) def test_change_password_with_non_existed_instance(self, mock_get): body = {'changePassword': {'adminPass': '******'}} self.assertRaises(webob.exc.HTTPNotFound, self._get_action(), self.fake_req, '1', body=body) def test_change_password_with_non_string_password(self): body = {'changePassword': {'adminPass': 1234}} self.assertRaises(self.validation_error, self._get_action(), self.fake_req, '1', body=body) @mock.patch('nova.compute.api.API.set_admin_password', side_effect=exception.InstancePasswordSetFailed(instance="1", reason='')) def test_change_password_failed(self, mock_set_admin_password): body = {'changePassword': {'adminPass': '******'}} self.assertRaises(webob.exc.HTTPConflict, self._get_action(), self.fake_req, '1', body=body) @mock.patch('nova.compute.api.API.set_admin_password', side_effect=exception.SetAdminPasswdNotSupported(instance="1", reason='')) def test_change_password_not_supported(self, mock_set_admin_password): body = {'changePassword': {'adminPass': '******'}} self.assertRaises(webob.exc.HTTPConflict, self._get_action(), self.fake_req, '1', body=body) @mock.patch('nova.compute.api.API.set_admin_password', side_effect=exception.InstanceAgentNotEnabled(instance="1", reason='')) def test_change_password_guest_agent_disabled(self, mock_set_admin_password): body = {'changePassword': {'adminPass': '******'}} self.assertRaises(webob.exc.HTTPConflict, self._get_action(), self.fake_req, '1', body=body) def test_change_password_without_admin_password(self): body = {'changPassword': {}} self.assertRaises(self.validation_error, self._get_action(), self.fake_req, '1', body=body) def test_change_password_none(self): body = {'changePassword': {'adminPass': None}} self.assertRaises(self.validation_error, self._get_action(), self.fake_req, '1', body=body) def test_change_password_adminpass_none(self): body = {'changePassword': None} self.assertRaises(self.validation_error, self._get_action(), self.fake_req, '1', body=body) def test_change_password_bad_request(self): body = {'changePassword': {'pass': '******'}} self.assertRaises(self.validation_error, self._get_action(), self.fake_req, '1', body=body) def test_server_change_password_pass_disabled(self): # run with enable_instance_password disabled to verify adminPass # is missing from response. See lp bug 921814 self.flags(enable_instance_password=False, group='api') body = {'changePassword': {'adminPass': '******'}} res = self._get_action()(self.fake_req, '1', body=body) self._check_status(202, res, self._get_action()) @mock.patch('nova.compute.api.API.set_admin_password', side_effect=exception.InstanceInvalidState( instance_uuid='fake', attr='vm_state', state='stopped', method='set_admin_password')) def test_change_password_invalid_state(self, mock_set_admin_password): body = {'changePassword': {'adminPass': '******'}} self.assertRaises(webob.exc.HTTPConflict, self._get_action(), self.fake_req, 'fake', body=body)
def fake_set_admin_password_failed(self, context, instance, password=None): raise exception.InstancePasswordSetFailed(instance=instance, reason='')
class AdminPasswordTestV21(test.NoDBTestCase): def setUp(self): super(AdminPasswordTestV21, self).setUp() self.stubs.Set(compute_api.API, 'set_admin_password', fake_set_admin_password) self.stubs.Set(compute_api.API, 'get', fake_get) self.controller = admin_password_v21.AdminPasswordController() self.fake_req = fakes.HTTPRequest.blank('') def test_change_password(self): body = {'changePassword': {'adminPass': '******'}} self.controller.change_password(self.fake_req, '1', body=body) self.assertEqual(self.controller.change_password.wsgi_code, 202) def test_change_password_empty_string(self): body = {'changePassword': {'adminPass': ''}} self.controller.change_password(self.fake_req, '1', body=body) self.assertEqual(self.controller.change_password.wsgi_code, 202) @mock.patch('nova.compute.api.API.set_admin_password', side_effect=NotImplementedError()) def test_change_password_with_non_implement(self, mock_set_admin_password): body = {'changePassword': {'adminPass': '******'}} self.assertRaises(webob.exc.HTTPNotImplemented, self.controller.change_password, self.fake_req, '1', body=body) @mock.patch('nova.compute.api.API.get', side_effect=exception.InstanceNotFound(instance_id='1')) def test_change_password_with_non_existed_instance(self, mock_get): body = {'changePassword': {'adminPass': '******'}} self.assertRaises(webob.exc.HTTPNotFound, self.controller.change_password, self.fake_req, '1', body=body) def test_change_password_with_non_string_password(self): body = {'changePassword': {'adminPass': 1234}} self.assertRaises(exception.ValidationError, self.controller.change_password, self.fake_req, '1', body=body) @mock.patch('nova.compute.api.API.set_admin_password', side_effect=exception.InstancePasswordSetFailed(instance="1", reason='')) def test_change_password_failed(self, mock_set_admin_password): body = {'changePassword': {'adminPass': '******'}} self.assertRaises(webob.exc.HTTPConflict, self.controller.change_password, self.fake_req, '1', body=body) def test_change_password_without_admin_password(self): body = {'changPassword': {}} self.assertRaises(exception.ValidationError, self.controller.change_password, self.fake_req, '1', body=body) def test_change_password_none(self): body = {'changePassword': None} self.assertRaises(exception.ValidationError, self.controller.change_password, self.fake_req, '1', body=body)