https://git.schokokeks.org/derivepassphrase.git/tree/01cc80bfa5585ce8cff561e341852e3d522a30beRecent commits to derivepassphrase.git (01cc80bfa5585ce8cff561e341852e3d522a30be)2025-05-29T23:04:56+02:00tag:gitlist.org,2012:commit/01cc80bfa5585ce8cff561e341852e3d522a30beMerge topic branch 'click-821-prompt-testing' into master2025-05-29T23:04:56+02:00Marco Riccisoftware@the13thletter.info
<pre>* click-821-prompt-testing:
Mitigate testing discrepancies from click 8.2.0 and below
</pre>
tag:gitlist.org,2012:commit/62c0d2918d5a152b18510e781a1f29ea0584f638Mitigate testing discrepancies from click 8.2.0 and below2025-05-29T23:02:50+02:00Marco Riccisoftware@the13thletter.info
<pre>A discrepancy exists between the documentation of `click.prompt` and the
actual behavior of `click.prompt` when mocked with
`click.testing.CliRunner` on click 8.2.0 and below
([`pallets/click#2934`][BUG2934]): when prompting for input and if at
end-of-file, the `CliRunner` may return an empty string instead of
raising `click.Abort`. This usually translates to extra line breaks in
the "mixed" and "echoed" runner output at the last prompt(s).
We mitigate this discrepancy from both sides. On the code side, we wrap
each call to `click.prompt` to treat aborts and empty responses the
same, which is appropriate behavior for the types of prompts we issue.
On the test side, we amend our existing tests to use empty-line input
instead of no input, and explicitly test the "no input" scenario
separately, accepting both the 8.2.0-or-lower or the 8.2.1-or-higher
output. Because the behavior depends on the `click` version, which is
beyond our control, we also adjust coverage measurement.
[BUG2934]: https://github.com/pallets/click/issues/2934
</pre>
tag:gitlist.org,2012:commit/7ecfed1ef6bbc4cbe56546efec19a5f14376f373Merge topic branch 'the-annoying-os' into master2025-05-23T00:03:24+02:00Marco Riccisoftware@the13thletter.info
<pre>* the-annoying-os:
Exclude unused test function xfail_on_the_annoying_os from coverage
Document the changes due to The Annoying OS in the changelog
Add changes necessary to appease The Annoying OS
</pre>
tag:gitlist.org,2012:commit/e893fee9e8ae9dbb0636f951a1d5eb6147a2256dExclude unused test function xfail_on_the_annoying_os from coverage2025-05-23T00:01:28+02:00Marco Riccisoftware@the13thletter.info
<pre></pre>
tag:gitlist.org,2012:commit/b6ffcb5bca3ed6f90992774ee5c0dbd9e600750dDocument the changes due to The Annoying OS in the changelog2025-05-22T23:16:25+02:00Marco Riccisoftware@the13thletter.info
<pre></pre>
tag:gitlist.org,2012:commit/4d95672a9d6faa5531bf9be9f180b864c93a4053Add changes necessary to appease The Annoying OS2025-05-22T23:14:58+02:00Marco Riccisoftware@the13thletter.info
<pre>Add the changes that are necessary to appease The Annoying Operating
System, a.k.a. Microsoft Windows.
Some of these changes are OS-specific and (mostly) sensible, such as
error codes being slightly different, or some functionality not being
available. Some of these changes are coincidental, such as linting
or type checking errors because unavailable symbols aren't even defined
for the type checker's benefit. Finally, some changes are outright
stupid, such as Python's documentation on `tempfile.gettempdir` being
incomplete.
In the end, most changes boil down to checking for a range of error
codes instead of a specific one, or adding missing fixture calls, or
silencing type checker warnings that aren't encountered in practice, or
ruling out bad degenerate hypothesis test cases that aren't degenerate
or aren't functional at all on The Annoying OS.
</pre>
tag:gitlist.org,2012:commit/1cefab9b2c4c51366b0daa1eb06f1652ef6e53fdMerge topic branch 'concurrency-testing' into master2025-05-20T20:12:39+02:00Marco Riccisoftware@the13thletter.info
<pre>* concurrency-testing:
Document the new concurrency testing setup in the changelog
Add tests for the configuration mutex
Convert the configuration mutex to an explicit class
GitHub: Closes #23.
</pre>
tag:gitlist.org,2012:commit/e2a78697e37719107c025ae6a8a9dce25dfb3943Document the new concurrency testing setup in the changelog2025-05-19T21:45:21+02:00Marco Riccisoftware@the13thletter.info
<pre></pre>
tag:gitlist.org,2012:commit/47376f4dcf2a2cc121df9b44b94b4036bf1bdb3bAdd tests for the configuration mutex2025-05-18T23:08:44+02:00Marco Riccisoftware@the13thletter.info
<pre>Conceptually, we need two types of tests for the configuration mutex:
the first type asserts that the program logic works for *any* kind of
(potentially fake) configuration mutex, and the second type asserts that
the configuration mutex works for *any* set of (potentially fake)
operations. In both cases, the fake parts usually impose a specific
order of locking or running, controllable from the outside.
We modify the `ConfigurationMutex` class to shift the management of the
lock file descriptor into the lock and unlock functions themselves,
instead of cramming them into `__enter__` and `__exit__`. (This means
that subclasses need not deal with the lock file, or in fact, with any
of the platform-specific locking machinery.) A custom subclass in the
`tests` namespace provides a faked mutex that imposes a specific locking
order, controllable from the outside via message passing. This subclass
is then used with a state machine to test various sets of operations
together with the faked mutex, i.e. to provide tests of the first type.
(The standard tests, executed with the actual mutex implementation,
already provide tests of the second type.)
Regrettably, this set of tests requires concurrency support.
Specifically, because the click testing machinery needs to reset
process-wide properties for each concurrent unit, and because the tests
require this to be done in a time-overlapped manner, the tests
specifically require multiprocessing support. Care must also be taken
to ensure that coverage management works: that it is enabled in the
subprocesses whenever it is enabled in the parent (which is
a straightforward configuration issue), and that the parent process does
not accidentally remove these coverage measurements as junk files in
case the subprocesses are spawned in specifically prepared and
automatically cleaned up temporary directories (which is a manual labor
issue).
</pre>
tag:gitlist.org,2012:commit/48d3973ca29372cdaff248fcb742c61c8bcf3430Convert the configuration mutex to an explicit class2025-04-12T20:01:40+02:00Marco Riccisoftware@the13thletter.info
<pre>The class form is easier to monkeypatch than the generator form.
</pre>