8b97a77413294c159b92b5cbc12b0074a154b88b
Marco Ricci Update copyright notices to...

Marco Ricci authored 2 days ago

1) # SPDX-FileCopyrightText: 2025 Marco Ricci <software@the13thletter.info>
Marco Ricci Import initial project files

Marco Ricci authored 8 months ago

2) #
Marco Ricci Update copyright notices to...

Marco Ricci authored 2 days ago

3) # SPDX-License-Identifier: Zlib
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

4) 
5) from __future__ import annotations
6) 
7) import base64
8) import contextlib
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

9) import copy
Marco Ricci Add test fixture for manual...

Marco Ricci authored 3 months ago

10) import enum
Marco Ricci Test exporter data loading...

Marco Ricci authored 4 months ago

11) import importlib.util
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

12) import json
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

13) import logging
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

14) import os
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

15) import re
Marco Ricci Add test fixture for manual...

Marco Ricci authored 3 months ago

16) import shlex
Marco Ricci Add missing tests for rewor...

Marco Ricci authored 4 months ago

17) import stat
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 3 months ago

18) import sys
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 4 months ago

19) import tempfile
20) import zipfile
Marco Ricci Support Python 3.10 and PyP...

Marco Ricci authored 5 months ago

21) from typing import TYPE_CHECKING
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

22) 
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

23) import hypothesis
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

24) import pytest
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

25) from hypothesis import strategies
Marco Ricci Clean up testing machinery...

Marco Ricci authored 4 months ago

26) from typing_extensions import NamedTuple, Self, assert_never
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

27) 
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

28) from derivepassphrase import _types, cli, ssh_agent, vault
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

29) 
30) __all__ = ()
31) 
32) if TYPE_CHECKING:
Marco Ricci Fix user interface errors i...

Marco Ricci authored 3 weeks ago

33)     import socket
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

34)     from collections.abc import Callable, Iterator, Mapping, Sequence
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

35) 
36)     import click.testing
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

37)     from typing_extensions import Any, NotRequired, TypedDict
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

38) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

39)     class SSHTestKey(TypedDict):
40)         private_key: bytes
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

41)         private_key_blob: NotRequired[bytes]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

42)         public_key: bytes | str
43)         public_key_data: bytes
44)         expected_signature: bytes | None
45)         derived_passphrase: bytes | str | None
46) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

47) 
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

48) class ValidationSettings(NamedTuple):
49)     allow_unknown_settings: bool
50) 
51) 
52) class VaultTestConfig(NamedTuple):
53)     config: Any
54)     comment: str
55)     validation_settings: ValidationSettings | None
56) 
57) 
58) TEST_CONFIGS: list[VaultTestConfig] = [
59)     VaultTestConfig(None, 'not a dict', None),
60)     VaultTestConfig({}, 'missing required keys', None),
61)     VaultTestConfig(
62)         {'global': None, 'services': {}}, 'bad config value: global', None
63)     ),
64)     VaultTestConfig(
65)         {'global': {'key': 123}, 'services': {}},
66)         'bad config value: global.key',
67)         None,
68)     ),
69)     VaultTestConfig(
70)         {'global': {'phrase': 'abc', 'key': '...'}, 'services': {}},
71)         '',
72)         None,
73)     ),
74)     VaultTestConfig({'services': None}, 'bad config value: services', None),
75)     VaultTestConfig(
76)         {'services': {'1': {}, 2: {}}}, 'bad config value: services."2"', None
77)     ),
78)     VaultTestConfig(
79)         {'services': {'1': {}, '2': 2}}, 'bad config value: services."2"', None
80)     ),
81)     VaultTestConfig(
82)         {'services': {'sv': {'notes': ['sentinel', 'list']}}},
83)         'bad config value: services.sv.notes',
84)         None,
85)     ),
86)     VaultTestConfig(
87)         {'services': {'sv': {'notes': 'blah blah blah'}}}, '', None
88)     ),
89)     VaultTestConfig(
90)         {'services': {'sv': {'length': '200'}}},
91)         'bad config value: services.sv.length',
92)         None,
93)     ),
94)     VaultTestConfig(
95)         {'services': {'sv': {'length': 0.5}}},
96)         'bad config value: services.sv.length',
97)         None,
98)     ),
99)     VaultTestConfig(
100)         {'services': {'sv': {'length': ['sentinel', 'list']}}},
101)         'bad config value: services.sv.length',
102)         None,
103)     ),
104)     VaultTestConfig(
105)         {'services': {'sv': {'length': -10}}},
106)         'bad config value: services.sv.length',
107)         None,
108)     ),
109)     VaultTestConfig(
110)         {'services': {'sv': {'lower': '10'}}},
111)         'bad config value: services.sv.lower',
112)         None,
113)     ),
114)     VaultTestConfig(
115)         {'services': {'sv': {'upper': -10}}},
116)         'bad config value: services.sv.upper',
117)         None,
118)     ),
119)     VaultTestConfig(
120)         {'services': {'sv': {'number': ['sentinel', 'list']}}},
121)         'bad config value: services.sv.number',
122)         None,
123)     ),
124)     VaultTestConfig(
125)         {
126)             'global': {'phrase': 'my secret phrase'},
127)             'services': {'sv': {'length': 10}},
128)         },
129)         '',
130)         None,
131)     ),
132)     VaultTestConfig(
133)         {'services': {'sv': {'length': 10, 'phrase': '...'}}}, '', None
134)     ),
135)     VaultTestConfig(
136)         {'services': {'sv': {'length': 10, 'key': '...'}}}, '', None
137)     ),
138)     VaultTestConfig(
139)         {'services': {'sv': {'upper': 10, 'key': '...'}}}, '', None
140)     ),
141)     VaultTestConfig(
142)         {'services': {'sv': {'phrase': 'abc', 'key': '...'}}}, '', None
143)     ),
144)     VaultTestConfig(
145)         {
146)             'global': {'phrase': 'abc'},
147)             'services': {'sv': {'phrase': 'abc', 'length': 10}},
148)         },
149)         '',
150)         None,
151)     ),
152)     VaultTestConfig(
153)         {
154)             'global': {'key': '...'},
155)             'services': {'sv': {'phrase': 'abc', 'length': 10}},
156)         },
157)         '',
158)         None,
159)     ),
Marco Ricci Fix missing consideration o...

Marco Ricci authored 2 months ago

160)     VaultTestConfig(
161)         {
162)             'global': {'key': '...'},
163)             'services': {'sv': {'phrase': 'abc', 'key': '...', 'length': 10}},
164)         },
165)         '',
166)         None,
167)     ),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

168)     VaultTestConfig(
169)         {
170)             'global': {'key': '...'},
171)             'services': {
172)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
173)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
174)             },
175)         },
176)         '',
177)         None,
178)     ),
179)     VaultTestConfig(
180)         {
181)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
182)             'services': {
183)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
184)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
185)             },
186)         },
187)         '',
188)         None,
189)     ),
190)     VaultTestConfig(
191)         {
192)             'global': {'key': '...', 'unicode_normalization_form': True},
193)             'services': {},
194)         },
195)         'bad config value: global.unicode_normalization_form',
196)         None,
197)     ),
198)     VaultTestConfig(
199)         {
200)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
201)             'services': {
202)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
203)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
204)             },
205)         },
206)         '',
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 3 weeks ago

207)         ValidationSettings(True),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

208)     ),
209)     VaultTestConfig(
210)         {
211)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
212)             'services': {
213)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
214)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
215)             },
216)         },
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 3 weeks ago

217)         'extension/unknown key: .global.unicode_normalization_form',
218)         ValidationSettings(False),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

219)     ),
220)     VaultTestConfig(
221)         {
222)             'global': {'key': '...', 'unknown_key': True},
223)             'services': {
224)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
225)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
226)             },
227)         },
228)         '',
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 3 weeks ago

229)         ValidationSettings(True),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

230)     ),
231)     VaultTestConfig(
232)         {
233)             'global': {'key': '...', 'unknown_key': True},
234)             'services': {
235)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
236)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
237)             },
238)         },
239)         'unknown key: .global.unknown_key',
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 3 weeks ago

240)         ValidationSettings(False),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

241)     ),
242)     VaultTestConfig(
243)         {
244)             'global': {'key': '...'},
245)             'services': {
246)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
247)                 'sv2': {
248)                     'length': 10,
249)                     'repeat': 1,
250)                     'lower': 1,
251)                     'unknown_key': True,
252)                 },
253)             },
254)         },
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 3 weeks ago

255)         'unknown key: .services.sv2.unknown_key',
256)         ValidationSettings(False),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

257)     ),
258)     VaultTestConfig(
259)         {
260)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
261)             'services': {
262)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
263)                 'sv2': {
264)                     'length': 10,
265)                     'repeat': 1,
266)                     'lower': 1,
267)                     'unknown_key': True,
268)                 },
269)             },
270)         },
271)         '',
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 3 weeks ago

272)         ValidationSettings(True),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

273)     ),
274)     VaultTestConfig(
275)         {
276)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
277)             'services': {
278)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
279)                 'sv2': {
280)                     'length': 10,
281)                     'repeat': 1,
282)                     'lower': 1,
283)                     'unknown_key': True,
284)                 },
285)             },
286)         },
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 3 weeks ago

287)         '',
288)         ValidationSettings(True),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

289)     ),
290)     VaultTestConfig(
291)         {
292)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
293)             'services': {
294)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
295)                 'sv2': {
296)                     'length': 10,
297)                     'repeat': 1,
298)                     'lower': 1,
299)                     'unknown_key': True,
300)                 },
301)             },
302)         },
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 3 weeks ago

303)         '',
304)         ValidationSettings(True),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

305)     ),
306) ]
307) 
308) 
309) def is_valid_test_config(conf: VaultTestConfig, /) -> bool:
310)     """Return true if the test config is valid.
311) 
312)     Args:
313)         conf: The test config to check.
314) 
315)     """
316)     return not conf.comment and conf.validation_settings in {
317)         None,
318)         (True, True),
319)     }
320) 
321) 
322) def _test_config_ids(val: VaultTestConfig) -> Any:  # pragma: no cover
323)     """pytest id function for VaultTestConfig objects."""
324)     assert isinstance(val, VaultTestConfig)
325)     return val[1] or (val[0], val[1], val[2])
326) 
327) 
Marco Ricci Move vault service config g...

Marco Ricci authored 2 months ago

328) @strategies.composite
329) def vault_full_service_config(draw: strategies.DrawFn) -> dict[str, int]:
Marco Ricci Overhaul the state machine...

Marco Ricci authored 4 weeks ago

330)     repeat = draw(strategies.integers(min_value=0, max_value=10))
Marco Ricci Move vault service config g...

Marco Ricci authored 2 months ago

331)     lower = draw(strategies.integers(min_value=0, max_value=10))
332)     upper = draw(strategies.integers(min_value=0, max_value=10))
333)     number = draw(strategies.integers(min_value=0, max_value=10))
Marco Ricci Overhaul the state machine...

Marco Ricci authored 4 weeks ago

334)     space = draw(strategies.integers(min_value=0, max_value=repeat))
Marco Ricci Move vault service config g...

Marco Ricci authored 2 months ago

335)     dash = draw(strategies.integers(min_value=0, max_value=10))
336)     symbol = draw(strategies.integers(min_value=0, max_value=10))
337)     length = draw(
338)         strategies.integers(
339)             min_value=max(1, lower + upper + number + space + dash + symbol),
340)             max_value=70,
341)         )
342)     )
343)     hypothesis.assume(lower + upper + number + dash + symbol > 0)
344)     hypothesis.assume(lower + upper + number + space + symbol > 0)
345)     hypothesis.assume(repeat >= space)
346)     return {
347)         'lower': lower,
348)         'upper': upper,
349)         'number': number,
350)         'space': space,
351)         'dash': dash,
352)         'symbol': symbol,
353)         'repeat': repeat,
354)         'length': length,
355)     }
356) 
357) 
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

358) def is_smudgable_vault_test_config(conf: VaultTestConfig) -> bool:
359)     """Check whether this vault test config can be effectively smudged.
360) 
361)     A "smudged" test config is one where falsy values (in the JavaScript
362)     sense) can be replaced by other falsy values without changing the
363)     meaning of the config.
364) 
365)     Args:
366)         conf: A test config to check.
367) 
368)     Returns:
369)         True if the test config can be smudged, False otherwise.
370) 
371)     """
372)     config = conf.config
373)     return bool(
374)         isinstance(config, dict)
375)         and ('global' not in config or isinstance(config['global'], dict))
376)         and ('services' in config and isinstance(config['services'], dict))
377)         and all(isinstance(x, dict) for x in config['services'].values())
378)         and (config['services'] or config.get('global'))
379)     )
380) 
381) 
382) @strategies.composite
383) def smudged_vault_test_config(
384)     draw: strategies.DrawFn,
385)     config: Any = strategies.sampled_from(TEST_CONFIGS).filter(  # noqa: B008
386)         is_smudgable_vault_test_config
387)     ),
388) ) -> Any:
389)     """Hypothesis strategy to replace falsy values with other falsy values.
390) 
391)     Uses [`_types.js_truthiness`][] internally, which is tested
392)     separately by
393)     [`tests.test_derivepassphrase_types.test_100_js_truthiness`][].
394) 
395)     Args:
396)         draw:
397)             The hypothesis draw function.
398)         config:
399)             A strategy which generates [`VaultTestConfig`][] objects.
400) 
401)     Returns:
402)         A new [`VaultTestConfig`][] where some falsy values have been
403)         replaced or added.
404) 
405)     """
406) 
407)     falsy = (None, False, 0, 0.0, '', float('nan'))
408)     falsy_no_str = (None, False, 0, 0.0, float('nan'))
409)     falsy_no_zero = (None, False, '', float('nan'))
410)     conf = draw(config)
411)     hypothesis.assume(is_smudgable_vault_test_config(conf))
412)     obj = copy.deepcopy(conf.config)
413)     services: list[dict[str, Any]] = list(obj['services'].values())
414)     if 'global' in obj:
415)         services.append(obj['global'])
416)     assert all(isinstance(x, dict) for x in services), (
417)         'is_smudgable_vault_test_config guard failed to '
418)         'ensure each setings dict is a dict'
419)     )
420)     for service in services:
421)         for key in ('phrase',):
422)             value = service.get(key)
423)             if not _types.js_truthiness(value) and value != '':
424)                 service[key] = draw(strategies.sampled_from(falsy_no_str))
425)         for key in (
426)             'notes',
427)             'key',
428)             'length',
429)             'repeat',
430)         ):
431)             value = service.get(key)
432)             if not _types.js_truthiness(value):
433)                 service[key] = draw(strategies.sampled_from(falsy))
434)         for key in (
435)             'lower',
436)             'upper',
437)             'number',
438)             'space',
439)             'dash',
440)             'symbol',
441)         ):
442)             value = service.get(key)
443)             if not _types.js_truthiness(value) and value != 0:
444)                 service[key] = draw(strategies.sampled_from(falsy_no_zero))
445)     hypothesis.assume(obj != conf.config)
446)     return VaultTestConfig(obj, conf.comment, conf.validation_settings)
447) 
448) 
Marco Ricci Add test fixture for manual...

Marco Ricci authored 3 months ago

449) class KnownSSHAgent(str, enum.Enum):
450)     UNKNOWN: str = '(unknown)'
451)     Pageant: str = 'Pageant'
452)     OpenSSHAgent: str = 'OpenSSHAgent'
453) 
454) 
455) class SpawnedSSHAgentInfo(NamedTuple):
456)     agent_type: KnownSSHAgent
457)     client: ssh_agent.SSHAgentClient
458)     isolated: bool
459) 
460) 
Marco Ricci Let the `running_ssh_agent`...

Marco Ricci authored 1 month ago

461) class RunningSSHAgentInfo(NamedTuple):
462)     socket: str
463)     agent_type: KnownSSHAgent
464) 
465) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

466) SUPPORTED_KEYS: Mapping[str, SSHTestKey] = {
467)     'ed25519': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

468)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

469) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
470) QyNTUxOQAAACCBeIFoJtYCSF8P/zJIb+TBMIncHGpFBgnpCQ/7whJpdgAAAKDweO7H8Hju
471) xwAAAAtzc2gtZWQyNTUxOQAAACCBeIFoJtYCSF8P/zJIb+TBMIncHGpFBgnpCQ/7whJpdg
472) AAAEAbM/A869nkWZbe2tp3Dm/L6gitvmpH/aRZt8sBII3ExYF4gWgm1gJIXw//Mkhv5MEw
473) idwcakUGCekJD/vCEml2AAAAG3Rlc3Qga2V5IHdpdGhvdXQgcGFzc3BocmFzZQEC
474) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

475) """,
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

476)         'private_key_blob': bytes.fromhex("""
477)             00 00 00 0b 73 73 68 2d 65 64 32 35 35 31 39
478)             00 00 00 20
479)             81 78 81 68 26 d6 02 48 5f 0f ff 32 48 6f e4 c1
480)             30 89 dc 1c 6a 45 06 09 e9 09 0f fb c2 12 69 76
481)             00 00 00 40
482)             1b 33 f0 3c eb d9 e4 59 96 de da da 77 0e 6f cb
483)             ea 08 ad be 6a 47 fd a4 59 b7 cb 01 20 8d c4 c5
484)             81 78 81 68 26 d6 02 48 5f 0f ff 32 48 6f e4 c1
485)             30 89 dc 1c 6a 45 06 09 e9 09 0f fb c2 12 69 76
486)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69 74
487)             68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
488) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

489)         'public_key': rb"""ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIF4gWgm1gJIXw//Mkhv5MEwidwcakUGCekJD/vCEml2 test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 weeks ago

490) """,
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

491)         'public_key_data': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

492)             00 00 00 0b 73 73 68 2d 65 64 32 35 35 31 39
493)             00 00 00 20
494)             81 78 81 68 26 d6 02 48 5f 0f ff 32 48 6f e4 c1
495)             30 89 dc 1c 6a 45 06 09 e9 09 0f fb c2 12 69 76
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

496) """),
497)         'expected_signature': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

498)             00 00 00 0b 73 73 68 2d 65 64 32 35 35 31 39
499)             00 00 00 40
500)             f0 98 19 80 6c 1a 97 d5 26 03 6e cc e3 65 8f 86
501)             66 07 13 19 13 09 21 33 33 f9 e4 36 53 1d af fd
502)             0d 08 1f ec f8 73 9b 8c 5f 55 39 16 7c 53 54 2c
503)             1e 52 bb 30 ed 7f 89 e2 2f 69 51 55 d8 9e a6 02
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

504)         """),
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 weeks ago

505)         'derived_passphrase': rb'8JgZgGwal9UmA27M42WPhmYHExkTCSEzM/nkNlMdr/0NCB/s+HObjF9VORZ8U1QsHlK7MO1/ieIvaVFV2J6mAg==',
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

506)     },
507)     # Currently only supported by PuTTY (which is deficient in other
508)     # niceties of the SSH agent and the agent's client).
509)     'ed448': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

510)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

511) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAASgAAAAlz
512) c2gtZWQ0NDgAAAA54vZy009Wu8wExjvEb3hqtLz1GO/+d5vmGUbErWQ4AUO9mYLT
513) zHJHc2m4s+yWzP29Cc3EcxizLG8AAAAA8BdhfCcXYXwnAAAACXNzaC1lZDQ0OAAA
514) ADni9nLTT1a7zATGO8RveGq0vPUY7/53m+YZRsStZDgBQ72ZgtPMckdzabiz7JbM
515) /b0JzcRzGLMsbwAAAAByM7GIMRvWJB3YD6SIpAF2uudX4ozZe0X917wPwiBrs373
516) 9TM1n94Nib6hrxGNmCk2iBQDe2KALPgA4vZy009Wu8wExjvEb3hqtLz1GO/+d5vm
517) GUbErWQ4AUO9mYLTzHJHc2m4s+yWzP29Cc3EcxizLG8AAAAAG3Rlc3Qga2V5IHdp
518) dGhvdXQgcGFzc3BocmFzZQECAwQFBgcICQ==
519) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

520) """,
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

521)         'private_key_blob': bytes.fromhex("""
522)             00 00 00 09 73 73 68 2d 65 64 34 34 38
523)             00 00 00 39 e2 f6 72 d3 4f 56 bb cc 04
524)             c6 3b c4 6f 78 6a b4 bc f5 18 ef fe 77 9b e6 19
525)             46 c4 ad 64 38 01 43 bd 99 82 d3 cc 72 47 73 69
526)             b8 b3 ec 96 cc fd bd 09 cd c4 73 18 b3 2c 6f 00
527)             00 00 00 72 33 b1
528)             88 31 1b d6 24 1d d8 0f a4 88 a4 01 76 ba e7 57
529)             e2 8c d9 7b 45 fd d7 bc 0f c2 20 6b b3 7e f7 f5
530)             33 35 9f de 0d 89 be a1 af 11 8d 98 29 36 88 14
531)             03 7b 62 80 2c f8 00 e2 f6 72 d3 4f 56 bb cc 04
532)             c6 3b c4 6f 78 6a b4 bc f5 18 ef fe 77 9b e6 19
533)             46 c4 ad 64 38 01 43 bd 99 82 d3 cc 72 47 73 69
534)             b8 b3 ec 96 cc fd bd 09 cd c4 73 18 b3 2c 6f 00
535)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
536)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
537) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

538)         'public_key': rb"""ssh-ed448 AAAACXNzaC1lZDQ0OAAAADni9nLTT1a7zATGO8RveGq0vPUY7/53m+YZRsStZDgBQ72ZgtPMckdzabiz7JbM/b0JzcRzGLMsbwA= test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 weeks ago

539) """,
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

540)         'public_key_data': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

541)             00 00 00 09 73 73 68 2d 65 64 34 34 38
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

542)             00 00 00 39 e2 f6 72 d3 4f 56 bb cc 04
543)             c6 3b c4 6f 78 6a b4 bc f5 18 ef fe 77 9b e6 19
544)             46 c4 ad 64 38 01 43 bd 99 82 d3 cc 72 47 73 69
545)             b8 b3 ec 96 cc fd bd 09 cd c4 73 18 b3 2c 6f 00
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

546)         """),
547)         'expected_signature': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

548)             00 00 00 09 73 73 68 2d 65 64 34 34 38
549)             00 00 00 72 06 86
550)             f4 64 a4 a6 ba d9 c3 22 c4 93 49 99 fc 11 de 67
551)             97 08 f2 d8 b7 3c 2c 13 e7 c5 1c 1e 92 a6 0e d8
552)             2f 6d 81 03 82 00 e3 72 e4 32 6d 72 d2 6d 32 84
553)             3f cc a9 1e 57 2c 00 9a b3 99 de 45 da ce 2e d1
554)             db e5 89 f3 35 be 24 58 90 c6 ca 04 f0 db 88 80
555)             db bd 77 7c 80 20 7f 3a 48 61 f6 1f ae a9 5e 53
556)             7b e0 9d 93 1e ea dc eb b5 cd 56 4c ea 8f 08 00
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

557)         """),
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 weeks ago

558)         'derived_passphrase': rb'Bob0ZKSmutnDIsSTSZn8Ed5nlwjy2Lc8LBPnxRwekqYO2C9tgQOCAONy5DJtctJtMoQ/zKkeVywAmrOZ3kXazi7R2+WJ8zW+JFiQxsoE8NuIgNu9d3yAIH86SGH2H66pXlN74J2THurc67XNVkzqjwgA',
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

559)     },
560)     'rsa': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

561)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

562) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
563) NhAAAAAwEAAQAAAYEAsaHu6Xs4cVsuDSNJlMCqoPVgmDgEviI8TfXmHKqX3JkIqI3LsvV7
564) Ijf8WCdTveEq7CkuZhImtsR52AOEVAoU8mDXDNr+nJ5wUPzf1UIaRjDe0lcXW4SlF01hQs
565) G4wYDuqxshwelraB/L3e0zhD7fjYHF8IbFsqGlFHWEwOtlfhhfbxJsTGguLm4A8/gdEJD5
566) 2rkqDcZpIXCHtJbCzW9aQpWcs/PDw5ylwl/3dB7jfxyfrGz4O3QrzsqhWEsip97mOmwl6q
567) CHbq8V8x9zu89D/H+bG5ijqxhijbjcVUW3lZfw/97gy9J6rG31HNar5H8GycLTFwuCFepD
568) mTEpNgQLKoe8ePIEPq4WHhFUovBdwlrOByUKKqxreyvWt5gkpTARz+9Lt8OjBO3rpqK8sZ
569) VKH3sE3de2RJM3V9PJdmZSs2b8EFK3PsUGdlMPM9pn1uk4uIItKWBmooOynuD8Ll6aPwuW
570) AFn3l8nLLyWdrmmEYzHWXiRjQJxy1Bi5AbHMOWiPAAAFkDPkuBkz5LgZAAAAB3NzaC1yc2
571) EAAAGBALGh7ul7OHFbLg0jSZTAqqD1YJg4BL4iPE315hyql9yZCKiNy7L1eyI3/FgnU73h
572) KuwpLmYSJrbEedgDhFQKFPJg1wza/pyecFD839VCGkYw3tJXF1uEpRdNYULBuMGA7qsbIc
573) Hpa2gfy93tM4Q+342BxfCGxbKhpRR1hMDrZX4YX28SbExoLi5uAPP4HRCQ+dq5Kg3GaSFw
574) h7SWws1vWkKVnLPzw8OcpcJf93Qe438cn6xs+Dt0K87KoVhLIqfe5jpsJeqgh26vFfMfc7
575) vPQ/x/mxuYo6sYYo243FVFt5WX8P/e4MvSeqxt9RzWq+R/BsnC0xcLghXqQ5kxKTYECyqH
576) vHjyBD6uFh4RVKLwXcJazgclCiqsa3sr1reYJKUwEc/vS7fDowTt66aivLGVSh97BN3Xtk
577) STN1fTyXZmUrNm/BBStz7FBnZTDzPaZ9bpOLiCLSlgZqKDsp7g/C5emj8LlgBZ95fJyy8l
578) na5phGMx1l4kY0CcctQYuQGxzDlojwAAAAMBAAEAAAF/cNVYT+Om4x9+SItcz5bOByGIOj
579) yWUH8f9rRjnr5ILuwabIDgvFaVG+xM1O1hWADqzMnSEcknHRkTYEsqYPykAtxFvjOFEh70
580) 6qRUJ+fVZkqRGEaI3oWyWKTOhcCIYImtONvb0LOv/HQ2H2AXCoeqjST1qr/xSuljBtcB8u
581) wxs3EqaO1yU7QoZpDcMX9plH7Rmc9nNfZcgrnktPk2deX2+Y/A5tzdVgG1IeqYp6CBMLNM
582) uhL0OPdDehgBoDujx+rhkZ1gpo1wcULIM94NL7VSHBPX0Lgh9T+3j1HVP+YnMAvhfOvfct
583) LlbJ06+TYGRAMuF2LPCAZM/m0FEyAurRgWxAjLXm+4kp2GAJXlw82deDkQ+P8cHNT6s9ZH
584) R5YSy3lpZ35594ZMOLR8KqVvhgJGF6i9019BiF91SDxjE+sp6dNGfN8W+64tHdDv2a0Mso
585) +8Qjyx7sTpi++EjLU8Iy73/e4B8qbXMyheyA/UUfgMtNKShh6sLlrD9h2Sm9RFTuEAAADA
586) Jh3u7WfnjhhKZYbAW4TsPNXDMrB0/t7xyAQgFmko7JfESyrJSLg1cO+QMOiDgD7zuQ9RSp
587) NIKdPsnIna5peh979mVjb2HgnikjyJECmBpLdwZKhX7MnIvgKw5lnQXHboEtWCa1N58l7f
588) srzwbi9pFUuUp9dShXNffmlUCjDRsVLbK5C6+iaIQyCWFYK8mc6dpNkIoPKf+Xg+EJCIFQ
589) oITqeu30Gc1+M+fdZc2ghq0b6XLthh/uHEry8b68M5KglMAAAAwQDw1i+IdcvPV/3u/q9O
590) /kzLpKO3tbT89sc1zhjZsDNjDAGluNr6n38iq/XYRZu7UTL9BG+EgFVfIUV7XsYT5e+BPf
591) 13VS94rzZ7maCsOlULX+VdMO2zBucHIoec9RUlRZrfB21B2W7YGMhbpoa5lN3lKJQ7afHo
592) dXZUMp0cTFbOmbzJgSzO2/NE7BhVwmvcUzTDJGMMKuxBO6w99YKDKRKm0PNLFDz26rWm9L
593) dNS2MVfVuPMTpzT26HQG4pFageq9cAAADBALzRBXdZF8kbSBa5MTUBVTTzgKQm1C772gJ8
594) T01DJEXZsVtOv7mUC1/m/by6Hk4tPyvDBuGj9hHq4N7dPqGutHb1q5n0ADuoQjRW7BXw5Q
595) vC2EAD91xexdorIA5BgXU+qltBqzzBVzVtF7+jOZOjfzOlaTX9I5I5veyeTaTxZj1XXUzi
596) btBNdMEJJp7ifucYmoYAAwE7K+VlWagDEK2y8Mte9y9E+N0uO2j+h85sQt/UIb2iE/vhcg
597) Bgp6142WnSCQAAABt0ZXN0IGtleSB3aXRob3V0IHBhc3NwaHJhc2UB
598) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

599) """,
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

600)         'private_key_blob': bytes.fromhex("""
601)             00 00 00 07 73 73 68 2d 72 73 61
602)             00 00 01 81 00
603)             b1 a1 ee e9 7b 38 71 5b 2e 0d 23 49 94 c0 aa a0
604)             f5 60 98 38 04 be 22 3c 4d f5 e6 1c aa 97 dc 99
605)             08 a8 8d cb b2 f5 7b 22 37 fc 58 27 53 bd e1 2a
606)             ec 29 2e 66 12 26 b6 c4 79 d8 03 84 54 0a 14 f2
607)             60 d7 0c da fe 9c 9e 70 50 fc df d5 42 1a 46 30
608)             de d2 57 17 5b 84 a5 17 4d 61 42 c1 b8 c1 80 ee
609)             ab 1b 21 c1 e9 6b 68 1f cb dd ed 33 84 3e df 8d
610)             81 c5 f0 86 c5 b2 a1 a5 14 75 84 c0 eb 65 7e 18
611)             5f 6f 12 6c 4c 68 2e 2e 6e 00 f3 f8 1d 10 90 f9
612)             da b9 2a 0d c6 69 21 70 87 b4 96 c2 cd 6f 5a 42
613)             95 9c b3 f3 c3 c3 9c a5 c2 5f f7 74 1e e3 7f 1c
614)             9f ac 6c f8 3b 74 2b ce ca a1 58 4b 22 a7 de e6
615)             3a 6c 25 ea a0 87 6e af 15 f3 1f 73 bb cf 43 fc
616)             7f 9b 1b 98 a3 ab 18 62 8d b8 dc 55 45 b7 95 97
617)             f0 ff de e0 cb d2 7a ac 6d f5 1c d6 ab e4 7f 06
618)             c9 c2 d3 17 0b 82 15 ea 43 99 31 29 36 04 0b 2a
619)             87 bc 78 f2 04 3e ae 16 1e 11 54 a2 f0 5d c2 5a
620)             ce 07 25 0a 2a ac 6b 7b 2b d6 b7 98 24 a5 30 11
621)             cf ef 4b b7 c3 a3 04 ed eb a6 a2 bc b1 95 4a 1f
622)             7b 04 dd d7 b6 44 93 37 57 d3 c9 76 66 52 b3 66
623)             fc 10 52 b7 3e c5 06 76 53 0f 33 da 67 d6 e9 38
624)             b8 82 2d 29 60 66 a2 83 b2 9e e0 fc 2e 5e 9a 3f
625)             0b 96 00 59 f7 97 c9 cb 2f 25 9d ae 69 84 63 31
626)             d6 5e 24 63 40 9c 72 d4 18 b9 01 b1 cc 39 68 8f
627)             00 00 00 03 01 00 01
628)             00 00 01 7f
629)             70 d5 58 4f e3 a6 e3 1f 7e 48 8b 5c cf 96 ce
630)             07 21 88 3a 3c 96 50 7f 1f f6 b4 63 9e be 48 2e
631)             ec 1a 6c 80 e0 bc 56 95 1b ec 4c d4 ed 61 58 00
632)             ea cc c9 d2 11 c9 27 1d 19 13 60 4b 2a 60 fc a4
633)             02 dc 45 be 33 85 12 1e f4 ea a4 54 27 e7 d5 66
634)             4a 91 18 46 88 de 85 b2 58 a4 ce 85 c0 88 60 89
635)             ad 38 db db d0 b3 af fc 74 36 1f 60 17 0a 87 aa
636)             8d 24 f5 aa bf f1 4a e9 63 06 d7 01 f2 ec 31 b3
637)             71 2a 68 ed 72 53 b4 28 66 90 dc 31 7f 69 94 7e
638)             d1 99 cf 67 35 f6 5c 82 b9 e4 b4 f9 36 75 e5 f6
639)             f9 8f c0 e6 dc dd 56 01 b5 21 ea 98 a7 a0 81 30
640)             b3 4c ba 12 f4 38 f7 43 7a 18 01 a0 3b a3 c7 ea
641)             e1 91 9d 60 a6 8d 70 71 42 c8 33 de 0d 2f b5 52
642)             1c 13 d7 d0 b8 21 f5 3f b7 8f 51 d5 3f e6 27 30
643)             0b e1 7c eb df 72 d2 e5 6c 9d 3a f9 36 06 44 03
644)             2e 17 62 cf 08 06 4c fe 6d 05 13 20 2e ad 18 16
645)             c4 08 cb 5e 6f b8 92 9d 86 00 95 e5 c3 cd 9d 78
646)             39 10 f8 ff 1c 1c d4 fa b3 d6 47 47 96 12 cb 79
647)             69 67 7e 79 f7 86 4c 38 b4 7c 2a a5 6f 86 02 46
648)             17 a8 bd d3 5f 41 88 5f 75 48 3c 63 13 eb 29 e9
649)             d3 46 7c df 16 fb ae 2d 1d d0 ef d9 ad 0c b2 8f
650)             bc 42 3c b1 ee c4 e9 8b ef 84 8c b5 3c 23 2e f7
651)             fd ee 01 f2 a6 d7 33 28 5e c8 0f d4 51 f8 0c b4
652)             d2 92 86 1e ac 2e 5a c3 f6 1d 92 9b d4 45 4e e1
653)             00 00 00 c0
654)             26 1d ee ed 67 e7 8e 18 4a 65 86 c0 5b 84 ec 3c
655)             d5 c3 32 b0 74 fe de f1 c8 04 20 16 69 28 ec 97
656)             c4 4b 2a c9 48 b8 35 70 ef 90 30 e8 83 80 3e f3
657)             b9 0f 51 4a 93 48 29 d3 ec 9c 89 da e6 97 a1 f7
658)             bf 66 56 36 f6 1e 09 e2 92 3c 89 10 29 81 a4 b7
659)             70 64 a8 57 ec c9 c8 be 02 b0 e6 59 d0 5c 76 e8
660)             12 d5 82 6b 53 79 f2 5e df b2 bc f0 6e 2f 69 15
661)             4b 94 a7 d7 52 85 73 5f 7e 69 54 0a 30 d1 b1 52
662)             db 2b 90 ba fa 26 88 43 20 96 15 82 bc 99 ce 9d
663)             a4 d9 08 a0 f2 9f f9 78 3e 10 90 88 15 0a 08 4e
664)             a7 ae df 41 9c d7 e3 3e 7d d6 5c da 08 6a d1 be
665)             97 2e d8 61 fe e1 c4 af 2f 1b eb c3 39 2a 09 4c
666)             00 00 00 c1 00
667)             f0 d6 2f 88 75 cb cf 57 fd ee fe af 4e fe 4c cb
668)             a4 a3 b7 b5 b4 fc f6 c7 35 ce 18 d9 b0 33 63 0c
669)             01 a5 b8 da fa 9f 7f 22 ab f5 d8 45 9b bb 51 32
670)             fd 04 6f 84 80 55 5f 21 45 7b 5e c6 13 e5 ef 81
671)             3d fd 77 55 2f 78 af 36 7b 99 a0 ac 3a 55 0b 5f
672)             e5 5d 30 ed b3 06 e7 07 22 87 9c f5 15 25 45 9a
673)             df 07 6d 41 d9 6e d8 18 c8 5b a6 86 b9 94 dd e5
674)             28 94 3b 69 f1 e8 75 76 54 32 9d 1c 4c 56 ce 99
675)             bc c9 81 2c ce db f3 44 ec 18 55 c2 6b dc 53 34
676)             c3 24 63 0c 2a ec 41 3b ac 3d f5 82 83 29 12 a6
677)             d0 f3 4b 14 3c f6 ea b5 a6 f4 b7 4d 4b 63 15 7d
678)             5b 8f 31 3a 73 4f 6e 87 40 6e 29 15 a8 1e ab d7
679)             00 00 00 c1 00
680)             bc d1 05 77 59 17 c9 1b 48 16 b9 31 35 01 55 34
681)             f3 80 a4 26 d4 2e fb da 02 7c 4f 4d 43 24 45 d9
682)             b1 5b 4e bf b9 94 0b 5f e6 fd bc ba 1e 4e 2d 3f
683)             2b c3 06 e1 a3 f6 11 ea e0 de dd 3e a1 ae b4 76
684)             f5 ab 99 f4 00 3b a8 42 34 56 ec 15 f0 e5 0b c2
685)             d8 40 03 f7 5c 5e c5 da 2b 20 0e 41 81 75 3e aa
686)             5b 41 ab 3c c1 57 35 6d 17 bf a3 39 93 a3 7f 33
687)             a5 69 35 fd 23 92 39 bd ec 9e 4d a4 f1 66 3d 57
688)             5d 4c e2 6e d0 4d 74 c1 09 26 9e e2 7e e7 18 9a
689)             86 00 03 01 3b 2b e5 65 59 a8 03 10 ad b2 f0 cb
690)             5e f7 2f 44 f8 dd 2e 3b 68 fe 87 ce 6c 42 df d4
691)             21 bd a2 13 fb e1 72 00 60 a7 ad 78 d9 69 d2 09
692)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
693)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
694) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

695)         'public_key': rb"""ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCxoe7pezhxWy4NI0mUwKqg9WCYOAS+IjxN9eYcqpfcmQiojcuy9XsiN/xYJ1O94SrsKS5mEia2xHnYA4RUChTyYNcM2v6cnnBQ/N/VQhpGMN7SVxdbhKUXTWFCwbjBgO6rGyHB6WtoH8vd7TOEPt+NgcXwhsWyoaUUdYTA62V+GF9vEmxMaC4ubgDz+B0QkPnauSoNxmkhcIe0lsLNb1pClZyz88PDnKXCX/d0HuN/HJ+sbPg7dCvOyqFYSyKn3uY6bCXqoIdurxXzH3O7z0P8f5sbmKOrGGKNuNxVRbeVl/D/3uDL0nqsbfUc1qvkfwbJwtMXC4IV6kOZMSk2BAsqh7x48gQ+rhYeEVSi8F3CWs4HJQoqrGt7K9a3mCSlMBHP70u3w6ME7eumoryxlUofewTd17ZEkzdX08l2ZlKzZvwQUrc+xQZ2Uw8z2mfW6Ti4gi0pYGaig7Ke4PwuXpo/C5YAWfeXycsvJZ2uaYRjMdZeJGNAnHLUGLkBscw5aI8= test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 weeks ago

696) """,
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

697)         'public_key_data': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

698)             00 00 00 07 73 73 68 2d 72 73 61
699)             00 00 00 03 01 00 01
700)             00 00 01 81 00
701)             b1 a1 ee e9 7b 38 71 5b 2e 0d 23 49 94 c0 aa a0
702)             f5 60 98 38 04 be 22 3c 4d f5 e6 1c aa 97 dc 99
703)             08 a8 8d cb b2 f5 7b 22 37 fc 58 27 53 bd e1 2a
704)             ec 29 2e 66 12 26 b6 c4 79 d8 03 84 54 0a 14 f2
705)             60 d7 0c da fe 9c 9e 70 50 fc df d5 42 1a 46 30
706)             de d2 57 17 5b 84 a5 17 4d 61 42 c1 b8 c1 80 ee
707)             ab 1b 21 c1 e9 6b 68 1f cb dd ed 33 84 3e df 8d
708)             81 c5 f0 86 c5 b2 a1 a5 14 75 84 c0 eb 65 7e 18
709)             5f 6f 12 6c 4c 68 2e 2e 6e 00 f3 f8 1d 10 90 f9
710)             da b9 2a 0d c6 69 21 70 87 b4 96 c2 cd 6f 5a 42
711)             95 9c b3 f3 c3 c3 9c a5 c2 5f f7 74 1e e3 7f 1c
712)             9f ac 6c f8 3b 74 2b ce ca a1 58 4b 22 a7 de e6
713)             3a 6c 25 ea a0 87 6e af 15 f3 1f 73 bb cf 43 fc
714)             7f 9b 1b 98 a3 ab 18 62 8d b8 dc 55 45 b7 95 97
715)             f0 ff de e0 cb d2 7a ac 6d f5 1c d6 ab e4 7f 06
716)             c9 c2 d3 17 0b 82 15 ea 43 99 31 29 36 04 0b 2a
717)             87 bc 78 f2 04 3e ae 16 1e 11 54 a2 f0 5d c2 5a
718)             ce 07 25 0a 2a ac 6b 7b 2b d6 b7 98 24 a5 30 11
719)             cf ef 4b b7 c3 a3 04 ed eb a6 a2 bc b1 95 4a 1f
720)             7b 04 dd d7 b6 44 93 37 57 d3 c9 76 66 52 b3 66
721)             fc 10 52 b7 3e c5 06 76 53 0f 33 da 67 d6 e9 38
722)             b8 82 2d 29 60 66 a2 83 b2 9e e0 fc 2e 5e 9a 3f
723)             0b 96 00 59 f7 97 c9 cb 2f 25 9d ae 69 84 63 31
724)             d6 5e 24 63 40 9c 72 d4 18 b9 01 b1 cc 39 68 8f
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

725) """),
726)         'expected_signature': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

727)             00 00 00 07 73 73 68 2d 72 73 61
728)             00 00 01 80
729)             a2 10 7c 2e f6 bb 53 a8 74 2a a1 19 99 ad 81 be
730)             79 9c ed d6 9d 09 4e 6e c5 18 48 33 90 77 99 68
731)             f7 9e 03 5a cd 4e 18 eb 89 7d 85 a2 ee ae 4a 92
732)             f6 6f ce b9 fe 86 7f 2a 6b 31 da 6e 1a fe a2 a5
733)             88 b8 44 7f a1 76 73 b3 ec 75 b5 d0 a6 b9 15 97
734)             65 09 13 7d 94 21 d1 fb 5d 0f 8b 23 04 77 c2 c3
735)             55 22 b1 a0 09 8a f5 38 2a d6 7f 1b 87 29 a0 25
736)             d3 25 6f cb 64 61 07 98 dc 14 c5 84 f8 92 24 5e
737)             50 11 6b 49 e5 f0 cc 29 cb 29 a9 19 d8 a7 71 1f
738)             91 0b 05 b1 01 4b c2 5f 00 a5 b6 21 bf f8 2c 9d
739)             67 9b 47 3b 0a 49 6b 79 2d fc 1d ec 0c b0 e5 27
740)             22 d5 a9 f8 d3 c3 f9 df 48 68 e9 fb ef 3c dc 26
741)             bf cf ea 29 43 01 a6 e3 c5 51 95 f4 66 6d 8a 55
742)             e2 47 ec e8 30 45 4c ae 47 e7 c9 a4 21 8b 64 ba
743)             b6 88 f6 21 f8 73 b9 cb 11 a1 78 75 92 c6 5a e5
744)             64 fe ed 42 d9 95 99 e6 2b 6f 3c 16 3c 28 74 a4
745)             72 2f 0d 3f 2c 33 67 aa 35 19 8e e7 b5 11 2f b3
746)             f7 6a c5 02 e2 6f a3 42 e3 62 19 99 03 ea a5 20
747)             e7 a1 e3 bc c8 06 a3 b5 7c d6 76 5d df 6f 60 46
748)             83 2a 08 00 d6 d3 d9 a4 c1 41 8c f8 60 56 45 81
749)             da 3b a2 16 1f 9e 4e 75 83 17 da c3 53 c3 3e 19
750)             a4 1b bc d2 29 b8 78 61 2b 78 e6 b1 52 b0 d5 ec
751)             de 69 2c 48 62 d9 fd d1 9b 6b b0 49 db d3 ff 38
752)             e7 10 d9 2d ce 9f 0d 5e 09 7b 37 d2 7b c3 bf ce
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

753) """),
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 weeks ago

754)         'derived_passphrase': rb'ohB8Lva7U6h0KqEZma2Bvnmc7dadCU5uxRhIM5B3mWj3ngNazU4Y64l9haLurkqS9m/Ouf6GfyprMdpuGv6ipYi4RH+hdnOz7HW10Ka5FZdlCRN9lCHR+10PiyMEd8LDVSKxoAmK9Tgq1n8bhymgJdMlb8tkYQeY3BTFhPiSJF5QEWtJ5fDMKcspqRnYp3EfkQsFsQFLwl8ApbYhv/gsnWebRzsKSWt5Lfwd7Ayw5Sci1an408P530ho6fvvPNwmv8/qKUMBpuPFUZX0Zm2KVeJH7OgwRUyuR+fJpCGLZLq2iPYh+HO5yxGheHWSxlrlZP7tQtmVmeYrbzwWPCh0pHIvDT8sM2eqNRmO57URL7P3asUC4m+jQuNiGZkD6qUg56HjvMgGo7V81nZd329gRoMqCADW09mkwUGM+GBWRYHaO6IWH55OdYMX2sNTwz4ZpBu80im4eGEreOaxUrDV7N5pLEhi2f3Rm2uwSdvT/zjnENktzp8NXgl7N9J7w7/O',
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

755)     },
756) }
757) 
758) UNSUITABLE_KEYS: Mapping[str, SSHTestKey] = {
759)     'dsa1024': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

760)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

761) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsQAAAAdzc2gtZH
762) NzAAAAgQC7KAZXqBGNVLBQPrcMYAoNW54BhD8aIhe7BDWYzJcsaMt72VKSkguZ8+XR7nRa
763) 0C/ZsBi+uJp0dpxy9ZMTOWX4u5YPMeQcXEdGExZIfimGqSOAsy6fCld2IfJZJZExcCmhe9
764) Ssjsd3YSAPJRluOXFQc95MZoR5hMwlIDD8QzrE7QAAABUA99nOZOgd7aHMVGoXpUEBcn7H
765) ossAAACALr2Ag3hxM3rKdxzVUw8fX0VVPXO+3+Kr8hGe0Kc/7NwVaBVL1GQ8fenBuWynpA
766) UbH0wo3h1wkB/8hX6p+S8cnu5rIBlUuVNwLw/bIYohK98LfqTYK/V+g6KD+8m34wvEiXZm
767) qywY54n2bksch1Nqvj/tNpLzExSx/XS0kSM1aigAAACAbQNRPcVEuGDrEcf+xg5tgAejPX
768) BPXr/Jss+Chk64km3mirMYjAWyWYtVcgT+7hOYxtYRin8LyMLqKRmqa0Q5UrvDfChgLhvs
769) G9YSb/Mpw5qm8PiHSafwhkaz/te3+8hKogqoe7sd+tCF06IpJr5k70ACiNtRGqssNF8Elr
770) l1efYAAAH4swlfVrMJX1YAAAAHc3NoLWRzcwAAAIEAuygGV6gRjVSwUD63DGAKDVueAYQ/
771) GiIXuwQ1mMyXLGjLe9lSkpILmfPl0e50WtAv2bAYvriadHaccvWTEzll+LuWDzHkHFxHRh
772) MWSH4phqkjgLMunwpXdiHyWSWRMXApoXvUrI7Hd2EgDyUZbjlxUHPeTGaEeYTMJSAw/EM6
773) xO0AAAAVAPfZzmToHe2hzFRqF6VBAXJ+x6LLAAAAgC69gIN4cTN6yncc1VMPH19FVT1zvt
774) /iq/IRntCnP+zcFWgVS9RkPH3pwblsp6QFGx9MKN4dcJAf/IV+qfkvHJ7uayAZVLlTcC8P
775) 2yGKISvfC36k2Cv1foOig/vJt+MLxIl2ZqssGOeJ9m5LHIdTar4/7TaS8xMUsf10tJEjNW
776) ooAAAAgG0DUT3FRLhg6xHH/sYObYAHoz1wT16/ybLPgoZOuJJt5oqzGIwFslmLVXIE/u4T
777) mMbWEYp/C8jC6ikZqmtEOVK7w3woYC4b7BvWEm/zKcOapvD4h0mn8IZGs/7Xt/vISqIKqH
778) u7HfrQhdOiKSa+ZO9AAojbURqrLDRfBJa5dXn2AAAAFQDJHfenj4EJ9WkehpdJatPBlqCW
779) 0gAAABt0ZXN0IGtleSB3aXRob3V0IHBhc3NwaHJhc2UBAgMEBQYH
780) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

781) """,
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

782)         'private_key_blob': bytes.fromhex("""
783)             00 00 00 07 73 73 68 2d 64 73 73
784)             00 00 00 81 00
785)             bb 28 06 57 a8 11 8d 54 b0 50 3e b7 0c 60 0a 0d
786)             5b 9e 01 84 3f 1a 22 17 bb 04 35 98 cc 97 2c 68
787)             cb 7b d9 52 92 92 0b 99 f3 e5 d1 ee 74 5a d0 2f
788)             d9 b0 18 be b8 9a 74 76 9c 72 f5 93 13 39 65 f8
789)             bb 96 0f 31 e4 1c 5c 47 46 13 16 48 7e 29 86 a9
790)             23 80 b3 2e 9f 0a 57 76 21 f2 59 25 91 31 70 29
791)             a1 7b d4 ac 8e c7 77 61 20 0f 25 19 6e 39 71 50
792)             73 de 4c 66 84 79 84 cc 25 20 30 fc 43 3a c4 ed
793)             00 00 00 15 00 f7 d9 ce 64
794)             e8 1d ed a1 cc 54 6a 17 a5 41 01 72 7e c7 a2 cb
795)             00 00 00 80
796)             2e bd 80 83 78 71 33 7a ca 77 1c d5 53 0f 1f 5f
797)             45 55 3d 73 be df e2 ab f2 11 9e d0 a7 3f ec dc
798)             15 68 15 4b d4 64 3c 7d e9 c1 b9 6c a7 a4 05 1b
799)             1f 4c 28 de 1d 70 90 1f fc 85 7e a9 f9 2f 1c 9e
800)             ee 6b 20 19 54 b9 53 70 2f 0f db 21 8a 21 2b df
801)             0b 7e a4 d8 2b f5 7e 83 a2 83 fb c9 b7 e3 0b c4
802)             89 76 66 ab 2c 18 e7 89 f6 6e 4b 1c 87 53 6a be
803)             3f ed 36 92 f3 13 14 b1 fd 74 b4 91 23 35 6a 28
804)             00 00 00 80
805)             6d 03 51 3d c5 44 b8 60 eb 11 c7 fe c6 0e 6d 80
806)             07 a3 3d 70 4f 5e bf c9 b2 cf 82 86 4e b8 92 6d
807)             e6 8a b3 18 8c 05 b2 59 8b 55 72 04 fe ee 13 98
808)             c6 d6 11 8a 7f 0b c8 c2 ea 29 19 aa 6b 44 39 52
809)             bb c3 7c 28 60 2e 1b ec 1b d6 12 6f f3 29 c3 9a
810)             a6 f0 f8 87 49 a7 f0 86 46 b3 fe d7 b7 fb c8 4a
811)             a2 0a a8 7b bb 1d fa d0 85 d3 a2 29 26 be 64 ef
812)             40 02 88 db 51 1a ab 2c 34 5f 04 96 b9 75 79 f6
813)             00 00 00 15 00 c9 1d f7 a7
814)             8f 81 09 f5 69 1e 86 97 49 6a d3 c1 96 a0 96 d2
815)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
816)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
817) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

818)         'public_key': rb"""ssh-dss AAAAB3NzaC1kc3MAAACBALsoBleoEY1UsFA+twxgCg1bngGEPxoiF7sENZjMlyxoy3vZUpKSC5nz5dHudFrQL9mwGL64mnR2nHL1kxM5Zfi7lg8x5BxcR0YTFkh+KYapI4CzLp8KV3Yh8lklkTFwKaF71KyOx3dhIA8lGW45cVBz3kxmhHmEzCUgMPxDOsTtAAAAFQD32c5k6B3tocxUahelQQFyfseiywAAAIAuvYCDeHEzesp3HNVTDx9fRVU9c77f4qvyEZ7Qpz/s3BVoFUvUZDx96cG5bKekBRsfTCjeHXCQH/yFfqn5Lxye7msgGVS5U3AvD9shiiEr3wt+pNgr9X6DooP7ybfjC8SJdmarLBjnifZuSxyHU2q+P+02kvMTFLH9dLSRIzVqKAAAAIBtA1E9xUS4YOsRx/7GDm2AB6M9cE9ev8myz4KGTriSbeaKsxiMBbJZi1VyBP7uE5jG1hGKfwvIwuopGaprRDlSu8N8KGAuG+wb1hJv8ynDmqbw+IdJp/CGRrP+17f7yEqiCqh7ux360IXToikmvmTvQAKI21Eaqyw0XwSWuXV59g== test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 weeks ago

819) """,
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

820)         'public_key_data': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

821)             00 00 00 07 73 73 68 2d 64 73 73
822)             00 00 00 81 00
823)             bb 28 06 57 a8 11 8d 54 b0 50 3e b7 0c 60 0a 0d
824)             5b 9e 01 84 3f 1a 22 17 bb 04 35 98 cc 97 2c 68
825)             cb 7b d9 52 92 92 0b 99 f3 e5 d1 ee 74 5a d0 2f
826)             d9 b0 18 be b8 9a 74 76 9c 72 f5 93 13 39 65 f8
827)             bb 96 0f 31 e4 1c 5c 47 46 13 16 48 7e 29 86 a9
828)             23 80 b3 2e 9f 0a 57 76 21 f2 59 25 91 31 70 29
829)             a1 7b d4 ac 8e c7 77 61 20 0f 25 19 6e 39 71 50
830)             73 de 4c 66 84 79 84 cc 25 20 30 fc 43 3a c4 ed
831)             00 00 00 15 00 f7 d9 ce 64
832)             e8 1d ed a1 cc 54 6a 17 a5 41 01 72 7e c7 a2 cb
833)             00 00 00 80
834)             2e bd 80 83 78 71 33 7a ca 77 1c d5 53 0f 1f 5f
835)             45 55 3d 73 be df e2 ab f2 11 9e d0 a7 3f ec dc
836)             15 68 15 4b d4 64 3c 7d e9 c1 b9 6c a7 a4 05 1b
837)             1f 4c 28 de 1d 70 90 1f fc 85 7e a9 f9 2f 1c 9e
838)             ee 6b 20 19 54 b9 53 70 2f 0f db 21 8a 21 2b df
839)             0b 7e a4 d8 2b f5 7e 83 a2 83 fb c9 b7 e3 0b c4
840)             89 76 66 ab 2c 18 e7 89 f6 6e 4b 1c 87 53 6a be
841)             3f ed 36 92 f3 13 14 b1 fd 74 b4 91 23 35 6a 28
842)             00 00 00 80
843)             6d 03 51 3d c5 44 b8 60 eb 11 c7 fe c6 0e 6d 80
844)             07 a3 3d 70 4f 5e bf c9 b2 cf 82 86 4e b8 92 6d
845)             e6 8a b3 18 8c 05 b2 59 8b 55 72 04 fe ee 13 98
846)             c6 d6 11 8a 7f 0b c8 c2 ea 29 19 aa 6b 44 39 52
847)             bb c3 7c 28 60 2e 1b ec 1b d6 12 6f f3 29 c3 9a
848)             a6 f0 f8 87 49 a7 f0 86 46 b3 fe d7 b7 fb c8 4a
849)             a2 0a a8 7b bb 1d fa d0 85 d3 a2 29 26 be 64 ef
850)             40 02 88 db 51 1a ab 2c 34 5f 04 96 b9 75 79 f6
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

851) """),
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

852)         'expected_signature': None,
853)         'derived_passphrase': None,
854)     },
855)     'ecdsa256': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

856)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

857) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS
858) 1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTLbU0zDwsk2Dvp+VYIrsNVf5gWwz2S
859) 3SZ8TbxiQRkpnGSVqyIoHJOJc+NQItAa7xlJ/8Z6gfz57Z3apUkaMJm6AAAAuKeY+YinmP
860) mIAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMttTTMPCyTYO+n5
861) Vgiuw1V/mBbDPZLdJnxNvGJBGSmcZJWrIigck4lz41Ai0BrvGUn/xnqB/PntndqlSRowmb
862) oAAAAhAKIl/3n0pKVIxpZkXTGtii782Qr4yIcvHdpxjO/QsIqKAAAAG3Rlc3Qga2V5IHdp
863) dGhvdXQgcGFzc3BocmFzZQECAwQ=
864) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

865) """,
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

866)         'private_key_blob': bytes.fromhex("""
867)             00 00 00 13 65 63 64
868)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 32 35 36
869)             00 00 00 08 6e 69 73 74 70 32 35 36
870)             00 00 00 41 04
871)             cb 6d 4d 33 0f 0b 24 d8 3b e9 f9 56 08 ae c3 55
872)             7f 98 16 c3 3d 92 dd 26 7c 4d bc 62 41 19 29 9c
873)             64 95 ab 22 28 1c 93 89 73 e3 50 22 d0 1a ef 19
874)             49 ff c6 7a 81 fc f9 ed 9d da a5 49 1a 30 99 ba
875)             00 00 00 21 00
876)             a2 25 ff 79 f4 a4 a5 48 c6 96 64 5d 31 ad 8a 2e
877)             fc d9 0a f8 c8 87 2f 1d da 71 8c ef d0 b0 8a 8a
878)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
879)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
880) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

881)         'public_key': rb"""ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMttTTMPCyTYO+n5Vgiuw1V/mBbDPZLdJnxNvGJBGSmcZJWrIigck4lz41Ai0BrvGUn/xnqB/PntndqlSRowmbo= test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 weeks ago

882) """,
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

883)         'public_key_data': bytes.fromhex("""
Marco Ricci Add an ecdsa-sha2-nistp521...

Marco Ricci authored 1 month ago

884)             00 00 00 13 65 63 64
885)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 32 35 36
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

886)             00 00 00 08 6e 69 73 74 70 32 35 36
887)             00 00 00 41 04
888)             cb 6d 4d 33 0f 0b 24 d8 3b e9 f9 56 08 ae c3 55
889)             7f 98 16 c3 3d 92 dd 26 7c 4d bc 62 41 19 29 9c
890)             64 95 ab 22 28 1c 93 89 73 e3 50 22 d0 1a ef 19
891)             49 ff c6 7a 81 fc f9 ed 9d da a5 49 1a 30 99 ba
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

892) """),
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

893)         'expected_signature': None,
894)         'derived_passphrase': None,
895)     },
896)     'ecdsa384': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

897)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

898) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAiAAAABNlY2RzYS
899) 1zaGEyLW5pc3RwMzg0AAAACG5pc3RwMzg0AAAAYQSgkOjkAvq7v5vHuj3KBL4/EAWcn5hZ
900) DyKcbyV0eBMGFq7hKXQlZqIahLVqeMR0QqmkxNJ2rly2VHcXneq3vZ+9fIsWCOdYk5WP3N
901) ZPzv911Xn7wbEkC7QndD5zKlm4pBUAAADomhj+IZoY/iEAAAATZWNkc2Etc2hhMi1uaXN0
902) cDM4NAAAAAhuaXN0cDM4NAAAAGEEoJDo5AL6u7+bx7o9ygS+PxAFnJ+YWQ8inG8ldHgTBh
903) au4Sl0JWaiGoS1anjEdEKppMTSdq5ctlR3F53qt72fvXyLFgjnWJOVj9zWT87/ddV5+8Gx
904) JAu0J3Q+cypZuKQVAAAAMQD5sTy8p+B1cn/DhOmXquui1BcxvASqzzevkBlbQoBa73y04B
905) 2OdqVOVRkwZWRROz0AAAAbdGVzdCBrZXkgd2l0aG91dCBwYXNzcGhyYXNlAQIDBA==
906) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

907) """,
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

908)         'private_key_blob': bytes.fromhex("""
909)             00 00 00 13 65 63 64
910)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 33 38 34
911)             00 00 00 08 6e 69 73 74 70 33 38 34
912)             00 00 00 61 04
913)             a0 90 e8 e4 02 fa bb bf 9b c7 ba 3d ca 04 be 3f
914)             10 05 9c 9f 98 59 0f 22 9c 6f 25 74 78 13 06 16
915)             ae e1 29 74 25 66 a2 1a 84 b5 6a 78 c4 74 42 a9
916)             a4 c4 d2 76 ae 5c b6 54 77 17 9d ea b7 bd 9f bd
917)             7c 8b 16 08 e7 58 93 95 8f dc d6 4f ce ff 75 d5
918)             79 fb c1 b1 24 0b b4 27 74 3e 73 2a 59 b8 a4 15
919)             00 00 00 31 00
920)             f9 b1 3c bc a7 e0 75 72 7f c3 84 e9 97 aa eb a2
921)             d4 17 31 bc 04 aa cf 37 af 90 19 5b 42 80 5a ef
922)             7c b4 e0 1d 8e 76 a5 4e 55 19 30 65 64 51 3b 3d
923)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
924)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
925) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

926)         'public_key': rb"""ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBKCQ6OQC+ru/m8e6PcoEvj8QBZyfmFkPIpxvJXR4EwYWruEpdCVmohqEtWp4xHRCqaTE0nauXLZUdxed6re9n718ixYI51iTlY/c1k/O/3XVefvBsSQLtCd0PnMqWbikFQ== test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 weeks ago

927) """,
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

928)         'public_key_data': bytes.fromhex("""
Marco Ricci Add an ecdsa-sha2-nistp521...

Marco Ricci authored 1 month ago

929)             00 00 00 13 65 63 64
930)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 33 38 34
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

931)             00 00 00 08 6e 69 73 74 70 33 38 34
932)             00 00 00 61 04
933)             a0 90 e8 e4 02 fa bb bf 9b c7 ba 3d ca 04 be 3f
934)             10 05 9c 9f 98 59 0f 22 9c 6f 25 74 78 13 06 16
935)             ae e1 29 74 25 66 a2 1a 84 b5 6a 78 c4 74 42 a9
936)             a4 c4 d2 76 ae 5c b6 54 77 17 9d ea b7 bd 9f bd
937)             7c 8b 16 08 e7 58 93 95 8f dc d6 4f ce ff 75 d5
938)             79 fb c1 b1 24 0b b4 27 74 3e 73 2a 59 b8 a4 15
Marco Ricci Add an ecdsa-sha2-nistp521...

Marco Ricci authored 1 month ago

939) """),
940)         'expected_signature': None,
941)         'derived_passphrase': None,
942)     },
943)     'ecdsa521': {
944)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
945) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAArAAAABNlY2RzYS
946) 1zaGEyLW5pc3RwNTIxAAAACG5pc3RwNTIxAAAAhQQASVOdwDznmlcGqiLvFtYeVtrAEiVz
947) iIfsL7jEM8Utu/m8WSkPFQtjwqdFw+WfZ0mi6qMbEFgi/ELzZSKVteCSbcMAhqAkOMFKiD
948) u4bxvsM6bT02Ru7q2yT41ySyGhUD0QySBnI6Ckt/wnQ1TEpj8zDKiRErxs9e6QLGElNRkz
949) LPMs+mMAAAEY2FXeh9hV3ocAAAATZWNkc2Etc2hhMi1uaXN0cDUyMQAAAAhuaXN0cDUyMQ
950) AAAIUEAElTncA855pXBqoi7xbWHlbawBIlc4iH7C+4xDPFLbv5vFkpDxULY8KnRcPln2dJ
951) ouqjGxBYIvxC82UilbXgkm3DAIagJDjBSog7uG8b7DOm09Nkbu6tsk+NckshoVA9EMkgZy
952) OgpLf8J0NUxKY/MwyokRK8bPXukCxhJTUZMyzzLPpjAAAAQSFqUmKK7lGQzxT6GKZSLDju
953) U3otwLYnuj+/5AdzuB/zotu95UdFv9I2DNXzd9E4WAyz6IqBBNcsMkxrzHAdqsYDAAAAG3
954) Rlc3Qga2V5IHdpdGhvdXQgcGFzc3BocmFzZQ==
955) -----END OPENSSH PRIVATE KEY-----
956) """,
957)         'private_key_blob': bytes.fromhex("""
958)             00 00 00 13 65 63 64
959)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 35 32 31
960)             00 00 00 08 6e 69 73 74 70 35 32 31
961)             00 00 00 85 04 00 49 53 9d
962)             c0 3c e7 9a 57 06 aa 22 ef 16 d6 1e 56 da c0 12
963)             25 73 88 87 ec 2f b8 c4 33 c5 2d bb f9 bc 59 29
964)             0f 15 0b 63 c2 a7 45 c3 e5 9f 67 49 a2 ea a3 1b
965)             10 58 22 fc 42 f3 65 22 95 b5 e0 92 6d c3 00 86
966)             a0 24 38 c1 4a 88 3b b8 6f 1b ec 33 a6 d3 d3 64
967)             6e ee ad b2 4f 8d 72 4b 21 a1 50 3d 10 c9 20 67
968)             23 a0 a4 b7 fc 27 43 54 c4 a6 3f 33 0c a8 91 12
969)             bc 6c f5 ee 90 2c 61 25 35 19 33 2c f3 2c fa 63
970)             00 00 00 41 21
971)             6a 52 62 8a ee 51 90 cf 14 fa 18 a6 52 2c 38 ee
972)             53 7a 2d c0 b6 27 ba 3f bf e4 07 73 b8 1f f3 a2
973)             db bd e5 47 45 bf d2 36 0c d5 f3 77 d1 38 58 0c
974)             b3 e8 8a 81 04 d7 2c 32 4c 6b cc 70 1d aa c6 03
975)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
976)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
977) """),
978)         'public_key': rb"""ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBABJU53APOeaVwaqIu8W1h5W2sASJXOIh+wvuMQzxS27+bxZKQ8VC2PCp0XD5Z9nSaLqoxsQWCL8QvNlIpW14JJtwwCGoCQ4wUqIO7hvG+wzptPTZG7urbJPjXJLIaFQPRDJIGcjoKS3/CdDVMSmPzMMqJESvGz17pAsYSU1GTMs8yz6Yw== test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 weeks ago

979) """,
Marco Ricci Add an ecdsa-sha2-nistp521...

Marco Ricci authored 1 month ago

980)         'public_key_data': bytes.fromhex("""
981)             00 00 00 13 65 63 64
982)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 32 35 36
983)             00 00 00 08 6e 69 73 74 70 35 32 31
984)             00 00 00 85 04 00 49 53 9d
985)             c0 3c e7 9a 57 06 aa 22 ef 16 d6 1e 56 da c0 12
986)             25 73 88 87 ec 2f b8 c4 33 c5 2d bb f9 bc 59 29
987)             0f 15 0b 63 c2 a7 45 c3 e5 9f 67 49 a2 ea a3 1b
988)             10 58 22 fc 42 f3 65 22 95 b5 e0 92 6d c3 00 86
989)             a0 24 38 c1 4a 88 3b b8 6f 1b ec 33 a6 d3 d3 64
990)             6e ee ad b2 4f 8d 72 4b 21 a1 50 3d 10 c9 20 67
991)             23 a0 a4 b7 fc 27 43 54 c4 a6 3f 33 0c a8 91 12
992)             bc 6c f5 ee 90 2c 61 25 35 19 33 2c f3 2c fa 63
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

993) """),
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

994)         'expected_signature': None,
995)         'derived_passphrase': None,
996)     },
997) }
998) 
999) DUMMY_SERVICE = 'service1'
Marco Ricci Clean up testing machinery...

Marco Ricci authored 4 months ago

1000) DUMMY_PASSPHRASE = 'my secret passphrase'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1001) DUMMY_KEY1 = SUPPORTED_KEYS['ed25519']['public_key_data']
1002) DUMMY_KEY1_B64 = base64.standard_b64encode(DUMMY_KEY1).decode('ASCII')
1003) DUMMY_KEY2 = SUPPORTED_KEYS['rsa']['public_key_data']
1004) DUMMY_KEY2_B64 = base64.standard_b64encode(DUMMY_KEY2).decode('ASCII')
Marco Ricci Avoid crashing when overrid...

Marco Ricci authored 5 months ago

1005) DUMMY_KEY3 = SUPPORTED_KEYS['ed448']['public_key_data']
1006) DUMMY_KEY3_B64 = base64.standard_b64encode(DUMMY_KEY3).decode('ASCII')
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1007) DUMMY_CONFIG_SETTINGS = {
1008)     'length': 10,
1009)     'upper': 1,
1010)     'lower': 1,
1011)     'repeat': 5,
1012)     'number': 1,
1013)     'space': 1,
1014)     'dash': 1,
1015)     'symbol': 1,
1016) }
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1017) DUMMY_RESULT_PASSPHRASE = b'.2V_QJkd o'
1018) DUMMY_RESULT_KEY1 = b'E<b<{ -7iG'
1019) DUMMY_PHRASE_FROM_KEY1_RAW = (
1020)     b'\x00\x00\x00\x0bssh-ed25519'
1021)     b'\x00\x00\x00@\xf0\x98\x19\x80l\x1a\x97\xd5&\x03n'
1022)     b'\xcc\xe3e\x8f\x86f\x07\x13\x19\x13\t!33\xf9\xe46S'
1023)     b'\x1d\xaf\xfd\r\x08\x1f\xec\xf8s\x9b\x8c_U9\x16|ST,'
1024)     b'\x1eR\xbb0\xed\x7f\x89\xe2/iQU\xd8\x9e\xa6\x02'
1025) )
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 weeks ago

1026) DUMMY_PHRASE_FROM_KEY1 = b'8JgZgGwal9UmA27M42WPhmYHExkTCSEzM/nkNlMdr/0NCB/s+HObjF9VORZ8U1QsHlK7MO1/ieIvaVFV2J6mAg=='
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1027) 
Marco Ricci Move exporter command-line...

Marco Ricci authored 4 months ago

1028) VAULT_MASTER_KEY = 'vault key'
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 weeks ago

1029) VAULT_V02_CONFIG = 'P7xeh5y4jmjpJ2pFq4KUcTVoaE9ZOEkwWmpVTURSSWQxbGt6emN4aFE4eFM3anVPbDRNTGpOLzY3eDF5aE1YTm5LNWh5Q1BwWTMwM3M5S083MWRWRFlmOXNqSFJNcStGMWFOS3c2emhiOUNNenZYTmNNMnZxaUErdlRoOGF2ZHdGT1ZLNTNLOVJQcU9jWmJrR3g5N09VcVBRZ0ZnSFNUQy9HdFVWWnFteVhRVkY3MHNBdnF2ZWFEbFBseWRGelE1c3BFTnVUckRQdWJSL29wNjFxd2Y2ZVpob3VyVzRod3FKTElTenJ1WTZacTJFOFBtK3BnVzh0QWVxcWtyWFdXOXYyenNQeFNZbWt1MDU2Vm1kVGtISWIxWTBpcWRFbyswUVJudVVhZkVlNVpGWDA4WUQ2Q2JTWW81SnlhQ2Zxa3cxNmZoQjJES0Uyd29rNXpSck5iWVBrVmEwOXFya1NpMi9saU5LL3F0M3N3MjZKekNCem9ER2svWkZ0SUJLdmlHRno0VlQzQ3pqZTBWcTM3YmRiNmJjTkhqUHZoQ0NxMW1ldW1XOFVVK3pQMEtUMkRMVGNvNHFlOG40ck5KcGhsYXg1b1VzZ1NYU1B2T3RXdEkwYzg4NWE3YWUzOWI1MDI0MThhMWZjODQ3MDA2OTJmNDQ0MDkxNGFiNmRlMGQ2YjZiNjI5NGMwN2IwMmI4MGZi'
Marco Ricci Move exporter command-line...

Marco Ricci authored 4 months ago

1030) VAULT_V02_CONFIG_DATA = {
1031)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 4 months ago

1032)         'phrase': DUMMY_PASSPHRASE.rstrip('\n'),
Marco Ricci Move exporter command-line...

Marco Ricci authored 4 months ago

1033)     },
1034)     'services': {
1035)         '(meta)': {
1036)             'notes': 'This config was originally in v0.2 format.',
1037)         },
1038)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
1039)     },
1040) }
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 weeks ago

1041) VAULT_V03_CONFIG = 'sBPBrr8BFHPxSJkV/A53zk9zwDQHFxLe6UIusCVvzFQre103pcj5xxmE11lMTA0U2QTYjkhRXKkH5WegSmYpAnzReuRsYZlWWp6N4kkubf+twZ9C3EeggPm7as2Af4TICHVbX4uXpIHeQJf9y1OtqrO+SRBrgPBzgItoxsIxebxVKgyvh1CZQOSkn7BIzt9xKhDng3ubS4hQ91fB0QCumlldTbUl8tj4Xs5JbvsSlUMxRlVzZ0OgAOrSsoWELXmsp6zXFa9K6wIuZa4wQuMLQFHiA64JO1CR3I+rviWCeMlbTOuJNx6vMB5zotKJqA2hIUpN467TQ9vI4g/QTo40m5LT2EQKbIdTvBQAzcV4lOcpr5Lqt4LHED5mKvm/4YfpuuT3I3XCdWfdG5SB7ciiB4Go+xQdddy3zZMiwm1fEwIB8XjFf2cxoJdccLQ2yxf+9diedBP04EsMHrvxKDhQ7/vHl7xF2MMFTDKl3WFd23vvcjpR1JgNAKYprG/e1p/7'
Marco Ricci Move exporter command-line...

Marco Ricci authored 4 months ago

1042) VAULT_V03_CONFIG_DATA = {
1043)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 4 months ago

1044)         'phrase': DUMMY_PASSPHRASE.rstrip('\n'),
Marco Ricci Move exporter command-line...

Marco Ricci authored 4 months ago

1045)     },
1046)     'services': {
1047)         '(meta)': {
1048)             'notes': 'This config was originally in v0.3 format.',
1049)         },
1050)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
1051)     },
1052) }
1053) VAULT_STOREROOM_CONFIG_ZIPPED = b"""
1054) UEsDBBQAAAAIAJ1WGVnTVFGT0gAAAOYAAAAFAAAALmtleXMFwclSgzAAANC7n9GrBzBldcYDE5Al
1055) EKbFAvGWklBAtqYsBcd/973fw8LFox76w/vb34tzhD5OATeEAk6tJ6Fbp3WrvkJO7l0KIjtxCLfY
1056) ORm8ScEDPbNkyVwGLmZNTuQzXPMl/GnLO0I2PmUhRcxSj2Iy6PUy57up4thL6zndYwtyORpyCTGy
1057) ibbjIeq/K/9atsHkl680nwsKFVk1i97gbGhG4gC5CMS8aUx8uebuToRCDsAT61UQVp0yEjw1bhm1
1058) 6UPWzM2wyfMGMyY1ox5HH/9QSwMEFAAAAAgAnVYZWd1pX+EFAwAA1AMAAAIAAAAwMA3ON7abQAAA
1059) wP4fwy0FQUR3ZASLYEkCOnKOEtHPd7e7KefPr71YP800/vqN//3hAywvUaCcTYb6TbKS/kYcVnvG
1060) wGA5N8ksjpFNCu5BZGu953GdoVnOfN6PNXoluWOS2JzO23ELNJ2m9nDn0uDhwC39VHJT1pQdejIw
1061) CovQTEWmBH53FJufhNSZKQG5s1fMcw9hqn3NbON6wRDquOjLe/tqWkG1yiQDSF5Ail8Wd2UaA7vo
1062) 40QorG1uOBU7nPlDx/cCTDpSqwTZDkkAt6Zy9RT61NUZqHSMIgKMerj3njXOK+1q5sA/upSGvMrN
1063) 7/JpSEhcmu7GDvQJ8TyLos6vPCSmxO6RRG3X4BLpqHkTgeqHz+YDZwTV+6y5dvSmTSsCP5uPCmi+
1064) 7r9irZ1m777iL2R8NFH0QDIo1GFsy1NrUvWq4TGuvVIbkHrML5mFdR6ajNhRjL/6//1crYAMLHxo
1065) qkjGz2Wck2dmRd96mFFAfdQ1/BqDgi6X/KRwHL9VmhpdjcKJhuE04xLYgTCyKLv8TkFfseNAbN3N
1066) 7KvVW7QVF97W50pzXzy3Ea3CatNQkJ1DnkR0vc0dsHd1Zr0o1acUaAa65B2yjYXCk3TFlMo9TNce
1067) OWBXzJrpaZ4N7bscdwCF9XYesSMpxBDpwyCIVyJ8tHZVf/iS4pE6u+XgvD42yef+ujhM/AyboqPk
1068) sFNV/XoNpmWIySdkTMmwu72q1GfPqr01ze/TzCVrCe0KkFcZhe77jrLPOnRCIarF2c9MMHNfmguU
1069) A0tJ8HodQb/zehL6C9KSiNWfG+NlK1Dro1sGKhiJETLMFru272CNlwQJmzTHuKAXuUvJmQCfmLfL
1070) EPrxoE08fu+v6DKnSopnG8GTkbscPZ+K5q2kC6m7pCizKO1sLKG7fMBRnJxnel/vmpY2lFCB4ADy
1071) no+dvqBl6z3X/ji9AFXC9X8HRd+8u57OS1zV4OhiVd7hMy1U8F5qbIBms+FS6QbL9NhIb2lFN4VO
1072) 3+ITZz1sPJBl68ZgJWOV6O4F5cAHGKl/UEsDBBQAAAAIAJ1WGVn9pqLBygEAACsCAAACAAAAMDMN
1073) z8mWa0AAANB9f0ZvLZQhyDsnC0IMJShDBTuzJMZoktLn/ft79w/u7/dWvZb7OHz/Yf5+yYUBMTNK
1074) RrCI1xIQs67d6yI6bM75waX0gRLdKMGyC5O2SzBLs57V4+bqxo5xI2DraLTVeniUXLxkLyjRnC4u
1075) 24Vp+7p+ppt9DlVNNZp7rskQDOe47mbgViNeE5oXpg/oDgTcfQYNvt8V0OoyKbIiNymOW/mB3hze
1076) D1EHqTWQvFZB5ANGpLMM0U10xWYAClzuVJXKm/n/8JgVaobY38IjzxXyk4iPkQUuYtws73Kan871
1077) R3mZa7/j0pO6Wu0LuoV+czp9yZEH/SU42lCgjEsZ9Mny3tHaF09QWU4oB7HI+LBhKnFJ9c0bHEky
1078) OooHgzgTIa0y8fbpst30PEUwfUAS+lYzPXG3y+QUiy5nrJFPb0IwESd9gIIOVSfZK63wvD5ueoxj
1079) O9bn2gutSFT6GO17ibguhXtItAjPbZWfyyQqHRyeBcpT7qbzQ6H1Of5clEqVdNcetAg8ZMKoWTbq
1080) /vSSQ2lpkEqT0tEQo7zwKBzeB37AysB5hhDCPn1gUTER6d+1S4dzwO7HhDf9kG+3botig2Xm1Dz9
1081) A1BLAwQUAAAACACdVhlZs14oCcgBAAArAgAAAgAAADA5BcHJkqIwAADQe39GXz2wE5gqDxAGQRZF
1082) QZZbDIFG2YwIga7593nv93sm9N0M/fcf4d+XcUlVE+kvustz3BU7FjHOaW+u6TRsfNKzLh74mO1w
1083) IXUlM/2sGKKuY5sYrW5N+oGqit2zLBYv57mFvH/S8pWGYDGzUnU1CdTL3B4Yix+Hk8E/+m0cSi2E
1084) dnAibw1brWVXM++8iYcUg84TMbJXntFYCyrNw1NF+008I02PeH4C8oDID6fIoKvsw3p7WJJ/I9Yp
1085) a6oJzlJiP5JGxRxZPj50N6EMtzNB+tZoIGxgtOFVpiJ05yMQFztY6I6LKIgvXW/s919GIjGshqdM
1086) XVPFxaKG4p9Iux/xazf48FY8O7SMmbQC1VsXIYo+7eSpIY67VzrCoh41wXPklOWS6CV8RR/JBSqq
1087) 8lHkcz8L21lMCOrVR1Cs0ls4HLIhUkqr9YegTJ67VM7xevUsgOI7BkPDldiulRgX+sdPheCyCacu
1088) e7/b/nk0SXWF7ZBxsR1awYqwkFKz41/1bZDsETsmd8n1DHycGIvRULv3yYhKcvWQ4asAMhP1ks5k
1089) AgOcrM+JFvpYA86Ja8HCqCg8LihEI1e7+m8F71Lpavv/UEsDBBQAAAAIAJ1WGVnKO2Ji+AEAAGsC
1090) AAACAAAAMWENx7dyo0AAANDen+GWAonMzbggLsJakgGBOhBLlGBZsjz373eve7+fKyJTM/Sff85/
1091) P5QMwMFfAWipfXwvFPWU582cd3t7JVV5pBV0Y1clL4eKUd0w1m1M5JrkgW5PlfpOVedgABSe4zPY
1092) LnSIZVuen5Eua9QY8lQ7rxW7YIqeajhgLfL54BIcY90fd8ANixlcM8V23Z03U35Txba0BbSguc0f
1093) NRF83cWp+7rOYgNO9wWLs915oQmWAqAtqRYCiWlgAtxYFg0MnNS4/G80FvFmQTh0cjwcF1xEVPeW
1094) l72ky84PEA0QMgRtQW+HXWtE0/vQTtNKzvNqPfrGZCldL5nk9PWhhPEQ/azyW11bz2eB+aM0g0r7
1095) 0/5YkO9er10YonsBT1rEn0lfBXDHwtwbxG2bdqELTuEtX2+OEih7K43rN2EvpXX47azaNpe/drIz
1096) wgAdhpfZ/mZwaGFX0c7r5HCTnroNRi5Bx/vu7m1A7Nt1dix4Gl/aPLCWQzpwmdIMJDiqD1RGpc5v
1097) +pDLrpfhZOVhLjAPSQ0V7mm/XNSca8oIsDjwdvR438RQCU56mrlypklS4/tJAe0JZNZIgBmJszjG
1098) AFbsmNYTJ9GmULB9lXmTWmrME592S285iWU5SsJcE1s+3oQw9QrvWB+e3bGAd9e+VFmFqr6+/gFQ
1099) SwECHgMUAAAACACdVhlZ01RRk9IAAADmAAAABQAAAAAAAAABAAAApIEAAAAALmtleXNQSwECHgMU
1100) AAAACACdVhlZ3Wlf4QUDAADUAwAAAgAAAAAAAAABAAAApIH1AAAAMDBQSwECHgMUAAAACACdVhlZ
1101) /aaiwcoBAAArAgAAAgAAAAAAAAABAAAApIEaBAAAMDNQSwECHgMUAAAACACdVhlZs14oCcgBAAAr
1102) AgAAAgAAAAAAAAABAAAApIEEBgAAMDlQSwECHgMUAAAACACdVhlZyjtiYvgBAABrAgAAAgAAAAAA
1103) AAABAAAApIHsBwAAMWFQSwUGAAAAAAUABQDzAAAABAoAAAAA
1104) """
1105) VAULT_STOREROOM_CONFIG_DATA = {
1106)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 4 months ago

1107)         'phrase': DUMMY_PASSPHRASE.rstrip('\n'),
Marco Ricci Move exporter command-line...

Marco Ricci authored 4 months ago

1108)     },
1109)     'services': {
1110)         '(meta)': {
1111)             'notes': 'This config was originally in storeroom format.',
1112)         },
1113)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
1114)     },
1115) }
1116) 
Marco Ricci Add more tests of the store...

Marco Ricci authored 4 months ago

1117) _VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED_JAVASCRIPT_SOURCE = """
1118) // Executed in the top-level directory of the vault project code, in Node.js.
1119) const storeroom = require('storeroom')
1120) const Store = require('./lib/store.js')
Marco Ricci Add remaining tests to the...

Marco Ricci authored 2 months ago

1121) let store = new Store(storeroom.createFileAdapter('./broken-dir'), 'vault key')
Marco Ricci Add more tests of the store...

Marco Ricci authored 4 months ago

1122) await store._storeroom.put('/services/array/', ['entry1','entry2'])
1123) // The resulting "broken-dir" was then zipped manually.
1124) """
1125) VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED = b"""
1126) UEsDBBQAAgAIAHijH1kjc0ql0gAAAOYAAAAFAAAALmtleXMFwclygjAAANB7P8Mrh7LIYmd6oGxC
1127) HKwTJJgbNpBKCpGAhNTpv/e952ZpxHTjw+bN+HuJJABEikvHecD0pLgpgYKWjue0CZGk19mKF+4f
1128) 0AoLrXKh+ckk13nmxVk/KFE28eEHkBgJTISvRUVMQ0N5aRapLgWs/M7NSXV7qs0s2aIEstUG5FHv
1129) fo/HKjpdUJMGK86vs2rOJFGyrx9ZK4iWW+LefwSTYxhYOlWpb0PpgXsV4dHNTz5skcJqpPUudZf9
1130) jCFD0vxChL6ajm0P0prY+z9QSwMEFAACAAgAeKMfWX4L7vDYAQAAPwIAAAIAAAAwNQXByZKiMAAA
1131) 0Ht/Rl85sIR1qvqAouxbJAG8kWYxgCKICEzNv897f7+XanrR4fH9h//3pVdF8qmVeWjW+STwSbak
1132) 4e3CS00h2AcrQIcghm0lOcrLdJfuaOFqg5zEsW9lTbJMtIId5ezNGM9jPKaxeriXXm45pGuHCwFP
1133) /gmcXKWGeU3sHfj93iIf6p0xrfQIGGJOvayKjzypUqb99Bllo9IwNP2FZjxmBWDw0NRzJrxr/4Qj
1134) qp4ted4f91ZaR8+64C0BJBzDngElJEFLdA2WBcip2R/VZIG219WT3JlkbFrYSjhHWeb47igytTpo
1135) USPjEJWVol0cVpD6iX1/mGM2BpHAFa+fLx3trXgbXaVmjyZVzUKDh/XqnovnLs529UGYCAdj8Xnx
1136) vWwfWclm5uIB8cHbElx6G82Zs8RQnkDsyGVDbNaMOO7lMQF7o1Uy7Q9GuSWcFMK4KBAbcwm4l8RY
1137) +2ema46H3/S31IW1LOFpoZxjwyBS69dWS7/ulVxJfbuydMvZMeWpmerjUHnKaQdumibSeSOXh+zg
1138) XU6w6SsKAjHWXCTjRehWmyNnI7z3+epr1RzUlnDcUMiYQ/seaNefgNx4jIbOw92FC2hxnZOJupK9
1139) M1WVdH3+8x9QSwMEFAACAAgAeKMfWUXRU2i7AQAAFwIAAAIAAAAxYQ3QyZZjUAAA0H19Rm2zCGLs
1140) c2rxzDMxBTtTEA8hnqlO/3v3/YT7+71W86cdh+8/+N8vUMGNNAjWlNHgsyBlwCpgBd/a2rrW0qwg
1141) p/CmvT4PTpwjHztJ2T10Jc2Fc8O7eHQb9MawAbxSKscxFAjz5wnJviaOMT5kEIZS+ibU6GgqU61P
1142) lbeYRIiNCfK1VeHMFCpUhZ1ipnh50kux5N2jph5aMvc+HOR3lQgx9MJpMzQ2oNxSfEm7wZ5s0GYb
1143) Bgy2xwaEMXNRnbzlbijZJi0M7yXNKS7nS1uFMtsapEc204YOBbOY4VK6L/9jS2ez56ybGkQPfn6+
1144) QCwTqvkR5ieuRhF0zcoPLld+OUlI0RfEPnYHKEG7gtSya/Z1Hh77Xq4ytJHdr7WmXt7BUFA8Sffm
1145) obXI31UOyVNLW0y4WMKDWq+atKGbU5BDUayoITMqvCteAZfJvnR4kZftMaFEG5ln7ptpdzpl10m3
1146) G2rgUwTjPBJKomnOtJpdwm1tXm6IMPQ6IPy7oMDC5JjrmxAPXwdPnY/i07Go6EKSYjbkj8vdj/BR
1147) rAMe2wnzdJaRhKv8kPVG1VqNdzm6xLb/Cf8AUEsDBBQAAgAIAHijH1kaCPeauQEAABcCAAACAAAA
1148) MWUFwTmyokAAAND8H+OnBAKyTpVBs8iOIG2zZM0OigJCg07N3ee9v7+kmt/d6/n7h/n3AyJEvoaD
1149) gtd8f4RxATnaHVeGNjyuolVVL+mY8Tms5ldfgYseNYMzRYJj3+i3iUgqlT5D1r7j1Bh5qVzi14X0
1150) jpuH7DBKeeot2jWI5mPubptvV567pX2U3OC6ccxWmyo2Dd3ehUkbPP4uiDgWDZzFg/fFETIawMng
1151) ahWHB2cfc2bM2kugNhWLS4peUBp36UWqMpF6+sLeUxAVZ24u08MDNMpNk81VDgiftnfBTBBhBGm0
1152) RNpzxMMOPnCx3RRFgttiJTydfkB9MeZ9pvxP9jUm/fndQfJI83CsBxcEWhbjzlEparc3VS2s4LjR
1153) 3Xafw3HLSlPqylHOWK2vc2ZJoObwqrCaFRg7kz1+z08SGu8pe0EHaII6FSxL7VM+rfVgpc1045Ut
1154) 6ayCQ0TwRL5m4oMYkZbFnivCBTY3Cdji2SQ+gh8m3A6YkFxXUH0Vz9Is8JZaLFyi24GjyZZ9rGuk
1155) Y6w53oLyTF/fSzG24ghCDZ6pOgB5qyfk4z2mUmH7pwxNCoHZ1oaxeTSn039QSwECHgMUAAIACAB4
1156) ox9ZI3NKpdIAAADmAAAABQAAAAAAAAABAAAApIEAAAAALmtleXNQSwECHgMUAAIACAB4ox9Zfgvu
1157) 8NgBAAA/AgAAAgAAAAAAAAABAAAApIH1AAAAMDVQSwECHgMUAAIACAB4ox9ZRdFTaLsBAAAXAgAA
1158) AgAAAAAAAAABAAAApIHtAgAAMWFQSwECHgMUAAIACAB4ox9ZGgj3mrkBAAAXAgAAAgAAAAAAAAAB
1159) AAAApIHIBAAAMWVQSwUGAAAAAAQABADDAAAAoQYAAAAA
1160) """
1161) 
Marco Ricci Add remaining tests to the...

Marco Ricci authored 2 months ago

1162) _VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED2_JAVASCRIPT_SOURCE = """
1163) // Executed in the top-level directory of the vault project code, in Node.js.
1164) const storeroom = require('storeroom')
1165) const Store = require('./lib/store.js')
1166) let store = new Store(storeroom.createFileAdapter('./broken-dir'), 'vault key')
1167) await store._storeroom.put('/services/array/', 'not a directory index')
1168) // The resulting "broken-dir" was then zipped manually.
1169) """
1170) VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED2 = b"""
1171) UEsDBAoAAAAAAM6NSVmrcHdV5gAAAOYAAAAFAAAALmtleXN7InZlcnNpb24iOjF9CkV3ZS9LZkJp
1172) L0V0OUcrZmxYM3gxaFU4ZjE4YlE3S253bHoxN0IxSDE3cUhVOGdWK2RpWWY5MTdFZ0YrSStidEpZ
1173) VXBzWVZVck45OC9uLzdsZnl2NUdGVEg2NWZxVy93YjlOc2MxeEZ4ck43Q3p4eTZ5MVAxZzFPb2VK
1174) b0RZU3J6YXlwT0E2M3pidmk0ZTRiREMyNXhPTXl5NHBoMDFGeGdnQmpSNnpUcmR2UDk2UlZQd0I5
1175) WitOZkZWZUlXT1NQN254ZFNYMGdFbkZ4SDBmWDkzNTFaTTZnPVBLAwQKAAAAAADOjUlZJg3/BhcC
1176) AAAXAgAAAgAAADBieyJ2ZXJzaW9uIjoxfQpBVXJJMjNDQ2VpcW14cUZRMlV4SUpBaUoxNEtyUzh2
1177) SXpIa2xROURBaFRlVHNFMmxPVUg4WUhTcUk1cXRGSHBqY3c1WkRkZmRtUlEwQXVGRjllY3lkam14
1178) dDdUemRYLzNmNFUvTGlVV2dLRmQ1K1FEN3BlVlE1bWpqeHNlUEpHTDlhTWlKaGxSUVB4SmtUbjBx
1179) U2poM1RUT0ZZbVAzV0JkdlUyWnF2RzhaSDk2cU1WcnZsQ0dMRmZTc2svVXlvcHZKdENONUVXcTRZ
1180) SDUwNFNiejFIUVhWd2RjejlrS1BuR3J6SVA4ZmZtZnhXQ0U0TmtLb0ZPQXZuNkZvS3FZdGlGbFE9
1181) PQpBVXBMUVMrMG9VeEZTeCtxbTB3SUtyM1MvTVJxYWJJTFlEUnY0aHlBMVE2TGR2Nlk0UmJ0enVz
1182) NzRBc0cxbVhhenlRU2hlZVowdk0xM2ZyTFA4YlV0VHBaRyszNXF1eUhLM2NaWVJRZUxKM0JzejZz
1183) b0xaQjNZTkpNenFxTTQrdzM1U0FZZ2lMU1NkN05NeWVrTHNhRUIzRDFOajlTRk85K3NGNEpFMWVL
1184) UXpNMkltNk9qOUNVQjZUSTV3UitibksxN1BnY2RaeTZUMVRMWElVREVxcDg4dWdsWmRFTVcrNU9k
1185) aE5ZbXEzZERWVWV4UnJpM1AwUmVBSi9KMGdJNkNoUUE9PVBLAwQKAAAAAADOjUlZTNfdphcCAAAX
1186) AgAAAgAAADBmeyJ2ZXJzaW9uIjoxfQpBWVJqOVpIUktGUEVKOHM2YVY2TkRoTk5jQlZ5cGVYUmdz
1187) cnBldFQ0cGhJRGROWFdGYzRia0daYkJxMngwRDFkcVNjYWk5UzEveDZ2K28zRE0rVEF2OVE3ZFVR
1188) QWVKR3RmRkhJZDZxWW0ybEdNSnF5WTRNWm14aE9YdXliend0V3Q4Mnhvb041QTZNcWpINmxKQllD
1189) UUN3ZEJjb3RER0EwRnlnVTEzeHV2WnIzT1puZnFFRGRqbzMxNkw5aExDN1RxMTYwUHpBOXJOSDMz
1190) ZkNBcUhIVXZiYlFQQWErekw1d3dEN3FlWkY2MHdJaEwvRmk5L3JhNGJDcHZRNC9ORWpRd3c9PQpB
1191) WWNGUDB1Y2xMMHh3ZDM2UXZXbm4wWXFsOU5WV0s3c05CMTdjdmM3N3VDZ0J2OE9XYkR5UHk5d05h
1192) R2NQQzdzcVdZdHpZRlBHR0taVjhVUzA1YTVsV1BabDNGVFNuQXNtekxPelBlcFZxaitleDU3aEsx
1193) QnV1bHkrUCtYQkE0YUtsaDM3c0RJL3I0UE1BVlJuMDNoSDJ5dEhDMW9PbjF0V1M5Q1NLV1pSMThh
1194) djdTT0RBMVBNRnFYTmZKZVNTaVJiQ2htbDdOcFVLbjlXSGJZandybDlqN0JSdy9kWjhNQldCb3Ns
1195) Nlc1dGZtdnJMVHhGRFBXYUgzSUp0T0czMEI1M3c9PVBLAwQKAAAAAADOjUlZn9rNID8CAAA/AgAA
1196) AgAAADFkeyJ2ZXJzaW9uIjoxfQpBYWFBb3lqaGljVDZ4eXh1c0U0RVlDZCtxbE81Z0dEYTBNSFVS
1197) MmgrSW9QMHV4UkY3b1BRS2czOHlQUEN3Ny9MYVJLQ0dQZ0RyZ2RpTWJTeUwzZ3ZNMFhseVpVMVBW
1198) QVJvNEFETU9lbXgrOWhtS0hjQWNKMG5EeW5oSkhGYTYyb2xyQUNxekZzblhKNVBSeEVTVzVEbUh0
1199) Ui9nRm5Wa1FvalhyVW4ybmpYMjVVanZQaXhlMU96Y0daMmQ0MjdVTGdnY1hqMkhSdjJiZldDNDUw
1200) SGFXS3FDckZlYWlrQ2xkUUM2WGV3SkxZUjdvQUY3UjVha2ttK3M2MXNCRTVCaTg0QmJLWHluc1NG
1201) ejE0TXFrd2JMK1VMYVk9CkFUT3dqTUFpa3Q4My9NTW5KRXQ2b3EyNFN4KzJKNDc2K2gyTmEzbHUr
1202) MDg0cjlBT25aaUk0TmlYV0N1Q0lzakEzcTBwUHFJS1VXZHlPQW9uM2VHY0huZUppWUtVYllBaUJI
1203) MVNmbnhQQkMzZkFMRklybkQ4Y0VqeGpPcUFUaTQ5dE1mRmtib0dNQ3dEdFY0V3NJL0tLUlRCOFd1
1204) MnNXK2J0V3QzVWlvZG9ZeUVLTDk3ekNNemZqdGptejF4SDhHTXY5WDVnaG9NSW5RQVNvYlRreVZ4
1205) dWo5YnlDazdNbU0vK21ZL3AwZE9oYVY0Nncwcm04UGlvWEtzdzR4bXB3ditDWC9PRXV3Uy9meDJT
1206) Y0lOQnNuYVRiWT1QSwECHgMKAAAAAADOjUlZq3B3VeYAAADmAAAABQAAAAAAAAAAAAAApIEAAAAA
1207) LmtleXNQSwECHgMKAAAAAADOjUlZJg3/BhcCAAAXAgAAAgAAAAAAAAAAAAAApIEJAQAAMGJQSwEC
1208) HgMKAAAAAADOjUlZTNfdphcCAAAXAgAAAgAAAAAAAAAAAAAApIFAAwAAMGZQSwECHgMKAAAAAADO
1209) jUlZn9rNID8CAAA/AgAAAgAAAAAAAAAAAAAApIF3BQAAMWRQSwUGAAAAAAQABADDAAAA1gcAAAAA
1210) """
1211) 
1212) _VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED3_JAVASCRIPT_SOURCE = """
1213) // Executed in the top-level directory of the vault project code, in Node.js.
1214) const storeroom = require('storeroom')
1215) const Store = require('./lib/store.js')
1216) let store = new Store(storeroom.createFileAdapter('./broken-dir'), 'vault key')
1217) await store._storeroom.put('/services/array/', [null, 1, true, [], {}])
1218) // The resulting "broken-dir" was then zipped manually.
1219) """
1220) VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED3 = b"""
1221) UEsDBAoAAAAAAEOPSVnVlcff5gAAAOYAAAAFAAAALmtleXN7InZlcnNpb24iOjF9CkV4dVBHUDBi
1222) YkxrUVdvWnV5ZUJQRy8xdmM2MCt6MThOa3BsS09ydFAvUTVnQmxkYVpIOG10dTE5VWZFNGdGRGRj
1223) eHJtWUd4eXZDZFNqcVlOaDh4cTlzM3VydkdRTWFwcnhtdlZGZUxoSW4zZnVlTDAweEk0ZmlLenZN
1224) MmthUlRsNWNORGh3eUNlWVk4dzhBcXNhYjNyVWVsOEE0eVQ0cHU2d2tmQ3dTWUdqeG5HR29EcWJK
1225) VnVJVWNpZVBEcU9PTzU2b0MyMG9lT01adFVkTUtxV28zYnFZPVBLAwQKAAAAAABDj0lZ77OVHxcC
1226) AAAXAgAAAgAAADBjeyJ2ZXJzaW9uIjoxfQpBZllFQVVobEkyU2lZeGlrdWh0RzRNbUN3L1V2THBN
1227) VVhwVlB0NlRwdzRyNGdocVJhbGZWZ0hxUHFtbTczSnltdFFrNnZnR2JRdUpiQmVlYjYwOHNrMGk4
1228) ZFJVZjNwdlc2SnUyejljQkdwOG5mTFpTdlNad1lLN09UK2gzSDNDcmoxbXNicEZUcHVldW81NXc1
1229) dGdYMnBuWXNWTVcrczdjaHEyMUIya2lIVEZrdGt1MXlaRzhPYkVUQjNCOFNGODVVbi9CUjFEMHJ1
1230) ME9zOWl4ZWM2VmNTMitTZndtNnNtSlk2ZW9ZNTJzOGJNRGdYMndjQ0srREdkOEo2VWp0NG5OQVE9
1231) PQpBUWlPRnRZcmJybWUycEwxRFpGT1BjU0RHOUN2cVkvbHhTWGIwaVJUdmtIWFc2bEtHL0p4RUtU
1232) d3RTc0RTeDhsMTUvaHRmbWpOQ2tuTzhLVEFoKzhRQm5FbjZ0a2x5Y3BmeEIrTUxLRjFCM1Q1bjcv
1233) T0VUMExMdmgxU2k1bnRRNXhTUHZZNWtXeUMyZjhXUXFZb3FSNU5JVENMeDV6dWNsQ3dGb2kvVXc4
1234) OWNNWjM1MHBSbThzUktJbjJFeDUrQ1JwS3ZHdnBHbFJaTmk5VHZmVkNic1FCalR3MC9aeklTdzVQ
1235) NW9BVWE2U1ExUVFnNHg4VUNkY0s2QUNLaFluY0d4TVE9PVBLAwQKAAAAAABDj0lZGk9LVj8CAAA/
1236) AgAAAgAAADE0eyJ2ZXJzaW9uIjoxfQpBY1g2NVpMUWk4ck9pUlIyWGEwQlFHQVhQVWF2aHNJVGVY
1237) c2dzRk9OUmFTRzJCQlg0SGxJRHpwRUd5aDUrZ2czZVRwWDFNOERua3pMeTVzcWRkMFpmK3padTgz
1238) Qm52Y1JPREVIVDllUW91YUtPTWltdlRYanNuSXAxUHo5VGY1TlRkRjNJVTd2V1lhUDg4WTI5NG1i
1239) c1VVL2RKVTZqZ3ZDbUw2cE1VZ28xUU12bGJnaVp3cDV1RDFQZXlrSXdKVWdJSEgxTEpnYi9xU2tW
1240) c25leW1XY1RXR0NobzRvZGx3S2hJWmFCelhvNFhlN2U1V2I2VHA3Rkk5VUpVcmZIRTAvcVdrZUZE
1241) VmxlazY3cUx3ZFZXcU9DdFk9CkFhSGR0QjhydmQ0U3N4ZmJ5eU1OOHIzZEoxeHA5NmFIRTQvalNi
1242) Z05hZWttaDkyb2ROM1F4MUlqYXZsYVkxeEt1eFF3KzlwTHFIcTF5a1JSRjQzL2RVWGFIRk5UU0NX
1243) OVFsdmd3KzMwa1ZhSEdXRllvbFRnRWE4djQ3b3VrbGlmc01PZGM0YVNKb2R4ZUFJcVc3Q1cwdDVR
1244) b2RUbWREUXpqc3phZkQ4R2VOd2NFQjdGMHI2RzNoZEJlQndxd3Z6eENVYnpSUmU5bEQ3NjQ3RFp1
1245) bEo1U3c4amlvV0paTW40NlZhV3BYUXk4UnNva3hHaW00WUpybUZIQ2JkVU9qSWJsUmQ1Z3VhUDNU
1246) M0NxeHRPdC94b1BhOD1QSwMECgAAAAAAQ49JWVJM8QYXAgAAFwIAAAIAAAAxNnsidmVyc2lvbiI6
1247) MX0KQVlCWDF6M21qUlQrand4M2FyNkFpemxnalJZbUM0ZHg5NkxVQVBTVHNMWXJKVHFtWnd5N0Jy
1248) OFlCcElVamorMHdlT3lNaUtLVnFwaER3RXExNWFqUmlSZUVEQURTVHZwWmlLZUlnZjR5elUzZXNP
1249) eDJ2U2J1bXhTK0swUGZVa2tsSy9TRmRiU3EvUHFMRjBDRTVCMXNyKzJLYTB2WlJmak94R3VFeFRD
1250) RXozN0ZlWDNNR3NCNkhZVHEzaUJWcUR6NVB6eHpCWWM5Kyt6RitLS1RnMVp2NGRtRmVQTC9JSEY5
1251) WnV6TWlqRXdCRkE3WnJ0dkRqd3ZYcWtsMVpsR0c4eUV3PT0KQVhUWkRLVnNleldpR1RMUVZqa2hX
1252) bXBnK05MYlM0M2MxZEpvK2xGcC9yWUJYZkw3Wll5cGdjWE5IWXNzd01nc2VSSTAzNmt6bGZkdGNa
1253) bTdiUUN6M2JuQmZ6ZlorZFFuT2Y5STVSU2l0QzB2UmsydkQrOFdwbmRPSzNucGY5S0VpWklOSzVq
1254) TEZGTTJDTkNmQzBabXNRUlF3T0k2N3l5ZHhjVnFDMXBnWHV6QXRXamlsSUpnN0p6eUtsY3BJUGJu
1255) SUc0UzRSUlhIdW1wZnpoeWFZWkd6T0FDamRSYTZIMWJxYkJkZXFaSHMvQXJvM25mVjdlbjhxSUE5
1256) aVUrbnNweXFnPT1QSwECHgMKAAAAAABDj0lZ1ZXH3+YAAADmAAAABQAAAAAAAAAAAAAApIEAAAAA
1257) LmtleXNQSwECHgMKAAAAAABDj0lZ77OVHxcCAAAXAgAAAgAAAAAAAAAAAAAApIEJAQAAMGNQSwEC
1258) HgMKAAAAAABDj0lZGk9LVj8CAAA/AgAAAgAAAAAAAAAAAAAApIFAAwAAMTRQSwECHgMKAAAAAABD
1259) j0lZUkzxBhcCAAAXAgAAAgAAAAAAAAAAAAAApIGfBQAAMTZQSwUGAAAAAAQABADDAAAA1gcAAAAA
1260) """
1261) 
1262) _VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED4_JAVASCRIPT_SOURCE = """
1263) // Executed in the top-level directory of the vault project code, in Node.js.
1264) const storeroom = require('storeroom')
1265) const Store = require('./lib/store.js')
1266) let store = new Store(storeroom.createFileAdapter('./broken-dir'), 'vault key')
1267) await store._storeroom.put('/dir/subdir/', [])
1268) await store._storeroom.put('/dir/', [])
1269) // The resulting "broken-dir" was then zipped manually.
1270) """
1271) VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED4 = b"""
1272) UEsDBAoAAAAAAE+5SVloORS+5gAAAOYAAAAFAAAALmtleXN7InZlcnNpb24iOjF9CkV6dWRoNkRQ
1273) YTlNSWFabHZ5TytVYTFuamhjV2hIaTFBU0lKYW5zcXBxVlA0blN2V0twUzdZOUc2bjFSbi8vUnVM
1274) VitwcHp5SC9RQk83R0hFenNVMzdCUzFwUmVVeGhxUVlVTE56OXZvQ0crM1ZaL3VncU44dDJiU05m
1275) Nyt5K3hiNng2aVlFUmNZYTJ0UkhzZVdIc0laTE9ha2lDb0lRVGV3cndwYjVMM2pnd0E3SXBzaDkz
1276) QkxHSzM5dXNYNmo0R0I2WkRUeW5JcGk4V3JkbDhnWVZCN0tVPVBLAwQKAAAAAABPuUlZ663uUhcC
1277) AAAXAgAAAgAAADAzeyJ2ZXJzaW9uIjoxfQpBV2wzS2gzd21ZSFVZZU1RR3BLSVowdVd1VXFna09h
1278) YmRjNzNYYXVsZTNtVS9sN2Zvd1AyS21jbFp3ZDM5V3lYVzRTcEw4R0l4YStDZW51S3V0Wm5nb0FR
1279) bWlnaUJUbkFaais5TENCcGNIWlZNY2RBVkgxKzBFNGpsanZ1UkVwZ0tPS05LZjRsTUl1QnZ4VmFB
1280) ZkdwNHJYNEZ4MmpPSlk1Y3NQZzBBRFBoZVAwN29GWVQ3alorSUNEK1AxNGZPdWpwMGRUeDRrTDIy
1281) LzlqalRDNXBCNVF5NW5iOUx3Zk5DUWViSUVpaTZpbU0vRmFrK1dtV05tMndqMERSTEc4RHY3ZkE9
1282) PQpBU0c3NTNGTVVwWmxjK3E1YXRzcC93OUNqN2JPOFlpY24wZHg2UGloTmwzUS9WSjVVeGJmU3l0
1283) ZDFDNDBRU2xXeTJqOTJDWUd3VER6eEdBMXVnb0FCYi9kTllTelVwbHJFb3BuUVphYXdsdTVwV2x0
1284) Y1E5WTcveWN4S2E4b0JaaGY3RkFYcGo2c01wUW9zNzI5VFVabFd4UmI4VFRtN2FrVnR1OXcvYXlK
1285) RS9reDh4ZUYxSGJlc3Q4N1IxTGg2ODd3dS9XVUN2ZjNXYXo1VjNnZWY0RnpUTXg0bkpqSlZOd0U0
1286) SzAxUTlaVzQ0bmVvbExPUVI1MkZDeDZvbml3RW9tenc9PVBLAwQKAAAAAABPuUlZRXky4CsCAAAr
1287) AgAAAgAAADEweyJ2ZXJzaW9uIjoxfQpBWmlYWVlvNUdCY2d5dkFRaGtyK2ZjUkdVSkdabDd2dE5w
1288) T2Mrd1VzbXJhQWhRN3dKdlYraGhKcTlrcWNKQnBWU0gyUTBTTVVhb29iNjBJM1NYNUNtTkJRU2FH
1289) M3prd0Y0T2F4TnpCZUh0NFlpaDd4Y3p2ak4xR0hISDJQYW0xam05K09ja3JLVmNMVURtNXRKb2ZC
1290) Z1E4Q2NwMGZMVkdEaURjNWF0MjVMc2piQVcvNkZFSnJ5VVBHWis4UVdYRmlWMGdtVVZybVc3VUFy
1291) dGhJQitWNTdZS1BORi95Nng2OU43UTFQbmp1cUczdlpybzljMEJ3d012NWoyc3BMMTJHcTdzTDZE
1292) alB1d0dHbnB2MkVZQTFLbmc9CkFTdjQwUkgzRmxzbGVlU1NjRlZNRmh3dEx6eEYxK2xpcmxEL29X
1293) alJLQ05qVWZhUVpJTWpqMWRoVkhOakNUTWhWZ1ZONkl3b04xTnFOMEV6cmdhaTFBWnNiMm9UczYw
1294) QkI1UGh0U0hhQ2U2WllUeE1JemFPS2FIK0w2eHhtaXIrTlQxNTRXS0x5amJMams3MU1na3Nwa0Yy
1295) WDBJMnlaWW5IUUM0bmdEL24yZzRtSVI2Q1hWL0JOUXNzeTBEeXdGLzN6eGRRYWw5cFBtVk1qYnFu
1296) cHY5SFNqRTg4S25naVpBWFhJWU1OVGF2L3Q3Y3dEWGdNekhKTlU0Y2xnVUtIQVZ3QT09UEsDBAoA
1297) AAAAAE+5SVkPfKx9FwIAABcCAAACAAAAMWR7InZlcnNpb24iOjF9CkFYbHNLRzQwZG5ibTJvcXdY
1298) U2ZrSWp3Mmxpa0lDS3hVOXU3TU52VkZ1NEJ2R1FVVitSVVdsS3MxL25TSlBtM2U2OTRvVHdoeDFo
1299) RFF3U0M5U0QvbXd5bnpjSTloUnRCUWVXMkVMOVU5L1ZGcHFsVWY3Z1ZOMHZ0ZWpXYnV4QnhsZlRD
1300) Tys4SFBwU2Zaa2VOUld5R2JNdzBFSU9LTmxRYjk3OUF0c1g3THR0NytaTkJnakZHYkZxaHdwa3kx
1301) WUNDVng1UmNZZ2tma2ZjWnVncGpzc1RzNVFvK1p3QXBEcDZ4V3JjSHMxUDhvNktBRzAwcjZZbkNM
1302) N2ErU1dwZmVNTUJhZz09CkFadVF0cFZMWmVvb292NkdyQlpnb3B6VmRGUXBlK1h6QXZuZ2dPVnZM
1303) VWtCYVF2akl5K1VLdXVUVlFoQ1JiMVp6dGZQL2dsNnoxOEsyZW5sQlo2bGJTZnoxTlBWeUVzYXB3
1304) dDVpUVh4azd5UkJlZks1cFlsNTduUXlmcFZQbzlreFpnOVdHTkV3NVJ5MkExemhnNGl6TWxLRmJh
1305) UjZFZ0FjQ3NFOXAveGRLa29ZNjhOUlZmNXJDM3lMQjc3ZWgyS1hCUld2WDNZcE9XdW00OGtsbmtI
1306) akJjMFpiQmUrT3NZb3d5cXpoRFA2ZGQxRlFnMlFjK09vc3B4V0sycld4M01HZz09UEsBAh4DCgAA
1307) AAAAT7lJWWg5FL7mAAAA5gAAAAUAAAAAAAAAAAAAAKSBAAAAAC5rZXlzUEsBAh4DCgAAAAAAT7lJ
1308) Weut7lIXAgAAFwIAAAIAAAAAAAAAAAAAAKSBCQEAADAzUEsBAh4DCgAAAAAAT7lJWUV5MuArAgAA
1309) KwIAAAIAAAAAAAAAAAAAAKSBQAMAADEwUEsBAh4DCgAAAAAAT7lJWQ98rH0XAgAAFwIAAAIAAAAA
1310) AAAAAAAAAKSBiwUAADFkUEsFBgAAAAAEAAQAwwAAAMIHAAAAAA==
1311) """
1312) 
Marco Ricci Move exporter command-line...

Marco Ricci authored 4 months ago

1313) CANNOT_LOAD_CRYPTOGRAPHY = (
Marco Ricci Replace strings in `derivep...

Marco Ricci authored 1 week ago

1314)     "Cannot load the required Python module 'cryptography'."
Marco Ricci Move exporter command-line...

Marco Ricci authored 4 months ago

1315) )
1316) 
Marco Ricci Test exporter data loading...

Marco Ricci authored 4 months ago

1317) skip_if_cryptography_support = pytest.mark.skipif(
1318)     importlib.util.find_spec('cryptography') is not None,
1319)     reason='cryptography support available; cannot test "no support" scenario',
1320) )
1321) skip_if_no_cryptography_support = pytest.mark.skipif(
1322)     importlib.util.find_spec('cryptography') is None,
1323)     reason='no "cryptography" support',
1324) )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1325) 
Marco Ricci Actually correctly implemen...

Marco Ricci authored 4 weeks ago

1326) 
1327) def hypothesis_settings_coverage_compatible(
1328)     f: Any = None,
1329) ) -> Any:
1330)     settings = (
1331)         hypothesis.settings(
1332)             # Running under coverage with the Python tracer increases
1333)             # running times 40-fold, on my machines.  Sadly, not every
1334)             # Python version offers the C tracer, so sometimes the Python
1335)             # tracer is used anyway.
1336)             deadline=(
1337)                 40 * deadline
1338)                 if (deadline := hypothesis.settings().deadline) is not None
1339)                 else None
1340)             ),
1341)             stateful_step_count=32,
1342)             suppress_health_check=(hypothesis.HealthCheck.too_slow,),
1343)         )
1344)         if sys.gettrace() is not None
Marco Ricci Fix hypothesis settings for...

Marco Ricci authored 3 weeks ago

1345)         else hypothesis.settings(
1346)             stateful_step_count=32,
1347)             suppress_health_check=(hypothesis.HealthCheck.too_slow,),
1348)         )
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 3 months ago

1349)     )
Marco Ricci Actually correctly implemen...

Marco Ricci authored 4 weeks ago

1350)     return settings if f is None else settings(f)
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 3 months ago

1351) 
Marco Ricci Actually correctly implemen...

Marco Ricci authored 4 weeks ago

1352) 
1353) def hypothesis_settings_coverage_compatible_with_caplog(
1354)     f: Any = None,
1355) ) -> Any:
1356)     parent_settings = hypothesis_settings_coverage_compatible()
1357)     settings = hypothesis.settings(
1358)         parent=parent_settings,
1359)         suppress_health_check={
1360)             hypothesis.HealthCheck.function_scoped_fixture,
1361)         }
1362)         | set(parent_settings.suppress_health_check),
1363)     )
1364)     return settings if f is None else settings(f)
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

1365) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1366) 
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 5 months ago

1367) def list_keys(self: Any = None) -> list[_types.KeyCommentPair]:
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

1368)     del self  # Unused.
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 5 months ago

1369)     Pair = _types.KeyCommentPair  # noqa: N806
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1370)     list1 = [
1371)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1372)         for key, value in SUPPORTED_KEYS.items()
1373)     ]
1374)     list2 = [
1375)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1376)         for key, value in UNSUITABLE_KEYS.items()
1377)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1378)     return list1 + list2
1379) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1380) 
Marco Ricci Align behavior with vault c...

Marco Ricci authored 3 months ago

1381) def sign(
1382)     self: Any, key: bytes | bytearray, message: bytes | bytearray
1383) ) -> bytes:
1384)     del self  # Unused.
1385)     assert message == vault.Vault._UUID
1386)     for value in SUPPORTED_KEYS.values():
1387)         if value['public_key_data'] == key:  # pragma: no branch
1388)             assert value['expected_signature'] is not None
1389)             return value['expected_signature']
1390)     raise AssertionError
1391) 
1392) 
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 5 months ago

1393) def list_keys_singleton(self: Any = None) -> list[_types.KeyCommentPair]:
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

1394)     del self  # Unused.
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 5 months ago

1395)     Pair = _types.KeyCommentPair  # noqa: N806
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1396)     list1 = [
1397)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1398)         for key, value in SUPPORTED_KEYS.items()
1399)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1400)     return list1[:1]
1401) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1402) 
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 5 months ago

1403) def suitable_ssh_keys(conn: Any) -> Iterator[_types.KeyCommentPair]:
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

1404)     del conn  # Unused.
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 5 months ago

1405)     Pair = _types.KeyCommentPair  # noqa: N806
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1406)     yield from [
Marco Ricci Move `sequin` and `ssh_agen...

Marco Ricci authored 5 months ago

1407)         Pair(DUMMY_KEY1, b'no comment'),
1408)         Pair(DUMMY_KEY2, b'a comment'),
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1409)     ]
1410) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1411) 
Marco Ricci Fix user interface errors i...

Marco Ricci authored 3 weeks ago

1412) def phrase_from_key(
1413)     key: bytes,
1414)     /,
1415)     *,
1416)     conn: ssh_agent.SSHAgentClient | socket.socket | None = None,
1417) ) -> bytes:
1418)     del conn
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1419)     if key == DUMMY_KEY1:  # pragma: no branch
1420)         return DUMMY_PHRASE_FROM_KEY1
1421)     raise KeyError(key)  # pragma: no cover
1422) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1423) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1424) @contextlib.contextmanager
1425) def isolated_config(
Marco Ricci Clean up testing machinery...

Marco Ricci authored 4 months ago

1426)     monkeypatch: pytest.MonkeyPatch,
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1427)     runner: click.testing.CliRunner,
Marco Ricci Introduce a central user co...

Marco Ricci authored 3 weeks ago

1428)     main_config_str: str | None = None,
Marco Ricci Fix typing issues in mypy s...

Marco Ricci authored 5 months ago

1429) ) -> Iterator[None]:
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 5 months ago

1430)     prog_name = cli.PROG_NAME
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1431)     env_name = prog_name.replace(' ', '_').upper() + '_PATH'
Marco Ricci Refactor code to run under...

Marco Ricci authored 1 month ago

1432)     # Use parenthesized context manager expressions once Python 3.9
1433)     # becomes unsupported.
1434)     with contextlib.ExitStack() as stack:
1435)         stack.enter_context(runner.isolated_filesystem())
1436)         stack.enter_context(cli.StandardCLILogging.ensure_standard_logging())
1437)         stack.enter_context(
1438)             cli.StandardCLILogging.ensure_standard_warnings_logging()
1439)         )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1440)         monkeypatch.setenv('HOME', os.getcwd())
1441)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1442)         monkeypatch.delenv(env_name, raising=False)
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

1443)         config_dir = cli._config_filename(subsystem=None)
1444)         os.makedirs(config_dir, exist_ok=True)
Marco Ricci Introduce a central user co...

Marco Ricci authored 3 weeks ago

1445)         if isinstance(main_config_str, str):
1446)             with open(
1447)                 cli._config_filename('user configuration'),
1448)                 'w',
1449)                 encoding='UTF-8',
1450)             ) as outfile:
1451)                 outfile.write(main_config_str)
Marco Ricci Modularize test helpers to...

Marco Ricci authored 3 months ago

1452)         yield
1453) 
1454) 
1455) @contextlib.contextmanager
1456) def isolated_vault_config(
1457)     monkeypatch: pytest.MonkeyPatch,
1458)     runner: click.testing.CliRunner,
Marco Ricci Introduce a central user co...

Marco Ricci authored 3 weeks ago

1459)     vault_config: Any,
1460)     main_config_str: str | None = None,
Marco Ricci Modularize test helpers to...

Marco Ricci authored 3 months ago

1461) ) -> Iterator[None]:
Marco Ricci Introduce a central user co...

Marco Ricci authored 3 weeks ago

1462)     with isolated_config(
1463)         monkeypatch=monkeypatch, runner=runner, main_config_str=main_config_str
1464)     ):
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

1465)         config_filename = cli._config_filename(subsystem='vault')
1466)         with open(config_filename, 'w', encoding='UTF-8') as outfile:
Marco Ricci Introduce a central user co...

Marco Ricci authored 3 weeks ago

1467)             json.dump(vault_config, outfile)
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1468)         yield
1469) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1470) 
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 4 months ago

1471) @contextlib.contextmanager
1472) def isolated_vault_exporter_config(
1473)     monkeypatch: pytest.MonkeyPatch,
1474)     runner: click.testing.CliRunner,
1475)     vault_config: str | bytes | None = None,
1476)     vault_key: str | None = None,
1477) ) -> Iterator[None]:
1478)     if TYPE_CHECKING:
1479)         chdir = contextlib.chdir
1480)     else:
1481)         try:
1482)             chdir = contextlib.chdir
1483)         except AttributeError:
1484) 
1485)             @contextlib.contextmanager
Marco Ricci Move exporter command-line...

Marco Ricci authored 4 months ago

1486)             def chdir(newpath: str) -> Iterator[None]:  # pragma: no branch
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 4 months ago

1487)                 oldpath = os.getcwd()
1488)                 os.chdir(newpath)
1489)                 yield
1490)                 os.chdir(oldpath)
1491) 
1492)     with runner.isolated_filesystem():
1493)         monkeypatch.setenv('HOME', os.getcwd())
1494)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1495)         monkeypatch.delenv('VAULT_PATH', raising=False)
1496)         monkeypatch.delenv('VAULT_KEY', raising=False)
1497)         monkeypatch.delenv('LOGNAME', raising=False)
1498)         monkeypatch.delenv('USER', raising=False)
1499)         monkeypatch.delenv('USERNAME', raising=False)
1500)         if vault_key is not None:
1501)             monkeypatch.setenv('VAULT_KEY', vault_key)
Marco Ricci Add support for Python 3.9

Marco Ricci authored 3 months ago

1502)         # Use match/case here once Python 3.9 becomes unsupported.
1503)         if isinstance(vault_config, str):
1504)             with open('.vault', 'w', encoding='UTF-8') as outfile:
1505)                 print(vault_config, file=outfile)
1506)         elif isinstance(vault_config, bytes):
1507)             os.makedirs('.vault', mode=0o700, exist_ok=True)
Marco Ricci Refactor code to run under...

Marco Ricci authored 1 month ago

1508)             # Use parenthesized context manager expressions here once
1509)             # Python 3.9 becomes unsupported.
1510)             with contextlib.ExitStack() as stack:
1511)                 stack.enter_context(chdir('.vault'))
1512)                 tmpzipfile = stack.enter_context(
1513)                     tempfile.NamedTemporaryFile(suffix='.zip')
1514)                 )
Marco Ricci Add support for Python 3.9

Marco Ricci authored 3 months ago

1515)                 for line in vault_config.splitlines():
1516)                     tmpzipfile.write(base64.standard_b64decode(line))
1517)                 tmpzipfile.flush()
1518)                 tmpzipfile.seek(0, 0)
1519)                 with zipfile.ZipFile(tmpzipfile.file) as zipfileobj:
1520)                     zipfileobj.extractall()
1521)         elif vault_config is None:
1522)             pass
1523)         else:  # pragma: no cover
1524)             assert_never(vault_config)
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 4 months ago

1525)         yield
1526) 
1527) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1528) def auto_prompt(*args: Any, **kwargs: Any) -> str:
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

1529)     del args, kwargs  # Unused.
Marco Ricci Clean up testing machinery...

Marco Ricci authored 4 months ago

1530)     return DUMMY_PASSPHRASE
Marco Ricci Add missing tests for rewor...

Marco Ricci authored 4 months ago

1531) 
1532) 
1533) def make_file_readonly(
1534)     pathname: str | bytes | os.PathLike[str],
1535)     /,
1536)     *,
1537)     try_race_free_implementation: bool = True,
1538) ) -> None:
1539)     """Mark a file as read-only.
1540) 
1541)     On POSIX, this entails removing the write permission bits for user,
1542)     group and other, and ensuring the read permission bit for user is
1543)     set.
1544) 
1545)     Unfortunately, Windows has its own rules: Set exactly(?) the read
1546)     permission bit for user to make the file read-only, and set
1547)     exactly(?) the write permission bit for user to make the file
1548)     read/write; all other permission bit settings are ignored.
1549) 
1550)     The cross-platform procedure therefore is:
1551) 
1552)     1. Call `os.stat` on the file, noting the permission bits.
1553)     2. Calculate the new permission bits POSIX-style.
1554)     3. Call `os.chmod` with permission bit `stat.S_IREAD`.
1555)     4. Call `os.chmod` with the correct POSIX-style permissions.
1556) 
1557)     If the platform supports it, we use a file descriptor instead of
1558)     a path name.  Otherwise, we use the same path name multiple times,
1559)     and are susceptible to race conditions.
1560) 
1561)     """
1562)     fname: int | str | bytes | os.PathLike[str]
1563)     if try_race_free_implementation and {os.stat, os.chmod} <= os.supports_fd:
1564)         fname = os.open(
1565)             pathname,
1566)             os.O_RDONLY
1567)             | getattr(os, 'O_CLOEXEC', 0)
1568)             | getattr(os, 'O_NOCTTY', 0),
1569)         )
1570)     else:
1571)         fname = pathname
1572)     try:
1573)         orig_mode = os.stat(fname).st_mode
1574)         new_mode = (
1575)             orig_mode & ~stat.S_IWUSR & ~stat.S_IWGRP & ~stat.S_IWOTH
1576)             | stat.S_IREAD
1577)         )
1578)         os.chmod(fname, stat.S_IREAD)
1579)         os.chmod(fname, new_mode)
1580)     finally:
1581)         if isinstance(fname, int):
1582)             os.close(fname)
Marco Ricci Clean up testing machinery...

Marco Ricci authored 4 months ago

1583) 
1584) 
1585) class ReadableResult(NamedTuple):
1586)     """Helper class for formatting and testing click.testing.Result objects."""
1587) 
1588)     exception: BaseException | None
1589)     exit_code: int
1590)     output: str
1591)     stderr: str
1592) 
1593)     @classmethod
1594)     def parse(cls, r: click.testing.Result, /) -> Self:
1595)         try:
1596)             stderr = r.stderr
1597)         except ValueError:
1598)             stderr = r.output
1599)         return cls(r.exception, r.exit_code, r.output or '', stderr or '')
1600) 
1601)     def clean_exit(
1602)         self, *, output: str = '', empty_stderr: bool = False
1603)     ) -> bool:
1604)         """Return whether the invocation exited cleanly.
1605) 
1606)         Args:
1607)             output:
1608)                 An expected output string.
1609) 
1610)         """
1611)         return (
1612)             (
1613)                 not self.exception
1614)                 or (
1615)                     isinstance(self.exception, SystemExit)
1616)                     and self.exit_code == 0
1617)                 )
1618)             )
1619)             and (not output or output in self.output)
1620)             and (not empty_stderr or not self.stderr)
1621)         )
1622) 
1623)     def error_exit(
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

1624)         self,
1625)         *,
1626)         error: str | re.Pattern[str] | type[BaseException] = BaseException,
1627)         record_tuples: Sequence[tuple[str, int, str]] = (),
Marco Ricci Clean up testing machinery...

Marco Ricci authored 4 months ago

1628)     ) -> bool:
1629)         """Return whether the invocation exited uncleanly.
1630) 
1631)         Args:
1632)             error:
1633)                 An expected error message, or an expected numeric error
1634)                 code, or an expected exception type.
1635) 
1636)         """
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

1637) 
1638)         def error_match(error: str | re.Pattern[str], line: str) -> bool:
1639)             return (
1640)                 error in line
1641)                 if isinstance(error, str)
1642)                 else error.match(line) is not None
1643)             )
1644) 
Marco Ricci Add support for Python 3.9

Marco Ricci authored 3 months ago

1645)         # Use match/case here once Python 3.9 becomes unsupported.
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

1646)         if isinstance(error, type):
1647)             return isinstance(self.exception, error)
1648)         else:  # noqa: RET505
1649)             assert isinstance(error, (str, re.Pattern))
Marco Ricci Add support for Python 3.9

Marco Ricci authored 3 months ago

1650)             return (
1651)                 isinstance(self.exception, SystemExit)
1652)                 and self.exit_code > 0
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

1653)                 and (
1654)                     not error
1655)                     or any(
1656)                         error_match(error, line)
1657)                         for line in self.stderr.splitlines(True)
1658)                     )
1659)                     or error_emitted(error, record_tuples)
1660)                 )
Marco Ricci Add support for Python 3.9

Marco Ricci authored 3 months ago

1661)             )
Marco Ricci Add test fixture for manual...

Marco Ricci authored 3 months ago

1662) 
1663) 
1664) def parse_sh_export_line(line: str, *, env_name: str) -> str:
1665)     line = line.rstrip('\r\n')
1666)     shlex_parser = shlex.shlex(
1667)         instream=line, posix=True, punctuation_chars=True
1668)     )
1669)     shlex_parser.whitespace = ' \t'
1670)     tokens = list(shlex_parser)
1671)     orig_tokens = tokens.copy()
1672)     if tokens[-1] == ';':
1673)         tokens.pop()
1674)     if tokens[-3:] == [';', 'export', env_name]:
1675)         tokens[-3:] = []
1676)         tokens[:0] = ['export']
1677)     if not (
1678)         len(tokens) == 2
1679)         and tokens[0] == 'export'
1680)         and tokens[1].startswith(f'{env_name}=')
1681)     ):
1682)         msg = f'Cannot parse sh line: {orig_tokens!r} -> {tokens!r}'
1683)         raise ValueError(msg)
1684)     return tokens[1].split('=', 1)[1]
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

1685) 
1686) 
1687) def message_emitted_factory(
1688)     level: int,
1689)     *,
1690)     logger_name: str = cli.PROG_NAME,
1691) ) -> Callable[[str | re.Pattern[str], Sequence[tuple[str, int, str]]], bool]:
1692)     """Return a function to test if a matching message was emitted.
1693) 
1694)     Args:
1695)         level: The level to match messages at.
1696)         logger_name: The name of the logger to match against.
1697) 
1698)     """
1699) 
1700)     def message_emitted(
1701)         text: str | re.Pattern[str],
1702)         record_tuples: Sequence[tuple[str, int, str]],
1703)     ) -> bool:
1704)         """Return true if a matching message was emitted.
1705) 
1706)         Args:
1707)             text: Substring or pattern to match against.
1708)             record_tuples: Items to match.
1709) 
1710)         """
1711) 
1712)         def check_record(record: tuple[str, int, str]) -> bool:
1713)             if record[:2] != (logger_name, level):
1714)                 return False
1715)             if isinstance(text, str):
1716)                 return text in record[2]
1717)             return text.match(record[2]) is not None  # pragma: no cover
1718) 
1719)         return any(map(check_record, record_tuples))
1720) 
1721)     return message_emitted
1722) 
1723) 
1724) # No need to assert debug messages as of yet.
1725) info_emitted = message_emitted_factory(logging.INFO)
1726) warning_emitted = message_emitted_factory(logging.WARNING)
1727) deprecation_warning_emitted = message_emitted_factory(
1728)     logging.WARNING, logger_name=f'{cli.PROG_NAME}.deprecation'
1729) )
Marco Ricci Fix usage of `--debug`, `--...

Marco Ricci authored 3 weeks ago

1730) deprecation_info_emitted = message_emitted_factory(
1731)     logging.INFO, logger_name=f'{cli.PROG_NAME}.deprecation'
1732) )