DEVX-26: fix: use host Docker socket with DOCKER_HOST fallback to local dockerd
Post-merge / detect-type (push) Successful in 7s
Post-merge / validate-commit-msg (push) Successful in 7s
Post-merge / configure-repo (push) Successful in 9s
Post-merge / release (push) Successful in 46s
Post-merge / vikunja (push) Successful in 10s
Post-merge / badges (push) Successful in 41s
Post-merge / sync-wiki (push) Successful in 43s

This commit was merged in pull request #41.
This commit is contained in:
2026-06-24 01:36:21 +00:00
parent 37730e2187
commit 39526d8e6a
4 changed files with 44 additions and 46 deletions
+16 -32
View File
@@ -23,11 +23,17 @@ class TestIsDockerReady:
class TestStartDockerDaemon:
@patch("devx.molecule.start_docker.is_docker_ready", return_value=True)
def test_host_socket_available(self, mock_ready: MagicMock) -> None:
"""Should return immediately if host Docker is available."""
assert start_docker_daemon(timeout=5) is True
mock_ready.assert_called_once()
@patch("devx.molecule.start_docker.time.sleep")
@patch("devx.molecule.start_docker.is_docker_ready")
@patch("devx.molecule.start_docker.subprocess.Popen")
@patch("devx.molecule.start_docker.tempfile.NamedTemporaryFile")
def test_starts_successfully(
def test_starts_local_daemon(
self,
mock_ntf: MagicMock,
mock_popen: MagicMock,
@@ -35,7 +41,8 @@ class TestStartDockerDaemon:
mock_sleep: MagicMock,
) -> None:
mock_ntf.return_value = MagicMock()
mock_ready.side_effect = [False, True]
# Host socket not available, then local daemon starts on third check
mock_ready.side_effect = [False, False, False, True]
assert start_docker_daemon(timeout=5) is True
mock_popen.assert_called_once()
popen_args = mock_popen.call_args.args[0]
@@ -44,7 +51,7 @@ class TestStartDockerDaemon:
assert "vfs" in popen_args
assert "-H" in popen_args
assert f"unix://{DOCKER_SOCK}" in popen_args
mock_sleep.assert_called_once_with(1)
assert mock_sleep.call_count == 2
@patch("devx.molecule.start_docker.time.sleep")
@patch("devx.molecule.start_docker.is_docker_ready", return_value=False)
@@ -66,7 +73,7 @@ class TestStartDockerDaemon:
@patch("devx.molecule.start_docker.is_docker_ready")
@patch("devx.molecule.start_docker.subprocess.Popen")
@patch("devx.molecule.start_docker.tempfile.NamedTemporaryFile")
def test_ready_on_first_check(
def test_local_daemon_ready_on_first_check(
self,
mock_ntf: MagicMock,
mock_popen: MagicMock,
@@ -74,43 +81,20 @@ class TestStartDockerDaemon:
mock_sleep: MagicMock,
) -> None:
mock_ntf.return_value = MagicMock()
mock_ready.return_value = True
# Host not available, local daemon ready on first loop check
mock_ready.side_effect = [False, False, True]
assert start_docker_daemon(timeout=5) is True
mock_popen.assert_called_once()
mock_sleep.assert_not_called()
@patch("devx.molecule.start_docker.time.sleep")
@patch("devx.molecule.start_docker.is_docker_ready")
@patch("devx.molecule.start_docker.subprocess.Popen")
@patch("devx.molecule.start_docker.tempfile.NamedTemporaryFile")
def test_custom_timeout(
self,
mock_ntf: MagicMock,
mock_popen: MagicMock,
mock_ready: MagicMock,
mock_sleep: MagicMock,
) -> None:
mock_ntf.return_value = MagicMock()
mock_ready.side_effect = [False] * 9 + [True]
assert start_docker_daemon(timeout=10) is True
assert mock_sleep.call_count == 9
mock_sleep.assert_called_once_with(1)
@patch("devx.molecule.start_docker.os.environ")
@patch("devx.molecule.start_docker.time.sleep")
@patch("devx.molecule.start_docker.is_docker_ready")
@patch("devx.molecule.start_docker.subprocess.Popen")
@patch("devx.molecule.start_docker.tempfile.NamedTemporaryFile")
@patch("devx.molecule.start_docker.is_docker_ready", return_value=True)
def test_sets_docker_host(
self,
mock_ntf: MagicMock,
mock_popen: MagicMock,
mock_ready: MagicMock,
mock_sleep: MagicMock,
mock_environ: MagicMock,
) -> None:
"""DOCKER_HOST must be set so molecule connects to local daemon."""
mock_ntf.return_value = MagicMock()
mock_ready.return_value = True
"""DOCKER_HOST must be set so molecule connects to correct socket."""
start_docker_daemon(timeout=5)
mock_environ.__setitem__.assert_called_with("DOCKER_HOST", f"unix://{DOCKER_SOCK}")