Marco Ricci commited on 2025-08-09 15:12:40
Zeige 10 geänderte Dateien mit 496 Einfügungen und 504 Löschungen.
Instead of importing submodules and navigating to them via the top-level module (`import spam.ham.eggs`), use leaf module imports (`from spam.ham import eggs`). Though there is sometimes the need to rename the imported module, doing so leads to shorter expressions in general. It also allows static analysis tools to accurately detect whether a module is in use or not. (Such a detection is much more murky if the whole module path needs to be traversed each time.)
... | ... |
@@ -8,8 +8,8 @@ import base64 |
8 | 8 |
|
9 | 9 |
import pytest |
10 | 10 |
|
11 |
-import tests.data |
|
12 | 11 |
from derivepassphrase import ssh_agent |
12 |
+from tests import data |
|
13 | 13 |
|
14 | 14 |
OPENSSH_MAGIC = b"openssh-key-v1\x00" |
15 | 15 |
OPENSSH_HEADER = ( |
... | ... |
@@ -139,15 +139,15 @@ class Parametrize: |
139 | 139 |
|
140 | 140 |
TEST_KEYS = pytest.mark.parametrize( |
141 | 141 |
["keyname", "key"], |
142 |
- tests.data.ALL_KEYS.items(), |
|
143 |
- ids=tests.data.ALL_KEYS.keys(), |
|
142 |
+ data.ALL_KEYS.items(), |
|
143 |
+ ids=data.ALL_KEYS.keys(), |
|
144 | 144 |
) |
145 | 145 |
|
146 | 146 |
|
147 | 147 |
@Parametrize.TEST_KEYS |
148 | 148 |
def test_100_test_keys_public_keys_are_internally_consistent( |
149 | 149 |
keyname: str, |
150 |
- key: tests.data.SSHTestKey, |
|
150 |
+ key: data.SSHTestKey, |
|
151 | 151 |
) -> None: |
152 | 152 |
"""The test key public key data structures are internally consistent.""" |
153 | 153 |
del keyname |
... | ... |
@@ -163,7 +163,7 @@ def test_100_test_keys_public_keys_are_internally_consistent( |
163 | 163 |
@Parametrize.TEST_KEYS |
164 | 164 |
def test_101_test_keys_private_keys_are_consistent_with_public_keys( |
165 | 165 |
keyname: str, |
166 |
- key: tests.data.SSHTestKey, |
|
166 |
+ key: data.SSHTestKey, |
|
167 | 167 |
) -> None: |
168 | 168 |
"""The test key private key data are consistent with their public parts.""" |
169 | 169 |
del keyname |
... | ... |
@@ -197,7 +197,7 @@ def test_101_test_keys_private_keys_are_consistent_with_public_keys( |
197 | 197 |
@Parametrize.TEST_KEYS |
198 | 198 |
def test_102_test_keys_private_keys_are_internally_consistent( |
199 | 199 |
keyname: str, |
200 |
- key: tests.data.SSHTestKey, |
|
200 |
+ key: data.SSHTestKey, |
|
201 | 201 |
) -> None: |
202 | 202 |
"""The test key private key data structures are internally consistent.""" |
203 | 203 |
del keyname |
... | ... |
@@ -33,11 +33,6 @@ import pytest |
33 | 33 |
from hypothesis import strategies |
34 | 34 |
from typing_extensions import Any, NamedTuple |
35 | 35 |
|
36 |
-import tests.data |
|
37 |
-import tests.data.callables |
|
38 |
-import tests.machinery |
|
39 |
-import tests.machinery.hypothesis |
|
40 |
-import tests.machinery.pytest |
|
41 | 36 |
from derivepassphrase import _types, cli, ssh_agent, vault |
42 | 37 |
from derivepassphrase._internals import ( |
43 | 38 |
cli_helpers, |
... | ... |
@@ -45,6 +40,10 @@ from derivepassphrase._internals import ( |
45 | 40 |
cli_messages, |
46 | 41 |
) |
47 | 42 |
from derivepassphrase.ssh_agent import socketprovider |
43 |
+from tests import data, machinery |
|
44 |
+from tests.data import callables |
|
45 |
+from tests.machinery import hypothesis as hypothesis_machinery |
|
46 |
+from tests.machinery import pytest as pytest_machinery |
|
48 | 47 |
|
49 | 48 |
if TYPE_CHECKING: |
50 | 49 |
from collections.abc import Callable, Iterable, Iterator, Sequence |
... | ... |
@@ -53,22 +52,22 @@ if TYPE_CHECKING: |
53 | 52 |
|
54 | 53 |
from typing_extensions import Literal |
55 | 54 |
|
56 |
-DUMMY_SERVICE = tests.data.DUMMY_SERVICE |
|
57 |
-DUMMY_PASSPHRASE = tests.data.DUMMY_PASSPHRASE |
|
58 |
-DUMMY_CONFIG_SETTINGS = tests.data.DUMMY_CONFIG_SETTINGS |
|
59 |
-DUMMY_RESULT_PASSPHRASE = tests.data.DUMMY_RESULT_PASSPHRASE |
|
60 |
-DUMMY_RESULT_KEY1 = tests.data.DUMMY_RESULT_KEY1 |
|
61 |
-DUMMY_PHRASE_FROM_KEY1_RAW = tests.data.DUMMY_PHRASE_FROM_KEY1_RAW |
|
62 |
-DUMMY_PHRASE_FROM_KEY1 = tests.data.DUMMY_PHRASE_FROM_KEY1 |
|
55 |
+DUMMY_SERVICE = data.DUMMY_SERVICE |
|
56 |
+DUMMY_PASSPHRASE = data.DUMMY_PASSPHRASE |
|
57 |
+DUMMY_CONFIG_SETTINGS = data.DUMMY_CONFIG_SETTINGS |
|
58 |
+DUMMY_RESULT_PASSPHRASE = data.DUMMY_RESULT_PASSPHRASE |
|
59 |
+DUMMY_RESULT_KEY1 = data.DUMMY_RESULT_KEY1 |
|
60 |
+DUMMY_PHRASE_FROM_KEY1_RAW = data.DUMMY_PHRASE_FROM_KEY1_RAW |
|
61 |
+DUMMY_PHRASE_FROM_KEY1 = data.DUMMY_PHRASE_FROM_KEY1 |
|
63 | 62 |
|
64 |
-DUMMY_KEY1 = tests.data.DUMMY_KEY1 |
|
65 |
-DUMMY_KEY1_B64 = tests.data.DUMMY_KEY1_B64 |
|
66 |
-DUMMY_KEY2 = tests.data.DUMMY_KEY2 |
|
67 |
-DUMMY_KEY2_B64 = tests.data.DUMMY_KEY2_B64 |
|
68 |
-DUMMY_KEY3 = tests.data.DUMMY_KEY3 |
|
69 |
-DUMMY_KEY3_B64 = tests.data.DUMMY_KEY3_B64 |
|
63 |
+DUMMY_KEY1 = data.DUMMY_KEY1 |
|
64 |
+DUMMY_KEY1_B64 = data.DUMMY_KEY1_B64 |
|
65 |
+DUMMY_KEY2 = data.DUMMY_KEY2 |
|
66 |
+DUMMY_KEY2_B64 = data.DUMMY_KEY2_B64 |
|
67 |
+DUMMY_KEY3 = data.DUMMY_KEY3 |
|
68 |
+DUMMY_KEY3_B64 = data.DUMMY_KEY3_B64 |
|
70 | 69 |
|
71 |
-TEST_CONFIGS = tests.data.TEST_CONFIGS |
|
70 |
+TEST_CONFIGS = data.TEST_CONFIGS |
|
72 | 71 |
|
73 | 72 |
|
74 | 73 |
class IncompatibleConfiguration(NamedTuple): |
... | ... |
@@ -277,7 +276,7 @@ def is_harmless_config_import_warning(record: tuple[str, int, str]) -> bool: |
277 | 276 |
), |
278 | 277 |
] |
279 | 278 |
return any( |
280 |
- tests.machinery.warning_emitted(w, [record]) for w in possible_warnings |
|
279 |
+ machinery.warning_emitted(w, [record]) for w in possible_warnings |
|
281 | 280 |
) |
282 | 281 |
|
283 | 282 |
|
... | ... |
@@ -327,8 +326,8 @@ def vault_config_exporter_shell_interpreter( # noqa: C901 |
327 | 326 |
*, |
328 | 327 |
prog_name_list: list[str] | None = None, |
329 | 328 |
command: click.BaseCommand | None = None, |
330 |
- runner: tests.machinery.CliRunner | None = None, |
|
331 |
-) -> Iterator[tests.machinery.ReadableResult]: |
|
329 |
+ runner: machinery.CliRunner | None = None, |
|
330 |
+) -> Iterator[machinery.ReadableResult]: |
|
332 | 331 |
"""A rudimentary sh(1) interpreter for `--export-as=sh` output. |
333 | 332 |
|
334 | 333 |
Assumes a script as emitted by `derivepassphrase vault |
... | ... |
@@ -345,7 +344,7 @@ def vault_config_exporter_shell_interpreter( # noqa: C901 |
345 | 344 |
if command is None: # pragma: no cover |
346 | 345 |
command = cli.derivepassphrase_vault |
347 | 346 |
if runner is None: # pragma: no cover |
348 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
347 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
349 | 348 |
n = len(prog_name_list) |
350 | 349 |
it = iter(script) |
351 | 350 |
while True: |
... | ... |
@@ -2015,14 +2014,14 @@ class TestAllCLI: |
2015 | 2014 |
TODO: Do we actually need this? What should we check for? |
2016 | 2015 |
|
2017 | 2016 |
""" |
2018 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2017 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2019 | 2018 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2020 | 2019 |
# with-statements. |
2021 | 2020 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2022 | 2021 |
with contextlib.ExitStack() as stack: |
2023 | 2022 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2024 | 2023 |
stack.enter_context( |
2025 |
- tests.machinery.pytest.isolated_config( |
|
2024 |
+ pytest_machinery.isolated_config( |
|
2026 | 2025 |
monkeypatch=monkeypatch, |
2027 | 2026 |
runner=runner, |
2028 | 2027 |
) |
... | ... |
@@ -2044,14 +2043,14 @@ class TestAllCLI: |
2044 | 2043 |
TODO: Do we actually need this? What should we check for? |
2045 | 2044 |
|
2046 | 2045 |
""" |
2047 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2046 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2048 | 2047 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2049 | 2048 |
# with-statements. |
2050 | 2049 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2051 | 2050 |
with contextlib.ExitStack() as stack: |
2052 | 2051 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2053 | 2052 |
stack.enter_context( |
2054 |
- tests.machinery.pytest.isolated_config( |
|
2053 |
+ pytest_machinery.isolated_config( |
|
2055 | 2054 |
monkeypatch=monkeypatch, |
2056 | 2055 |
runner=runner, |
2057 | 2056 |
) |
... | ... |
@@ -2075,14 +2074,14 @@ class TestAllCLI: |
2075 | 2074 |
TODO: Do we actually need this? What should we check for? |
2076 | 2075 |
|
2077 | 2076 |
""" |
2078 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2077 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2079 | 2078 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2080 | 2079 |
# with-statements. |
2081 | 2080 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2082 | 2081 |
with contextlib.ExitStack() as stack: |
2083 | 2082 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2084 | 2083 |
stack.enter_context( |
2085 |
- tests.machinery.pytest.isolated_config( |
|
2084 |
+ pytest_machinery.isolated_config( |
|
2086 | 2085 |
monkeypatch=monkeypatch, |
2087 | 2086 |
runner=runner, |
2088 | 2087 |
) |
... | ... |
@@ -2106,14 +2105,14 @@ class TestAllCLI: |
2106 | 2105 |
TODO: Do we actually need this? What should we check for? |
2107 | 2106 |
|
2108 | 2107 |
""" |
2109 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2108 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2110 | 2109 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2111 | 2110 |
# with-statements. |
2112 | 2111 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2113 | 2112 |
with contextlib.ExitStack() as stack: |
2114 | 2113 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2115 | 2114 |
stack.enter_context( |
2116 |
- tests.machinery.pytest.isolated_config( |
|
2115 |
+ pytest_machinery.isolated_config( |
|
2117 | 2116 |
monkeypatch=monkeypatch, |
2118 | 2117 |
runner=runner, |
2119 | 2118 |
) |
... | ... |
@@ -2139,14 +2138,14 @@ class TestAllCLI: |
2139 | 2138 |
non_eager_arguments: list[str], |
2140 | 2139 |
) -> None: |
2141 | 2140 |
"""Eager options terminate option and argument processing.""" |
2142 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2141 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2143 | 2142 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2144 | 2143 |
# with-statements. |
2145 | 2144 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2146 | 2145 |
with contextlib.ExitStack() as stack: |
2147 | 2146 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2148 | 2147 |
stack.enter_context( |
2149 |
- tests.machinery.pytest.isolated_config( |
|
2148 |
+ pytest_machinery.isolated_config( |
|
2150 | 2149 |
monkeypatch=monkeypatch, |
2151 | 2150 |
runner=runner, |
2152 | 2151 |
) |
... | ... |
@@ -2174,14 +2173,14 @@ class TestAllCLI: |
2174 | 2173 |
|
2175 | 2174 |
""" |
2176 | 2175 |
color = False |
2177 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2176 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2178 | 2177 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2179 | 2178 |
# with-statements. |
2180 | 2179 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2181 | 2180 |
with contextlib.ExitStack() as stack: |
2182 | 2181 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2183 | 2182 |
stack.enter_context( |
2184 |
- tests.machinery.pytest.isolated_config( |
|
2183 |
+ pytest_machinery.isolated_config( |
|
2185 | 2184 |
monkeypatch=monkeypatch, |
2186 | 2185 |
runner=runner, |
2187 | 2186 |
) |
... | ... |
@@ -2215,14 +2214,14 @@ class TestAllCLI: |
2215 | 2214 |
subcommands. |
2216 | 2215 |
|
2217 | 2216 |
""" |
2218 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2217 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2219 | 2218 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2220 | 2219 |
# with-statements. |
2221 | 2220 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2222 | 2221 |
with contextlib.ExitStack() as stack: |
2223 | 2222 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2224 | 2223 |
stack.enter_context( |
2225 |
- tests.machinery.pytest.isolated_config( |
|
2224 |
+ pytest_machinery.isolated_config( |
|
2226 | 2225 |
monkeypatch=monkeypatch, |
2227 | 2226 |
runner=runner, |
2228 | 2227 |
) |
... | ... |
@@ -2256,14 +2255,14 @@ class TestAllCLI: |
2256 | 2255 |
of subcommands. |
2257 | 2256 |
|
2258 | 2257 |
""" |
2259 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2258 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2260 | 2259 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2261 | 2260 |
# with-statements. |
2262 | 2261 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2263 | 2262 |
with contextlib.ExitStack() as stack: |
2264 | 2263 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2265 | 2264 |
stack.enter_context( |
2266 |
- tests.machinery.pytest.isolated_config( |
|
2265 |
+ pytest_machinery.isolated_config( |
|
2267 | 2266 |
monkeypatch=monkeypatch, |
2268 | 2267 |
runner=runner, |
2269 | 2268 |
) |
... | ... |
@@ -2304,14 +2303,14 @@ class TestAllCLI: |
2304 | 2303 |
configuration formats, and a list of available PEP 508 extras. |
2305 | 2304 |
|
2306 | 2305 |
""" |
2307 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2306 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2308 | 2307 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2309 | 2308 |
# with-statements. |
2310 | 2309 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2311 | 2310 |
with contextlib.ExitStack() as stack: |
2312 | 2311 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2313 | 2312 |
stack.enter_context( |
2314 |
- tests.machinery.pytest.isolated_config( |
|
2313 |
+ pytest_machinery.isolated_config( |
|
2315 | 2314 |
monkeypatch=monkeypatch, |
2316 | 2315 |
runner=runner, |
2317 | 2316 |
) |
... | ... |
@@ -2359,14 +2358,14 @@ class TestAllCLI: |
2359 | 2358 |
first paragraph. |
2360 | 2359 |
|
2361 | 2360 |
""" |
2362 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2361 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2363 | 2362 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2364 | 2363 |
# with-statements. |
2365 | 2364 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2366 | 2365 |
with contextlib.ExitStack() as stack: |
2367 | 2366 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2368 | 2367 |
stack.enter_context( |
2369 |
- tests.machinery.pytest.isolated_config( |
|
2368 |
+ pytest_machinery.isolated_config( |
|
2370 | 2369 |
monkeypatch=monkeypatch, |
2371 | 2370 |
runner=runner, |
2372 | 2371 |
) |
... | ... |
@@ -2411,14 +2410,14 @@ class TestCLI: |
2411 | 2410 |
self, |
2412 | 2411 |
) -> None: |
2413 | 2412 |
"""The `--help` option emits help text.""" |
2414 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2413 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2415 | 2414 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2416 | 2415 |
# with-statements. |
2417 | 2416 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2418 | 2417 |
with contextlib.ExitStack() as stack: |
2419 | 2418 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2420 | 2419 |
stack.enter_context( |
2421 |
- tests.machinery.pytest.isolated_config( |
|
2420 |
+ pytest_machinery.isolated_config( |
|
2422 | 2421 |
monkeypatch=monkeypatch, |
2423 | 2422 |
runner=runner, |
2424 | 2423 |
) |
... | ... |
@@ -2441,14 +2440,14 @@ class TestCLI: |
2441 | 2440 |
self, |
2442 | 2441 |
) -> None: |
2443 | 2442 |
"""The `--version` option emits version information.""" |
2444 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2443 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2445 | 2444 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2446 | 2445 |
# with-statements. |
2447 | 2446 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2448 | 2447 |
with contextlib.ExitStack() as stack: |
2449 | 2448 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2450 | 2449 |
stack.enter_context( |
2451 |
- tests.machinery.pytest.isolated_config( |
|
2450 |
+ pytest_machinery.isolated_config( |
|
2452 | 2451 |
monkeypatch=monkeypatch, |
2453 | 2452 |
runner=runner, |
2454 | 2453 |
) |
... | ... |
@@ -2473,14 +2472,14 @@ class TestCLI: |
2473 | 2472 |
"""Named character classes can be disabled on the command-line.""" |
2474 | 2473 |
option = f"--{charset_name}" |
2475 | 2474 |
charset = vault.Vault.CHARSETS[charset_name].decode("ascii") |
2476 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2475 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2477 | 2476 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2478 | 2477 |
# with-statements. |
2479 | 2478 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2480 | 2479 |
with contextlib.ExitStack() as stack: |
2481 | 2480 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2482 | 2481 |
stack.enter_context( |
2483 |
- tests.machinery.pytest.isolated_config( |
|
2482 |
+ pytest_machinery.isolated_config( |
|
2484 | 2483 |
monkeypatch=monkeypatch, |
2485 | 2484 |
runner=runner, |
2486 | 2485 |
) |
... | ... |
@@ -2488,7 +2487,7 @@ class TestCLI: |
2488 | 2487 |
monkeypatch.setattr( |
2489 | 2488 |
cli_helpers, |
2490 | 2489 |
"prompt_for_passphrase", |
2491 |
- tests.data.callables.auto_prompt, |
|
2490 |
+ callables.auto_prompt, |
|
2492 | 2491 |
) |
2493 | 2492 |
result = runner.invoke( |
2494 | 2493 |
cli.derivepassphrase_vault, |
... | ... |
@@ -2506,14 +2505,14 @@ class TestCLI: |
2506 | 2505 |
self, |
2507 | 2506 |
) -> None: |
2508 | 2507 |
"""Character repetition can be disabled on the command-line.""" |
2509 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2508 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2510 | 2509 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2511 | 2510 |
# with-statements. |
2512 | 2511 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2513 | 2512 |
with contextlib.ExitStack() as stack: |
2514 | 2513 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2515 | 2514 |
stack.enter_context( |
2516 |
- tests.machinery.pytest.isolated_config( |
|
2515 |
+ pytest_machinery.isolated_config( |
|
2517 | 2516 |
monkeypatch=monkeypatch, |
2518 | 2517 |
runner=runner, |
2519 | 2518 |
) |
... | ... |
@@ -2521,7 +2520,7 @@ class TestCLI: |
2521 | 2520 |
monkeypatch.setattr( |
2522 | 2521 |
cli_helpers, |
2523 | 2522 |
"prompt_for_passphrase", |
2524 |
- tests.data.callables.auto_prompt, |
|
2523 |
+ callables.auto_prompt, |
|
2525 | 2524 |
) |
2526 | 2525 |
result = runner.invoke( |
2527 | 2526 |
cli.derivepassphrase_vault, |
... | ... |
@@ -2542,19 +2541,19 @@ class TestCLI: |
2542 | 2541 |
@Parametrize.CONFIG_WITH_KEY |
2543 | 2542 |
def test_204a_key_from_config( |
2544 | 2543 |
self, |
2545 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
2544 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
2546 | 2545 |
config: _types.VaultConfig, |
2547 | 2546 |
) -> None: |
2548 | 2547 |
"""A stored configured SSH key will be used.""" |
2549 | 2548 |
del running_ssh_agent |
2550 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2549 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2551 | 2550 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2552 | 2551 |
# with-statements. |
2553 | 2552 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2554 | 2553 |
with contextlib.ExitStack() as stack: |
2555 | 2554 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2556 | 2555 |
stack.enter_context( |
2557 |
- tests.machinery.pytest.isolated_vault_config( |
|
2556 |
+ pytest_machinery.isolated_vault_config( |
|
2558 | 2557 |
monkeypatch=monkeypatch, |
2559 | 2558 |
runner=runner, |
2560 | 2559 |
vault_config=config, |
... | ... |
@@ -2563,7 +2562,7 @@ class TestCLI: |
2563 | 2562 |
monkeypatch.setattr( |
2564 | 2563 |
vault.Vault, |
2565 | 2564 |
"phrase_from_key", |
2566 |
- tests.data.callables.phrase_from_key, |
|
2565 |
+ callables.phrase_from_key, |
|
2567 | 2566 |
) |
2568 | 2567 |
result = runner.invoke( |
2569 | 2568 |
cli.derivepassphrase_vault, |
... | ... |
@@ -2584,18 +2583,18 @@ class TestCLI: |
2584 | 2583 |
|
2585 | 2584 |
def test_204b_key_from_command_line( |
2586 | 2585 |
self, |
2587 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
2586 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
2588 | 2587 |
) -> None: |
2589 | 2588 |
"""An SSH key requested on the command-line will be used.""" |
2590 | 2589 |
del running_ssh_agent |
2591 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2590 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2592 | 2591 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2593 | 2592 |
# with-statements. |
2594 | 2593 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2595 | 2594 |
with contextlib.ExitStack() as stack: |
2596 | 2595 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2597 | 2596 |
stack.enter_context( |
2598 |
- tests.machinery.pytest.isolated_vault_config( |
|
2597 |
+ pytest_machinery.isolated_vault_config( |
|
2599 | 2598 |
monkeypatch=monkeypatch, |
2600 | 2599 |
runner=runner, |
2601 | 2600 |
vault_config={ |
... | ... |
@@ -2606,12 +2605,12 @@ class TestCLI: |
2606 | 2605 |
monkeypatch.setattr( |
2607 | 2606 |
cli_helpers, |
2608 | 2607 |
"get_suitable_ssh_keys", |
2609 |
- tests.data.callables.suitable_ssh_keys, |
|
2608 |
+ callables.suitable_ssh_keys, |
|
2610 | 2609 |
) |
2611 | 2610 |
monkeypatch.setattr( |
2612 | 2611 |
vault.Vault, |
2613 | 2612 |
"phrase_from_key", |
2614 |
- tests.data.callables.phrase_from_key, |
|
2613 |
+ callables.phrase_from_key, |
|
2615 | 2614 |
) |
2616 | 2615 |
result = runner.invoke( |
2617 | 2616 |
cli.derivepassphrase_vault, |
... | ... |
@@ -2633,20 +2632,20 @@ class TestCLI: |
2633 | 2632 |
@Parametrize.KEY_INDEX |
2634 | 2633 |
def test_204c_key_override_on_command_line( |
2635 | 2634 |
self, |
2636 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
2635 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
2637 | 2636 |
config: dict[str, Any], |
2638 | 2637 |
key_index: int, |
2639 | 2638 |
) -> None: |
2640 | 2639 |
"""A command-line SSH key will override the configured key.""" |
2641 | 2640 |
del running_ssh_agent |
2642 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2641 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2643 | 2642 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2644 | 2643 |
# with-statements. |
2645 | 2644 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2646 | 2645 |
with contextlib.ExitStack() as stack: |
2647 | 2646 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2648 | 2647 |
stack.enter_context( |
2649 |
- tests.machinery.pytest.isolated_vault_config( |
|
2648 |
+ pytest_machinery.isolated_vault_config( |
|
2650 | 2649 |
monkeypatch=monkeypatch, |
2651 | 2650 |
runner=runner, |
2652 | 2651 |
vault_config=config, |
... | ... |
@@ -2655,10 +2654,10 @@ class TestCLI: |
2655 | 2654 |
monkeypatch.setattr( |
2656 | 2655 |
ssh_agent.SSHAgentClient, |
2657 | 2656 |
"list_keys", |
2658 |
- tests.data.callables.list_keys, |
|
2657 |
+ callables.list_keys, |
|
2659 | 2658 |
) |
2660 | 2659 |
monkeypatch.setattr( |
2661 |
- ssh_agent.SSHAgentClient, "sign", tests.data.callables.sign |
|
2660 |
+ ssh_agent.SSHAgentClient, "sign", callables.sign |
|
2662 | 2661 |
) |
2663 | 2662 |
result = runner.invoke( |
2664 | 2663 |
cli.derivepassphrase_vault, |
... | ... |
@@ -2674,18 +2673,18 @@ class TestCLI: |
2674 | 2673 |
|
2675 | 2674 |
def test_205_service_phrase_if_key_in_global_config( |
2676 | 2675 |
self, |
2677 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
2676 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
2678 | 2677 |
) -> None: |
2679 | 2678 |
"""A command-line passphrase will override the configured key.""" |
2680 | 2679 |
del running_ssh_agent |
2681 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2680 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2682 | 2681 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2683 | 2682 |
# with-statements. |
2684 | 2683 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2685 | 2684 |
with contextlib.ExitStack() as stack: |
2686 | 2685 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2687 | 2686 |
stack.enter_context( |
2688 |
- tests.machinery.pytest.isolated_vault_config( |
|
2687 |
+ pytest_machinery.isolated_vault_config( |
|
2689 | 2688 |
monkeypatch=monkeypatch, |
2690 | 2689 |
runner=runner, |
2691 | 2690 |
vault_config={ |
... | ... |
@@ -2702,10 +2701,10 @@ class TestCLI: |
2702 | 2701 |
monkeypatch.setattr( |
2703 | 2702 |
ssh_agent.SSHAgentClient, |
2704 | 2703 |
"list_keys", |
2705 |
- tests.data.callables.list_keys, |
|
2704 |
+ callables.list_keys, |
|
2706 | 2705 |
) |
2707 | 2706 |
monkeypatch.setattr( |
2708 |
- ssh_agent.SSHAgentClient, "sign", tests.data.callables.sign |
|
2707 |
+ ssh_agent.SSHAgentClient, "sign", callables.sign |
|
2709 | 2708 |
) |
2710 | 2709 |
result = runner.invoke( |
2711 | 2710 |
cli.derivepassphrase_vault, |
... | ... |
@@ -2725,21 +2724,21 @@ class TestCLI: |
2725 | 2724 |
@Parametrize.KEY_OVERRIDING_IN_CONFIG |
2726 | 2725 |
def test_206_setting_phrase_thus_overriding_key_in_config( |
2727 | 2726 |
self, |
2728 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
2727 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
2729 | 2728 |
caplog: pytest.LogCaptureFixture, |
2730 | 2729 |
config: _types.VaultConfig, |
2731 | 2730 |
command_line: list[str], |
2732 | 2731 |
) -> None: |
2733 | 2732 |
"""Configuring a passphrase atop an SSH key works, but warns.""" |
2734 | 2733 |
del running_ssh_agent |
2735 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2734 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2736 | 2735 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2737 | 2736 |
# with-statements. |
2738 | 2737 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2739 | 2738 |
with contextlib.ExitStack() as stack: |
2740 | 2739 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2741 | 2740 |
stack.enter_context( |
2742 |
- tests.machinery.pytest.isolated_vault_config( |
|
2741 |
+ pytest_machinery.isolated_vault_config( |
|
2743 | 2742 |
monkeypatch=monkeypatch, |
2744 | 2743 |
runner=runner, |
2745 | 2744 |
vault_config=config, |
... | ... |
@@ -2748,10 +2747,10 @@ class TestCLI: |
2748 | 2747 |
monkeypatch.setattr( |
2749 | 2748 |
ssh_agent.SSHAgentClient, |
2750 | 2749 |
"list_keys", |
2751 |
- tests.data.callables.list_keys, |
|
2750 |
+ callables.list_keys, |
|
2752 | 2751 |
) |
2753 | 2752 |
monkeypatch.setattr( |
2754 |
- ssh_agent.SSHAgentClient, "sign", tests.data.callables.sign |
|
2753 |
+ ssh_agent.SSHAgentClient, "sign", callables.sign |
|
2755 | 2754 |
) |
2756 | 2755 |
result = runner.invoke( |
2757 | 2756 |
cli.derivepassphrase_vault, |
... | ... |
@@ -2764,10 +2763,10 @@ class TestCLI: |
2764 | 2763 |
assert result.stderr, "expected known error output" |
2765 | 2764 |
err_lines = result.stderr.splitlines(False) |
2766 | 2765 |
assert err_lines[0].startswith("Passphrase:") |
2767 |
- assert tests.machinery.warning_emitted( |
|
2766 |
+ assert machinery.warning_emitted( |
|
2768 | 2767 |
"Setting a service passphrase is ineffective ", |
2769 | 2768 |
caplog.record_tuples, |
2770 |
- ) or tests.machinery.warning_emitted( |
|
2769 |
+ ) or machinery.warning_emitted( |
|
2771 | 2770 |
"Setting a global passphrase is ineffective ", |
2772 | 2771 |
caplog.record_tuples, |
2773 | 2772 |
), "expected known warning message" |
... | ... |
@@ -2792,14 +2791,14 @@ class TestCLI: |
2792 | 2791 |
) -> None: |
2793 | 2792 |
"""Service notes are printed, if they exist.""" |
2794 | 2793 |
hypothesis.assume("Error:" not in notes) |
2795 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2794 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2796 | 2795 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2797 | 2796 |
# with-statements. |
2798 | 2797 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2799 | 2798 |
with contextlib.ExitStack() as stack: |
2800 | 2799 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2801 | 2800 |
stack.enter_context( |
2802 |
- tests.machinery.pytest.isolated_vault_config( |
|
2801 |
+ pytest_machinery.isolated_vault_config( |
|
2803 | 2802 |
monkeypatch=monkeypatch, |
2804 | 2803 |
runner=runner, |
2805 | 2804 |
vault_config={ |
... | ... |
@@ -2838,14 +2837,14 @@ class TestCLI: |
2838 | 2837 |
option: str, |
2839 | 2838 |
) -> None: |
2840 | 2839 |
"""Requesting invalidly many characters from a class fails.""" |
2841 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2840 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2842 | 2841 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2843 | 2842 |
# with-statements. |
2844 | 2843 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2845 | 2844 |
with contextlib.ExitStack() as stack: |
2846 | 2845 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2847 | 2846 |
stack.enter_context( |
2848 |
- tests.machinery.pytest.isolated_config( |
|
2847 |
+ pytest_machinery.isolated_config( |
|
2849 | 2848 |
monkeypatch=monkeypatch, |
2850 | 2849 |
runner=runner, |
2851 | 2850 |
) |
... | ... |
@@ -2870,14 +2869,14 @@ class TestCLI: |
2870 | 2869 |
check_success: bool, |
2871 | 2870 |
) -> None: |
2872 | 2871 |
"""We require or forbid a service argument, depending on options.""" |
2873 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2872 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2874 | 2873 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2875 | 2874 |
# with-statements. |
2876 | 2875 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2877 | 2876 |
with contextlib.ExitStack() as stack: |
2878 | 2877 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2879 | 2878 |
stack.enter_context( |
2880 |
- tests.machinery.pytest.isolated_vault_config( |
|
2879 |
+ pytest_machinery.isolated_vault_config( |
|
2881 | 2880 |
monkeypatch=monkeypatch, |
2882 | 2881 |
runner=runner, |
2883 | 2882 |
vault_config={"global": {"phrase": "abc"}, "services": {}}, |
... | ... |
@@ -2886,7 +2885,7 @@ class TestCLI: |
2886 | 2885 |
monkeypatch.setattr( |
2887 | 2886 |
cli_helpers, |
2888 | 2887 |
"prompt_for_passphrase", |
2889 |
- tests.data.callables.auto_prompt, |
|
2888 |
+ callables.auto_prompt, |
|
2890 | 2889 |
) |
2891 | 2890 |
result = runner.invoke( |
2892 | 2891 |
cli.derivepassphrase_vault, |
... | ... |
@@ -2914,7 +2913,7 @@ class TestCLI: |
2914 | 2913 |
with contextlib.ExitStack() as stack: |
2915 | 2914 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2916 | 2915 |
stack.enter_context( |
2917 |
- tests.machinery.pytest.isolated_vault_config( |
|
2916 |
+ pytest_machinery.isolated_vault_config( |
|
2918 | 2917 |
monkeypatch=monkeypatch, |
2919 | 2918 |
runner=runner, |
2920 | 2919 |
vault_config={ |
... | ... |
@@ -2926,7 +2925,7 @@ class TestCLI: |
2926 | 2925 |
monkeypatch.setattr( |
2927 | 2926 |
cli_helpers, |
2928 | 2927 |
"prompt_for_passphrase", |
2929 |
- tests.data.callables.auto_prompt, |
|
2928 |
+ callables.auto_prompt, |
|
2930 | 2929 |
) |
2931 | 2930 |
result = runner.invoke( |
2932 | 2931 |
cli.derivepassphrase_vault, |
... | ... |
@@ -2949,18 +2948,18 @@ class TestCLI: |
2949 | 2948 |
def is_expected_warning(record: tuple[str, int, str]) -> bool: |
2950 | 2949 |
return is_harmless_config_import_warning( |
2951 | 2950 |
record |
2952 |
- ) or tests.machinery.warning_emitted( |
|
2951 |
+ ) or machinery.warning_emitted( |
|
2953 | 2952 |
"An empty SERVICE is not supported by vault(1)", [record] |
2954 | 2953 |
) |
2955 | 2954 |
|
2956 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
2955 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
2957 | 2956 |
# TODO(the-13th-letter): Rewrite using parenthesized |
2958 | 2957 |
# with-statements. |
2959 | 2958 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
2960 | 2959 |
with contextlib.ExitStack() as stack: |
2961 | 2960 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
2962 | 2961 |
stack.enter_context( |
2963 |
- tests.machinery.pytest.isolated_vault_config( |
|
2962 |
+ pytest_machinery.isolated_vault_config( |
|
2964 | 2963 |
monkeypatch=monkeypatch, |
2965 | 2964 |
runner=runner, |
2966 | 2965 |
vault_config={"services": {}}, |
... | ... |
@@ -2969,7 +2968,7 @@ class TestCLI: |
2969 | 2968 |
monkeypatch.setattr( |
2970 | 2969 |
cli_helpers, |
2971 | 2970 |
"prompt_for_passphrase", |
2972 |
- tests.data.callables.auto_prompt, |
|
2971 |
+ callables.auto_prompt, |
|
2973 | 2972 |
) |
2974 | 2973 |
result = runner.invoke( |
2975 | 2974 |
cli.derivepassphrase_vault, |
... | ... |
@@ -3009,14 +3008,14 @@ class TestCLI: |
3009 | 3008 |
service: bool | None, |
3010 | 3009 |
) -> None: |
3011 | 3010 |
"""Incompatible options are detected.""" |
3012 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3011 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3013 | 3012 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3014 | 3013 |
# with-statements. |
3015 | 3014 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3016 | 3015 |
with contextlib.ExitStack() as stack: |
3017 | 3016 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3018 | 3017 |
stack.enter_context( |
3019 |
- tests.machinery.pytest.isolated_config( |
|
3018 |
+ pytest_machinery.isolated_config( |
|
3020 | 3019 |
monkeypatch=monkeypatch, |
3021 | 3020 |
runner=runner, |
3022 | 3021 |
) |
... | ... |
@@ -3038,14 +3037,14 @@ class TestCLI: |
3038 | 3037 |
config: Any, |
3039 | 3038 |
) -> None: |
3040 | 3039 |
"""Importing a configuration works.""" |
3041 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3040 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3042 | 3041 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3043 | 3042 |
# with-statements. |
3044 | 3043 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3045 | 3044 |
with contextlib.ExitStack() as stack: |
3046 | 3045 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3047 | 3046 |
stack.enter_context( |
3048 |
- tests.machinery.pytest.isolated_vault_config( |
|
3047 |
+ pytest_machinery.isolated_vault_config( |
|
3049 | 3048 |
monkeypatch=monkeypatch, |
3050 | 3049 |
runner=runner, |
3051 | 3050 |
vault_config={"services": {}}, |
... | ... |
@@ -3075,16 +3074,16 @@ class TestCLI: |
3075 | 3074 |
], |
3076 | 3075 |
) |
3077 | 3076 |
@hypothesis.given( |
3078 |
- conf=tests.machinery.hypothesis.smudged_vault_test_config( |
|
3077 |
+ conf=hypothesis_machinery.smudged_vault_test_config( |
|
3079 | 3078 |
strategies.sampled_from([ |
3080 |
- conf for conf in tests.data.TEST_CONFIGS if conf.is_valid() |
|
3079 |
+ conf for conf in data.TEST_CONFIGS if conf.is_valid() |
|
3081 | 3080 |
]) |
3082 | 3081 |
) |
3083 | 3082 |
) |
3084 | 3083 |
def test_213a_import_config_success( |
3085 | 3084 |
self, |
3086 | 3085 |
caplog: pytest.LogCaptureFixture, |
3087 |
- conf: tests.data.VaultTestConfig, |
|
3086 |
+ conf: data.VaultTestConfig, |
|
3088 | 3087 |
) -> None: |
3089 | 3088 |
"""Importing a smudged configuration works. |
3090 | 3089 |
|
... | ... |
@@ -3096,14 +3095,14 @@ class TestCLI: |
3096 | 3095 |
_types.clean_up_falsy_vault_config_values(config2) |
3097 | 3096 |
# Reset caplog between hypothesis runs. |
3098 | 3097 |
caplog.clear() |
3099 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3098 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3100 | 3099 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3101 | 3100 |
# with-statements. |
3102 | 3101 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3103 | 3102 |
with contextlib.ExitStack() as stack: |
3104 | 3103 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3105 | 3104 |
stack.enter_context( |
3106 |
- tests.machinery.pytest.isolated_vault_config( |
|
3105 |
+ pytest_machinery.isolated_vault_config( |
|
3107 | 3106 |
monkeypatch=monkeypatch, |
3108 | 3107 |
runner=runner, |
3109 | 3108 |
vault_config={"services": {}}, |
... | ... |
@@ -3130,14 +3129,14 @@ class TestCLI: |
3130 | 3129 |
self, |
3131 | 3130 |
) -> None: |
3132 | 3131 |
"""Importing an invalid config fails.""" |
3133 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3132 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3134 | 3133 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3135 | 3134 |
# with-statements. |
3136 | 3135 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3137 | 3136 |
with contextlib.ExitStack() as stack: |
3138 | 3137 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3139 | 3138 |
stack.enter_context( |
3140 |
- tests.machinery.pytest.isolated_config( |
|
3139 |
+ pytest_machinery.isolated_config( |
|
3141 | 3140 |
monkeypatch=monkeypatch, |
3142 | 3141 |
runner=runner, |
3143 | 3142 |
) |
... | ... |
@@ -3156,14 +3155,14 @@ class TestCLI: |
3156 | 3155 |
self, |
3157 | 3156 |
) -> None: |
3158 | 3157 |
"""Importing an invalid config fails.""" |
3159 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3158 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3160 | 3159 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3161 | 3160 |
# with-statements. |
3162 | 3161 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3163 | 3162 |
with contextlib.ExitStack() as stack: |
3164 | 3163 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3165 | 3164 |
stack.enter_context( |
3166 |
- tests.machinery.pytest.isolated_config( |
|
3165 |
+ pytest_machinery.isolated_config( |
|
3167 | 3166 |
monkeypatch=monkeypatch, |
3168 | 3167 |
runner=runner, |
3169 | 3168 |
) |
... | ... |
@@ -3182,7 +3181,7 @@ class TestCLI: |
3182 | 3181 |
self, |
3183 | 3182 |
) -> None: |
3184 | 3183 |
"""Importing an invalid config fails.""" |
3185 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3184 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3186 | 3185 |
# `isolated_vault_config` ensures the configuration is valid |
3187 | 3186 |
# JSON. So, to pass an actual broken configuration, we must |
3188 | 3187 |
# open the configuration file ourselves afterwards, inside the |
... | ... |
@@ -3194,7 +3193,7 @@ class TestCLI: |
3194 | 3193 |
with contextlib.ExitStack() as stack: |
3195 | 3194 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3196 | 3195 |
stack.enter_context( |
3197 |
- tests.machinery.pytest.isolated_vault_config( |
|
3196 |
+ pytest_machinery.isolated_vault_config( |
|
3198 | 3197 |
monkeypatch=monkeypatch, |
3199 | 3198 |
runner=runner, |
3200 | 3199 |
vault_config={"services": {}}, |
... | ... |
@@ -3223,14 +3222,14 @@ class TestCLI: |
3223 | 3222 |
config: Any, |
3224 | 3223 |
) -> None: |
3225 | 3224 |
"""Exporting a configuration works.""" |
3226 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3225 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3227 | 3226 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3228 | 3227 |
# with-statements. |
3229 | 3228 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3230 | 3229 |
with contextlib.ExitStack() as stack: |
3231 | 3230 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3232 | 3231 |
stack.enter_context( |
3233 |
- tests.machinery.pytest.isolated_vault_config( |
|
3232 |
+ pytest_machinery.isolated_vault_config( |
|
3234 | 3233 |
monkeypatch=monkeypatch, |
3235 | 3234 |
runner=runner, |
3236 | 3235 |
vault_config=config, |
... | ... |
@@ -3263,14 +3262,14 @@ class TestCLI: |
3263 | 3262 |
export_options: list[str], |
3264 | 3263 |
) -> None: |
3265 | 3264 |
"""Exporting the default, empty config works.""" |
3266 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3265 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3267 | 3266 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3268 | 3267 |
# with-statements. |
3269 | 3268 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3270 | 3269 |
with contextlib.ExitStack() as stack: |
3271 | 3270 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3272 | 3271 |
stack.enter_context( |
3273 |
- tests.machinery.pytest.isolated_config( |
|
3272 |
+ pytest_machinery.isolated_config( |
|
3274 | 3273 |
monkeypatch=monkeypatch, |
3275 | 3274 |
runner=runner, |
3276 | 3275 |
) |
... | ... |
@@ -3295,14 +3294,14 @@ class TestCLI: |
3295 | 3294 |
export_options: list[str], |
3296 | 3295 |
) -> None: |
3297 | 3296 |
"""Exporting an invalid config fails.""" |
3298 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3297 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3299 | 3298 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3300 | 3299 |
# with-statements. |
3301 | 3300 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3302 | 3301 |
with contextlib.ExitStack() as stack: |
3303 | 3302 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3304 | 3303 |
stack.enter_context( |
3305 |
- tests.machinery.pytest.isolated_vault_config( |
|
3304 |
+ pytest_machinery.isolated_vault_config( |
|
3306 | 3305 |
monkeypatch=monkeypatch, |
3307 | 3306 |
runner=runner, |
3308 | 3307 |
vault_config={}, |
... | ... |
@@ -3324,14 +3323,14 @@ class TestCLI: |
3324 | 3323 |
export_options: list[str], |
3325 | 3324 |
) -> None: |
3326 | 3325 |
"""Exporting an invalid config fails.""" |
3327 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3326 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3328 | 3327 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3329 | 3328 |
# with-statements. |
3330 | 3329 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3331 | 3330 |
with contextlib.ExitStack() as stack: |
3332 | 3331 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3333 | 3332 |
stack.enter_context( |
3334 |
- tests.machinery.pytest.isolated_config( |
|
3333 |
+ pytest_machinery.isolated_config( |
|
3335 | 3334 |
monkeypatch=monkeypatch, |
3336 | 3335 |
runner=runner, |
3337 | 3336 |
) |
... | ... |
@@ -3355,14 +3354,14 @@ class TestCLI: |
3355 | 3354 |
export_options: list[str], |
3356 | 3355 |
) -> None: |
3357 | 3356 |
"""Exporting an invalid config fails.""" |
3358 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3357 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3359 | 3358 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3360 | 3359 |
# with-statements. |
3361 | 3360 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3362 | 3361 |
with contextlib.ExitStack() as stack: |
3363 | 3362 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3364 | 3363 |
stack.enter_context( |
3365 |
- tests.machinery.pytest.isolated_config( |
|
3364 |
+ pytest_machinery.isolated_config( |
|
3366 | 3365 |
monkeypatch=monkeypatch, |
3367 | 3366 |
runner=runner, |
3368 | 3367 |
) |
... | ... |
@@ -3378,21 +3377,21 @@ class TestCLI: |
3378 | 3377 |
"expected error exit and known error message" |
3379 | 3378 |
) |
3380 | 3379 |
|
3381 |
- @tests.machinery.pytest.skip_if_on_the_annoying_os |
|
3380 |
+ @pytest_machinery.skip_if_on_the_annoying_os |
|
3382 | 3381 |
@Parametrize.EXPORT_FORMAT_OPTIONS |
3383 | 3382 |
def test_214e_export_settings_settings_directory_not_a_directory( |
3384 | 3383 |
self, |
3385 | 3384 |
export_options: list[str], |
3386 | 3385 |
) -> None: |
3387 | 3386 |
"""Exporting an invalid config fails.""" |
3388 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3387 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3389 | 3388 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3390 | 3389 |
# with-statements. |
3391 | 3390 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3392 | 3391 |
with contextlib.ExitStack() as stack: |
3393 | 3392 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3394 | 3393 |
stack.enter_context( |
3395 |
- tests.machinery.pytest.isolated_config( |
|
3394 |
+ pytest_machinery.isolated_config( |
|
3396 | 3395 |
monkeypatch=monkeypatch, |
3397 | 3396 |
runner=runner, |
3398 | 3397 |
) |
... | ... |
@@ -3443,14 +3442,14 @@ class TestCLI: |
3443 | 3442 |
if notes_placement == "before" |
3444 | 3443 |
else f"{result_phrase}\n\n{notes}\n\n" |
3445 | 3444 |
) |
3446 |
- runner = tests.machinery.CliRunner(mix_stderr=True) |
|
3445 |
+ runner = machinery.CliRunner(mix_stderr=True) |
|
3447 | 3446 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3448 | 3447 |
# with-statements. |
3449 | 3448 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3450 | 3449 |
with contextlib.ExitStack() as stack: |
3451 | 3450 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3452 | 3451 |
stack.enter_context( |
3453 |
- tests.machinery.pytest.isolated_vault_config( |
|
3452 |
+ pytest_machinery.isolated_vault_config( |
|
3454 | 3453 |
monkeypatch=monkeypatch, |
3455 | 3454 |
runner=runner, |
3456 | 3455 |
vault_config=vault_config, |
... | ... |
@@ -3496,14 +3495,14 @@ class TestCLI: |
3496 | 3495 |
""" |
3497 | 3496 |
# Reset caplog between hypothesis runs. |
3498 | 3497 |
caplog.clear() |
3499 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3498 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3500 | 3499 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3501 | 3500 |
# with-statements. |
3502 | 3501 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3503 | 3502 |
with contextlib.ExitStack() as stack: |
3504 | 3503 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3505 | 3504 |
stack.enter_context( |
3506 |
- tests.machinery.pytest.isolated_vault_config( |
|
3505 |
+ pytest_machinery.isolated_vault_config( |
|
3507 | 3506 |
monkeypatch=monkeypatch, |
3508 | 3507 |
runner=runner, |
3509 | 3508 |
vault_config={ |
... | ... |
@@ -3535,7 +3534,7 @@ class TestCLI: |
3535 | 3534 |
) |
3536 | 3535 |
assert result.clean_exit(), "expected clean exit" |
3537 | 3536 |
assert all(map(is_warning_line, result.stderr.splitlines(True))) |
3538 |
- assert modern_editor_interface or tests.machinery.warning_emitted( |
|
3537 |
+ assert modern_editor_interface or machinery.warning_emitted( |
|
3539 | 3538 |
"A backup copy of the old notes was saved", |
3540 | 3539 |
caplog.record_tuples, |
3541 | 3540 |
), "expected known warning message in stderr" |
... | ... |
@@ -3586,14 +3585,14 @@ class TestCLI: |
3586 | 3585 |
return " " + notes.strip() + "\n\n\n\n\n\n" |
3587 | 3586 |
|
3588 | 3587 |
edit_funcs = {"empty": empty, "space": space} |
3589 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3588 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3590 | 3589 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3591 | 3590 |
# with-statements. |
3592 | 3591 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3593 | 3592 |
with contextlib.ExitStack() as stack: |
3594 | 3593 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3595 | 3594 |
stack.enter_context( |
3596 |
- tests.machinery.pytest.isolated_vault_config( |
|
3595 |
+ pytest_machinery.isolated_vault_config( |
|
3597 | 3596 |
monkeypatch=monkeypatch, |
3598 | 3597 |
runner=runner, |
3599 | 3598 |
vault_config={ |
... | ... |
@@ -3675,14 +3674,14 @@ class TestCLI: |
3675 | 3674 |
hypothesis.assume(str(notes_marker) not in notes.strip()) |
3676 | 3675 |
# Reset caplog between hypothesis runs. |
3677 | 3676 |
caplog.clear() |
3678 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3677 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3679 | 3678 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3680 | 3679 |
# with-statements. |
3681 | 3680 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3682 | 3681 |
with contextlib.ExitStack() as stack: |
3683 | 3682 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3684 | 3683 |
stack.enter_context( |
3685 |
- tests.machinery.pytest.isolated_vault_config( |
|
3684 |
+ pytest_machinery.isolated_vault_config( |
|
3686 | 3685 |
monkeypatch=monkeypatch, |
3687 | 3686 |
runner=runner, |
3688 | 3687 |
vault_config={ |
... | ... |
@@ -3716,7 +3715,7 @@ class TestCLI: |
3716 | 3715 |
assert not result.stderr or all( |
3717 | 3716 |
map(is_warning_line, result.stderr.splitlines(True)) |
3718 | 3717 |
) |
3719 |
- assert not caplog.record_tuples or tests.machinery.warning_emitted( |
|
3718 |
+ assert not caplog.record_tuples or machinery.warning_emitted( |
|
3720 | 3719 |
"A backup copy of the old notes was saved", |
3721 | 3720 |
caplog.record_tuples, |
3722 | 3721 |
), "expected known warning message in stderr" |
... | ... |
@@ -3752,14 +3751,14 @@ class TestCLI: |
3752 | 3751 |
Aborting is only supported with the modern editor interface. |
3753 | 3752 |
|
3754 | 3753 |
""" |
3755 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3754 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3756 | 3755 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3757 | 3756 |
# with-statements. |
3758 | 3757 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3759 | 3758 |
with contextlib.ExitStack() as stack: |
3760 | 3759 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3761 | 3760 |
stack.enter_context( |
3762 |
- tests.machinery.pytest.isolated_vault_config( |
|
3761 |
+ pytest_machinery.isolated_vault_config( |
|
3763 | 3762 |
monkeypatch=monkeypatch, |
3764 | 3763 |
runner=runner, |
3765 | 3764 |
vault_config={ |
... | ... |
@@ -3800,14 +3799,14 @@ class TestCLI: |
3800 | 3799 |
Aborting is only supported with the modern editor interface. |
3801 | 3800 |
|
3802 | 3801 |
""" |
3803 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3802 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3804 | 3803 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3805 | 3804 |
# with-statements. |
3806 | 3805 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3807 | 3806 |
with contextlib.ExitStack() as stack: |
3808 | 3807 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3809 | 3808 |
stack.enter_context( |
3810 |
- tests.machinery.pytest.isolated_vault_config( |
|
3809 |
+ pytest_machinery.isolated_vault_config( |
|
3811 | 3810 |
monkeypatch=monkeypatch, |
3812 | 3811 |
runner=runner, |
3813 | 3812 |
vault_config={ |
... | ... |
@@ -3871,14 +3870,14 @@ class TestCLI: |
3871 | 3870 |
} |
3872 | 3871 |
# Reset caplog between hypothesis runs. |
3873 | 3872 |
caplog.clear() |
3874 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3873 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3875 | 3874 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3876 | 3875 |
# with-statements. |
3877 | 3876 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3878 | 3877 |
with contextlib.ExitStack() as stack: |
3879 | 3878 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3880 | 3879 |
stack.enter_context( |
3881 |
- tests.machinery.pytest.isolated_vault_config( |
|
3880 |
+ pytest_machinery.isolated_vault_config( |
|
3882 | 3881 |
monkeypatch=monkeypatch, |
3883 | 3882 |
runner=runner, |
3884 | 3883 |
vault_config=vault_config, |
... | ... |
@@ -3919,7 +3918,7 @@ class TestCLI: |
3919 | 3918 |
for line in result.stderr.splitlines(True) |
3920 | 3919 |
if line.startswith(f"{cli.PROG_NAME}: ") |
3921 | 3920 |
) |
3922 |
- assert tests.machinery.warning_emitted( |
|
3921 |
+ assert machinery.warning_emitted( |
|
3923 | 3922 |
"Specifying --notes without --config is ineffective. " |
3924 | 3923 |
"No notes will be edited.", |
3925 | 3924 |
caplog.record_tuples, |
... | ... |
@@ -3948,14 +3947,14 @@ class TestCLI: |
3948 | 3947 |
the config more readable. |
3949 | 3948 |
|
3950 | 3949 |
""" |
3951 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3950 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3952 | 3951 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3953 | 3952 |
# with-statements. |
3954 | 3953 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3955 | 3954 |
with contextlib.ExitStack() as stack: |
3956 | 3955 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3957 | 3956 |
stack.enter_context( |
3958 |
- tests.machinery.pytest.isolated_vault_config( |
|
3957 |
+ pytest_machinery.isolated_vault_config( |
|
3959 | 3958 |
monkeypatch=monkeypatch, |
3960 | 3959 |
runner=runner, |
3961 | 3960 |
vault_config={"global": {"phrase": "abc"}, "services": {}}, |
... | ... |
@@ -3964,7 +3963,7 @@ class TestCLI: |
3964 | 3963 |
monkeypatch.setattr( |
3965 | 3964 |
cli_helpers, |
3966 | 3965 |
"get_suitable_ssh_keys", |
3967 |
- tests.data.callables.suitable_ssh_keys, |
|
3966 |
+ callables.suitable_ssh_keys, |
|
3968 | 3967 |
) |
3969 | 3968 |
result = runner.invoke( |
3970 | 3969 |
cli.derivepassphrase_vault, |
... | ... |
@@ -3990,14 +3989,14 @@ class TestCLI: |
3990 | 3989 |
err_text: str, |
3991 | 3990 |
) -> None: |
3992 | 3991 |
"""Storing invalid settings via `--config` fails.""" |
3993 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
3992 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
3994 | 3993 |
# TODO(the-13th-letter): Rewrite using parenthesized |
3995 | 3994 |
# with-statements. |
3996 | 3995 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
3997 | 3996 |
with contextlib.ExitStack() as stack: |
3998 | 3997 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
3999 | 3998 |
stack.enter_context( |
4000 |
- tests.machinery.pytest.isolated_vault_config( |
|
3999 |
+ pytest_machinery.isolated_vault_config( |
|
4001 | 4000 |
monkeypatch=monkeypatch, |
4002 | 4001 |
runner=runner, |
4003 | 4002 |
vault_config={"global": {"phrase": "abc"}, "services": {}}, |
... | ... |
@@ -4006,7 +4005,7 @@ class TestCLI: |
4006 | 4005 |
monkeypatch.setattr( |
4007 | 4006 |
cli_helpers, |
4008 | 4007 |
"get_suitable_ssh_keys", |
4009 |
- tests.data.callables.suitable_ssh_keys, |
|
4008 |
+ callables.suitable_ssh_keys, |
|
4010 | 4009 |
) |
4011 | 4010 |
result = runner.invoke( |
4012 | 4011 |
cli.derivepassphrase_vault, |
... | ... |
@@ -4020,18 +4019,18 @@ class TestCLI: |
4020 | 4019 |
|
4021 | 4020 |
def test_225a_store_config_fail_manual_no_ssh_key_selection( |
4022 | 4021 |
self, |
4023 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
4022 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
4024 | 4023 |
) -> None: |
4025 | 4024 |
"""Not selecting an SSH key during `--config --key` fails.""" |
4026 | 4025 |
del running_ssh_agent |
4027 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4026 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4028 | 4027 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4029 | 4028 |
# with-statements. |
4030 | 4029 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4031 | 4030 |
with contextlib.ExitStack() as stack: |
4032 | 4031 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4033 | 4032 |
stack.enter_context( |
4034 |
- tests.machinery.pytest.isolated_vault_config( |
|
4033 |
+ pytest_machinery.isolated_vault_config( |
|
4035 | 4034 |
monkeypatch=monkeypatch, |
4036 | 4035 |
runner=runner, |
4037 | 4036 |
vault_config={"global": {"phrase": "abc"}, "services": {}}, |
... | ... |
@@ -4049,7 +4048,7 @@ class TestCLI: |
4049 | 4048 |
monkeypatch.setattr( |
4050 | 4049 |
cli_helpers, |
4051 | 4050 |
"get_suitable_ssh_keys", |
4052 |
- tests.data.callables.suitable_ssh_keys, |
|
4051 |
+ callables.suitable_ssh_keys, |
|
4053 | 4052 |
) |
4054 | 4053 |
result = runner.invoke( |
4055 | 4054 |
cli.derivepassphrase_vault, |
... | ... |
@@ -4062,18 +4061,18 @@ class TestCLI: |
4062 | 4061 |
|
4063 | 4062 |
def test_225b_store_config_fail_manual_no_ssh_agent( |
4064 | 4063 |
self, |
4065 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
4064 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
4066 | 4065 |
) -> None: |
4067 | 4066 |
"""Not running an SSH agent during `--config --key` fails.""" |
4068 | 4067 |
del running_ssh_agent |
4069 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4068 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4070 | 4069 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4071 | 4070 |
# with-statements. |
4072 | 4071 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4073 | 4072 |
with contextlib.ExitStack() as stack: |
4074 | 4073 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4075 | 4074 |
stack.enter_context( |
4076 |
- tests.machinery.pytest.isolated_vault_config( |
|
4075 |
+ pytest_machinery.isolated_vault_config( |
|
4077 | 4076 |
monkeypatch=monkeypatch, |
4078 | 4077 |
runner=runner, |
4079 | 4078 |
vault_config={"global": {"phrase": "abc"}, "services": {}}, |
... | ... |
@@ -4091,18 +4090,18 @@ class TestCLI: |
4091 | 4090 |
|
4092 | 4091 |
def test_225c_store_config_fail_manual_bad_ssh_agent_connection( |
4093 | 4092 |
self, |
4094 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
4093 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
4095 | 4094 |
) -> None: |
4096 | 4095 |
"""Not running a reachable SSH agent during `--config --key` fails.""" |
4097 | 4096 |
running_ssh_agent.require_external_address() |
4098 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4097 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4099 | 4098 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4100 | 4099 |
# with-statements. |
4101 | 4100 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4102 | 4101 |
with contextlib.ExitStack() as stack: |
4103 | 4102 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4104 | 4103 |
stack.enter_context( |
4105 |
- tests.machinery.pytest.isolated_vault_config( |
|
4104 |
+ pytest_machinery.isolated_vault_config( |
|
4106 | 4105 |
monkeypatch=monkeypatch, |
4107 | 4106 |
runner=runner, |
4108 | 4107 |
vault_config={"global": {"phrase": "abc"}, "services": {}}, |
... | ... |
@@ -4125,20 +4124,20 @@ class TestCLI: |
4125 | 4124 |
try_race_free_implementation: bool, |
4126 | 4125 |
) -> None: |
4127 | 4126 |
"""Using a read-only configuration file with `--config` fails.""" |
4128 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4127 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4129 | 4128 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4130 | 4129 |
# with-statements. |
4131 | 4130 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4132 | 4131 |
with contextlib.ExitStack() as stack: |
4133 | 4132 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4134 | 4133 |
stack.enter_context( |
4135 |
- tests.machinery.pytest.isolated_vault_config( |
|
4134 |
+ pytest_machinery.isolated_vault_config( |
|
4136 | 4135 |
monkeypatch=monkeypatch, |
4137 | 4136 |
runner=runner, |
4138 | 4137 |
vault_config={"global": {"phrase": "abc"}, "services": {}}, |
4139 | 4138 |
) |
4140 | 4139 |
) |
4141 |
- tests.data.callables.make_file_readonly( |
|
4140 |
+ callables.make_file_readonly( |
|
4142 | 4141 |
cli_helpers.config_filename(subsystem="vault"), |
4143 | 4142 |
try_race_free_implementation=try_race_free_implementation, |
4144 | 4143 |
) |
... | ... |
@@ -4155,14 +4154,14 @@ class TestCLI: |
4155 | 4154 |
self, |
4156 | 4155 |
) -> None: |
4157 | 4156 |
"""OS-erroring with `--config` fails.""" |
4158 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4157 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4159 | 4158 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4160 | 4159 |
# with-statements. |
4161 | 4160 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4162 | 4161 |
with contextlib.ExitStack() as stack: |
4163 | 4162 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4164 | 4163 |
stack.enter_context( |
4165 |
- tests.machinery.pytest.isolated_vault_config( |
|
4164 |
+ pytest_machinery.isolated_vault_config( |
|
4166 | 4165 |
monkeypatch=monkeypatch, |
4167 | 4166 |
runner=runner, |
4168 | 4167 |
vault_config={"global": {"phrase": "abc"}, "services": {}}, |
... | ... |
@@ -4188,14 +4187,14 @@ class TestCLI: |
4188 | 4187 |
self, |
4189 | 4188 |
) -> None: |
4190 | 4189 |
"""Issuing conflicting settings to `--config` fails.""" |
4191 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4190 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4192 | 4191 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4193 | 4192 |
# with-statements. |
4194 | 4193 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4195 | 4194 |
with contextlib.ExitStack() as stack: |
4196 | 4195 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4197 | 4196 |
stack.enter_context( |
4198 |
- tests.machinery.pytest.isolated_vault_config( |
|
4197 |
+ pytest_machinery.isolated_vault_config( |
|
4199 | 4198 |
monkeypatch=monkeypatch, |
4200 | 4199 |
runner=runner, |
4201 | 4200 |
vault_config={"global": {"phrase": "abc"}, "services": {}}, |
... | ... |
@@ -4218,18 +4217,18 @@ class TestCLI: |
4218 | 4217 |
|
4219 | 4218 |
def test_225g_store_config_fail_manual_ssh_agent_no_keys_loaded( |
4220 | 4219 |
self, |
4221 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
4220 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
4222 | 4221 |
) -> None: |
4223 | 4222 |
"""Not holding any SSH keys during `--config --key` fails.""" |
4224 | 4223 |
del running_ssh_agent |
4225 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4224 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4226 | 4225 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4227 | 4226 |
# with-statements. |
4228 | 4227 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4229 | 4228 |
with contextlib.ExitStack() as stack: |
4230 | 4229 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4231 | 4230 |
stack.enter_context( |
4232 |
- tests.machinery.pytest.isolated_vault_config( |
|
4231 |
+ pytest_machinery.isolated_vault_config( |
|
4233 | 4232 |
monkeypatch=monkeypatch, |
4234 | 4233 |
runner=runner, |
4235 | 4234 |
vault_config={"global": {"phrase": "abc"}, "services": {}}, |
... | ... |
@@ -4254,18 +4253,18 @@ class TestCLI: |
4254 | 4253 |
|
4255 | 4254 |
def test_225h_store_config_fail_manual_ssh_agent_runtime_error( |
4256 | 4255 |
self, |
4257 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
4256 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
4258 | 4257 |
) -> None: |
4259 | 4258 |
"""The SSH agent erroring during `--config --key` fails.""" |
4260 | 4259 |
del running_ssh_agent |
4261 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4260 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4262 | 4261 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4263 | 4262 |
# with-statements. |
4264 | 4263 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4265 | 4264 |
with contextlib.ExitStack() as stack: |
4266 | 4265 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4267 | 4266 |
stack.enter_context( |
4268 |
- tests.machinery.pytest.isolated_vault_config( |
|
4267 |
+ pytest_machinery.isolated_vault_config( |
|
4269 | 4268 |
monkeypatch=monkeypatch, |
4270 | 4269 |
runner=runner, |
4271 | 4270 |
vault_config={"global": {"phrase": "abc"}, "services": {}}, |
... | ... |
@@ -4287,18 +4286,18 @@ class TestCLI: |
4287 | 4286 |
|
4288 | 4287 |
def test_225i_store_config_fail_manual_ssh_agent_refuses( |
4289 | 4288 |
self, |
4290 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
4289 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
4291 | 4290 |
) -> None: |
4292 | 4291 |
"""The SSH agent refusing during `--config --key` fails.""" |
4293 | 4292 |
del running_ssh_agent |
4294 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4293 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4295 | 4294 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4296 | 4295 |
# with-statements. |
4297 | 4296 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4298 | 4297 |
with contextlib.ExitStack() as stack: |
4299 | 4298 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4300 | 4299 |
stack.enter_context( |
4301 |
- tests.machinery.pytest.isolated_vault_config( |
|
4300 |
+ pytest_machinery.isolated_vault_config( |
|
4302 | 4301 |
monkeypatch=monkeypatch, |
4303 | 4302 |
runner=runner, |
4304 | 4303 |
vault_config={"global": {"phrase": "abc"}, "services": {}}, |
... | ... |
@@ -4322,14 +4321,14 @@ class TestCLI: |
4322 | 4321 |
|
4323 | 4322 |
def test_226_no_arguments(self) -> None: |
4324 | 4323 |
"""Calling `derivepassphrase vault` without any arguments fails.""" |
4325 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4324 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4326 | 4325 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4327 | 4326 |
# with-statements. |
4328 | 4327 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4329 | 4328 |
with contextlib.ExitStack() as stack: |
4330 | 4329 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4331 | 4330 |
stack.enter_context( |
4332 |
- tests.machinery.pytest.isolated_config( |
|
4331 |
+ pytest_machinery.isolated_config( |
|
4333 | 4332 |
monkeypatch=monkeypatch, |
4334 | 4333 |
runner=runner, |
4335 | 4334 |
) |
... | ... |
@@ -4345,14 +4344,14 @@ class TestCLI: |
4345 | 4344 |
self, |
4346 | 4345 |
) -> None: |
4347 | 4346 |
"""Deriving a passphrase without a passphrase or key fails.""" |
4348 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4347 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4349 | 4348 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4350 | 4349 |
# with-statements. |
4351 | 4350 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4352 | 4351 |
with contextlib.ExitStack() as stack: |
4353 | 4352 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4354 | 4353 |
stack.enter_context( |
4355 |
- tests.machinery.pytest.isolated_config( |
|
4354 |
+ pytest_machinery.isolated_config( |
|
4356 | 4355 |
monkeypatch=monkeypatch, |
4357 | 4356 |
runner=runner, |
4358 | 4357 |
) |
... | ... |
@@ -4376,14 +4375,14 @@ class TestCLI: |
4376 | 4375 |
[issue #6]: https://github.com/the-13th-letter/derivepassphrase/issues/6 |
4377 | 4376 |
|
4378 | 4377 |
""" |
4379 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4378 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4380 | 4379 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4381 | 4380 |
# with-statements. |
4382 | 4381 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4383 | 4382 |
with contextlib.ExitStack() as stack: |
4384 | 4383 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4385 | 4384 |
stack.enter_context( |
4386 |
- tests.machinery.pytest.isolated_config( |
|
4385 |
+ pytest_machinery.isolated_config( |
|
4387 | 4386 |
monkeypatch=monkeypatch, |
4388 | 4387 |
runner=runner, |
4389 | 4388 |
) |
... | ... |
@@ -4422,14 +4421,14 @@ class TestCLI: |
4422 | 4421 |
[issue #6]: https://github.com/the-13th-letter/derivepassphrase/issues/6 |
4423 | 4422 |
|
4424 | 4423 |
""" |
4425 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4424 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4426 | 4425 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4427 | 4426 |
# with-statements. |
4428 | 4427 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4429 | 4428 |
with contextlib.ExitStack() as stack: |
4430 | 4429 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4431 | 4430 |
stack.enter_context( |
4432 |
- tests.machinery.pytest.isolated_config( |
|
4431 |
+ pytest_machinery.isolated_config( |
|
4433 | 4432 |
monkeypatch=monkeypatch, |
4434 | 4433 |
runner=runner, |
4435 | 4434 |
) |
... | ... |
@@ -4461,14 +4460,14 @@ class TestCLI: |
4461 | 4460 |
self, |
4462 | 4461 |
) -> None: |
4463 | 4462 |
"""Storing the configuration reacts even to weird errors.""" |
4464 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4463 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4465 | 4464 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4466 | 4465 |
# with-statements. |
4467 | 4466 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4468 | 4467 |
with contextlib.ExitStack() as stack: |
4469 | 4468 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4470 | 4469 |
stack.enter_context( |
4471 |
- tests.machinery.pytest.isolated_config( |
|
4470 |
+ pytest_machinery.isolated_config( |
|
4472 | 4471 |
monkeypatch=monkeypatch, |
4473 | 4472 |
runner=runner, |
4474 | 4473 |
) |
... | ... |
@@ -4500,14 +4499,14 @@ class TestCLI: |
4500 | 4499 |
warning_message: str, |
4501 | 4500 |
) -> None: |
4502 | 4501 |
"""Using unnormalized Unicode passphrases warns.""" |
4503 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4502 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4504 | 4503 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4505 | 4504 |
# with-statements. |
4506 | 4505 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4507 | 4506 |
with contextlib.ExitStack() as stack: |
4508 | 4507 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4509 | 4508 |
stack.enter_context( |
4510 |
- tests.machinery.pytest.isolated_vault_config( |
|
4509 |
+ pytest_machinery.isolated_vault_config( |
|
4511 | 4510 |
monkeypatch=monkeypatch, |
4512 | 4511 |
runner=runner, |
4513 | 4512 |
vault_config={ |
... | ... |
@@ -4525,7 +4524,7 @@ class TestCLI: |
4525 | 4524 |
input=input, |
4526 | 4525 |
) |
4527 | 4526 |
assert result.clean_exit(), "expected clean exit" |
4528 |
- assert tests.machinery.warning_emitted( |
|
4527 |
+ assert machinery.warning_emitted( |
|
4529 | 4528 |
warning_message, caplog.record_tuples |
4530 | 4529 |
), "expected known warning message in stderr" |
4531 | 4530 |
|
... | ... |
@@ -4538,14 +4537,14 @@ class TestCLI: |
4538 | 4537 |
error_message: str, |
4539 | 4538 |
) -> None: |
4540 | 4539 |
"""Using unknown Unicode normalization forms fails.""" |
4541 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4540 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4542 | 4541 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4543 | 4542 |
# with-statements. |
4544 | 4543 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4545 | 4544 |
with contextlib.ExitStack() as stack: |
4546 | 4545 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4547 | 4546 |
stack.enter_context( |
4548 |
- tests.machinery.pytest.isolated_vault_config( |
|
4547 |
+ pytest_machinery.isolated_vault_config( |
|
4549 | 4548 |
monkeypatch=monkeypatch, |
4550 | 4549 |
runner=runner, |
4551 | 4550 |
vault_config={ |
... | ... |
@@ -4575,14 +4574,14 @@ class TestCLI: |
4575 | 4574 |
command_line: list[str], |
4576 | 4575 |
) -> None: |
4577 | 4576 |
"""Using unknown Unicode normalization forms in the config fails.""" |
4578 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4577 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4579 | 4578 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4580 | 4579 |
# with-statements. |
4581 | 4580 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4582 | 4581 |
with contextlib.ExitStack() as stack: |
4583 | 4582 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4584 | 4583 |
stack.enter_context( |
4585 |
- tests.machinery.pytest.isolated_vault_config( |
|
4584 |
+ pytest_machinery.isolated_vault_config( |
|
4586 | 4585 |
monkeypatch=monkeypatch, |
4587 | 4586 |
runner=runner, |
4588 | 4587 |
vault_config={ |
... | ... |
@@ -4615,14 +4614,14 @@ class TestCLI: |
4615 | 4614 |
self, |
4616 | 4615 |
) -> None: |
4617 | 4616 |
"""Loading a user configuration file in an invalid format fails.""" |
4618 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4617 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4619 | 4618 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4620 | 4619 |
# with-statements. |
4621 | 4620 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4622 | 4621 |
with contextlib.ExitStack() as stack: |
4623 | 4622 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4624 | 4623 |
stack.enter_context( |
4625 |
- tests.machinery.pytest.isolated_vault_config( |
|
4624 |
+ pytest_machinery.isolated_vault_config( |
|
4626 | 4625 |
monkeypatch=monkeypatch, |
4627 | 4626 |
runner=runner, |
4628 | 4627 |
vault_config={"services": {}}, |
... | ... |
@@ -4643,14 +4642,14 @@ class TestCLI: |
4643 | 4642 |
self, |
4644 | 4643 |
) -> None: |
4645 | 4644 |
"""Loading a user configuration file in an invalid format fails.""" |
4646 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4645 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4647 | 4646 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4648 | 4647 |
# with-statements. |
4649 | 4648 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4650 | 4649 |
with contextlib.ExitStack() as stack: |
4651 | 4650 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4652 | 4651 |
stack.enter_context( |
4653 |
- tests.machinery.pytest.isolated_vault_config( |
|
4652 |
+ pytest_machinery.isolated_vault_config( |
|
4654 | 4653 |
monkeypatch=monkeypatch, |
4655 | 4654 |
runner=runner, |
4656 | 4655 |
vault_config={"services": {}}, |
... | ... |
@@ -4677,14 +4676,14 @@ class TestCLI: |
4677 | 4676 |
caplog: pytest.LogCaptureFixture, |
4678 | 4677 |
) -> None: |
4679 | 4678 |
"""Querying the SSH agent without `AF_UNIX` support fails.""" |
4680 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4679 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4681 | 4680 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4682 | 4681 |
# with-statements. |
4683 | 4682 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4684 | 4683 |
with contextlib.ExitStack() as stack: |
4685 | 4684 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4686 | 4685 |
stack.enter_context( |
4687 |
- tests.machinery.pytest.isolated_vault_config( |
|
4686 |
+ pytest_machinery.isolated_vault_config( |
|
4688 | 4687 |
monkeypatch=monkeypatch, |
4689 | 4688 |
runner=runner, |
4690 | 4689 |
vault_config={"global": {"phrase": "abc"}, "services": {}}, |
... | ... |
@@ -4705,7 +4704,7 @@ class TestCLI: |
4705 | 4704 |
assert result.error_exit( |
4706 | 4705 |
error="does not support communicating with it" |
4707 | 4706 |
), "expected error exit and known error message" |
4708 |
- assert tests.machinery.warning_emitted( |
|
4707 |
+ assert machinery.warning_emitted( |
|
4709 | 4708 |
"Cannot connect to an SSH agent via UNIX domain sockets", |
4710 | 4709 |
caplog.record_tuples, |
4711 | 4710 |
), "expected known warning message in stderr" |
... | ... |
@@ -4720,14 +4719,14 @@ class TestCLIUtils: |
4720 | 4719 |
config: Any, |
4721 | 4720 |
) -> None: |
4722 | 4721 |
"""[`cli_helpers.load_config`][] works for valid configurations.""" |
4723 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4722 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4724 | 4723 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4725 | 4724 |
# with-statements. |
4726 | 4725 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4727 | 4726 |
with contextlib.ExitStack() as stack: |
4728 | 4727 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4729 | 4728 |
stack.enter_context( |
4730 |
- tests.machinery.pytest.isolated_vault_config( |
|
4729 |
+ pytest_machinery.isolated_vault_config( |
|
4731 | 4730 |
monkeypatch=monkeypatch, |
4732 | 4731 |
runner=runner, |
4733 | 4732 |
vault_config=config, |
... | ... |
@@ -4742,14 +4741,14 @@ class TestCLIUtils: |
4742 | 4741 |
self, |
4743 | 4742 |
) -> None: |
4744 | 4743 |
"""[`cli_helpers.save_config`][] fails for bad configurations.""" |
4745 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
4744 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
4746 | 4745 |
# TODO(the-13th-letter): Rewrite using parenthesized |
4747 | 4746 |
# with-statements. |
4748 | 4747 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
4749 | 4748 |
with contextlib.ExitStack() as stack: |
4750 | 4749 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
4751 | 4750 |
stack.enter_context( |
4752 |
- tests.machinery.pytest.isolated_vault_config( |
|
4751 |
+ pytest_machinery.isolated_vault_config( |
|
4753 | 4752 |
monkeypatch=monkeypatch, |
4754 | 4753 |
runner=runner, |
4755 | 4754 |
vault_config={}, |
... | ... |
@@ -4792,7 +4791,7 @@ class TestCLIUtils: |
4792 | 4791 |
click.echo(items[index]) |
4793 | 4792 |
click.echo("(Note: Vikings strictly optional.)") |
4794 | 4793 |
|
4795 |
- runner = tests.machinery.CliRunner(mix_stderr=True) |
|
4794 |
+ runner = machinery.CliRunner(mix_stderr=True) |
|
4796 | 4795 |
result = runner.invoke(driver, [], input="9") |
4797 | 4796 |
assert result.clean_exit( |
4798 | 4797 |
output="""\ |
... | ... |
@@ -4889,7 +4888,7 @@ Your selection? (1-10, leave empty to abort): """, |
4889 | 4888 |
else: |
4890 | 4889 |
click.echo("Great!") |
4891 | 4890 |
|
4892 |
- runner = tests.machinery.CliRunner(mix_stderr=True) |
|
4891 |
+ runner = machinery.CliRunner(mix_stderr=True) |
|
4893 | 4892 |
result = runner.invoke( |
4894 | 4893 |
driver, ["Will replace with spam. Confirm, y/n?"], input="y" |
4895 | 4894 |
) |
... | ... |
@@ -5104,14 +5103,14 @@ Will replace with spam, okay? (Please say "y" or "n".): Boo. |
5104 | 5103 |
config, outfile=outfile, prog_name_list=prog_name_list |
5105 | 5104 |
) |
5106 | 5105 |
script = outfile.getvalue() |
5107 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5106 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5108 | 5107 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5109 | 5108 |
# with-statements. |
5110 | 5109 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5111 | 5110 |
with contextlib.ExitStack() as stack: |
5112 | 5111 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5113 | 5112 |
stack.enter_context( |
5114 |
- tests.machinery.pytest.isolated_vault_config( |
|
5113 |
+ pytest_machinery.isolated_vault_config( |
|
5115 | 5114 |
monkeypatch=monkeypatch, |
5116 | 5115 |
runner=runner, |
5117 | 5116 |
vault_config={"services": {}}, |
... | ... |
@@ -5122,7 +5121,7 @@ Will replace with spam, okay? (Please say "y" or "n".): Boo. |
5122 | 5121 |
assert cli_helpers.load_config() == config |
5123 | 5122 |
|
5124 | 5123 |
@hypothesis.given( |
5125 |
- global_config_settable=tests.machinery.hypothesis.vault_full_service_config(), |
|
5124 |
+ global_config_settable=hypothesis_machinery.vault_full_service_config(), |
|
5126 | 5125 |
global_config_importable=strategies.fixed_dictionaries( |
5127 | 5126 |
{}, |
5128 | 5127 |
optional={ |
... | ... |
@@ -5217,7 +5216,7 @@ Will replace with spam, okay? (Please say "y" or "n".): Boo. |
5217 | 5216 |
min_size=4, |
5218 | 5217 |
max_size=64, |
5219 | 5218 |
), |
5220 |
- service_config_settable=tests.machinery.hypothesis.vault_full_service_config(), |
|
5219 |
+ service_config_settable=hypothesis_machinery.vault_full_service_config(), |
|
5221 | 5220 |
service_config_importable=strategies.fixed_dictionaries( |
5222 | 5221 |
{}, |
5223 | 5222 |
optional={ |
... | ... |
@@ -5374,14 +5373,14 @@ Will replace with spam, okay? (Please say "y" or "n".): Boo. |
5374 | 5373 |
finally: |
5375 | 5374 |
shutil.rmtree(path) |
5376 | 5375 |
|
5377 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5376 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5378 | 5377 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5379 | 5378 |
# with-statements. |
5380 | 5379 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5381 | 5380 |
with contextlib.ExitStack() as stack: |
5382 | 5381 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5383 | 5382 |
stack.enter_context( |
5384 |
- tests.machinery.pytest.isolated_vault_config( |
|
5383 |
+ pytest_machinery.isolated_vault_config( |
|
5385 | 5384 |
monkeypatch=monkeypatch, |
5386 | 5385 |
runner=runner, |
5387 | 5386 |
vault_config={"services": {}}, |
... | ... |
@@ -5404,7 +5403,7 @@ Will replace with spam, okay? (Please say "y" or "n".): Boo. |
5404 | 5403 |
system_tempdir = os.fsdecode(tempfile.gettempdir()) |
5405 | 5404 |
our_tempdir = cli_helpers.get_tempdir() |
5406 | 5405 |
assert system_tempdir == os.fsdecode(our_tempdir) or ( |
5407 |
- # TODO(the-13th-letter): `tests.machinery.pytest.isolated_config` |
|
5406 |
+ # TODO(the-13th-letter): `pytest_machinery.isolated_config` |
|
5408 | 5407 |
# guarantees that `Path.cwd() == config_filename(None)`. |
5409 | 5408 |
# So this sub-branch ought to never trigger in our |
5410 | 5409 |
# tests. |
... | ... |
@@ -5421,14 +5420,14 @@ Will replace with spam, okay? (Please say "y" or "n".): Boo. |
5421 | 5420 |
configuration directory. |
5422 | 5421 |
|
5423 | 5422 |
""" |
5424 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5423 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5425 | 5424 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5426 | 5425 |
# with-statements. |
5427 | 5426 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5428 | 5427 |
with contextlib.ExitStack() as stack: |
5429 | 5428 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5430 | 5429 |
stack.enter_context( |
5431 |
- tests.machinery.pytest.isolated_vault_config( |
|
5430 |
+ pytest_machinery.isolated_vault_config( |
|
5432 | 5431 |
monkeypatch=monkeypatch, |
5433 | 5432 |
runner=runner, |
5434 | 5433 |
vault_config={"services": {}}, |
... | ... |
@@ -5476,14 +5475,14 @@ Will replace with spam, okay? (Please say "y" or "n".): Boo. |
5476 | 5475 |
) -> None: |
5477 | 5476 |
"""Repeatedly removing the same parts of a configuration works.""" |
5478 | 5477 |
for start_config in [config, result_config]: |
5479 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5478 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5480 | 5479 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5481 | 5480 |
# with-statements. |
5482 | 5481 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5483 | 5482 |
with contextlib.ExitStack() as stack: |
5484 | 5483 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5485 | 5484 |
stack.enter_context( |
5486 |
- tests.machinery.pytest.isolated_vault_config( |
|
5485 |
+ pytest_machinery.isolated_vault_config( |
|
5487 | 5486 |
monkeypatch=monkeypatch, |
5488 | 5487 |
runner=runner, |
5489 | 5488 |
vault_config=start_config, |
... | ... |
@@ -5526,7 +5525,7 @@ Will replace with spam, okay? (Please say "y" or "n".): Boo. |
5526 | 5525 |
@Parametrize.CONNECTION_HINTS |
5527 | 5526 |
def test_227_get_suitable_ssh_keys( |
5528 | 5527 |
self, |
5529 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
5528 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
5530 | 5529 |
conn_hint: str, |
5531 | 5530 |
) -> None: |
5532 | 5531 |
"""[`cli_helpers.get_suitable_ssh_keys`][] works.""" |
... | ... |
@@ -5534,7 +5533,7 @@ Will replace with spam, okay? (Please say "y" or "n".): Boo. |
5534 | 5533 |
monkeypatch.setattr( |
5535 | 5534 |
ssh_agent.SSHAgentClient, |
5536 | 5535 |
"list_keys", |
5537 |
- tests.data.callables.list_keys, |
|
5536 |
+ callables.list_keys, |
|
5538 | 5537 |
) |
5539 | 5538 |
hint: ssh_agent.SSHAgentClient | _types.SSHAgentSocket | None |
5540 | 5539 |
# TODO(the-13th-letter): Rewrite using structural pattern |
... | ... |
@@ -5629,14 +5628,14 @@ class TestCLITransition: |
5629 | 5628 |
config: Any, |
5630 | 5629 |
) -> None: |
5631 | 5630 |
"""Loading the old settings file works.""" |
5632 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5631 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5633 | 5632 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5634 | 5633 |
# with-statements. |
5635 | 5634 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5636 | 5635 |
with contextlib.ExitStack() as stack: |
5637 | 5636 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5638 | 5637 |
stack.enter_context( |
5639 |
- tests.machinery.pytest.isolated_config( |
|
5638 |
+ pytest_machinery.isolated_config( |
|
5640 | 5639 |
monkeypatch=monkeypatch, |
5641 | 5640 |
runner=runner, |
5642 | 5641 |
) |
... | ... |
@@ -5652,14 +5651,14 @@ class TestCLITransition: |
5652 | 5651 |
config: Any, |
5653 | 5652 |
) -> None: |
5654 | 5653 |
"""Migrating the old settings file works.""" |
5655 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5654 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5656 | 5655 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5657 | 5656 |
# with-statements. |
5658 | 5657 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5659 | 5658 |
with contextlib.ExitStack() as stack: |
5660 | 5659 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5661 | 5660 |
stack.enter_context( |
5662 |
- tests.machinery.pytest.isolated_config( |
|
5661 |
+ pytest_machinery.isolated_config( |
|
5663 | 5662 |
monkeypatch=monkeypatch, |
5664 | 5663 |
runner=runner, |
5665 | 5664 |
) |
... | ... |
@@ -5675,14 +5674,14 @@ class TestCLITransition: |
5675 | 5674 |
config: Any, |
5676 | 5675 |
) -> None: |
5677 | 5676 |
"""Migrating the old settings file atop a directory fails.""" |
5678 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5677 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5679 | 5678 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5680 | 5679 |
# with-statements. |
5681 | 5680 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5682 | 5681 |
with contextlib.ExitStack() as stack: |
5683 | 5682 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5684 | 5683 |
stack.enter_context( |
5685 |
- tests.machinery.pytest.isolated_config( |
|
5684 |
+ pytest_machinery.isolated_config( |
|
5686 | 5685 |
monkeypatch=monkeypatch, |
5687 | 5686 |
runner=runner, |
5688 | 5687 |
) |
... | ... |
@@ -5705,14 +5704,14 @@ class TestCLITransition: |
5705 | 5704 |
config: Any, |
5706 | 5705 |
) -> None: |
5707 | 5706 |
"""Migrating an invalid old settings file fails.""" |
5708 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5707 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5709 | 5708 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5710 | 5709 |
# with-statements. |
5711 | 5710 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5712 | 5711 |
with contextlib.ExitStack() as stack: |
5713 | 5712 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5714 | 5713 |
stack.enter_context( |
5715 |
- tests.machinery.pytest.isolated_config( |
|
5714 |
+ pytest_machinery.isolated_config( |
|
5716 | 5715 |
monkeypatch=monkeypatch, |
5717 | 5716 |
runner=runner, |
5718 | 5717 |
) |
... | ... |
@@ -5731,33 +5730,33 @@ class TestCLITransition: |
5731 | 5730 |
) -> None: |
5732 | 5731 |
"""Forwarding arguments from "export" to "export vault" works.""" |
5733 | 5732 |
pytest.importorskip("cryptography", minversion="38.0") |
5734 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5733 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5735 | 5734 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5736 | 5735 |
# with-statements. |
5737 | 5736 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5738 | 5737 |
with contextlib.ExitStack() as stack: |
5739 | 5738 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5740 | 5739 |
stack.enter_context( |
5741 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
5740 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
5742 | 5741 |
monkeypatch=monkeypatch, |
5743 | 5742 |
runner=runner, |
5744 |
- vault_config=tests.data.VAULT_V03_CONFIG, |
|
5745 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
5743 |
+ vault_config=data.VAULT_V03_CONFIG, |
|
5744 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
5746 | 5745 |
) |
5747 | 5746 |
) |
5748 |
- monkeypatch.setenv("VAULT_KEY", tests.data.VAULT_MASTER_KEY) |
|
5747 |
+ monkeypatch.setenv("VAULT_KEY", data.VAULT_MASTER_KEY) |
|
5749 | 5748 |
result = runner.invoke( |
5750 | 5749 |
cli.derivepassphrase, |
5751 | 5750 |
["export", "VAULT_PATH"], |
5752 | 5751 |
) |
5753 | 5752 |
assert result.clean_exit(empty_stderr=False), "expected clean exit" |
5754 |
- assert tests.machinery.deprecation_warning_emitted( |
|
5753 |
+ assert machinery.deprecation_warning_emitted( |
|
5755 | 5754 |
"A subcommand will be required here in v1.0", caplog.record_tuples |
5756 | 5755 |
) |
5757 |
- assert tests.machinery.deprecation_warning_emitted( |
|
5756 |
+ assert machinery.deprecation_warning_emitted( |
|
5758 | 5757 |
'Defaulting to subcommand "vault"', caplog.record_tuples |
5759 | 5758 |
) |
5760 |
- assert json.loads(result.stdout) == tests.data.VAULT_V03_CONFIG_DATA |
|
5759 |
+ assert json.loads(result.stdout) == data.VAULT_V03_CONFIG_DATA |
|
5761 | 5760 |
|
5762 | 5761 |
def test_201_forward_export_vault_empty_commandline( |
5763 | 5762 |
self, |
... | ... |
@@ -5765,14 +5764,14 @@ class TestCLITransition: |
5765 | 5764 |
) -> None: |
5766 | 5765 |
"""Deferring from "export" to "export vault" works.""" |
5767 | 5766 |
pytest.importorskip("cryptography", minversion="38.0") |
5768 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5767 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5769 | 5768 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5770 | 5769 |
# with-statements. |
5771 | 5770 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5772 | 5771 |
with contextlib.ExitStack() as stack: |
5773 | 5772 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5774 | 5773 |
stack.enter_context( |
5775 |
- tests.machinery.pytest.isolated_config( |
|
5774 |
+ pytest_machinery.isolated_config( |
|
5776 | 5775 |
monkeypatch=monkeypatch, |
5777 | 5776 |
runner=runner, |
5778 | 5777 |
) |
... | ... |
@@ -5781,10 +5780,10 @@ class TestCLITransition: |
5781 | 5780 |
cli.derivepassphrase, |
5782 | 5781 |
["export"], |
5783 | 5782 |
) |
5784 |
- assert tests.machinery.deprecation_warning_emitted( |
|
5783 |
+ assert machinery.deprecation_warning_emitted( |
|
5785 | 5784 |
"A subcommand will be required here in v1.0", caplog.record_tuples |
5786 | 5785 |
) |
5787 |
- assert tests.machinery.deprecation_warning_emitted( |
|
5786 |
+ assert machinery.deprecation_warning_emitted( |
|
5788 | 5787 |
'Defaulting to subcommand "vault"', caplog.record_tuples |
5789 | 5788 |
) |
5790 | 5789 |
assert result.error_exit(error="Missing argument 'PATH'"), ( |
... | ... |
@@ -5800,14 +5799,14 @@ class TestCLITransition: |
5800 | 5799 |
"""Forwarding arguments from top-level to "vault" works.""" |
5801 | 5800 |
option = f"--{charset_name}" |
5802 | 5801 |
charset = vault.Vault.CHARSETS[charset_name].decode("ascii") |
5803 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5802 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5804 | 5803 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5805 | 5804 |
# with-statements. |
5806 | 5805 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5807 | 5806 |
with contextlib.ExitStack() as stack: |
5808 | 5807 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5809 | 5808 |
stack.enter_context( |
5810 |
- tests.machinery.pytest.isolated_config( |
|
5809 |
+ pytest_machinery.isolated_config( |
|
5811 | 5810 |
monkeypatch=monkeypatch, |
5812 | 5811 |
runner=runner, |
5813 | 5812 |
) |
... | ... |
@@ -5815,7 +5814,7 @@ class TestCLITransition: |
5815 | 5814 |
monkeypatch.setattr( |
5816 | 5815 |
cli_helpers, |
5817 | 5816 |
"prompt_for_passphrase", |
5818 |
- tests.data.callables.auto_prompt, |
|
5817 |
+ callables.auto_prompt, |
|
5819 | 5818 |
) |
5820 | 5819 |
result = runner.invoke( |
5821 | 5820 |
cli.derivepassphrase, |
... | ... |
@@ -5824,10 +5823,10 @@ class TestCLITransition: |
5824 | 5823 |
catch_exceptions=False, |
5825 | 5824 |
) |
5826 | 5825 |
assert result.clean_exit(empty_stderr=False), "expected clean exit" |
5827 |
- assert tests.machinery.deprecation_warning_emitted( |
|
5826 |
+ assert machinery.deprecation_warning_emitted( |
|
5828 | 5827 |
"A subcommand will be required here in v1.0", caplog.record_tuples |
5829 | 5828 |
) |
5830 |
- assert tests.machinery.deprecation_warning_emitted( |
|
5829 |
+ assert machinery.deprecation_warning_emitted( |
|
5831 | 5830 |
'Defaulting to subcommand "vault"', caplog.record_tuples |
5832 | 5831 |
) |
5833 | 5832 |
for c in charset: |
... | ... |
@@ -5840,14 +5839,14 @@ class TestCLITransition: |
5840 | 5839 |
caplog: pytest.LogCaptureFixture, |
5841 | 5840 |
) -> None: |
5842 | 5841 |
"""Deferring from top-level to "vault" works.""" |
5843 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5842 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5844 | 5843 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5845 | 5844 |
# with-statements. |
5846 | 5845 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5847 | 5846 |
with contextlib.ExitStack() as stack: |
5848 | 5847 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5849 | 5848 |
stack.enter_context( |
5850 |
- tests.machinery.pytest.isolated_config( |
|
5849 |
+ pytest_machinery.isolated_config( |
|
5851 | 5850 |
monkeypatch=monkeypatch, |
5852 | 5851 |
runner=runner, |
5853 | 5852 |
) |
... | ... |
@@ -5858,10 +5857,10 @@ class TestCLITransition: |
5858 | 5857 |
input=DUMMY_PASSPHRASE, |
5859 | 5858 |
catch_exceptions=False, |
5860 | 5859 |
) |
5861 |
- assert tests.machinery.deprecation_warning_emitted( |
|
5860 |
+ assert machinery.deprecation_warning_emitted( |
|
5862 | 5861 |
"A subcommand will be required here in v1.0", caplog.record_tuples |
5863 | 5862 |
) |
5864 |
- assert tests.machinery.deprecation_warning_emitted( |
|
5863 |
+ assert machinery.deprecation_warning_emitted( |
|
5865 | 5864 |
'Defaulting to subcommand "vault"', caplog.record_tuples |
5866 | 5865 |
) |
5867 | 5866 |
assert result.error_exit( |
... | ... |
@@ -5874,14 +5873,14 @@ class TestCLITransition: |
5874 | 5873 |
) -> None: |
5875 | 5874 |
"""Exporting from (and migrating) the old settings file works.""" |
5876 | 5875 |
caplog.set_level(logging.INFO) |
5877 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5876 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5878 | 5877 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5879 | 5878 |
# with-statements. |
5880 | 5879 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5881 | 5880 |
with contextlib.ExitStack() as stack: |
5882 | 5881 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5883 | 5882 |
stack.enter_context( |
5884 |
- tests.machinery.pytest.isolated_config( |
|
5883 |
+ pytest_machinery.isolated_config( |
|
5885 | 5884 |
monkeypatch=monkeypatch, |
5886 | 5885 |
runner=runner, |
5887 | 5886 |
) |
... | ... |
@@ -5902,10 +5901,10 @@ class TestCLITransition: |
5902 | 5901 |
catch_exceptions=False, |
5903 | 5902 |
) |
5904 | 5903 |
assert result.clean_exit(), "expected clean exit" |
5905 |
- assert tests.machinery.deprecation_warning_emitted( |
|
5904 |
+ assert machinery.deprecation_warning_emitted( |
|
5906 | 5905 |
"v0.1-style config file", caplog.record_tuples |
5907 | 5906 |
), "expected known warning message in stderr" |
5908 |
- assert tests.machinery.deprecation_info_emitted( |
|
5907 |
+ assert machinery.deprecation_info_emitted( |
|
5909 | 5908 |
"Successfully migrated to ", caplog.record_tuples |
5910 | 5909 |
), "expected known warning message in stderr" |
5911 | 5910 |
|
... | ... |
@@ -5914,14 +5913,14 @@ class TestCLITransition: |
5914 | 5913 |
caplog: pytest.LogCaptureFixture, |
5915 | 5914 |
) -> None: |
5916 | 5915 |
"""Exporting from (and not migrating) the old settings file fails.""" |
5917 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5916 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5918 | 5917 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5919 | 5918 |
# with-statements. |
5920 | 5919 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5921 | 5920 |
with contextlib.ExitStack() as stack: |
5922 | 5921 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5923 | 5922 |
stack.enter_context( |
5924 |
- tests.machinery.pytest.isolated_config( |
|
5923 |
+ pytest_machinery.isolated_config( |
|
5925 | 5924 |
monkeypatch=monkeypatch, |
5926 | 5925 |
runner=runner, |
5927 | 5926 |
) |
... | ... |
@@ -5952,10 +5951,10 @@ class TestCLITransition: |
5952 | 5951 |
catch_exceptions=False, |
5953 | 5952 |
) |
5954 | 5953 |
assert result.clean_exit(), "expected clean exit" |
5955 |
- assert tests.machinery.deprecation_warning_emitted( |
|
5954 |
+ assert machinery.deprecation_warning_emitted( |
|
5956 | 5955 |
"v0.1-style config file", caplog.record_tuples |
5957 | 5956 |
), "expected known warning message in stderr" |
5958 |
- assert tests.machinery.warning_emitted( |
|
5957 |
+ assert machinery.warning_emitted( |
|
5959 | 5958 |
"Failed to migrate to ", caplog.record_tuples |
5960 | 5959 |
), "expected known warning message in stderr" |
5961 | 5960 |
|
... | ... |
@@ -5964,14 +5963,14 @@ class TestCLITransition: |
5964 | 5963 |
) -> None: |
5965 | 5964 |
"""Completing service names from the old settings file works.""" |
5966 | 5965 |
config = {"services": {DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy()}} |
5967 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
5966 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
5968 | 5967 |
# TODO(the-13th-letter): Rewrite using parenthesized |
5969 | 5968 |
# with-statements. |
5970 | 5969 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
5971 | 5970 |
with contextlib.ExitStack() as stack: |
5972 | 5971 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
5973 | 5972 |
stack.enter_context( |
5974 |
- tests.machinery.pytest.isolated_vault_config( |
|
5973 |
+ pytest_machinery.isolated_vault_config( |
|
5975 | 5974 |
monkeypatch=monkeypatch, |
5976 | 5975 |
runner=runner, |
5977 | 5976 |
vault_config=config, |
... | ... |
@@ -6106,14 +6105,14 @@ class TestShellCompletion: |
6106 | 6105 |
completions: AbstractSet[str], |
6107 | 6106 |
) -> None: |
6108 | 6107 |
"""Our completion machinery works for vault service names.""" |
6109 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
6108 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
6110 | 6109 |
# TODO(the-13th-letter): Rewrite using parenthesized |
6111 | 6110 |
# with-statements. |
6112 | 6111 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
6113 | 6112 |
with contextlib.ExitStack() as stack: |
6114 | 6113 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
6115 | 6114 |
stack.enter_context( |
6116 |
- tests.machinery.pytest.isolated_vault_config( |
|
6115 |
+ pytest_machinery.isolated_vault_config( |
|
6117 | 6116 |
monkeypatch=monkeypatch, |
6118 | 6117 |
runner=runner, |
6119 | 6118 |
vault_config=config, |
... | ... |
@@ -6138,14 +6137,14 @@ class TestShellCompletion: |
6138 | 6137 |
results: list[str | click.shell_completion.CompletionItem], |
6139 | 6138 |
) -> None: |
6140 | 6139 |
"""Custom completion functions work for all shells.""" |
6141 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
6140 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
6142 | 6141 |
# TODO(the-13th-letter): Rewrite using parenthesized |
6143 | 6142 |
# with-statements. |
6144 | 6143 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
6145 | 6144 |
with contextlib.ExitStack() as stack: |
6146 | 6145 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
6147 | 6146 |
stack.enter_context( |
6148 |
- tests.machinery.pytest.isolated_vault_config( |
|
6147 |
+ pytest_machinery.isolated_vault_config( |
|
6149 | 6148 |
monkeypatch=monkeypatch, |
6150 | 6149 |
runner=runner, |
6151 | 6150 |
vault_config=config, |
... | ... |
@@ -6200,14 +6199,14 @@ class TestShellCompletion: |
6200 | 6199 |
) -> None: |
6201 | 6200 |
"""Completion skips incompletable items.""" |
6202 | 6201 |
vault_config = config if mode == "config" else {"services": {}} |
6203 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
6202 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
6204 | 6203 |
# TODO(the-13th-letter): Rewrite using parenthesized |
6205 | 6204 |
# with-statements. |
6206 | 6205 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
6207 | 6206 |
with contextlib.ExitStack() as stack: |
6208 | 6207 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
6209 | 6208 |
stack.enter_context( |
6210 |
- tests.machinery.pytest.isolated_vault_config( |
|
6209 |
+ pytest_machinery.isolated_vault_config( |
|
6211 | 6210 |
monkeypatch=monkeypatch, |
6212 | 6211 |
runner=runner, |
6213 | 6212 |
vault_config=vault_config, |
... | ... |
@@ -6227,10 +6226,10 @@ class TestShellCompletion: |
6227 | 6226 |
input=json.dumps(config), |
6228 | 6227 |
) |
6229 | 6228 |
assert result.clean_exit(), "expected clean exit" |
6230 |
- assert tests.machinery.warning_emitted( |
|
6229 |
+ assert machinery.warning_emitted( |
|
6231 | 6230 |
"contains an ASCII control character", caplog.record_tuples |
6232 | 6231 |
), "expected known warning message in stderr" |
6233 |
- assert tests.machinery.warning_emitted( |
|
6232 |
+ assert machinery.warning_emitted( |
|
6234 | 6233 |
"not be available for completion", caplog.record_tuples |
6235 | 6234 |
), "expected known warning message in stderr" |
6236 | 6235 |
assert cli_helpers.load_config() == config |
... | ... |
@@ -6241,14 +6240,14 @@ class TestShellCompletion: |
6241 | 6240 |
self, |
6242 | 6241 |
) -> None: |
6243 | 6242 |
"""Service name completion quietly fails on missing configuration.""" |
6244 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
6243 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
6245 | 6244 |
# TODO(the-13th-letter): Rewrite using parenthesized |
6246 | 6245 |
# with-statements. |
6247 | 6246 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
6248 | 6247 |
with contextlib.ExitStack() as stack: |
6249 | 6248 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
6250 | 6249 |
stack.enter_context( |
6251 |
- tests.machinery.pytest.isolated_vault_config( |
|
6250 |
+ pytest_machinery.isolated_vault_config( |
|
6252 | 6251 |
monkeypatch=monkeypatch, |
6253 | 6252 |
runner=runner, |
6254 | 6253 |
vault_config={ |
... | ... |
@@ -6271,14 +6270,14 @@ class TestShellCompletion: |
6271 | 6270 |
exc_type: type[Exception], |
6272 | 6271 |
) -> None: |
6273 | 6272 |
"""Service name completion quietly fails on configuration errors.""" |
6274 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
6273 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
6275 | 6274 |
# TODO(the-13th-letter): Rewrite using parenthesized |
6276 | 6275 |
# with-statements. |
6277 | 6276 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
6278 | 6277 |
with contextlib.ExitStack() as stack: |
6279 | 6278 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
6280 | 6279 |
stack.enter_context( |
6281 |
- tests.machinery.pytest.isolated_vault_config( |
|
6280 |
+ pytest_machinery.isolated_vault_config( |
|
6282 | 6281 |
monkeypatch=monkeypatch, |
6283 | 6282 |
runner=runner, |
6284 | 6283 |
vault_config={ |
... | ... |
@@ -18,13 +18,11 @@ import pytest |
18 | 18 |
from hypothesis import stateful, strategies |
19 | 19 |
from typing_extensions import Any, NamedTuple, TypeAlias |
20 | 20 |
|
21 |
-import tests.data |
|
22 |
-import tests.data.callables |
|
23 |
-import tests.machinery |
|
24 |
-import tests.machinery.hypothesis |
|
25 |
-import tests.machinery.pytest |
|
26 | 21 |
from derivepassphrase import _types, cli |
27 | 22 |
from derivepassphrase._internals import cli_helpers |
23 |
+from tests import data, machinery |
|
24 |
+from tests.machinery import hypothesis as hypothesis_machinery |
|
25 |
+from tests.machinery import pytest as pytest_machinery |
|
28 | 26 |
|
29 | 27 |
if TYPE_CHECKING: |
30 | 28 |
import multiprocessing |
... | ... |
@@ -33,9 +31,9 @@ if TYPE_CHECKING: |
33 | 31 |
from typing_extensions import Literal |
34 | 32 |
|
35 | 33 |
# All tests in this module are heavy-duty tests. |
36 |
-pytestmark = [tests.machinery.pytest.heavy_duty] |
|
34 |
+pytestmark = [pytest_machinery.heavy_duty] |
|
37 | 35 |
|
38 |
-KNOWN_SERVICES = (tests.data.DUMMY_SERVICE, "email", "bank", "work") |
|
36 |
+KNOWN_SERVICES = (data.DUMMY_SERVICE, "email", "bank", "work") |
|
39 | 37 |
"""Known service names. Used for the [`ConfigManagementStateMachine`][].""" |
40 | 38 |
VALID_PROPERTIES = ( |
41 | 39 |
"length", |
... | ... |
@@ -71,7 +69,7 @@ def build_reduced_vault_config_settings( |
71 | 69 |
|
72 | 70 |
SERVICES_STRATEGY = strategies.builds( |
73 | 71 |
build_reduced_vault_config_settings, |
74 |
- tests.machinery.hypothesis.vault_full_service_config(), |
|
72 |
+ hypothesis_machinery.vault_full_service_config(), |
|
75 | 73 |
strategies.sets( |
76 | 74 |
strategies.sampled_from(VALID_PROPERTIES), |
77 | 75 |
max_size=7, |
... | ... |
@@ -165,13 +163,13 @@ class ConfigManagementStateMachine(stateful.RuleBasedStateMachine): |
165 | 163 |
def __init__(self) -> None: |
166 | 164 |
"""Initialize self, set up context managers and enter them.""" |
167 | 165 |
super().__init__() |
168 |
- self.runner = tests.machinery.CliRunner(mix_stderr=False) |
|
166 |
+ self.runner = machinery.CliRunner(mix_stderr=False) |
|
169 | 167 |
self.exit_stack = contextlib.ExitStack().__enter__() |
170 | 168 |
self.monkeypatch = self.exit_stack.enter_context( |
171 | 169 |
pytest.MonkeyPatch().context() |
172 | 170 |
) |
173 | 171 |
self.isolated_config = self.exit_stack.enter_context( |
174 |
- tests.machinery.pytest.isolated_vault_config( |
|
172 |
+ pytest_machinery.isolated_vault_config( |
|
175 | 173 |
monkeypatch=self.monkeypatch, |
176 | 174 |
runner=self.runner, |
177 | 175 |
vault_config={"services": {}}, |
... | ... |
@@ -592,7 +590,7 @@ def run_actions_handler( |
592 | 590 |
timeout=timeout, |
593 | 591 |
), |
594 | 592 |
) |
595 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
593 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
596 | 594 |
try: |
597 | 595 |
result = runner.invoke( |
598 | 596 |
cli.derivepassphrase_vault, |
... | ... |
@@ -623,7 +621,7 @@ def run_actions_handler( |
623 | 621 |
|
624 | 622 |
|
625 | 623 |
@hypothesis.settings( |
626 |
- stateful_step_count=tests.machinery.hypothesis.get_concurrency_step_count(), |
|
624 |
+ stateful_step_count=hypothesis_machinery.get_concurrency_step_count(), |
|
627 | 625 |
deadline=None, |
628 | 626 |
) |
629 | 627 |
class FakeConfigurationMutexStateMachine(stateful.RuleBasedStateMachine): |
... | ... |
@@ -805,7 +803,7 @@ class FakeConfigurationMutexStateMachine(stateful.RuleBasedStateMachine): |
805 | 803 |
except AttributeError: # pragma: no cover |
806 | 804 |
settings = None |
807 | 805 |
self.step_count = ( |
808 |
- tests.machinery.hypothesis.get_concurrency_step_count(settings) |
|
806 |
+ hypothesis_machinery.get_concurrency_step_count(settings) |
|
809 | 807 |
) |
810 | 808 |
|
811 | 809 |
@stateful.initialize( |
... | ... |
@@ -1085,7 +1083,7 @@ class FakeConfigurationMutexStateMachine(stateful.RuleBasedStateMachine): |
1085 | 1083 |
mp = multiprocessing.get_context() |
1086 | 1084 |
# Coverage tracking writes coverage data to the current working |
1087 | 1085 |
# directory, but because the subprocesses are spawned within the |
1088 |
- # `tests.machinery.pytest.isolated_vault_config` context manager, their starting |
|
1086 |
+ # `pytest_machinery.isolated_vault_config` context manager, their starting |
|
1089 | 1087 |
# working directory is the isolated one, not the original one. |
1090 | 1088 |
orig_cwd = pathlib.Path.cwd() |
1091 | 1089 |
|
... | ... |
@@ -1104,10 +1102,10 @@ class FakeConfigurationMutexStateMachine(stateful.RuleBasedStateMachine): |
1104 | 1102 |
|
1105 | 1103 |
stack = contextlib.ExitStack() |
1106 | 1104 |
with stack: |
1107 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
1105 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
1108 | 1106 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
1109 | 1107 |
stack.enter_context( |
1110 |
- tests.machinery.pytest.isolated_vault_config( |
|
1108 |
+ pytest_machinery.isolated_vault_config( |
|
1111 | 1109 |
monkeypatch=monkeypatch, |
1112 | 1110 |
runner=runner, |
1113 | 1111 |
vault_config={"services": {}}, |
... | ... |
@@ -1128,10 +1126,10 @@ class FakeConfigurationMutexStateMachine(stateful.RuleBasedStateMachine): |
1128 | 1126 |
) |
1129 | 1127 |
|
1130 | 1128 |
with stack: # noqa: PLR1702 |
1131 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
1129 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
1132 | 1130 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
1133 | 1131 |
stack.enter_context( |
1134 |
- tests.machinery.pytest.isolated_vault_config( |
|
1132 |
+ pytest_machinery.isolated_vault_config( |
|
1135 | 1133 |
monkeypatch=monkeypatch, |
1136 | 1134 |
runner=runner, |
1137 | 1135 |
vault_config={"services": {}}, |
... | ... |
@@ -1216,7 +1214,7 @@ class FakeConfigurationMutexStateMachine(stateful.RuleBasedStateMachine): |
1216 | 1214 |
break |
1217 | 1215 |
finally: |
1218 | 1216 |
# The subprocesses have this |
1219 |
- # `tests.machinery.pytest.isolated_vault_config` directory as their |
|
1217 |
+ # `pytest_machinery.isolated_vault_config` directory as their |
|
1220 | 1218 |
# startup and working directory, so systems like |
1221 | 1219 |
# coverage tracking write their data files to this |
1222 | 1220 |
# directory. We need to manually move them back to |
... | ... |
@@ -1312,7 +1310,7 @@ class FakeConfigurationMutexStateMachine(stateful.RuleBasedStateMachine): |
1312 | 1310 |
|
1313 | 1311 |
|
1314 | 1312 |
TestFakedConfigurationMutex = ( |
1315 |
- tests.machinery.pytest.skip_if_no_multiprocessing_support( |
|
1313 |
+ pytest_machinery.skip_if_no_multiprocessing_support( |
|
1316 | 1314 |
FakeConfigurationMutexStateMachine.TestCase |
1317 | 1315 |
) |
1318 | 1316 |
) |
... | ... |
@@ -15,11 +15,10 @@ import hypothesis |
15 | 15 |
import pytest |
16 | 16 |
from hypothesis import strategies |
17 | 17 |
|
18 |
-import tests.data |
|
19 |
-import tests.machinery |
|
20 |
-import tests.machinery.pytest |
|
21 | 18 |
from derivepassphrase import _types, cli, exporter |
22 | 19 |
from derivepassphrase.exporter import storeroom, vault_native |
20 |
+from tests import data, machinery |
|
21 |
+from tests.machinery import pytest as pytest_machinery |
|
23 | 22 |
|
24 | 23 |
cryptography = pytest.importorskip("cryptography", minversion="38.0") |
25 | 24 |
|
... | ... |
@@ -49,27 +48,27 @@ class Parametrize(types.SimpleNamespace): |
49 | 48 |
["config", "format", "config_data"], |
50 | 49 |
[ |
51 | 50 |
pytest.param( |
52 |
- tests.data.VAULT_V02_CONFIG, |
|
51 |
+ data.VAULT_V02_CONFIG, |
|
53 | 52 |
"v0.2", |
54 |
- tests.data.VAULT_V02_CONFIG_DATA, |
|
53 |
+ data.VAULT_V02_CONFIG_DATA, |
|
55 | 54 |
id="V02_CONFIG-v0.2", |
56 | 55 |
), |
57 | 56 |
pytest.param( |
58 |
- tests.data.VAULT_V02_CONFIG, |
|
57 |
+ data.VAULT_V02_CONFIG, |
|
59 | 58 |
"v0.3", |
60 | 59 |
exporter.NotAVaultConfigError, |
61 | 60 |
id="V02_CONFIG-v0.3", |
62 | 61 |
), |
63 | 62 |
pytest.param( |
64 |
- tests.data.VAULT_V03_CONFIG, |
|
63 |
+ data.VAULT_V03_CONFIG, |
|
65 | 64 |
"v0.2", |
66 | 65 |
exporter.NotAVaultConfigError, |
67 | 66 |
id="V03_CONFIG-v0.2", |
68 | 67 |
), |
69 | 68 |
pytest.param( |
70 |
- tests.data.VAULT_V03_CONFIG, |
|
69 |
+ data.VAULT_V03_CONFIG, |
|
71 | 70 |
"v0.3", |
72 |
- tests.data.VAULT_V03_CONFIG_DATA, |
|
71 |
+ data.VAULT_V03_CONFIG_DATA, |
|
73 | 72 |
id="V03_CONFIG-v0.3", |
74 | 73 |
), |
75 | 74 |
], |
... | ... |
@@ -78,39 +77,19 @@ class Parametrize(types.SimpleNamespace): |
78 | 77 |
["config", "parser_class", "config_data"], |
79 | 78 |
[ |
80 | 79 |
pytest.param( |
81 |
- tests.data.VAULT_V02_CONFIG, |
|
80 |
+ data.VAULT_V02_CONFIG, |
|
82 | 81 |
vault_native.VaultNativeV02ConfigParser, |
83 |
- tests.data.VAULT_V02_CONFIG_DATA, |
|
82 |
+ data.VAULT_V02_CONFIG_DATA, |
|
84 | 83 |
id="0.2", |
85 | 84 |
), |
86 | 85 |
pytest.param( |
87 |
- tests.data.VAULT_V03_CONFIG, |
|
86 |
+ data.VAULT_V03_CONFIG, |
|
88 | 87 |
vault_native.VaultNativeV03ConfigParser, |
89 |
- tests.data.VAULT_V03_CONFIG_DATA, |
|
88 |
+ data.VAULT_V03_CONFIG_DATA, |
|
90 | 89 |
id="0.3", |
91 | 90 |
), |
92 | 91 |
], |
93 | 92 |
) |
94 |
- BAD_MASTER_KEYS_DATA = pytest.mark.parametrize( |
|
95 |
- ["data", "err_msg"], |
|
96 |
- [ |
|
97 |
- pytest.param( |
|
98 |
- '{"version": 255}', |
|
99 |
- "bad or unsupported keys version header", |
|
100 |
- id="v255", |
|
101 |
- ), |
|
102 |
- pytest.param( |
|
103 |
- '{"version": 1}\nAAAA\nAAAA', |
|
104 |
- "trailing data; cannot make sense", |
|
105 |
- id="trailing-data", |
|
106 |
- ), |
|
107 |
- pytest.param( |
|
108 |
- '{"version": 1}\nAAAA', |
|
109 |
- "cannot handle version 0 encrypted keys", |
|
110 |
- id="v0-keys", |
|
111 |
- ), |
|
112 |
- ], |
|
113 |
- ) |
|
114 | 93 |
STOREROOM_HANDLER = pytest.mark.parametrize( |
115 | 94 |
"handler", |
116 | 95 |
[ |
... | ... |
@@ -136,41 +115,61 @@ class Parametrize(types.SimpleNamespace): |
136 | 115 |
"key", |
137 | 116 |
[ |
138 | 117 |
None, |
139 |
- pytest.param(tests.data.VAULT_MASTER_KEY, id="str"), |
|
118 |
+ pytest.param(data.VAULT_MASTER_KEY, id="str"), |
|
140 | 119 |
pytest.param( |
141 |
- tests.data.VAULT_MASTER_KEY.encode("ascii"), id="bytes" |
|
120 |
+ data.VAULT_MASTER_KEY.encode("ascii"), id="bytes" |
|
142 | 121 |
), |
143 | 122 |
pytest.param( |
144 |
- bytearray(tests.data.VAULT_MASTER_KEY.encode("ascii")), |
|
123 |
+ bytearray(data.VAULT_MASTER_KEY.encode("ascii")), |
|
145 | 124 |
id="bytearray", |
146 | 125 |
), |
147 | 126 |
pytest.param( |
148 |
- memoryview(tests.data.VAULT_MASTER_KEY.encode("ascii")), |
|
127 |
+ memoryview(data.VAULT_MASTER_KEY.encode("ascii")), |
|
149 | 128 |
id="memoryview", |
150 | 129 |
), |
151 | 130 |
], |
152 | 131 |
) |
132 |
+ BAD_MASTER_KEYS_DATA = pytest.mark.parametrize( |
|
133 |
+ ["master_keys_data", "err_msg"], |
|
134 |
+ [ |
|
135 |
+ pytest.param( |
|
136 |
+ '{"version": 255}', |
|
137 |
+ "bad or unsupported keys version header", |
|
138 |
+ id="v255", |
|
139 |
+ ), |
|
140 |
+ pytest.param( |
|
141 |
+ '{"version": 1}\nAAAA\nAAAA', |
|
142 |
+ "trailing data; cannot make sense", |
|
143 |
+ id="trailing-data", |
|
144 |
+ ), |
|
145 |
+ pytest.param( |
|
146 |
+ '{"version": 1}\nAAAA', |
|
147 |
+ "cannot handle version 0 encrypted keys", |
|
148 |
+ id="v0-keys", |
|
149 |
+ ), |
|
150 |
+ ], |
|
151 |
+ ) |
|
153 | 152 |
PATH = pytest.mark.parametrize("path", [".vault", None]) |
154 | 153 |
BAD_STOREROOM_CONFIG_DATA = pytest.mark.parametrize( |
155 | 154 |
["zipped_config", "error_text"], |
156 | 155 |
[ |
157 | 156 |
pytest.param( |
158 |
- tests.data.VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED, |
|
157 |
+ data.VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED, |
|
159 | 158 |
"Object key mismatch", |
160 | 159 |
id="VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED", |
161 | 160 |
), |
162 | 161 |
pytest.param( |
163 |
- tests.data.VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED2, |
|
162 |
+ data.VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED2, |
|
164 | 163 |
"Directory index is not actually an index", |
165 | 164 |
id="VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED2", |
166 | 165 |
), |
167 | 166 |
pytest.param( |
168 |
- tests.data.VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED3, |
|
167 |
+ data.VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED3, |
|
169 | 168 |
"Directory index is not actually an index", |
170 | 169 |
id="VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED3", |
171 | 170 |
), |
172 | 171 |
pytest.param( |
173 |
- tests.data.VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED4, |
|
172 |
+ data.VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED4, |
|
174 | 173 |
"Object key mismatch", |
175 | 174 |
id="VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED4", |
176 | 175 |
), |
... | ... |
@@ -189,51 +188,51 @@ class TestCLI: |
189 | 188 |
[`exporter.get_vault_path`][] for details. |
190 | 189 |
|
191 | 190 |
""" |
192 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
191 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
193 | 192 |
# TODO(the-13th-letter): Rewrite using parenthesized |
194 | 193 |
# with-statements. |
195 | 194 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
196 | 195 |
with contextlib.ExitStack() as stack: |
197 | 196 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
198 | 197 |
stack.enter_context( |
199 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
198 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
200 | 199 |
monkeypatch=monkeypatch, |
201 | 200 |
runner=runner, |
202 |
- vault_config=tests.data.VAULT_V03_CONFIG, |
|
203 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
201 |
+ vault_config=data.VAULT_V03_CONFIG, |
|
202 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
204 | 203 |
) |
205 | 204 |
) |
206 |
- monkeypatch.setenv("VAULT_KEY", tests.data.VAULT_MASTER_KEY) |
|
205 |
+ monkeypatch.setenv("VAULT_KEY", data.VAULT_MASTER_KEY) |
|
207 | 206 |
result = runner.invoke( |
208 | 207 |
cli.derivepassphrase_export_vault, |
209 | 208 |
["VAULT_PATH"], |
210 | 209 |
) |
211 | 210 |
assert result.clean_exit(empty_stderr=True), "expected clean exit" |
212 |
- assert json.loads(result.stdout) == tests.data.VAULT_V03_CONFIG_DATA |
|
211 |
+ assert json.loads(result.stdout) == data.VAULT_V03_CONFIG_DATA |
|
213 | 212 |
|
214 | 213 |
def test_201_key_parameter(self) -> None: |
215 | 214 |
"""The `--key` option is supported.""" |
216 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
215 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
217 | 216 |
# TODO(the-13th-letter): Rewrite using parenthesized |
218 | 217 |
# with-statements. |
219 | 218 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
220 | 219 |
with contextlib.ExitStack() as stack: |
221 | 220 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
222 | 221 |
stack.enter_context( |
223 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
222 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
224 | 223 |
monkeypatch=monkeypatch, |
225 | 224 |
runner=runner, |
226 |
- vault_config=tests.data.VAULT_V03_CONFIG, |
|
225 |
+ vault_config=data.VAULT_V03_CONFIG, |
|
227 | 226 |
) |
228 | 227 |
) |
229 | 228 |
result = runner.invoke( |
230 | 229 |
cli.derivepassphrase_export_vault, |
231 |
- ["-k", tests.data.VAULT_MASTER_KEY, ".vault"], |
|
230 |
+ ["-k", data.VAULT_MASTER_KEY, ".vault"], |
|
232 | 231 |
) |
233 | 232 |
assert result.clean_exit(empty_stderr=True), "expected clean exit" |
234 |
- assert json.loads(result.stdout) == tests.data.VAULT_V03_CONFIG_DATA |
|
233 |
+ assert json.loads(result.stdout) == data.VAULT_V03_CONFIG_DATA |
|
235 | 234 |
|
236 |
- @tests.machinery.pytest.Parametrize.VAULT_CONFIG_FORMATS_DATA |
|
235 |
+ @pytest_machinery.Parametrize.VAULT_CONFIG_FORMATS_DATA |
|
237 | 236 |
def test_210_load_vault_v02_v03_storeroom( |
238 | 237 |
self, |
239 | 238 |
config: str | bytes, |
... | ... |
@@ -246,14 +245,14 @@ class TestCLI: |
246 | 245 |
vault` to only attempt decoding in that named format. |
247 | 246 |
|
248 | 247 |
""" |
249 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
248 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
250 | 249 |
# TODO(the-13th-letter): Rewrite using parenthesized |
251 | 250 |
# with-statements. |
252 | 251 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
253 | 252 |
with contextlib.ExitStack() as stack: |
254 | 253 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
255 | 254 |
stack.enter_context( |
256 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
255 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
257 | 256 |
monkeypatch=monkeypatch, |
258 | 257 |
runner=runner, |
259 | 258 |
vault_config=config, |
... | ... |
@@ -265,7 +264,7 @@ class TestCLI: |
265 | 264 |
"-f", |
266 | 265 |
format, |
267 | 266 |
"-k", |
268 |
- tests.data.VAULT_MASTER_KEY, |
|
267 |
+ data.VAULT_MASTER_KEY, |
|
269 | 268 |
"VAULT_PATH", |
270 | 269 |
], |
271 | 270 |
) |
... | ... |
@@ -280,18 +279,18 @@ class TestCLI: |
280 | 279 |
caplog: pytest.LogCaptureFixture, |
281 | 280 |
) -> None: |
282 | 281 |
"""Fail when trying to decode non-existant files/directories.""" |
283 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
282 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
284 | 283 |
# TODO(the-13th-letter): Rewrite using parenthesized |
285 | 284 |
# with-statements. |
286 | 285 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
287 | 286 |
with contextlib.ExitStack() as stack: |
288 | 287 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
289 | 288 |
stack.enter_context( |
290 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
289 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
291 | 290 |
monkeypatch=monkeypatch, |
292 | 291 |
runner=runner, |
293 |
- vault_config=tests.data.VAULT_V03_CONFIG, |
|
294 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
292 |
+ vault_config=data.VAULT_V03_CONFIG, |
|
293 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
295 | 294 |
) |
296 | 295 |
) |
297 | 296 |
result = runner.invoke( |
... | ... |
@@ -305,25 +304,25 @@ class TestCLI: |
305 | 304 |
), |
306 | 305 |
record_tuples=caplog.record_tuples, |
307 | 306 |
), "expected error exit and known error message" |
308 |
- assert tests.data.CANNOT_LOAD_CRYPTOGRAPHY not in result.stderr |
|
307 |
+ assert data.CANNOT_LOAD_CRYPTOGRAPHY not in result.stderr |
|
309 | 308 |
|
310 | 309 |
def test_302_vault_config_invalid( |
311 | 310 |
self, |
312 | 311 |
caplog: pytest.LogCaptureFixture, |
313 | 312 |
) -> None: |
314 | 313 |
"""Fail to parse invalid vault configurations (files).""" |
315 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
314 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
316 | 315 |
# TODO(the-13th-letter): Rewrite using parenthesized |
317 | 316 |
# with-statements. |
318 | 317 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
319 | 318 |
with contextlib.ExitStack() as stack: |
320 | 319 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
321 | 320 |
stack.enter_context( |
322 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
321 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
323 | 322 |
monkeypatch=monkeypatch, |
324 | 323 |
runner=runner, |
325 | 324 |
vault_config="", |
326 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
325 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
327 | 326 |
) |
328 | 327 |
) |
329 | 328 |
result = runner.invoke( |
... | ... |
@@ -334,25 +333,25 @@ class TestCLI: |
334 | 333 |
error="Cannot parse '.vault' as a valid vault-native config", |
335 | 334 |
record_tuples=caplog.record_tuples, |
336 | 335 |
), "expected error exit and known error message" |
337 |
- assert tests.data.CANNOT_LOAD_CRYPTOGRAPHY not in result.stderr |
|
336 |
+ assert data.CANNOT_LOAD_CRYPTOGRAPHY not in result.stderr |
|
338 | 337 |
|
339 | 338 |
def test_302a_vault_config_invalid_just_a_directory( |
340 | 339 |
self, |
341 | 340 |
caplog: pytest.LogCaptureFixture, |
342 | 341 |
) -> None: |
343 | 342 |
"""Fail to parse invalid vault configurations (directories).""" |
344 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
343 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
345 | 344 |
# TODO(the-13th-letter): Rewrite using parenthesized |
346 | 345 |
# with-statements. |
347 | 346 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
348 | 347 |
with contextlib.ExitStack() as stack: |
349 | 348 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
350 | 349 |
stack.enter_context( |
351 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
350 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
352 | 351 |
monkeypatch=monkeypatch, |
353 | 352 |
runner=runner, |
354 | 353 |
vault_config="", |
355 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
354 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
356 | 355 |
) |
357 | 356 |
) |
358 | 357 |
p = pathlib.Path(".vault") |
... | ... |
@@ -366,25 +365,25 @@ class TestCLI: |
366 | 365 |
error="Cannot parse '.vault' as a valid vault-native config", |
367 | 366 |
record_tuples=caplog.record_tuples, |
368 | 367 |
), "expected error exit and known error message" |
369 |
- assert tests.data.CANNOT_LOAD_CRYPTOGRAPHY not in result.stderr |
|
368 |
+ assert data.CANNOT_LOAD_CRYPTOGRAPHY not in result.stderr |
|
370 | 369 |
|
371 | 370 |
def test_403_invalid_vault_config_bad_signature( |
372 | 371 |
self, |
373 | 372 |
caplog: pytest.LogCaptureFixture, |
374 | 373 |
) -> None: |
375 | 374 |
"""Fail to parse vault configurations with invalid integrity checks.""" |
376 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
375 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
377 | 376 |
# TODO(the-13th-letter): Rewrite using parenthesized |
378 | 377 |
# with-statements. |
379 | 378 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
380 | 379 |
with contextlib.ExitStack() as stack: |
381 | 380 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
382 | 381 |
stack.enter_context( |
383 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
382 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
384 | 383 |
monkeypatch=monkeypatch, |
385 | 384 |
runner=runner, |
386 |
- vault_config=tests.data.VAULT_V02_CONFIG, |
|
387 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
385 |
+ vault_config=data.VAULT_V02_CONFIG, |
|
386 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
388 | 387 |
) |
389 | 388 |
) |
390 | 389 |
result = runner.invoke( |
... | ... |
@@ -395,25 +394,25 @@ class TestCLI: |
395 | 394 |
error="Cannot parse '.vault' as a valid vault-native config", |
396 | 395 |
record_tuples=caplog.record_tuples, |
397 | 396 |
), "expected error exit and known error message" |
398 |
- assert tests.data.CANNOT_LOAD_CRYPTOGRAPHY not in result.stderr |
|
397 |
+ assert data.CANNOT_LOAD_CRYPTOGRAPHY not in result.stderr |
|
399 | 398 |
|
400 | 399 |
def test_500_vault_config_invalid_internal( |
401 | 400 |
self, |
402 | 401 |
caplog: pytest.LogCaptureFixture, |
403 | 402 |
) -> None: |
404 | 403 |
"""The decoded vault configuration data is valid.""" |
405 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
404 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
406 | 405 |
# TODO(the-13th-letter): Rewrite using parenthesized |
407 | 406 |
# with-statements. |
408 | 407 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
409 | 408 |
with contextlib.ExitStack() as stack: |
410 | 409 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
411 | 410 |
stack.enter_context( |
412 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
411 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
413 | 412 |
monkeypatch=monkeypatch, |
414 | 413 |
runner=runner, |
415 |
- vault_config=tests.data.VAULT_V03_CONFIG, |
|
416 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
414 |
+ vault_config=data.VAULT_V03_CONFIG, |
|
415 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
417 | 416 |
) |
418 | 417 |
) |
419 | 418 |
|
... | ... |
@@ -433,7 +432,7 @@ class TestCLI: |
433 | 432 |
error="Invalid vault config: ", |
434 | 433 |
record_tuples=caplog.record_tuples, |
435 | 434 |
), "expected error exit and known error message" |
436 |
- assert tests.data.CANNOT_LOAD_CRYPTOGRAPHY not in result.stderr |
|
435 |
+ assert data.CANNOT_LOAD_CRYPTOGRAPHY not in result.stderr |
|
437 | 436 |
|
438 | 437 |
|
439 | 438 |
class TestStoreroom: |
... | ... |
@@ -454,23 +453,23 @@ class TestStoreroom: |
454 | 453 |
them as well. |
455 | 454 |
|
456 | 455 |
""" |
457 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
456 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
458 | 457 |
# TODO(the-13th-letter): Rewrite using parenthesized |
459 | 458 |
# with-statements. |
460 | 459 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
461 | 460 |
with contextlib.ExitStack() as stack: |
462 | 461 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
463 | 462 |
stack.enter_context( |
464 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
463 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
465 | 464 |
monkeypatch=monkeypatch, |
466 | 465 |
runner=runner, |
467 |
- vault_config=tests.data.VAULT_STOREROOM_CONFIG_ZIPPED, |
|
468 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
466 |
+ vault_config=data.VAULT_STOREROOM_CONFIG_ZIPPED, |
|
467 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
469 | 468 |
) |
470 | 469 |
) |
471 | 470 |
assert ( |
472 | 471 |
handler(path, key, format="storeroom") |
473 |
- == tests.data.VAULT_STOREROOM_CONFIG_DATA |
|
472 |
+ == data.VAULT_STOREROOM_CONFIG_DATA |
|
474 | 473 |
) |
475 | 474 |
|
476 | 475 |
def test_400_decrypt_bucket_item_unknown_version(self) -> None: |
... | ... |
@@ -497,7 +496,7 @@ class TestStoreroom: |
497 | 496 |
wrong shape. |
498 | 497 |
|
499 | 498 |
""" |
500 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
499 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
501 | 500 |
master_keys = _types.StoreroomMasterKeys( |
502 | 501 |
encryption_key=bytes(storeroom.KEY_SIZE), |
503 | 502 |
signing_key=bytes(storeroom.KEY_SIZE), |
... | ... |
@@ -509,10 +508,10 @@ class TestStoreroom: |
509 | 508 |
with contextlib.ExitStack() as stack: |
510 | 509 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
511 | 510 |
stack.enter_context( |
512 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
511 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
513 | 512 |
monkeypatch=monkeypatch, |
514 | 513 |
runner=runner, |
515 |
- vault_config=tests.data.VAULT_STOREROOM_CONFIG_ZIPPED, |
|
514 |
+ vault_config=data.VAULT_STOREROOM_CONFIG_ZIPPED, |
|
516 | 515 |
) |
517 | 516 |
) |
518 | 517 |
p = pathlib.Path(".vault", "20") |
... | ... |
@@ -525,7 +524,7 @@ class TestStoreroom: |
525 | 524 |
@Parametrize.STOREROOM_HANDLER |
526 | 525 |
def test_402_export_storeroom_data_bad_master_keys_file( |
527 | 526 |
self, |
528 |
- data: str, |
|
527 |
+ master_keys_data: str, |
|
529 | 528 |
err_msg: str, |
530 | 529 |
handler: exporter.ExportVaultConfigDataFunction, |
531 | 530 |
) -> None: |
... | ... |
@@ -534,23 +533,23 @@ class TestStoreroom: |
534 | 533 |
These include unknown versions, and data of the wrong shape. |
535 | 534 |
|
536 | 535 |
""" |
537 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
536 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
538 | 537 |
# TODO(the-13th-letter): Rewrite using parenthesized |
539 | 538 |
# with-statements. |
540 | 539 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
541 | 540 |
with contextlib.ExitStack() as stack: |
542 | 541 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
543 | 542 |
stack.enter_context( |
544 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
543 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
545 | 544 |
monkeypatch=monkeypatch, |
546 | 545 |
runner=runner, |
547 |
- vault_config=tests.data.VAULT_STOREROOM_CONFIG_ZIPPED, |
|
548 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
546 |
+ vault_config=data.VAULT_STOREROOM_CONFIG_ZIPPED, |
|
547 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
549 | 548 |
) |
550 | 549 |
) |
551 | 550 |
p = pathlib.Path(".vault", ".keys") |
552 | 551 |
with p.open("w", encoding="UTF-8") as outfile: |
553 |
- print(data, file=outfile) |
|
552 |
+ print(master_keys_data, file=outfile) |
|
554 | 553 |
with pytest.raises(RuntimeError, match=err_msg): |
555 | 554 |
handler(format="storeroom") |
556 | 555 |
|
... | ... |
@@ -576,18 +575,18 @@ class TestStoreroom: |
576 | 575 |
subdirectories. |
577 | 576 |
|
578 | 577 |
""" |
579 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
578 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
580 | 579 |
# TODO(the-13th-letter): Rewrite using parenthesized |
581 | 580 |
# with-statements. |
582 | 581 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
583 | 582 |
with contextlib.ExitStack() as stack: |
584 | 583 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
585 | 584 |
stack.enter_context( |
586 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
585 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
587 | 586 |
monkeypatch=monkeypatch, |
588 | 587 |
runner=runner, |
589 | 588 |
vault_config=zipped_config, |
590 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
589 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
591 | 590 |
) |
592 | 591 |
) |
593 | 592 |
stack.enter_context(pytest.raises(RuntimeError, match=error_text)) |
... | ... |
@@ -678,7 +677,7 @@ class TestVaultNativeConfig: |
678 | 677 |
"""The PBKDF2 helper function works.""" |
679 | 678 |
assert ( |
680 | 679 |
vault_native.VaultNativeConfigParser._pbkdf2( |
681 |
- tests.data.VAULT_MASTER_KEY.encode("utf-8"), 32, iterations |
|
680 |
+ data.VAULT_MASTER_KEY.encode("utf-8"), 32, iterations |
|
682 | 681 |
) |
683 | 682 |
== result |
684 | 683 |
) |
... | ... |
@@ -702,18 +701,18 @@ class TestVaultNativeConfig: |
702 | 701 |
no longer does. |
703 | 702 |
|
704 | 703 |
""" |
705 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
704 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
706 | 705 |
# TODO(the-13th-letter): Rewrite using parenthesized |
707 | 706 |
# with-statements. |
708 | 707 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
709 | 708 |
with contextlib.ExitStack() as stack: |
710 | 709 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
711 | 710 |
stack.enter_context( |
712 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
711 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
713 | 712 |
monkeypatch=monkeypatch, |
714 | 713 |
runner=runner, |
715 | 714 |
vault_config=config, |
716 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
715 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
717 | 716 |
) |
718 | 717 |
) |
719 | 718 |
if isinstance(config_data, type): |
... | ... |
@@ -738,23 +737,23 @@ class TestVaultNativeConfig: |
738 | 737 |
them as well. |
739 | 738 |
|
740 | 739 |
""" |
741 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
740 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
742 | 741 |
# TODO(the-13th-letter): Rewrite using parenthesized |
743 | 742 |
# with-statements. |
744 | 743 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
745 | 744 |
with contextlib.ExitStack() as stack: |
746 | 745 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
747 | 746 |
stack.enter_context( |
748 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
747 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
749 | 748 |
monkeypatch=monkeypatch, |
750 | 749 |
runner=runner, |
751 |
- vault_config=tests.data.VAULT_V03_CONFIG, |
|
752 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
750 |
+ vault_config=data.VAULT_V03_CONFIG, |
|
751 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
753 | 752 |
) |
754 | 753 |
) |
755 | 754 |
assert ( |
756 | 755 |
handler(path, key, format="v0.3") |
757 |
- == tests.data.VAULT_V03_CONFIG_DATA |
|
756 |
+ == data.VAULT_V03_CONFIG_DATA |
|
758 | 757 |
) |
759 | 758 |
|
760 | 759 |
@Parametrize.VAULT_NATIVE_PARSER_CLASS_DATA |
... | ... |
@@ -773,21 +772,21 @@ class TestVaultNativeConfig: |
773 | 772 |
|
774 | 773 |
return func |
775 | 774 |
|
776 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
775 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
777 | 776 |
# TODO(the-13th-letter): Rewrite using parenthesized |
778 | 777 |
# with-statements. |
779 | 778 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
780 | 779 |
with contextlib.ExitStack() as stack: |
781 | 780 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
782 | 781 |
stack.enter_context( |
783 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
782 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
784 | 783 |
monkeypatch=monkeypatch, |
785 | 784 |
runner=runner, |
786 | 785 |
vault_config=config, |
787 | 786 |
) |
788 | 787 |
) |
789 | 788 |
parser = parser_class( |
790 |
- base64.b64decode(config), tests.data.VAULT_MASTER_KEY |
|
789 |
+ base64.b64decode(config), data.VAULT_MASTER_KEY |
|
791 | 790 |
) |
792 | 791 |
assert parser() == config_data |
793 | 792 |
# Now stub out all functions used to calculate the above result. |
... | ... |
@@ -16,10 +16,9 @@ import hypothesis |
16 | 16 |
import pytest |
17 | 17 |
from hypothesis import strategies |
18 | 18 |
|
19 |
-import tests.data |
|
20 |
-import tests.machinery |
|
21 |
-import tests.machinery.pytest |
|
22 | 19 |
from derivepassphrase import cli, exporter |
20 |
+from tests import data, machinery |
|
21 |
+from tests.machinery import pytest as pytest_machinery |
|
23 | 22 |
|
24 | 23 |
if TYPE_CHECKING: |
25 | 24 |
from typing_extensions import Buffer |
... | ... |
@@ -207,14 +206,14 @@ class Test001ExporterUtils: |
207 | 206 |
("USER", user), |
208 | 207 |
("USERNAME", username), |
209 | 208 |
] |
210 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
209 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
211 | 210 |
# TODO(the-13th-letter): Rewrite using parenthesized |
212 | 211 |
# with-statements. |
213 | 212 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
214 | 213 |
with contextlib.ExitStack() as stack: |
215 | 214 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
216 | 215 |
stack.enter_context( |
217 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
216 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
218 | 217 |
monkeypatch=monkeypatch, runner=runner |
219 | 218 |
) |
220 | 219 |
) |
... | ... |
@@ -234,14 +233,14 @@ class Test001ExporterUtils: |
234 | 233 |
Handle relative paths, absolute paths, and missing paths. |
235 | 234 |
|
236 | 235 |
""" |
237 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
236 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
238 | 237 |
# TODO(the-13th-letter): Rewrite using parenthesized |
239 | 238 |
# with-statements. |
240 | 239 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
241 | 240 |
with contextlib.ExitStack() as stack: |
242 | 241 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
243 | 242 |
stack.enter_context( |
244 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
243 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
245 | 244 |
monkeypatch=monkeypatch, runner=runner |
246 | 245 |
) |
247 | 246 |
) |
... | ... |
@@ -379,18 +378,18 @@ class Test002CLI: |
379 | 378 |
|
380 | 379 |
def test_300_invalid_format(self) -> None: |
381 | 380 |
"""Reject invalid vault configuration format names.""" |
382 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
381 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
383 | 382 |
# TODO(the-13th-letter): Rewrite using parenthesized |
384 | 383 |
# with-statements. |
385 | 384 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
386 | 385 |
with contextlib.ExitStack() as stack: |
387 | 386 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
388 | 387 |
stack.enter_context( |
389 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
388 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
390 | 389 |
monkeypatch=monkeypatch, |
391 | 390 |
runner=runner, |
392 |
- vault_config=tests.data.VAULT_V03_CONFIG, |
|
393 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
391 |
+ vault_config=data.VAULT_V03_CONFIG, |
|
392 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
394 | 393 |
) |
395 | 394 |
) |
396 | 395 |
result = runner.invoke( |
... | ... |
@@ -403,8 +402,8 @@ class Test002CLI: |
403 | 402 |
"expected error exit and known error message" |
404 | 403 |
) |
405 | 404 |
|
406 |
- @tests.machinery.pytest.skip_if_cryptography_support |
|
407 |
- @tests.machinery.pytest.Parametrize.VAULT_CONFIG_FORMATS_DATA |
|
405 |
+ @pytest_machinery.skip_if_cryptography_support |
|
406 |
+ @pytest_machinery.Parametrize.VAULT_CONFIG_FORMATS_DATA |
|
408 | 407 |
def test_999_no_cryptography_error_message( |
409 | 408 |
self, |
410 | 409 |
caplog: pytest.LogCaptureFixture, |
... | ... |
@@ -414,18 +413,18 @@ class Test002CLI: |
414 | 413 |
) -> None: |
415 | 414 |
"""Abort export call if no cryptography is available.""" |
416 | 415 |
del config_data |
417 |
- runner = tests.machinery.CliRunner(mix_stderr=False) |
|
416 |
+ runner = machinery.CliRunner(mix_stderr=False) |
|
418 | 417 |
# TODO(the-13th-letter): Rewrite using parenthesized |
419 | 418 |
# with-statements. |
420 | 419 |
# https://the13thletter.info/derivepassphrase/latest/pycompatibility/#after-eol-py3.9 |
421 | 420 |
with contextlib.ExitStack() as stack: |
422 | 421 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
423 | 422 |
stack.enter_context( |
424 |
- tests.machinery.pytest.isolated_vault_exporter_config( |
|
423 |
+ pytest_machinery.isolated_vault_exporter_config( |
|
425 | 424 |
monkeypatch=monkeypatch, |
426 | 425 |
runner=runner, |
427 | 426 |
vault_config=config, |
428 |
- vault_key=tests.data.VAULT_MASTER_KEY, |
|
427 |
+ vault_key=data.VAULT_MASTER_KEY, |
|
429 | 428 |
) |
430 | 429 |
) |
431 | 430 |
result = runner.invoke( |
... | ... |
@@ -434,6 +433,6 @@ class Test002CLI: |
434 | 433 |
catch_exceptions=False, |
435 | 434 |
) |
436 | 435 |
assert result.error_exit( |
437 |
- error=tests.data.CANNOT_LOAD_CRYPTOGRAPHY, |
|
436 |
+ error=data.CANNOT_LOAD_CRYPTOGRAPHY, |
|
438 | 437 |
record_tuples=caplog.record_tuples, |
439 | 438 |
), "expected error exit and known error message" |
... | ... |
@@ -25,14 +25,12 @@ import hypothesis |
25 | 25 |
import pytest |
26 | 26 |
from hypothesis import strategies |
27 | 27 |
|
28 |
-import tests.data |
|
29 |
-import tests.data.callables |
|
30 |
-import tests.machinery |
|
31 |
-import tests.machinery.hypothesis |
|
32 |
-import tests.machinery.pytest |
|
33 | 28 |
from derivepassphrase import _types, ssh_agent, vault |
34 | 29 |
from derivepassphrase._internals import cli_helpers |
35 | 30 |
from derivepassphrase.ssh_agent import socketprovider |
31 |
+from tests import data, machinery |
|
32 |
+from tests.data import callables |
|
33 |
+from tests.machinery import pytest as pytest_machinery |
|
36 | 34 |
|
37 | 35 |
if TYPE_CHECKING: |
38 | 36 |
from collections.abc import Iterable |
... | ... |
@@ -50,7 +48,7 @@ class Parametrize(types.SimpleNamespace): |
50 | 48 |
pytest.param( |
51 | 49 |
[ |
52 | 50 |
importlib.metadata.EntryPoint( |
53 |
- name=tests.data.faulty_entry_callable.key, |
|
51 |
+ name=data.faulty_entry_callable.key, |
|
54 | 52 |
group=socketprovider.SocketProvider.ENTRY_POINT_GROUP_NAME, |
55 | 53 |
value="tests.data: faulty_entry_callable", |
56 | 54 |
), |
... | ... |
@@ -60,7 +58,7 @@ class Parametrize(types.SimpleNamespace): |
60 | 58 |
pytest.param( |
61 | 59 |
[ |
62 | 60 |
importlib.metadata.EntryPoint( |
63 |
- name=tests.data.faulty_entry_name_exists.key, |
|
61 |
+ name=data.faulty_entry_name_exists.key, |
|
64 | 62 |
group=socketprovider.SocketProvider.ENTRY_POINT_GROUP_NAME, |
65 | 63 |
value="tests.data: faulty_entry_name_exists", |
66 | 64 |
), |
... | ... |
@@ -70,7 +68,7 @@ class Parametrize(types.SimpleNamespace): |
70 | 68 |
pytest.param( |
71 | 69 |
[ |
72 | 70 |
importlib.metadata.EntryPoint( |
73 |
- name=tests.data.faulty_entry_alias_exists.key, |
|
71 |
+ name=data.faulty_entry_alias_exists.key, |
|
74 | 72 |
group=socketprovider.SocketProvider.ENTRY_POINT_GROUP_NAME, |
75 | 73 |
value="tests.data: faulty_entry_alias_exists", |
76 | 74 |
), |
... | ... |
@@ -85,12 +83,12 @@ class Parametrize(types.SimpleNamespace): |
85 | 83 |
pytest.param( |
86 | 84 |
[ |
87 | 85 |
importlib.metadata.EntryPoint( |
88 |
- name=tests.data.posix_entry.key, |
|
86 |
+ name=data.posix_entry.key, |
|
89 | 87 |
group=socketprovider.SocketProvider.ENTRY_POINT_GROUP_NAME, |
90 | 88 |
value="tests.data: posix_entry", |
91 | 89 |
), |
92 | 90 |
importlib.metadata.EntryPoint( |
93 |
- name=tests.data.the_annoying_os_entry.key, |
|
91 |
+ name=data.the_annoying_os_entry.key, |
|
94 | 92 |
group=socketprovider.SocketProvider.ENTRY_POINT_GROUP_NAME, |
95 | 93 |
value="tests.data: the_annoying_os_entry", |
96 | 94 |
), |
... | ... |
@@ -100,12 +98,12 @@ class Parametrize(types.SimpleNamespace): |
100 | 98 |
pytest.param( |
101 | 99 |
[ |
102 | 100 |
importlib.metadata.EntryPoint( |
103 |
- name=tests.data.callables.provider_entry1.key, |
|
101 |
+ name=callables.provider_entry1.key, |
|
104 | 102 |
group=socketprovider.SocketProvider.ENTRY_POINT_GROUP_NAME, |
105 | 103 |
value="tests.data.callables: provider_entry1", |
106 | 104 |
), |
107 | 105 |
importlib.metadata.EntryPoint( |
108 |
- name=tests.data.callables.provider_entry2.key, |
|
106 |
+ name=callables.provider_entry2.key, |
|
109 | 107 |
group=socketprovider.SocketProvider.ENTRY_POINT_GROUP_NAME, |
110 | 108 |
value="tests.data.callables: provider_entry2", |
111 | 109 |
), |
... | ... |
@@ -257,7 +255,7 @@ class Parametrize(types.SimpleNamespace): |
257 | 255 |
id="key-not-loaded", |
258 | 256 |
), |
259 | 257 |
pytest.param( |
260 |
- tests.data.SUPPORTED_KEYS["ed25519"].public_key_data, |
|
258 |
+ data.SUPPORTED_KEYS["ed25519"].public_key_data, |
|
261 | 259 |
True, |
262 | 260 |
_types.SSH_AGENT.FAILURE, |
263 | 261 |
b"", |
... | ... |
@@ -271,10 +269,10 @@ class Parametrize(types.SimpleNamespace): |
271 | 269 |
["key", "single"], |
272 | 270 |
[ |
273 | 271 |
(value.public_key_data, False) |
274 |
- for value in tests.data.SUPPORTED_KEYS.values() |
|
272 |
+ for value in data.SUPPORTED_KEYS.values() |
|
275 | 273 |
] |
276 |
- + [(tests.data.callables.list_keys_singleton()[0].key, True)], |
|
277 |
- ids=[*tests.data.SUPPORTED_KEYS.keys(), "singleton"], |
|
274 |
+ + [(callables.list_keys_singleton()[0].key, True)], |
|
275 |
+ ids=[*data.SUPPORTED_KEYS.keys(), "singleton"], |
|
278 | 276 |
) |
279 | 277 |
SH_EXPORT_LINES = pytest.mark.parametrize( |
280 | 278 |
["line", "env_name", "value"], |
... | ... |
@@ -370,7 +368,7 @@ class Parametrize(types.SimpleNamespace): |
370 | 368 |
b"".join([ |
371 | 369 |
b"\x0d", |
372 | 370 |
ssh_agent.SSHAgentClient.string( |
373 |
- tests.data.ALL_KEYS["rsa"].public_key_data |
|
371 |
+ data.ALL_KEYS["rsa"].public_key_data |
|
374 | 372 |
), |
375 | 373 |
ssh_agent.SSHAgentClient.string(vault.Vault.UUID), |
376 | 374 |
b"\x00\x00\x00\x02", |
... | ... |
@@ -383,7 +381,7 @@ class Parametrize(types.SimpleNamespace): |
383 | 381 |
b"".join([ |
384 | 382 |
b"\x0d", |
385 | 383 |
ssh_agent.SSHAgentClient.string( |
386 |
- tests.data.ALL_KEYS["ed25519"].public_key_data |
|
384 |
+ data.ALL_KEYS["ed25519"].public_key_data |
|
387 | 385 |
), |
388 | 386 |
b"\x00\x00\x00\x08\x00\x01\x02\x03\x04\x05\x06\x07", |
389 | 387 |
b"\x00\x00\x00\x00", |
... | ... |
@@ -396,7 +394,7 @@ class Parametrize(types.SimpleNamespace): |
396 | 394 |
b"".join([ |
397 | 395 |
b"\x0d", |
398 | 396 |
ssh_agent.SSHAgentClient.string( |
399 |
- tests.data.ALL_KEYS["dsa1024"].public_key_data |
|
397 |
+ data.ALL_KEYS["dsa1024"].public_key_data |
|
400 | 398 |
), |
401 | 399 |
ssh_agent.SSHAgentClient.string(vault.Vault.UUID), |
402 | 400 |
b"\x00\x00\x00\x00", |
... | ... |
@@ -419,8 +417,8 @@ class Parametrize(types.SimpleNamespace): |
419 | 417 |
) |
420 | 418 |
PUBLIC_KEY_DATA = pytest.mark.parametrize( |
421 | 419 |
"public_key_struct", |
422 |
- list(tests.data.SUPPORTED_KEYS.values()), |
|
423 |
- ids=list(tests.data.SUPPORTED_KEYS.keys()), |
|
420 |
+ list(data.SUPPORTED_KEYS.values()), |
|
421 |
+ ids=list(data.SUPPORTED_KEYS.keys()), |
|
424 | 422 |
) |
425 | 423 |
REQUEST_ERROR_RESPONSES = pytest.mark.parametrize( |
426 | 424 |
["request_code", "response_code", "exc_type", "exc_pattern"], |
... | ... |
@@ -488,13 +486,13 @@ class Parametrize(types.SimpleNamespace): |
488 | 486 |
) |
489 | 487 |
SUPPORTED_SSH_TEST_KEYS = pytest.mark.parametrize( |
490 | 488 |
["ssh_test_key_type", "ssh_test_key"], |
491 |
- list(tests.data.SUPPORTED_KEYS.items()), |
|
492 |
- ids=tests.data.SUPPORTED_KEYS.keys(), |
|
489 |
+ list(data.SUPPORTED_KEYS.items()), |
|
490 |
+ ids=data.SUPPORTED_KEYS.keys(), |
|
493 | 491 |
) |
494 | 492 |
UNSUITABLE_SSH_TEST_KEYS = pytest.mark.parametrize( |
495 | 493 |
["ssh_test_key_type", "ssh_test_key"], |
496 |
- list(tests.data.UNSUITABLE_KEYS.items()), |
|
497 |
- ids=tests.data.UNSUITABLE_KEYS.keys(), |
|
494 |
+ list(data.UNSUITABLE_KEYS.items()), |
|
495 |
+ ids=data.UNSUITABLE_KEYS.keys(), |
|
498 | 496 |
) |
499 | 497 |
RESOLVE_CHAINS = pytest.mark.parametrize( |
500 | 498 |
["terminal", "chain"], |
... | ... |
@@ -518,10 +516,10 @@ class TestTestingMachineryStubbedSSHAgentSocket: |
518 | 516 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
519 | 517 |
monkeypatch.setenv( |
520 | 518 |
"SSH_AUTH_SOCK", |
521 |
- tests.machinery.StubbedSSHAgentSocketWithAddress.ADDRESS, |
|
519 |
+ machinery.StubbedSSHAgentSocketWithAddress.ADDRESS, |
|
522 | 520 |
) |
523 | 521 |
agent = stack.enter_context( |
524 |
- tests.machinery.StubbedSSHAgentSocketWithAddress() |
|
522 |
+ machinery.StubbedSSHAgentSocketWithAddress() |
|
525 | 523 |
) |
526 | 524 |
assert "query" not in agent.enabled_extensions |
527 | 525 |
query_request = ( |
... | ... |
@@ -547,10 +545,10 @@ class TestTestingMachineryStubbedSSHAgentSocket: |
547 | 545 |
monkeypatch = stack.enter_context(pytest.MonkeyPatch.context()) |
548 | 546 |
monkeypatch.setenv( |
549 | 547 |
"SSH_AUTH_SOCK", |
550 |
- tests.machinery.StubbedSSHAgentSocketWithAddress.ADDRESS, |
|
548 |
+ machinery.StubbedSSHAgentSocketWithAddress.ADDRESS, |
|
551 | 549 |
) |
552 | 550 |
agent = stack.enter_context( |
553 |
- tests.machinery.StubbedSSHAgentSocketWithAddressAndDeterministicDSA() |
|
551 |
+ machinery.StubbedSSHAgentSocketWithAddressAndDeterministicDSA() |
|
554 | 552 |
) |
555 | 553 |
assert "query" in agent.enabled_extensions |
556 | 554 |
query_request = ( |
... | ... |
@@ -580,7 +578,7 @@ class TestTestingMachineryStubbedSSHAgentSocket: |
580 | 578 |
def test_101_request_identities(self) -> None: |
581 | 579 |
"""The agent implements a known list of identities.""" |
582 | 580 |
unstring_prefix = ssh_agent.SSHAgentClient.unstring_prefix |
583 |
- with tests.machinery.StubbedSSHAgentSocket() as agent: |
|
581 |
+ with machinery.StubbedSSHAgentSocket() as agent: |
|
584 | 582 |
query_request = ( |
585 | 583 |
# SSH string header |
586 | 584 |
b"\x00\x00\x00\x01" |
... | ... |
@@ -603,7 +601,7 @@ class TestTestingMachineryStubbedSSHAgentSocket: |
603 | 601 |
_comment, message = unstring_prefix(message) |
604 | 602 |
assert key |
605 | 603 |
assert key in { |
606 |
- k.public_key_data for k in tests.data.ALL_KEYS.values() |
|
604 |
+ k.public_key_data for k in data.ALL_KEYS.values() |
|
607 | 605 |
} |
608 | 606 |
assert not message |
609 | 607 |
|
... | ... |
@@ -611,11 +609,11 @@ class TestTestingMachineryStubbedSSHAgentSocket: |
611 | 609 |
def test_102_sign( |
612 | 610 |
self, |
613 | 611 |
ssh_test_key_type: str, |
614 |
- ssh_test_key: tests.data.SSHTestKey, |
|
612 |
+ ssh_test_key: data.SSHTestKey, |
|
615 | 613 |
) -> None: |
616 | 614 |
"""The agent signs known key/message pairs.""" |
617 | 615 |
del ssh_test_key_type |
618 |
- spec = tests.data.SSHTestKeyDeterministicSignatureClass.SPEC |
|
616 |
+ spec = data.SSHTestKeyDeterministicSignatureClass.SPEC |
|
619 | 617 |
assert ssh_test_key.expected_signatures[spec].signature is not None |
620 | 618 |
string = ssh_agent.SSHAgentClient.string |
621 | 619 |
query_request = string( |
... | ... |
@@ -634,21 +632,21 @@ class TestTestingMachineryStubbedSSHAgentSocket: |
634 | 632 |
# expected payload: the binary signature as recorded in the test key data structure |
635 | 633 |
+ string(ssh_test_key.expected_signatures[spec].signature) |
636 | 634 |
) |
637 |
- with tests.machinery.StubbedSSHAgentSocket() as agent: |
|
635 |
+ with machinery.StubbedSSHAgentSocket() as agent: |
|
638 | 636 |
agent.sendall(query_request) |
639 | 637 |
assert agent.recv(1000) == query_response |
640 | 638 |
|
641 | 639 |
def test_120_close_multiple(self) -> None: |
642 | 640 |
"""The agent can be closed repeatedly.""" |
643 |
- with tests.machinery.StubbedSSHAgentSocket() as agent: |
|
641 |
+ with machinery.StubbedSSHAgentSocket() as agent: |
|
644 | 642 |
pass |
645 |
- with tests.machinery.StubbedSSHAgentSocket() as agent: |
|
643 |
+ with machinery.StubbedSSHAgentSocket() as agent: |
|
646 | 644 |
pass |
647 | 645 |
del agent |
648 | 646 |
|
649 | 647 |
def test_121_closed_agents_cannot_be_interacted_with(self) -> None: |
650 | 648 |
"""The agent can be closed repeatedly.""" |
651 |
- with tests.machinery.StubbedSSHAgentSocket() as agent: |
|
649 |
+ with machinery.StubbedSSHAgentSocket() as agent: |
|
652 | 650 |
pass |
653 | 651 |
query_request = ( |
654 | 652 |
# SSH string header |
... | ... |
@@ -662,7 +660,7 @@ class TestTestingMachineryStubbedSSHAgentSocket: |
662 | 660 |
with pytest.raises( |
663 | 661 |
ValueError, |
664 | 662 |
match=re.escape( |
665 |
- tests.machinery.StubbedSSHAgentSocket._SOCKET_IS_CLOSED |
|
663 |
+ machinery.StubbedSSHAgentSocket._SOCKET_IS_CLOSED |
|
666 | 664 |
), |
667 | 665 |
): |
668 | 666 |
agent.sendall(query_request) |
... | ... |
@@ -670,11 +668,11 @@ class TestTestingMachineryStubbedSSHAgentSocket: |
670 | 668 |
|
671 | 669 |
def test_122_no_recv_without_sendall(self) -> None: |
672 | 670 |
"""The agent requires a message before sending a response.""" |
673 |
- with tests.machinery.StubbedSSHAgentSocket() as agent: # noqa: SIM117 |
|
671 |
+ with machinery.StubbedSSHAgentSocket() as agent: # noqa: SIM117 |
|
674 | 672 |
with pytest.raises( |
675 | 673 |
AssertionError, |
676 | 674 |
match=re.escape( |
677 |
- tests.machinery.StubbedSSHAgentSocket._PROTOCOL_VIOLATION |
|
675 |
+ machinery.StubbedSSHAgentSocket._PROTOCOL_VIOLATION |
|
678 | 676 |
), |
679 | 677 |
): |
680 | 678 |
agent.recv(100) |
... | ... |
@@ -691,7 +689,7 @@ class TestTestingMachineryStubbedSSHAgentSocket: |
691 | 689 |
# response code: SSH_AGENT_FAILURE |
692 | 690 |
b"\x05" |
693 | 691 |
) |
694 |
- with tests.machinery.StubbedSSHAgentSocket() as agent: |
|
692 |
+ with machinery.StubbedSSHAgentSocket() as agent: |
|
695 | 693 |
agent.sendall(message) |
696 | 694 |
assert agent.recv(100) == query_response |
697 | 695 |
|
... | ... |
@@ -707,7 +705,7 @@ class TestTestingMachineryStubbedSSHAgentSocket: |
707 | 705 |
# response code: SSH_AGENT_FAILURE |
708 | 706 |
b"\x05" |
709 | 707 |
) |
710 |
- with tests.machinery.StubbedSSHAgentSocket() as agent: |
|
708 |
+ with machinery.StubbedSSHAgentSocket() as agent: |
|
711 | 709 |
agent.sendall(message) |
712 | 710 |
assert agent.recv(100) == query_response |
713 | 711 |
|
... | ... |
@@ -729,7 +727,7 @@ class TestTestingMachineryStubbedSSHAgentSocket: |
729 | 727 |
stack.enter_context( |
730 | 728 |
pytest.raises(exception, match=re.escape(match)) |
731 | 729 |
) |
732 |
- tests.machinery.StubbedSSHAgentSocketWithAddress() |
|
730 |
+ machinery.StubbedSSHAgentSocketWithAddress() |
|
733 | 731 |
|
734 | 732 |
|
735 | 733 |
class TestStaticFunctionality: |
... | ... |
@@ -785,7 +783,7 @@ class TestStaticFunctionality: |
785 | 783 |
@Parametrize.PUBLIC_KEY_DATA |
786 | 784 |
def test_100_key_decoding( |
787 | 785 |
self, |
788 |
- public_key_struct: tests.data.SSHTestKey, |
|
786 |
+ public_key_struct: data.SSHTestKey, |
|
789 | 787 |
) -> None: |
790 | 788 |
"""The [`tests.ALL_KEYS`][] public key data looks sane.""" |
791 | 789 |
keydata = base64.b64decode( |
... | ... |
@@ -802,14 +800,14 @@ class TestStaticFunctionality: |
802 | 800 |
"""[`tests.parse_sh_export_line`][] works.""" |
803 | 801 |
if value is not None: |
804 | 802 |
assert ( |
805 |
- tests.data.callables.parse_sh_export_line( |
|
803 |
+ callables.parse_sh_export_line( |
|
806 | 804 |
line, env_name=env_name |
807 | 805 |
) |
808 | 806 |
== value |
809 | 807 |
) |
810 | 808 |
else: |
811 | 809 |
with pytest.raises(ValueError, match="Cannot parse sh line:"): |
812 |
- tests.data.callables.parse_sh_export_line( |
|
810 |
+ callables.parse_sh_export_line( |
|
813 | 811 |
line, env_name=env_name |
814 | 812 |
) |
815 | 813 |
|
... | ... |
@@ -1056,14 +1054,14 @@ class TestStaticFunctionality: |
1056 | 1054 |
"""Finding all SSH agent socket providers works.""" |
1057 | 1055 |
resolve = socketprovider.SocketProvider.resolve |
1058 | 1056 |
old_registry = socketprovider.SocketProvider.registry |
1059 |
- with tests.machinery.pytest.faked_entry_point_list( |
|
1057 |
+ with pytest_machinery.faked_entry_point_list( |
|
1060 | 1058 |
additional_entry_points, remove_conflicting_entries=False |
1061 | 1059 |
) as names: |
1062 | 1060 |
socketprovider.SocketProvider._find_all_ssh_agent_socket_providers() |
1063 | 1061 |
for name in names: |
1064 | 1062 |
assert name in socketprovider.SocketProvider.registry |
1065 | 1063 |
assert resolve(name) in { |
1066 |
- tests.data.callables.provider_entry_provider, |
|
1064 |
+ callables.provider_entry_provider, |
|
1067 | 1065 |
*old_registry.values(), |
1068 | 1066 |
} |
1069 | 1067 |
|
... | ... |
@@ -1075,7 +1073,7 @@ class TestStaticFunctionality: |
1075 | 1073 |
"""Finding faulty SSH agent socket providers raises errors.""" |
1076 | 1074 |
with contextlib.ExitStack() as stack: |
1077 | 1075 |
stack.enter_context( |
1078 |
- tests.machinery.pytest.faked_entry_point_list( |
|
1076 |
+ pytest_machinery.faked_entry_point_list( |
|
1079 | 1077 |
additional_entry_points, remove_conflicting_entries=False |
1080 | 1078 |
) |
1081 | 1079 |
) |
... | ... |
@@ -1246,7 +1244,7 @@ class TestAgentInteraction: |
1246 | 1244 |
self, |
1247 | 1245 |
ssh_agent_client_with_test_keys_loaded: ssh_agent.SSHAgentClient, |
1248 | 1246 |
ssh_test_key_type: str, |
1249 |
- ssh_test_key: tests.data.SSHTestKey, |
|
1247 |
+ ssh_test_key: data.SSHTestKey, |
|
1250 | 1248 |
) -> None: |
1251 | 1249 |
"""Signing data with specific SSH keys works. |
1252 | 1250 |
|
... | ... |
@@ -1259,11 +1257,11 @@ class TestAgentInteraction: |
1259 | 1257 |
key_comment_pairs = {bytes(k): bytes(c) for k, c in client.list_keys()} |
1260 | 1258 |
public_key_data = ssh_test_key.public_key_data |
1261 | 1259 |
assert ( |
1262 |
- tests.data.SSHTestKeyDeterministicSignatureClass.SPEC |
|
1260 |
+ data.SSHTestKeyDeterministicSignatureClass.SPEC |
|
1263 | 1261 |
in ssh_test_key.expected_signatures |
1264 | 1262 |
) |
1265 | 1263 |
sig = ssh_test_key.expected_signatures[ |
1266 |
- tests.data.SSHTestKeyDeterministicSignatureClass.SPEC |
|
1264 |
+ data.SSHTestKeyDeterministicSignatureClass.SPEC |
|
1267 | 1265 |
] |
1268 | 1266 |
expected_signature = sig.signature |
1269 | 1267 |
derived_passphrase = sig.derived_passphrase |
... | ... |
@@ -1291,7 +1289,7 @@ class TestAgentInteraction: |
1291 | 1289 |
self, |
1292 | 1290 |
ssh_agent_client_with_test_keys_loaded: ssh_agent.SSHAgentClient, |
1293 | 1291 |
ssh_test_key_type: str, |
1294 |
- ssh_test_key: tests.data.SSHTestKey, |
|
1292 |
+ ssh_test_key: data.SSHTestKey, |
|
1295 | 1293 |
) -> None: |
1296 | 1294 |
"""Using an unsuitable key with [`vault.Vault`][] fails. |
1297 | 1295 |
|
... | ... |
@@ -1336,11 +1334,11 @@ class TestAgentInteraction: |
1336 | 1334 |
def key_is_suitable(key: bytes) -> bool: |
1337 | 1335 |
"""Stub out [`vault.Vault.key_is_suitable`][].""" |
1338 | 1336 |
always = { |
1339 |
- v.public_key_data for v in tests.data.SUPPORTED_KEYS.values() |
|
1337 |
+ v.public_key_data for v in data.SUPPORTED_KEYS.values() |
|
1340 | 1338 |
} |
1341 | 1339 |
dsa = { |
1342 | 1340 |
v.public_key_data |
1343 |
- for k, v in tests.data.UNSUITABLE_KEYS.items() |
|
1341 |
+ for k, v in data.UNSUITABLE_KEYS.items() |
|
1344 | 1342 |
if k.startswith(("dsa", "ecdsa")) |
1345 | 1343 |
} |
1346 | 1344 |
return key in always or ( |
... | ... |
@@ -1356,11 +1354,11 @@ class TestAgentInteraction: |
1356 | 1354 |
monkeypatch.setattr( |
1357 | 1355 |
ssh_agent.SSHAgentClient, |
1358 | 1356 |
"list_keys", |
1359 |
- tests.data.callables.list_keys_singleton, |
|
1357 |
+ callables.list_keys_singleton, |
|
1360 | 1358 |
) |
1361 | 1359 |
keys = [ |
1362 | 1360 |
pair.key |
1363 |
- for pair in tests.data.callables.list_keys_singleton() |
|
1361 |
+ for pair in callables.list_keys_singleton() |
|
1364 | 1362 |
if key_is_suitable(pair.key) |
1365 | 1363 |
] |
1366 | 1364 |
index = "1" |
... | ... |
@@ -1369,11 +1367,11 @@ class TestAgentInteraction: |
1369 | 1367 |
monkeypatch.setattr( |
1370 | 1368 |
ssh_agent.SSHAgentClient, |
1371 | 1369 |
"list_keys", |
1372 |
- tests.data.callables.list_keys, |
|
1370 |
+ callables.list_keys, |
|
1373 | 1371 |
) |
1374 | 1372 |
keys = [ |
1375 | 1373 |
pair.key |
1376 |
- for pair in tests.data.callables.list_keys() |
|
1374 |
+ for pair in callables.list_keys() |
|
1377 | 1375 |
if key_is_suitable(pair.key) |
1378 | 1376 |
] |
1379 | 1377 |
index = str(1 + keys.index(key)) |
... | ... |
@@ -1389,7 +1387,7 @@ class TestAgentInteraction: |
1389 | 1387 |
|
1390 | 1388 |
# TODO(the-13th-letter): (Continued from above.) Update input |
1391 | 1389 |
# data to use `index`/`input` directly and unconditionally. |
1392 |
- runner = tests.machinery.CliRunner(mix_stderr=True) |
|
1390 |
+ runner = machinery.CliRunner(mix_stderr=True) |
|
1393 | 1391 |
result = runner.invoke( |
1394 | 1392 |
driver, |
1395 | 1393 |
[], |
... | ... |
@@ -1401,7 +1399,7 @@ class TestAgentInteraction: |
1401 | 1399 |
|
1402 | 1400 |
def test_300_constructor_bad_running_agent( |
1403 | 1401 |
self, |
1404 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
1402 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
1405 | 1403 |
) -> None: |
1406 | 1404 |
"""Fail if the agent address is invalid.""" |
1407 | 1405 |
with pytest.MonkeyPatch.context() as monkeypatch: |
... | ... |
@@ -1445,7 +1443,7 @@ class TestAgentInteraction: |
1445 | 1443 |
|
1446 | 1444 |
def test_303_explicit_socket( |
1447 | 1445 |
self, |
1448 |
- spawn_ssh_agent: tests.data.SpawnedSSHAgentInfo, |
|
1446 |
+ spawn_ssh_agent: data.SpawnedSSHAgentInfo, |
|
1449 | 1447 |
) -> None: |
1450 | 1448 |
conn = spawn_ssh_agent.client._connection |
1451 | 1449 |
ssh_agent.SSHAgentClient(socket=conn) |
... | ... |
@@ -1453,7 +1451,7 @@ class TestAgentInteraction: |
1453 | 1451 |
@Parametrize.TRUNCATED_AGENT_RESPONSES |
1454 | 1452 |
def test_310_truncated_server_response( |
1455 | 1453 |
self, |
1456 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
1454 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
1457 | 1455 |
response: bytes, |
1458 | 1456 |
) -> None: |
1459 | 1457 |
"""Fail on truncated responses from the SSH agent.""" |
... | ... |
@@ -1477,7 +1475,7 @@ class TestAgentInteraction: |
1477 | 1475 |
@Parametrize.LIST_KEYS_ERROR_RESPONSES |
1478 | 1476 |
def test_320_list_keys_error_responses( |
1479 | 1477 |
self, |
1480 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
1478 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
1481 | 1479 |
response_code: _types.SSH_AGENT, |
1482 | 1480 |
response: bytes | bytearray, |
1483 | 1481 |
exc_type: type[Exception], |
... | ... |
@@ -1537,7 +1535,7 @@ class TestAgentInteraction: |
1537 | 1535 |
@Parametrize.SIGN_ERROR_RESPONSES |
1538 | 1536 |
def test_330_sign_error_responses( |
1539 | 1537 |
self, |
1540 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
1538 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
1541 | 1539 |
key: bytes | bytearray, |
1542 | 1540 |
check: bool, |
1543 | 1541 |
response_code: _types.SSH_AGENT, |
... | ... |
@@ -1597,7 +1595,7 @@ class TestAgentInteraction: |
1597 | 1595 |
com = b"no comment" |
1598 | 1596 |
loaded_keys = [ |
1599 | 1597 |
Pair(v.public_key_data, com).toreadonly() |
1600 |
- for v in tests.data.SUPPORTED_KEYS.values() |
|
1598 |
+ for v in data.SUPPORTED_KEYS.values() |
|
1601 | 1599 |
] |
1602 | 1600 |
monkeypatch.setattr(client, "list_keys", lambda: loaded_keys) |
1603 | 1601 |
with pytest.raises(exc_type, match=exc_pattern): |
... | ... |
@@ -1606,7 +1604,7 @@ class TestAgentInteraction: |
1606 | 1604 |
@Parametrize.REQUEST_ERROR_RESPONSES |
1607 | 1605 |
def test_340_request_error_responses( |
1608 | 1606 |
self, |
1609 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
1607 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
1610 | 1608 |
request_code: _types.SSH_AGENTC, |
1611 | 1609 |
response_code: _types.SSH_AGENT, |
1612 | 1610 |
exc_type: type[Exception], |
... | ... |
@@ -1635,7 +1633,7 @@ class TestAgentInteraction: |
1635 | 1633 |
def test_350_query_extensions_malformed_responses( |
1636 | 1634 |
self, |
1637 | 1635 |
monkeypatch: pytest.MonkeyPatch, |
1638 |
- running_ssh_agent: tests.data.RunningSSHAgentInfo, |
|
1636 |
+ running_ssh_agent: data.RunningSSHAgentInfo, |
|
1639 | 1637 |
response_data: bytes, |
1640 | 1638 |
) -> None: |
1641 | 1639 |
"""Fail on malformed responses while querying extensions.""" |
... | ... |
@@ -12,14 +12,14 @@ from typing import TYPE_CHECKING |
12 | 12 |
import pytest |
13 | 13 |
from hypothesis import stateful, strategies |
14 | 14 |
|
15 |
-import tests.machinery.pytest |
|
16 | 15 |
from derivepassphrase.ssh_agent import socketprovider |
16 |
+from tests.machinery import pytest as pytest_machinery |
|
17 | 17 |
|
18 | 18 |
if TYPE_CHECKING: |
19 | 19 |
from derivepassphrase import _types |
20 | 20 |
|
21 | 21 |
# All tests in this module are heavy-duty tests. |
22 |
-pytestmark = [tests.machinery.pytest.heavy_duty] |
|
22 |
+pytestmark = [pytest_machinery.heavy_duty] |
|
23 | 23 |
|
24 | 24 |
|
25 | 25 |
@strategies.composite |
... | ... |
@@ -11,10 +11,9 @@ import hypothesis |
11 | 11 |
import pytest |
12 | 12 |
from hypothesis import strategies |
13 | 13 |
|
14 |
-import tests.data |
|
15 |
-import tests.data.callables |
|
16 |
-import tests.machinery.hypothesis |
|
17 | 14 |
from derivepassphrase import _types |
15 |
+from tests import data |
|
16 |
+from tests.machinery import hypothesis as hypothesis_machinery |
|
18 | 17 |
|
19 | 18 |
|
20 | 19 |
class Parametrize(types.SimpleNamespace): |
... | ... |
@@ -22,20 +21,20 @@ class Parametrize(types.SimpleNamespace): |
22 | 21 |
"test_config", |
23 | 22 |
[ |
24 | 23 |
conf |
25 |
- for conf in tests.data.TEST_CONFIGS |
|
24 |
+ for conf in data.TEST_CONFIGS |
|
26 | 25 |
if conf.validation_settings in {None, (True,)} |
27 | 26 |
], |
28 |
- ids=tests.data.VaultTestConfig._test_id, |
|
27 |
+ ids=data.VaultTestConfig._test_id, |
|
29 | 28 |
) |
30 | 29 |
VAULT_TEST_CONFIGS = pytest.mark.parametrize( |
31 | 30 |
"test_config", |
32 |
- tests.data.TEST_CONFIGS, |
|
33 |
- ids=tests.data.VaultTestConfig._test_id, |
|
31 |
+ data.TEST_CONFIGS, |
|
32 |
+ ids=data.VaultTestConfig._test_id, |
|
34 | 33 |
) |
35 | 34 |
|
36 | 35 |
|
37 | 36 |
@Parametrize.VALID_VAULT_TEST_CONFIGS |
38 |
-def test_200_is_vault_config(test_config: tests.data.VaultTestConfig) -> None: |
|
37 |
+def test_200_is_vault_config(test_config: data.VaultTestConfig) -> None: |
|
39 | 38 |
"""Is this vault configuration recognized as valid/invalid? |
40 | 39 |
|
41 | 40 |
Check all test configurations that do not need custom validation |
... | ... |
@@ -56,14 +55,14 @@ def test_200_is_vault_config(test_config: tests.data.VaultTestConfig) -> None: |
56 | 55 |
|
57 | 56 |
|
58 | 57 |
@hypothesis.given( |
59 |
- test_config=tests.machinery.hypothesis.smudged_vault_test_config( |
|
58 |
+ test_config=hypothesis_machinery.smudged_vault_test_config( |
|
60 | 59 |
config=strategies.sampled_from([ |
61 |
- conf for conf in tests.data.TEST_CONFIGS if conf.is_valid() |
|
60 |
+ conf for conf in data.TEST_CONFIGS if conf.is_valid() |
|
62 | 61 |
]) |
63 | 62 |
) |
64 | 63 |
) |
65 | 64 |
def test_200a_is_vault_config_smudged( |
66 |
- test_config: tests.data.VaultTestConfig, |
|
65 |
+ test_config: data.VaultTestConfig, |
|
67 | 66 |
) -> None: |
68 | 67 |
"""Is this vault configuration recognized as valid/invalid? |
69 | 68 |
|
... | ... |
@@ -89,7 +88,7 @@ def test_200a_is_vault_config_smudged( |
89 | 88 |
|
90 | 89 |
@Parametrize.VAULT_TEST_CONFIGS |
91 | 90 |
def test_400_validate_vault_config( |
92 |
- test_config: tests.data.VaultTestConfig, |
|
91 |
+ test_config: data.VaultTestConfig, |
|
93 | 92 |
) -> None: |
94 | 93 |
"""Validate this vault configuration. |
95 | 94 |
|
... | ... |
@@ -121,14 +120,14 @@ def test_400_validate_vault_config( |
121 | 120 |
|
122 | 121 |
|
123 | 122 |
@hypothesis.given( |
124 |
- test_config=tests.machinery.hypothesis.smudged_vault_test_config( |
|
123 |
+ test_config=hypothesis_machinery.smudged_vault_test_config( |
|
125 | 124 |
config=strategies.sampled_from([ |
126 |
- conf for conf in tests.data.TEST_CONFIGS if conf.is_smudgable() |
|
125 |
+ conf for conf in data.TEST_CONFIGS if conf.is_smudgable() |
|
127 | 126 |
]) |
128 | 127 |
) |
129 | 128 |
) |
130 | 129 |
def test_400a_validate_vault_config_smudged( |
131 |
- test_config: tests.data.VaultTestConfig, |
|
130 |
+ test_config: data.VaultTestConfig, |
|
132 | 131 |
) -> None: |
133 | 132 |
"""Validate this vault configuration. |
134 | 133 |
|
... | ... |
@@ -10,11 +10,11 @@ import hypothesis |
10 | 10 |
from hypothesis import strategies |
11 | 11 |
from typing_extensions import Any |
12 | 12 |
|
13 |
-import tests.machinery.pytest |
|
14 | 13 |
from derivepassphrase import _types |
14 |
+from tests.machinery import pytest as pytest_machinery |
|
15 | 15 |
|
16 | 16 |
# All tests in this module are heavy-duty tests. |
17 |
-pytestmark = [tests.machinery.pytest.heavy_duty] |
|
17 |
+pytestmark = [pytest_machinery.heavy_duty] |
|
18 | 18 |
|
19 | 19 |
|
20 | 20 |
@strategies.composite |
... | ... |
@@ -17,8 +17,8 @@ import pytest |
17 | 17 |
from hypothesis import strategies |
18 | 18 |
from typing_extensions import TypeVar |
19 | 19 |
|
20 |
-import tests.machinery.hypothesis |
|
21 | 20 |
from derivepassphrase import vault |
21 |
+from tests.machinery import hypothesis as hypothesis_machinery |
|
22 | 22 |
|
23 | 23 |
if TYPE_CHECKING: |
24 | 24 |
from collections.abc import Callable, Iterator |
... | ... |
@@ -503,7 +503,7 @@ class TestVault: |
503 | 503 |
min_size=1, |
504 | 504 |
max_size=32, |
505 | 505 |
), |
506 |
- config=tests.machinery.hypothesis.vault_full_service_config(), |
|
506 |
+ config=hypothesis_machinery.vault_full_service_config(), |
|
507 | 507 |
services=strategies.lists( |
508 | 508 |
strategies.binary(min_size=1, max_size=32), |
509 | 509 |
min_size=2, |
... | ... |
@@ -629,7 +629,7 @@ class TestVault: |
629 | 629 |
phrase=strategies.one_of( |
630 | 630 |
strategies.binary(min_size=1), strategies.text(min_size=1) |
631 | 631 |
), |
632 |
- config=tests.machinery.hypothesis.vault_full_service_config(), |
|
632 |
+ config=hypothesis_machinery.vault_full_service_config(), |
|
633 | 633 |
service=strategies.text(min_size=1), |
634 | 634 |
) |
635 | 635 |
@hypothesis.example( |
636 | 636 |