Skip to content

Commit 7dcbf2a

Browse files
authored
Fix tests (#87)
1 parent 2e1d99d commit 7dcbf2a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+283
-362
lines changed

dockerc

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ while true; do
156156

157157
done
158158

159+
# Remove leading space
160+
DOCKERC_COMMAND_ARGS="${DOCKERC_COMMAND_ARGS# }"
161+
159162
# Stop parsing arguments
160163
break
161164

@@ -858,32 +861,28 @@ EOF
858861

859862
fi
860863

864+
# Get args
865+
ARGS=''
866+
if [ -n "$COMMAND_ARGS" ]; then
867+
ARGS=" $COMMAND_ARGS"
868+
fi
869+
861870
# Check for shell arguments preset shortcut
862-
if [ "$(echo "$ARGS" | cut -c 1-2)" = '$ ' ]; then
863-
# Replace arguments preset shortcut
864-
ARGS="@$ $(echo "$ARGS" | cut -c 3-)"
871+
if [ "$COMMAND_PRESET" = '$' ]; then
872+
# Replace command preset shortcut
873+
COMMAND_PRESET='@$'
865874
fi
866875

867876
# Check for arguments
868-
if [ -z "$ARGS" ]; then
877+
if [ -z "$COMMAND_PRESET" ]; then
869878
# If arguments are empty, set to the default arguments
870-
ARGS='up -d'
879+
ARGS="up -d$ARGS"
871880

872881
# Check for arguments preset
873-
elif [ "$(echo "$ARGS" | cut -c1)" = '@' ]; then
882+
elif [ "$(echo "$COMMAND_PRESET" | cut -c1)" = '@' ]; then
874883

875-
# Get first arg as preset name
876-
ARGS_PRESET="${ARGS%% *}"
877-
ARGS_PRESET="${ARGS_PRESET#?}"
878-
879-
# Clear first arg from args
880-
if [ "@$ARGS_PRESET" = "$ARGS" ]; then
881-
# No other args
882-
ARGS=''
883-
else
884-
# Other args
885-
ARGS=" ${ARGS#* }"
886-
fi
884+
# Get preset name
885+
ARGS_PRESET="${COMMAND_PRESET#?}"
887886

888887
PRINT_ARGS_PRESET_HELP='false'
889888

@@ -1154,6 +1153,9 @@ elif [ "$(echo "$ARGS" | cut -c1)" = '@' ]; then
11541153
exit 1
11551154
fi
11561155

1156+
# No arguments preset, use the command preset as arguments
1157+
else
1158+
ARGS="$COMMAND_PRESET$ARGS"
11571159
fi
11581160

11591161
if [ "$QUIET" = 'false' ]; then

test/src/RunDockerc.py

Lines changed: 65 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,84 +5,116 @@ class RunDockerc():
55
def __init__(
66
self,
77
dockerc_path: str,
8+
dockerc_args: list[str],
89
cwd: str,
910
context: str | None = None,
10-
*args: list[str],
11+
env: dict[str, str] | None = None,
1112
):
1213
self.dockerc_path = dockerc_path
14+
self.dockerc_args = dockerc_args
1315
self.cwd = cwd
14-
self.context = context
15-
self.args = args
16+
self.context = (
17+
context
18+
if context is not None else
19+
dockerc_args[0]
20+
if dockerc_args and dockerc_args[0] and not dockerc_args[0].startswith('-') else
21+
None
22+
)
23+
self.env = env
1624

1725
self.proc = subprocess.Popen(
1826
[
1927
self.dockerc_path,
2028
'-n',
21-
*([self.context] if self.context else []),
22-
*self.args,
29+
*self.dockerc_args,
2330
],
2431
cwd = self.cwd,
2532
stdout = subprocess.PIPE,
33+
stderr = subprocess.PIPE,
34+
env = self.env,
2635
)
2736
self.proc_stdout, self.proc_stderr = self.proc.communicate()
2837

2938
def assert_context(
3039
self,
31-
stdout: bytes | re.Pattern | None = None,
32-
stderr: bytes | re.Pattern | None = None,
40+
*,
41+
stdout: bytes | re.Pattern | None = b'',
42+
stderr: bytes | re.Pattern | None = b'',
3343
returncode: int = 0,
3444
):
35-
# if self.proc_stdout != stdout:
36-
# # Debugging
37-
# import difflib
38-
# diff = difflib.unified_diff(
39-
# self.proc_stdout.decode('utf-8').splitlines(keepends = True),
40-
# (
41-
# stdout.decode('utf-8').splitlines(keepends = True)
42-
# if isinstance(stdout, bytes) else
43-
# stdout.pattern.splitlines(keepends = True)
44-
# if isinstance(stdout, re.Pattern) else
45-
# stdout
46-
# ),
47-
# )
48-
# print(''.join(diff))
45+
if stdout is not None:
46+
if self.proc_stdout != stdout:
47+
# Debugging
48+
import difflib
49+
diff = difflib.unified_diff(
50+
self.proc_stdout.decode('utf-8').splitlines(keepends = True),
51+
(
52+
stdout.decode('utf-8').splitlines(keepends = True)
53+
if isinstance(stdout, bytes) else
54+
stdout.pattern.splitlines(keepends = True)
55+
if isinstance(stdout, re.Pattern) else
56+
stdout
57+
),
58+
)
59+
print(''.join(diff))
60+
61+
if isinstance(stdout, re.Pattern):
62+
assert stdout.match(self.proc_stdout.decode('utf-8'))
63+
else:
64+
assert self.proc_stdout == stdout
4965

50-
if isinstance(stdout, re.Pattern):
51-
assert stdout.match(self.proc_stdout.decode('utf-8'))
52-
else:
53-
assert self.proc_stdout == stdout
66+
if stderr is not None:
67+
if self.proc_stderr != stderr:
68+
# Debugging
69+
import difflib
70+
diff = difflib.unified_diff(
71+
self.proc_stderr.decode('utf-8').splitlines(keepends = True),
72+
(
73+
stderr.decode('utf-8').splitlines(keepends = True)
74+
if isinstance(stderr, bytes) else
75+
stderr.pattern.splitlines(keepends = True)
76+
if isinstance(stderr, re.Pattern) else
77+
stderr
78+
),
79+
)
80+
print(''.join(diff))
5481

55-
if isinstance(stderr, re.Pattern):
56-
assert stderr.match(self.proc_stderr.decode('utf-8'))
57-
else:
58-
assert self.proc_stderr == stderr
82+
if isinstance(stderr, re.Pattern):
83+
assert stderr.match(self.proc_stderr.decode('utf-8'))
84+
else:
85+
assert self.proc_stderr == stderr
5986

6087
assert self.proc.returncode == returncode
6188

62-
def assert_context_found(
89+
def assert_context_ok(
6390
self,
6491
stdout: bytes | re.Pattern = b'',
92+
*,
93+
stderr: bytes | re.Pattern | None = None,
6594
):
6695
return self.assert_context(
6796
stdout = stdout,
97+
**({'stderr': stderr} if stderr is not None else {}),
6898
)
6999

70100
def assert_context_error(
71101
self,
72-
stdout: bytes | re.Pattern | None = None,
73102
stderr: bytes | re.Pattern | None = None,
103+
*,
104+
stdout: bytes | re.Pattern | None = None,
105+
returncode: int = 1,
74106
):
75107
return self.assert_context(
76108
**({'stdout': stdout} if stdout is not None else {}),
77109
**({'stderr': stderr} if stderr is not None else {}),
78-
returncode = 1,
110+
returncode = returncode,
79111
)
80112

81113
def assert_context_not_found(
82114
self,
83115
):
84116
return self.assert_context(
85-
stdout = (
117+
stderr = (
86118
(
87119
b'Error: Unknown context \''
88120
+ self.context.encode('utf-8')

test/src/TestDirContext.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@ def __exit__(self, *args):
2626

2727
def run_dockerc(
2828
self,
29-
*args,
30-
cwd: str = None,
29+
*args: list[str],
30+
cwd: str | None = None,
31+
env: dict[str, str] | None = None,
3132
) -> RunDockerc:
3233
return RunDockerc(
3334
self.dockerc_path,
34-
cwd or self.cwd,
35-
*args,
35+
dockerc_args = args,
36+
cwd = cwd or self.cwd,
37+
env = env,
3638
)

test/src/format_dockerc_stdout.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
def format_dockerc_stdout(docker_comand: bytes) -> bytes:
2-
return b'\n> ' + docker_comand + b'\n\n'
1+
def format_dockerc_stdout(docker_command: bytes) -> bytes:
2+
return b'\n> ' + docker_command + b'\n\n'

test/test/abstract_standard/test_simple.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ def test_abstract_standard(file = __file__):
55
with TestDirContext(file) as ctx:
66
dockerc = ctx.run_dockerc()
77
dockerc.assert_context_error(
8-
stdout = b'Error: Abstract context found\n',
8+
stderr = b'Error: Abstract context found\n',
99
)
1010

1111
def test_abstract_standard_forced(file = __file__):
1212
with TestDirContext(file) as ctx:
1313
dockerc = ctx.run_dockerc(
1414
'-f',
1515
)
16-
dockerc.assert_context_found(
16+
dockerc.assert_context_ok(
1717
format_dockerc_stdout(
1818
b'docker compose'
1919
b' -f ./docker-compose.yml'

test/test/abstract_standard_two/test_simple.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ def test_simple(file = __file__):
55
with TestDirContext(file) as ctx:
66
dockerc = ctx.run_dockerc()
77
dockerc.assert_context_error(
8-
stdout = b'Error: Abstract context found\n',
8+
stderr = b'Error: Abstract context found\n',
99
)
1010

1111
def test_forced(file = __file__):
1212
with TestDirContext(file) as ctx:
1313
dockerc = ctx.run_dockerc(
1414
'-f',
1515
)
16-
dockerc.assert_context_found(
16+
dockerc.assert_context_ok(
1717
format_dockerc_stdout(
1818
b'docker compose'
1919
b' -f ./docker-compose.yml -f ./docker-compose.override.yml'

test/test/base/test_base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ def test_base(file = __file__):
66
dockerc = ctx.run_dockerc(
77
'base',
88
)
9-
dockerc.assert_context_found(
9+
dockerc.assert_context_ok(
1010
format_dockerc_stdout(
1111
b'docker compose'
1212
b' -f ./docker-compose-base.yml'

test/test/base/test_default.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
def test_default_not_found(file = __file__):
44
with TestDirContext(file) as ctx:
5-
dockerc = ctx.run_dockerc(
6-
None,
7-
)
5+
dockerc = ctx.run_dockerc()
86
dockerc.assert_context_not_found()
97

108
def test_dev_not_found(file = __file__):

test/test/base_prod/test_base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ def test_base(file = __file__):
66
dockerc = ctx.run_dockerc(
77
'base',
88
)
9-
dockerc.assert_context_found(
9+
dockerc.assert_context_ok(
1010
format_dockerc_stdout(
1111
b'docker compose'
1212
b' -f ./docker-compose-base.yml'

test/test/base_prod/test_base_prod.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ def test_base_prod(file = __file__):
66
dockerc = ctx.run_dockerc(
77
'base.prod',
88
)
9-
dockerc.assert_context_found(
9+
dockerc.assert_context_ok(
1010
format_dockerc_stdout(
1111
b'docker compose'
1212
b' -f ./docker-compose-base.yml'

0 commit comments

Comments
 (0)