Marco Ricci commited on 2024-06-30 21:37:17
Zeige 2 geänderte Dateien mit 20 Einfügungen und 7 Löschungen.
... | ... |
@@ -5,6 +5,7 @@ |
5 | 5 |
from __future__ import annotations |
6 | 6 |
|
7 | 7 |
import base64 |
8 |
+from collections.abc import Callable |
|
8 | 9 |
import json |
9 | 10 |
import os |
10 | 11 |
import socket |
... | ... |
@@ -131,7 +132,7 @@ SINGLES: dict[tuple[str, ...], SingleConfiguration] = { |
131 | 132 |
('--import', '-'): SingleConfiguration(False, b'{"services": {}}', True), |
132 | 133 |
} |
133 | 134 |
INTERESTING_OPTION_COMBINATIONS: list[OptionCombination] = [] |
134 |
-config: OptionCombination | SingleConfiguration |
|
135 |
+config: IncompatibleConfiguration | SingleConfiguration |
|
135 | 136 |
for opt, config in INCOMPATIBLE.items(): |
136 | 137 |
for opt2 in config.other_options: |
137 | 138 |
INTERESTING_OPTION_COMBINATIONS.extend([ |
... | ... |
@@ -180,7 +181,7 @@ class TestCLI: |
180 | 181 |
f'program died unexpectedly with exit code {result.exit_code}' |
181 | 182 |
) |
182 | 183 |
assert not result.stderr_bytes, ( |
183 |
- f'program barfed on stderr: {result.stderr_bytes}' |
|
184 |
+ f'program barfed on stderr: {result.stderr_bytes!r}' |
|
184 | 185 |
) |
185 | 186 |
for c in charset: |
186 | 187 |
assert c not in result.stdout, ( |
... | ... |
@@ -198,7 +199,7 @@ class TestCLI: |
198 | 199 |
f'program died unexpectedly with exit code {result.exit_code}' |
199 | 200 |
) |
200 | 201 |
assert not result.stderr_bytes, ( |
201 |
- f'program barfed on stderr: {result.stderr_bytes}' |
|
202 |
+ f'program barfed on stderr: {result.stderr_bytes!r}' |
|
202 | 203 |
) |
203 | 204 |
passphrase = result.stdout.rstrip('\r\n') |
204 | 205 |
for i in range(len(passphrase) - 1): |
... | ... |
@@ -422,13 +423,17 @@ class TestCLI: |
422 | 423 |
self, monkeypatch: Any, |
423 | 424 |
) -> None: |
424 | 425 |
runner = click.testing.CliRunner(mix_stderr=False) |
426 |
+ # `isolated_config` validates the configuration. So, to pass an |
|
427 |
+ # actual broken configuration, we must open the configuration file |
|
428 |
+ # ourselves afterwards, inside the context. |
|
425 | 429 |
with tests.isolated_config(monkeypatch=monkeypatch, runner=runner, |
426 | 430 |
config={'services': {}}): |
427 | 431 |
with open(cli._config_filename(), 'wt') as outfile: |
428 | 432 |
print('This string is not valid JSON.', file=outfile) |
433 |
+ dname = os.path.dirname(cli._config_filename()) |
|
429 | 434 |
result = runner.invoke( |
430 | 435 |
cli.derivepassphrase, |
431 |
- ['--import', os.path.dirname(cli._config_filename())], |
|
436 |
+ ['--import', os.fsdecode(dname)], |
|
432 | 437 |
catch_exceptions=False) |
433 | 438 |
assert result.exit_code > 0, ( |
434 | 439 |
'program unexpectedly succeeded' |
... | ... |
@@ -504,7 +509,7 @@ class TestCLI: |
504 | 509 |
config={'services': {}}): |
505 | 510 |
dname = os.path.dirname(cli._config_filename()) |
506 | 511 |
result = runner.invoke(cli.derivepassphrase, |
507 |
- ['--export', dname], |
|
512 |
+ ['--export', os.fsdecode(dname)], |
|
508 | 513 |
input=b'null', catch_exceptions=False) |
509 | 514 |
assert result.exit_code > 0, ( |
510 | 515 |
'program unexpectedly succeeded' |
... | ... |
@@ -579,6 +584,7 @@ contents go here |
579 | 584 |
result = runner.invoke(cli.derivepassphrase, ['--notes', 'sv'], |
580 | 585 |
catch_exceptions=False) |
581 | 586 |
assert result.exit_code != 0, 'program unexpectedly succeeded' |
587 |
+ assert result.stderr_bytes is not None |
|
582 | 588 |
assert b'user aborted request' in result.stderr_bytes, ( |
583 | 589 |
'expected error message missing' |
584 | 590 |
) |
... | ... |
@@ -648,7 +654,7 @@ contents go here |
648 | 654 |
]) |
649 | 655 |
def test_225_store_config_fail( |
650 | 656 |
self, monkeypatch: Any, command_line: list[str], |
651 |
- input: bytes, err_text: str, |
|
657 |
+ input: bytes, err_text: bytes, |
|
652 | 658 |
) -> None: |
653 | 659 |
runner = click.testing.CliRunner(mix_stderr=False) |
654 | 660 |
with tests.isolated_config(monkeypatch=monkeypatch, runner=runner, |
... | ... |
@@ -660,6 +666,7 @@ contents go here |
660 | 666 |
['--config'] + command_line, |
661 | 667 |
catch_exceptions=False, input=input) |
662 | 668 |
assert result.exit_code != 0, 'program unexpectedly succeeded?!' |
669 |
+ assert result.stderr_bytes is not None |
|
663 | 670 |
assert err_text in result.stderr_bytes, ( |
664 | 671 |
'expected error message missing' |
665 | 672 |
) |
... | ... |
@@ -678,6 +685,7 @@ contents go here |
678 | 685 |
['--key', '--config'], |
679 | 686 |
catch_exceptions=False) |
680 | 687 |
assert result.exit_code != 0, 'program unexpectedly succeeded' |
688 |
+ assert result.stderr_bytes is not None |
|
681 | 689 |
assert b'custom error message' in result.stderr_bytes, ( |
682 | 690 |
'expected error message missing' |
683 | 691 |
) |
... | ... |
@@ -687,6 +695,7 @@ contents go here |
687 | 695 |
result = runner.invoke(cli.derivepassphrase, [], |
688 | 696 |
catch_exceptions=False) |
689 | 697 |
assert result.exit_code != 0, 'program unexpectedly succeeded' |
698 |
+ assert result.stderr_bytes is not None |
|
690 | 699 |
assert b'SERVICE is required' in result.stderr_bytes, ( |
691 | 700 |
'expected error message missing' |
692 | 701 |
) |
... | ... |
@@ -696,6 +705,7 @@ contents go here |
696 | 705 |
result = runner.invoke(cli.derivepassphrase, [DUMMY_SERVICE], |
697 | 706 |
catch_exceptions=False) |
698 | 707 |
assert result.exit_code != 0, 'program unexpectedly succeeded' |
708 |
+ assert result.stderr_bytes is not None |
|
699 | 709 |
assert b'no passphrase or key given' in result.stderr_bytes, ( |
700 | 710 |
'expected error message missing' |
701 | 711 |
) |
... | ... |
@@ -887,7 +897,9 @@ Boo. |
887 | 897 |
@tests.skip_if_no_agent |
888 | 898 |
@pytest.mark.parametrize(['conn_hint'], |
889 | 899 |
[('none',), ('socket',), ('client',)]) |
890 |
- def test_227_get_suitable_ssh_keys(self, monkeypatch, conn_hint): |
|
900 |
+ def test_227_get_suitable_ssh_keys( |
|
901 |
+ self, monkeypatch: Any, conn_hint: str, |
|
902 |
+ ) -> None: |
|
891 | 903 |
monkeypatch.setattr(ssh_agent_client.SSHAgentClient, |
892 | 904 |
'list_keys', tests.list_keys) |
893 | 905 |
hint: ssh_agent_client.SSHAgentClient | socket.socket | None |
894 | 906 |