summaryrefslogtreecommitdiff
path: root/openstackclient/tests
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-06-01 20:07:27 +0000
committerGerrit Code Review <review@openstack.org>2015-06-01 20:07:27 +0000
commit4d57e9f62a6d49fb7114ea718dda166f349d9341 (patch)
tree1d89091f385113f1771806a8e436f65a26bbfed6 /openstackclient/tests
parent40634c3f2cec4c23e2123b3ff5cdc447f26cf977 (diff)
parent224d375ef4120998dc51fbf55f1778d1ccf118a0 (diff)
downloadpython-openstackclient-4d57e9f62a6d49fb7114ea718dda166f349d9341.tar.gz
Merge "Add --wait to server delete"
Diffstat (limited to 'openstackclient/tests')
-rw-r--r--openstackclient/tests/common/test_utils.py39
-rw-r--r--openstackclient/tests/compute/v2/test_server.py47
2 files changed, 86 insertions, 0 deletions
diff --git a/openstackclient/tests/common/test_utils.py b/openstackclient/tests/common/test_utils.py
index cda0b135..d9f5b7a5 100644
--- a/openstackclient/tests/common/test_utils.py
+++ b/openstackclient/tests/common/test_utils.py
@@ -13,6 +13,9 @@
# under the License.
#
+import time
+import uuid
+
import mock
from openstackclient.common import exceptions
@@ -120,6 +123,42 @@ class TestUtils(test_utils.TestCase):
utils.sort_items,
items, sort_str)
+ @mock.patch.object(time, 'sleep')
+ def test_wait_for_delete_ok(self, mock_sleep):
+ # Tests the normal flow that the resource is deleted with a 404 coming
+ # back on the 2nd iteration of the wait loop.
+ resource = mock.MagicMock(status='ACTIVE', progress=None)
+ mock_get = mock.Mock(side_effect=[resource,
+ exceptions.NotFound(404)])
+ manager = mock.MagicMock(get=mock_get)
+ res_id = str(uuid.uuid4())
+ callback = mock.Mock()
+ self.assertTrue(utils.wait_for_delete(manager, res_id,
+ callback=callback))
+ mock_sleep.assert_called_once_with(5)
+ callback.assert_called_once_with(0)
+
+ @mock.patch.object(time, 'sleep')
+ def test_wait_for_delete_timeout(self, mock_sleep):
+ # Tests that we fail if the resource is not deleted before the timeout.
+ resource = mock.MagicMock(status='ACTIVE')
+ mock_get = mock.Mock(return_value=resource)
+ manager = mock.MagicMock(get=mock_get)
+ res_id = str(uuid.uuid4())
+ self.assertFalse(utils.wait_for_delete(manager, res_id, sleep_time=1,
+ timeout=1))
+ mock_sleep.assert_called_once_with(1)
+
+ @mock.patch.object(time, 'sleep')
+ def test_wait_for_delete_error(self, mock_sleep):
+ # Tests that we fail if the resource goes to error state while waiting.
+ resource = mock.MagicMock(status='ERROR')
+ mock_get = mock.Mock(return_value=resource)
+ manager = mock.MagicMock(get=mock_get)
+ res_id = str(uuid.uuid4())
+ self.assertFalse(utils.wait_for_delete(manager, res_id))
+ self.assertFalse(mock_sleep.called)
+
class NoUniqueMatch(Exception):
pass
diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py
index baf53742..a8a1936d 100644
--- a/openstackclient/tests/compute/v2/test_server.py
+++ b/openstackclient/tests/compute/v2/test_server.py
@@ -16,6 +16,7 @@
import copy
import mock
+from openstackclient.common import utils as common_utils
from openstackclient.compute.v2 import server
from openstackclient.tests.compute.v2 import fakes as compute_fakes
from openstackclient.tests import fakes
@@ -319,6 +320,52 @@ class TestServerDelete(TestServer):
compute_fakes.server_id,
)
+ @mock.patch.object(common_utils, 'wait_for_delete', return_value=True)
+ def test_server_delete_wait_ok(self, mock_wait_for_delete):
+ arglist = [
+ compute_fakes.server_id, '--wait'
+ ]
+ verifylist = [
+ ('servers', [compute_fakes.server_id]),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # DisplayCommandBase.take_action() returns two tuples
+ self.cmd.take_action(parsed_args)
+
+ self.servers_mock.delete.assert_called_with(
+ compute_fakes.server_id,
+ )
+
+ mock_wait_for_delete.assert_called_once_with(
+ self.servers_mock,
+ compute_fakes.server_id,
+ callback=server._show_progress
+ )
+
+ @mock.patch.object(common_utils, 'wait_for_delete', return_value=False)
+ def test_server_delete_wait_fails(self, mock_wait_for_delete):
+ arglist = [
+ compute_fakes.server_id, '--wait'
+ ]
+ verifylist = [
+ ('servers', [compute_fakes.server_id]),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # DisplayCommandBase.take_action() returns two tuples
+ self.assertRaises(SystemExit, self.cmd.take_action, parsed_args)
+
+ self.servers_mock.delete.assert_called_with(
+ compute_fakes.server_id,
+ )
+
+ mock_wait_for_delete.assert_called_once_with(
+ self.servers_mock,
+ compute_fakes.server_id,
+ callback=server._show_progress
+ )
+
class TestServerImageCreate(TestServer):