Make multiple private test attributes and functions public
Marco Ricci

Marco Ricci commited on 2025-01-24 23:20:17
Zeige 2 geänderte Dateien mit 25 Einfügungen und 25 Löschungen.


This includes the JavaScript sources of the broken storeroom sample
vault configurations, and all remaining functions in the
`tests.conftest` module.
... ...
@@ -1304,7 +1304,7 @@ The parsed vault configuration stored in
1304 1304
 [`VAULT_STOREROOM_CONFIG_ZIPPED`][].
1305 1305
 """
1306 1306
 
1307
-_VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED_JAVASCRIPT_SOURCE = """
1307
+VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED_JAVASCRIPT_SOURCE = """
1308 1308
 // Executed in the top-level directory of the vault project code, in Node.js.
1309 1309
 const storeroom = require('storeroom')
1310 1310
 const Store = require('./lib/store.js')
... ...
@@ -1360,11 +1360,11 @@ and then encoded in base64.
1360 1360
 The archive contains a directory `/services/array/` that claims to have
1361 1361
 two child items 'entry1' and 'entry2', but no such child items are
1362 1362
 present in the archive.  See
1363
-[`_VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED_JAVASCRIPT_SOURCE`][] for
1363
+[`VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED_JAVASCRIPT_SOURCE`][] for
1364 1364
 the exact script that created this archive.
1365 1365
 """
1366 1366
 
1367
-_VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED2_JAVASCRIPT_SOURCE = """
1367
+VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED2_JAVASCRIPT_SOURCE = """
1368 1368
 // Executed in the top-level directory of the vault project code, in Node.js.
1369 1369
 const storeroom = require('storeroom')
1370 1370
 const Store = require('./lib/store.js')
... ...
@@ -1424,11 +1424,11 @@ and then encoded in base64.
1424 1424
 
1425 1425
 The archive contains a directory `/services/array/` whose list of child
1426 1426
 items does not adhere to the serialization format.  See
1427
-[`_VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED2_JAVASCRIPT_SOURCE`][] for
1427
+[`VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED2_JAVASCRIPT_SOURCE`][] for
1428 1428
 the exact script that created this archive.
1429 1429
 """
1430 1430
 
1431
-_VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED3_JAVASCRIPT_SOURCE = """
1431
+VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED3_JAVASCRIPT_SOURCE = """
1432 1432
 // Executed in the top-level directory of the vault project code, in Node.js.
1433 1433
 const storeroom = require('storeroom')
1434 1434
 const Store = require('./lib/store.js')
... ...
@@ -1488,11 +1488,11 @@ and then encoded in base64.
1488 1488
 
1489 1489
 The archive contains a directory `/services/array/` whose list of child
1490 1490
 items are not all valid item names.  See
1491
-[`_VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED3_JAVASCRIPT_SOURCE`][] for
1491
+[`VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED3_JAVASCRIPT_SOURCE`][] for
1492 1492
 the exact script that created this archive.
1493 1493
 """
1494 1494
 
1495
-_VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED4_JAVASCRIPT_SOURCE = """
1495
+VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED4_JAVASCRIPT_SOURCE = """
1496 1496
 // Executed in the top-level directory of the vault project code, in Node.js.
1497 1497
 const storeroom = require('storeroom')
1498 1498
 const Store = require('./lib/store.js')
... ...
@@ -1554,7 +1554,7 @@ and then encoded in base64.
1554 1554
 The archive contains two directories `/dir/` and `/dir/subdir/`, where
1555 1555
 `/dir/subdir/` is a correctly serialized directory, but `/dir/` does not
1556 1556
 contain `/dir/subdir/` in its list of child items.  See
1557
-[`_VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED4_JAVASCRIPT_SOURCE`][] for
1557
+[`VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED4_JAVASCRIPT_SOURCE`][] for
1558 1558
 the exact script that created this archive.
1559 1559
 """
1560 1560
 
... ...
@@ -21,7 +21,7 @@ import tests
21 21
 from derivepassphrase import _types, ssh_agent
22 22
 
23 23
 if TYPE_CHECKING:
24
-    from collections.abc import Iterator
24
+    from collections.abc import Iterator, Sequence
25 25
 
26 26
 startup_ssh_auth_sock = os.environ.get('SSH_AUTH_SOCK', None)
27 27
 
... ...
@@ -94,7 +94,7 @@ class SpawnFunc(Protocol):
94 94
         """
95 95
 
96 96
 
97
-def _spawn_pageant(  # pragma: no cover
97
+def spawn_pageant(  # pragma: no cover
98 98
     executable: str | None, env: dict[str, str]
99 99
 ) -> subprocess.Popen[str] | None:
100 100
     """Spawn an isolated Pageant, if possible.
... ...
@@ -166,7 +166,7 @@ def _spawn_pageant(  # pragma: no cover
166 166
     )
167 167
 
168 168
 
169
-def _spawn_openssh_agent(  # pragma: no cover
169
+def spawn_openssh_agent(  # pragma: no cover
170 170
     executable: str | None, env: dict[str, str]
171 171
 ) -> subprocess.Popen[str] | None:
172 172
     """Spawn an isolated OpenSSH agent, if possible.
... ...
@@ -200,16 +200,16 @@ def _spawn_openssh_agent(  # pragma: no cover
200 200
     )
201 201
 
202 202
 
203
-def _spawn_noop(  # pragma: no cover
203
+def spawn_noop(  # pragma: no cover
204 204
     executable: str | None, env: dict[str, str]
205 205
 ) -> None:
206 206
     """Placeholder function. Does nothing."""
207 207
 
208 208
 
209
-_spawn_handlers = [
210
-    ('pageant', _spawn_pageant, tests.KnownSSHAgent.Pageant),
211
-    ('ssh-agent', _spawn_openssh_agent, tests.KnownSSHAgent.OpenSSHAgent),
212
-    ('(system)', _spawn_noop, tests.KnownSSHAgent.UNKNOWN),
209
+spawn_handlers: Sequence[tuple[str, SpawnFunc, tests.KnownSSHAgent]] = [
210
+    ('pageant', spawn_pageant, tests.KnownSSHAgent.Pageant),
211
+    ('ssh-agent', spawn_openssh_agent, tests.KnownSSHAgent.OpenSSHAgent),
212
+    ('(system)', spawn_noop, tests.KnownSSHAgent.UNKNOWN),
213 213
 ]
214 214
 """
215 215
 The standard registry of agent spawning functions.
... ...
@@ -219,7 +219,7 @@ Popen = TypeVar('Popen', bound=subprocess.Popen)
219 219
 
220 220
 
221 221
 @contextlib.contextmanager
222
-def _terminate_on_exit(proc: Popen) -> Iterator[Popen]:
222
+def terminate_on_exit(proc: Popen) -> Iterator[Popen]:
223 223
     """Terminate and wait for the subprocess upon exiting the context.
224 224
 
225 225
     Args:
... ...
@@ -243,7 +243,7 @@ class CannotSpawnError(RuntimeError):
243 243
     """Cannot spawn the SSH agent."""
244 244
 
245 245
 
246
-def _spawn_named_agent(
246
+def spawn_named_agent(
247 247
     exec_name: str,
248 248
     spawn_func: SpawnFunc,
249 249
     agent_type: tests.KnownSSHAgent,
... ...
@@ -301,13 +301,13 @@ def _spawn_named_agent(
301 301
     ssh_auth_sock = agent_env.pop('SSH_AUTH_SOCK', None)
302 302
     proc = spawn_func(executable=shutil.which(exec_name), env=agent_env)
303 303
     with exit_stack:
304
-        if spawn_func is _spawn_noop:
304
+        if spawn_func is spawn_noop:
305 305
             ssh_auth_sock = os.environ['SSH_AUTH_SOCK']
306 306
         elif proc is None:  # pragma: no cover
307 307
             err_msg = f'Cannot spawn usable {exec_name}'
308 308
             raise CannotSpawnError(err_msg)
309 309
         else:
310
-            exit_stack.enter_context(_terminate_on_exit(proc))
310
+            exit_stack.enter_context(terminate_on_exit(proc))
311 311
             assert os.environ.get('SSH_AUTH_SOCK') == startup_ssh_auth_sock, (
312 312
                 f'SSH_AUTH_SOCK mismatch after spawning {exec_name}'
313 313
             )
... ...
@@ -334,7 +334,7 @@ def _spawn_named_agent(
334 334
         )
335 335
         client.list_keys()  # sanity test
336 336
         yield tests.SpawnedSSHAgentInfo(
337
-            agent_type, client, spawn_func is not _spawn_noop
337
+            agent_type, client, spawn_func is not spawn_noop
338 338
         )
339 339
     assert os.environ.get('SSH_AUTH_SOCK', None) == startup_ssh_auth_sock, (
340 340
         f'SSH_AUTH_SOCK mismatch after tearing down {exec_name}'
... ...
@@ -379,9 +379,9 @@ def running_ssh_agent(  # pragma: no cover
379 379
             monkeypatch.setenv('SSH_AUTH_SOCK', startup_ssh_auth_sock)
380 380
         else:
381 381
             monkeypatch.delenv('SSH_AUTH_SOCK', raising=False)
382
-        for exec_name, spawn_func, agent_type in _spawn_handlers:
382
+        for exec_name, spawn_func, agent_type in spawn_handlers:
383 383
             try:
384
-                for _agent_info in _spawn_named_agent(
384
+                for _agent_info in spawn_named_agent(
385 385
                     exec_name, spawn_func, agent_type
386 386
                 ):
387 387
                     yield tests.RunningSSHAgentInfo(
... ...
@@ -393,7 +393,7 @@ def running_ssh_agent(  # pragma: no cover
393 393
         pytest.skip('No SSH agent running or spawnable')
394 394
 
395 395
 
396
-@pytest.fixture(params=_spawn_handlers, ids=operator.itemgetter(0))
396
+@pytest.fixture(params=spawn_handlers, ids=operator.itemgetter(0))
397 397
 def spawn_ssh_agent(
398 398
     request: pytest.FixtureRequest,
399 399
     skip_if_no_af_unix_support: None,
... ...
@@ -429,7 +429,7 @@ def spawn_ssh_agent(
429 429
         else:  # pragma: no cover
430 430
             monkeypatch.delenv('SSH_AUTH_SOCK', raising=False)
431 431
         try:
432
-            yield from _spawn_named_agent(*request.param)
432
+            yield from spawn_named_agent(*request.param)
433 433
         except (KeyError, OSError, CannotSpawnError) as exc:
434 434
             pytest.skip(exc.args[0])
435 435
         return
436 436