1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-14 16:27:13 +03:00

42 Commits

Author SHA1 Message Date
David Sangrey
473bd1cdf6
[2051] Replace More Old-Style Union/Opts
And re-adds the missing but deprecated abstracts in config
2023-11-16 13:21:54 -05:00
David Sangrey
28e10b70ef
[2051] Add Tests and gitignore File 2023-10-19 20:06:52 -04:00
Athanasius
90183554ef
tests/journal_lock: Use proper pytest types in fixtures
When I last typed this I couldn't find any official way to type `pytest`
fixtures.  Perhaps that was before:

    https://docs.pytest.org/en/6.2.x/changelog.html#improvements

which now makes it clean and simple.
2022-12-23 14:48:26 +00:00
Athanasius
25dfb0588a
tests/journal_lock: Minor typing fixes. 2022-12-23 14:47:14 +00:00
Athanasius
0aa74b8755
tests: journal: Change py LocalPath type to be _pytest.tmpdir.TempPathFactory
This is more correct, and means we don't need the `py` module, which wasn't
in requirements-dev.txt, causing GitHub workflow `pytest` runs to fail.
2022-10-29 16:01:39 +01:00
Athanasius
5a0e31436b
tests: journal_lock: Works 100% on Linux, remove 'plan' docstring text 2022-09-07 12:27:35 +01:00
Athanasius
480b0712dd
tests: journal_lock: Close filehandle in test_obtain_lock_already_locked()
After the test completes as expected (ALREADY_LOCKED), ensure we close the
filehandle for that, else it seems to interfere with the sub-process
cleanup, which then leads to subsequent tests not being able to cleanup.

Tests as now working after 10s of runs of `pytest` in a loop.
2022-09-07 12:21:57 +01:00
Athanasius
77e7f71ee3
tests: journal_lock: Add, and use, _release_lock() to fix TestJournalLock.test_release_lock
Because the `with ...` was leaving the file locked it then couldn't be
`os.unlink()`'d.
2022-09-07 12:03:50 +01:00
Athanasius
130bd619cf
tests: journal_lock: Cleanup properly in test_update_lock()
* As this involved two directories we also need to clean up the 'old' one.
2022-09-05 12:55:39 +01:00
Athanasius
725473e2db
tests: journal_lock: Finale factory change fixups & cleanup
* `test_release_lock()` needed `.getbasetemp()` on `mock_journaldir` usage.
* Add removal of lock file to `other_process_lock()`
2022-09-05 12:51:52 +01:00
Athanasius
34f1989b0b
tests: journal_lock: Use .getbasetemp() in test_obtain_lock_already_locked 2022-09-05 12:49:11 +01:00
Athanasius
fb0c139865
tests: journal_lock: Ensure all tests, that should, clean up 2022-09-05 12:44:13 +01:00
Athanasius
ddf6669f35
tests: journal_lock: fix test_obtain_lock_with_tmpdir_ro()
* Set `tmpdir` properly for this test.
* Do **NOT** unset `JournalLock.journal_dir_lockfile_name` on release, as
  this is needed to remove the file
* Ensure prior test(s) release their locks, *and* remove the file.
2022-09-05 12:39:03 +01:00
Athanasius
27d93b5f31
tests: journal_lock: Need <factory>.getbasetemp() and str() as necessary 2022-09-05 12:17:54 +01:00
Athanasius
9915c5435d
tests: journal_lock: test_update_lock_same: Make .obtain.lock() an assert 2022-09-05 11:51:12 +01:00
Athanasius
b47f278655
tests: journal_lock: Fix test_journal_lock_init test
* It's `tmp_path_factory` now, not `tmpdir_factory`.
* Need to `str(...)` if a string is what we want.
2022-09-05 11:49:05 +01:00
Athanasius
cc37b23db4
tests: journal_lock: Fix up pytest tmpdir types 2022-09-05 09:22:55 +01:00
Athanasius
b6dcc39fb2 JournalLock: No need to ' is True' on assert 2021-04-01 14:45:52 +01:00
Athanasius
0811a000ed JournalLock: tests - Expand on comment about other_process_lock() section 2021-04-01 14:45:52 +01:00
Athanasius
d0617ba337 JournalLock: tests - minor docstring and formatting cleanups 2021-04-01 14:45:52 +01:00
Athanasius
f2fd16307c JournalLock: Cleanup pytest coverage
* Some `# pragma: no cover' added where it's more pain to get coverage
  than to put up with lack of testing.

  We are choosing to NOT test retry_lock() or the call to it from
  update_lock() as it's tkinter stuff.
* Check `self.journal_dir_lockfile` exists before trying to call
  .close() on it.
* Note where platform checks means only one if branch gets run, so of
  course coverage will complain about the other one.
* Add test_release_lock_lie_locked() to test when not locked, but
  pretend we were so release_lock() returns False.
* Add test_update_lock_same() to check if an attempt is made to 'update'
  to the same directory.
2021-04-01 14:45:52 +01:00
Athanasius
8bf5a43c5b JournalLock: Add release_lock() test when not locked. 2021-04-01 14:45:52 +01:00
Athanasius
2fa3428581 JournalLock: Actually, just passing None as the tk.Tk parent works.
In the PASSED case we never even make a JournalAlreadyLocked instance.
In the FAILED case let it blow up on the `None`.
2021-04-01 14:45:52 +01:00
Athanasius
baca42f06e JournalLock: Fix update_lock() with an extra mock
* update_lock() wants to, potentially, invoke
  JournalLock.JournalAlreadyLocked() instance for a tkinter pop-up.
  We do *not* want to mock all of that, so monkeypatch a mock so that in
  the 'test PASSED' case this just works.
2021-04-01 14:45:52 +01:00
Athanasius
8c74d46368 JournalLock: Implement update_lock() test.
* This uses a separate mock_journaldir_changing() that returns a new
  tmpdir on each invocation of config.get_str('journaldir').
2021-04-01 14:45:52 +01:00
Athanasius
0c9b841e80 JournalLock: Test release_lock()
This re-factored other_process_lock() a little for DRY reasons.
2021-04-01 14:45:52 +01:00
Athanasius
cda6d344ae JournalLock: Tag sub-process locker prints for easy reading 2021-04-01 14:45:52 +01:00
Athanasius
1a1ad86840 JournalLock: Implement non-win32 sub-process lock 2021-04-01 14:45:52 +01:00
Athanasius
6d33ee0d8b JournalLock: Use multiprocessing for 'already locked' test.
Confirmed working on Windows.
2021-04-01 14:45:52 +01:00
Athanasius
e84af6ae7f Update: "TODO" tests comments 2021-04-01 14:45:52 +01:00
Athanasius
1fca5703c1 Add self.locked asserts as check on _obtain_lock() side effects 2021-04-01 14:45:52 +01:00
Athanasius
cfdf9fbf20 Re-factor JournalLock.obtain_lock() for 'ALREADY_LOCKED' test.
This splits the code for opening the lockfile away from that for
actually obtaining the lock.  It enables a test for trying to lock again
with the same file handle.
2021-04-01 14:45:52 +01:00
Athanasius
70bdc5e0e9 Read-Only obtain_lock() test commented and cleaned up.
* Comment added about what you'd see if you could check tmpdir
  properties whilst it's set !Write.
* Deleted all the testing print()s.
2021-04-01 14:45:52 +01:00
Athanasius
ec230a9c05 Make tmpdir non-writable for the read-only test
* On win32 this uses pywin32 package modules, so that's now in
  requirements-dev.txt.
* I *think* that code is as clean as it's going to be.  Windows is a
  pain with having you *append* a Deny ACL (rather than remove an Allow
  one), and then you have to find it in all the ACLs for the object in
  order to remove it by index.
* Linux version of this using `os.chmod()` currently untested.
2021-04-01 14:45:52 +01:00
Athanasius
fbad8e240f obtain_lock() Read-Only test
Only tested under win32 so far, but I'd hope os.chmod() is the way to go
on Linux and macOS.

The win32 implementation currently relies on the pywin32 package being
installed in order to use its ntsecuritycon and win32security modules.
It might be possible to do this with ctypes instead, but this sure looks
cleaner than most ctypes code I've seen.
2021-04-01 14:45:52 +01:00
Athanasius
80b99195eb Differentiate test docstrings. 2021-04-01 14:45:52 +01:00
Athanasius
12e5d26276 Add tests on JournalLock.set_path_from_journaldir() 2021-04-01 14:45:51 +01:00
Athanasius
7bd6e8ff58 Move test & fixture into a class.
This is for then adding more tests.
2021-04-01 14:45:51 +01:00
Athanasius
c344d612ad No need to str(tmpdir), as comparison works without now. 2021-04-01 14:45:51 +01:00
Athanasius
509a1f2c2e Rename mock_get_str() to mock_journaldir() 2021-04-01 14:45:51 +01:00
Athanasius
a325c62765 Generalise mock get_str() for re-use, and add asserts
* mock get_str() is now via a fixture so it can be re-used in more than
  one test, avoiding DRY issue.
* Some actual tests, in the form of asserts, added to
  test_journal_lock_init().
2021-04-01 14:45:51 +01:00
Athanasius
8612e772cf tests/journal_lock.py: Initial framework.
No actual test per se yet, but this runs with `pytest -k 'journal_lock'`
2021-04-01 14:45:51 +01:00