Skip to content

Commit 0afb95c

Browse files
committed
test docker and docker_image directly
1 parent b609368 commit 0afb95c

File tree

9 files changed

+46
-88
lines changed

9 files changed

+46
-88
lines changed

pre_commit/languages/docker.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,8 @@ def run_hook(
138138
entry_exe, *cmd_rest = helpers.hook_cmd(entry, args)
139139

140140
entry_tag = ('--entrypoint', entry_exe, docker_tag(prefix))
141-
cmd = (*docker_cmd(), *entry_tag, *cmd_rest)
142141
return helpers.run_xargs(
143-
cmd,
142+
(*docker_cmd(), *entry_tag, *cmd_rest),
144143
file_args,
145144
require_serial=require_serial,
146145
color=color,

testing/language_helpers.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@ def run_language(
2020
prefix = Prefix(str(path))
2121
version = version or language.get_default_version()
2222

23-
language.install_environment(prefix, version, deps)
24-
health_error = language.health_check(prefix, version)
25-
assert health_error is None, health_error
23+
if language.ENVIRONMENT_DIR is not None:
24+
language.install_environment(prefix, version, deps)
25+
health_error = language.health_check(prefix, version)
26+
assert health_error is None, health_error
2627
with language.in_env(prefix, version):
2728
ret, out = language.run_hook(
2829
prefix,

testing/resources/docker_hooks_repo/.pre-commit-hooks.yaml

Lines changed: 0 additions & 17 deletions
This file was deleted.

testing/resources/docker_hooks_repo/Dockerfile

Lines changed: 0 additions & 3 deletions
This file was deleted.

testing/resources/docker_image_hooks_repo/.pre-commit-hooks.yaml

Lines changed: 0 additions & 8 deletions
This file was deleted.

testing/util.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,13 @@
66

77
import pytest
88

9-
from pre_commit.util import CalledProcessError
109
from pre_commit.util import cmd_output
11-
from pre_commit.util import cmd_output_b
1210
from testing.auto_namedtuple import auto_namedtuple
1311

1412

1513
TESTING_DIR = os.path.abspath(os.path.dirname(__file__))
1614

1715

18-
def docker_is_running() -> bool: # pragma: win32 no cover
19-
try:
20-
cmd_output_b('docker', 'ps')
21-
except CalledProcessError: # pragma: no cover
22-
return False
23-
else:
24-
return True
25-
26-
2716
def get_resource_path(path):
2817
return os.path.join(TESTING_DIR, 'resources', path)
2918

@@ -41,10 +30,6 @@ def cmd_output_mocked_pre_commit_home(
4130
return ret, out.replace('\r\n', '\n'), None
4231

4332

44-
skipif_cant_run_docker = pytest.mark.skipif(
45-
os.name == 'nt' or not docker_is_running(),
46-
reason="Docker isn't running or can't be accessed",
47-
)
4833
xfailif_windows = pytest.mark.xfail(os.name == 'nt', reason='windows')
4934

5035

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from __future__ import annotations
2+
3+
from pre_commit.languages import docker_image
4+
from testing.language_helpers import run_language
5+
from testing.util import xfailif_windows
6+
7+
8+
@xfailif_windows # pragma: win32 no cover
9+
def test_docker_image_hook_via_entrypoint(tmp_path):
10+
ret = run_language(
11+
tmp_path,
12+
docker_image,
13+
'--entrypoint echo ubuntu:22.04',
14+
args=('hello hello world',),
15+
)
16+
assert ret == (0, b'hello hello world\n')
17+
18+
19+
@xfailif_windows # pragma: win32 no cover
20+
def test_docker_image_hook_via_args(tmp_path):
21+
ret = run_language(
22+
tmp_path,
23+
docker_image,
24+
'ubuntu:22.04 echo',
25+
args=('hello hello world',),
26+
)
27+
assert ret == (0, b'hello hello world\n')

tests/languages/docker_test.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
from pre_commit.languages import docker
1313
from pre_commit.util import CalledProcessError
14+
from testing.language_helpers import run_language
15+
from testing.util import xfailif_windows
1416

1517
DOCKER_CGROUP_EXAMPLE = b'''\
1618
12:hugetlb:/docker/c33988ec7651ebc867cb24755eaf637a6734088bc7eef59d5799293a9e5450f7
@@ -181,3 +183,15 @@ def test_get_docker_path_in_docker_docker_in_docker(in_docker):
181183
err = CalledProcessError(1, (), b'', b'')
182184
with mock.patch.object(docker, 'cmd_output_b', side_effect=err):
183185
assert docker._get_docker_path('/project') == '/project'
186+
187+
188+
@xfailif_windows # pragma: win32 no cover
189+
def test_docker_hook(tmp_path):
190+
dockerfile = '''\
191+
FROM ubuntu:22.04
192+
CMD ["echo", "This is overwritten by the entry"']
193+
'''
194+
tmp_path.joinpath('Dockerfile').write_text(dockerfile)
195+
196+
ret = run_language(tmp_path, docker, 'echo hello hello world')
197+
assert ret == (0, b'hello hello world\n')

tests/repository_test.py

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
from testing.fixtures import modify_manifest
3131
from testing.util import cwd
3232
from testing.util import get_resource_path
33-
from testing.util import skipif_cant_run_docker
3433

3534

3635
def _norm_out(b):
@@ -163,45 +162,6 @@ def test_language_versioned_python_hook(tempdir_factory, store):
163162
)
164163

165164

166-
@skipif_cant_run_docker # pragma: win32 no cover
167-
def test_run_a_docker_hook(tempdir_factory, store):
168-
_test_hook_repo(
169-
tempdir_factory, store, 'docker_hooks_repo',
170-
'docker-hook',
171-
['Hello World from docker'], b'Hello World from docker\n',
172-
)
173-
174-
175-
@skipif_cant_run_docker # pragma: win32 no cover
176-
def test_run_a_docker_hook_with_entry_args(tempdir_factory, store):
177-
_test_hook_repo(
178-
tempdir_factory, store, 'docker_hooks_repo',
179-
'docker-hook-arg',
180-
['Hello World from docker'], b'Hello World from docker',
181-
)
182-
183-
184-
@skipif_cant_run_docker # pragma: win32 no cover
185-
def test_run_a_failing_docker_hook(tempdir_factory, store):
186-
_test_hook_repo(
187-
tempdir_factory, store, 'docker_hooks_repo',
188-
'docker-hook-failing',
189-
['Hello World from docker'],
190-
mock.ANY, # an error message about `bork` not existing
191-
expected_return_code=127,
192-
)
193-
194-
195-
@skipif_cant_run_docker # pragma: win32 no cover
196-
@pytest.mark.parametrize('hook_id', ('echo-entrypoint', 'echo-cmd'))
197-
def test_run_a_docker_image_hook(tempdir_factory, store, hook_id):
198-
_test_hook_repo(
199-
tempdir_factory, store, 'docker_image_hooks_repo',
200-
hook_id,
201-
['Hello World from docker'], b'Hello World from docker\n',
202-
)
203-
204-
205165
def test_system_hook_with_spaces(tempdir_factory, store):
206166
_test_hook_repo(
207167
tempdir_factory, store, 'system_hook_with_spaces_repo',

0 commit comments

Comments
 (0)