Add destroyed container context manager
Required for running destroy docker contaier before code block and startup it after block Usage: from octane.util import docker with docker.destoyed_container("container_name"): ... Change-Id: Iab57665d2b345bc19f04fad4c0cd4a4e461edd89
This commit is contained in:
parent
b35b1c926e
commit
44beb3932b
@ -201,3 +201,32 @@ def test_patch_container_service(
|
|||||||
mock.call(container, ["service", service, "restart"])
|
mock.call(container, ["service", service, "restart"])
|
||||||
] == docker_run_mock.call_args_list
|
] == docker_run_mock.call_args_list
|
||||||
patch_mock.assert_called_once_with(container, prefix, *patches)
|
patch_mock.assert_called_once_with(container, prefix, *patches)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("container", ["container"])
|
||||||
|
@pytest.mark.parametrize("container_name", ["container_name"])
|
||||||
|
@pytest.mark.parametrize("is_exception", [True, False])
|
||||||
|
def test_destroyed_container(mocker, container, container_name, is_exception):
|
||||||
|
subprocess_call_mock = mocker.patch("octane.util.subprocess.call")
|
||||||
|
get_name_mock = mocker.patch(
|
||||||
|
"octane.util.docker.get_docker_container_name",
|
||||||
|
return_value=container_name)
|
||||||
|
|
||||||
|
class TestException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
if is_exception:
|
||||||
|
with pytest.raises(TestException):
|
||||||
|
with docker.destroyed_container(container):
|
||||||
|
raise TestException
|
||||||
|
else:
|
||||||
|
with docker.destroyed_container(container):
|
||||||
|
pass
|
||||||
|
|
||||||
|
assert [
|
||||||
|
mock.call(["dockerctl", "destroy", container_name]),
|
||||||
|
mock.call(["dockerctl", "start", container]),
|
||||||
|
mock.call(["dockerctl", "check", container]),
|
||||||
|
] == subprocess_call_mock.call_args_list
|
||||||
|
|
||||||
|
get_name_mock.assert_called_once_with(container)
|
||||||
|
@ -187,6 +187,17 @@ def start_container(container):
|
|||||||
_container_action(container, "start")
|
_container_action(container, "start")
|
||||||
|
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def destroyed_container(container):
|
||||||
|
name = get_docker_container_name(container)
|
||||||
|
subprocess.call(["dockerctl", "destroy", name])
|
||||||
|
try:
|
||||||
|
yield
|
||||||
|
finally:
|
||||||
|
subprocess.call(["dockerctl", "start", container])
|
||||||
|
subprocess.call(["dockerctl", "check", container])
|
||||||
|
|
||||||
|
|
||||||
def wait_for_container(container, attempts=120, delay=5):
|
def wait_for_container(container, attempts=120, delay=5):
|
||||||
assert delay > 0
|
assert delay > 0
|
||||||
_wait_for_start_container(container, attempts, delay)
|
_wait_for_start_container(container, attempts, delay)
|
||||||
|
Loading…
Reference in New Issue
Block a user