diff options
Diffstat (limited to 'heatclient/tests/unit')
-rw-r--r-- | heatclient/tests/unit/osc/v1/test_stack.py | 96 | ||||
-rw-r--r-- | heatclient/tests/unit/test_utils.py | 11 |
2 files changed, 107 insertions, 0 deletions
diff --git a/heatclient/tests/unit/osc/v1/test_stack.py b/heatclient/tests/unit/osc/v1/test_stack.py index 161de58..7a1fd36 100644 --- a/heatclient/tests/unit/osc/v1/test_stack.py +++ b/heatclient/tests/unit/osc/v1/test_stack.py @@ -527,6 +527,102 @@ class TestStackList(TestStack): self.assertRaises(exc.CommandError, self.cmd.take_action, parsed_args) +class TestStackDelete(TestStack): + + def setUp(self): + super(TestStackDelete, self).setUp() + self.cmd = stack.DeleteStack(self.app, None) + self.stack_client.delete = mock.MagicMock() + self.stack_client.get = mock.MagicMock( + side_effect=heat_exc.HTTPNotFound) + + def test_stack_delete(self): + arglist = ['stack1', 'stack2', 'stack3'] + parsed_args = self.check_parser(self.cmd, arglist, []) + + self.cmd.take_action(parsed_args) + + self.stack_client.delete.assert_any_call('stack1') + self.stack_client.delete.assert_any_call('stack2') + self.stack_client.delete.assert_any_call('stack3') + + def test_stack_delete_not_found(self): + arglist = ['my_stack'] + self.stack_client.delete.side_effect = heat_exc.HTTPNotFound + parsed_args = self.check_parser(self.cmd, arglist, []) + + self.assertRaises(exc.CommandError, self.cmd.take_action, parsed_args) + + def test_stack_delete_one_found_one_not_found(self): + arglist = ['stack1', 'stack2'] + self.stack_client.delete.side_effect = [None, heat_exc.HTTPNotFound] + parsed_args = self.check_parser(self.cmd, arglist, []) + + error = self.assertRaises(exc.CommandError, + self.cmd.take_action, parsed_args) + + self.stack_client.delete.assert_any_call('stack1') + self.stack_client.delete.assert_any_call('stack2') + self.assertEqual('Unable to delete 1 of the 2 stacks.', str(error)) + + def test_stack_delete_wait(self): + arglist = ['stack1', 'stack2', 'stack3', '--wait'] + parsed_args = self.check_parser(self.cmd, arglist, []) + + self.cmd.take_action(parsed_args) + + self.stack_client.delete.assert_any_call('stack1') + self.stack_client.get.assert_any_call('stack1') + self.stack_client.delete.assert_any_call('stack2') + self.stack_client.get.assert_any_call('stack2') + self.stack_client.delete.assert_any_call('stack3') + self.stack_client.get.assert_any_call('stack3') + + def test_stack_delete_wait_one_pass_one_fail(self): + arglist = ['stack1', 'stack2', 'stack3', '--wait'] + self.stack_client.get.side_effect = [ + stacks.Stack(None, {'stack_status': 'DELETE_FAILED'}), + heat_exc.HTTPNotFound, + stacks.Stack(None, {'stack_status': 'DELETE_FAILED'}), + ] + parsed_args = self.check_parser(self.cmd, arglist, []) + + error = self.assertRaises(exc.CommandError, + self.cmd.take_action, parsed_args) + + self.stack_client.delete.assert_any_call('stack1') + self.stack_client.get.assert_any_call('stack1') + self.stack_client.delete.assert_any_call('stack2') + self.stack_client.get.assert_any_call('stack2') + self.stack_client.delete.assert_any_call('stack3') + self.stack_client.get.assert_any_call('stack3') + self.assertEqual('Unable to delete 2 of the 3 stacks.', str(error)) + + @mock.patch('sys.stdin', spec=six.StringIO) + def test_stack_delete_prompt(self, mock_stdin): + arglist = ['my_stack'] + mock_stdin.isatty.return_value = True + mock_stdin.readline.return_value = 'y' + parsed_args = self.check_parser(self.cmd, arglist, []) + + self.cmd.take_action(parsed_args) + + mock_stdin.readline.assert_called_with() + self.stack_client.delete.assert_called_with('my_stack') + + @mock.patch('sys.stdin', spec=six.StringIO) + def test_stack_delete_prompt_no(self, mock_stdin): + arglist = ['my_stack'] + mock_stdin.isatty.return_value = True + mock_stdin.readline.return_value = 'n' + parsed_args = self.check_parser(self.cmd, arglist, []) + + self.cmd.take_action(parsed_args) + + mock_stdin.readline.assert_called_with() + self.stack_client.delete.assert_not_called() + + class TestStackAdopt(TestStack): adopt_file = 'heatclient/tests/test_templates/adopt.json' diff --git a/heatclient/tests/unit/test_utils.py b/heatclient/tests/unit/test_utils.py index 8237b4f..c58f788 100644 --- a/heatclient/tests/unit/test_utils.py +++ b/heatclient/tests/unit/test_utils.py @@ -188,6 +188,17 @@ class ShellTest(testtools.TestCase): self.assertEqual(expected, utils.event_log_formatter(events_list)) self.assertEqual('', utils.event_log_formatter([])) + def test_wait_for_delete(self): + def status_f(id): + raise exc.HTTPNotFound + + def bad_status_f(id): + return {'status': 'failed'} + + self.assertTrue(utils.wait_for_delete(status_f, 123)) + self.assertFalse(utils.wait_for_delete(status_f, 123, timeout=0)) + self.assertFalse(utils.wait_for_delete(bad_status_f, 123)) + class ShellTestParameterFiles(testtools.TestCase): |