diff options
author | Dominique Martinet <asmadeus@codewreck.org> | 2023-09-25 22:01:02 +0900 |
---|---|---|
committer | Weijia Wang <9713184+wegank@users.noreply.github.com> | 2023-11-30 17:25:27 +0100 |
commit | f0f6c7778197ad6e8bd775e2dbfcbe74a00f3aa1 (patch) | |
tree | 12cb1a829dd1d47aeb59e116f8282091f548112f /nixos/tests/anki-sync-server.nix | |
parent | 8fe9c18ed3986a8e0f4e738db1ee7b82d30ce68b (diff) |
nixos/tests/anki-sync-server: add anki sync test
Start anki-sync-server service and drive anki manually through its python lib to test sync. The anki python part isn't a stable API and might require freqent rework, let's see if it holds up...
Diffstat (limited to 'nixos/tests/anki-sync-server.nix')
-rw-r--r-- | nixos/tests/anki-sync-server.nix | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/nixos/tests/anki-sync-server.nix b/nixos/tests/anki-sync-server.nix new file mode 100644 index 0000000000000..7d08cc9cb878e --- /dev/null +++ b/nixos/tests/anki-sync-server.nix @@ -0,0 +1,71 @@ +import ./make-test-python.nix ({ pkgs, ... }: + let + ankiSyncTest = pkgs.writeScript "anki-sync-test.py" '' + #!${pkgs.python3}/bin/python + + import sys + + # get site paths from anki itself + from runpy import run_path + run_path("${pkgs.anki}/bin/.anki-wrapped") + import anki + + col = anki.collection.Collection('test_collection') + endpoint = 'http://localhost:27701' + + # Sanity check: verify bad login fails + try: + col.sync_login('baduser', 'badpass', endpoint) + print("bad user login worked?!") + sys.exit(1) + except anki.errors.SyncError: + pass + + # test logging in to users + col.sync_login('user', 'password', endpoint) + col.sync_login('passfileuser', 'passfilepassword', endpoint) + + # Test actual sync. login apparently doesn't remember the endpoint... + login = col.sync_login('user', 'password', endpoint) + login.endpoint = endpoint + sync = col.sync_collection(login, False) + assert sync.required == sync.NO_CHANGES + # TODO: create an archive with server content including a test card + # and check we got it? + ''; + testPasswordFile = pkgs.writeText "anki-password" "passfilepassword"; + in + { + name = "anki-sync-server"; + meta = with pkgs.lib.maintainers; { + maintainers = [ martinetd ]; + }; + + nodes.machine = { pkgs, ...}: { + services.anki-sync-server = { + enable = true; + users = [ + { username = "user"; + password = "password"; + } + { username = "passfileuser"; + passwordFile = testPasswordFile; + } + ]; + }; + }; + + + testScript = + '' + start_all() + + with subtest("Server starts successfully"): + # service won't start without users + machine.wait_for_unit("anki-sync-server.service") + machine.wait_for_open_port(27701) + + with subtest("Can sync"): + machine.succeed("${ankiSyncTest}") + ''; +}) |