summaryrefslogtreecommitdiffstats
path: root/nixos/tests/anki-sync-server.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/tests/anki-sync-server.nix')
-rw-r--r--nixos/tests/anki-sync-server.nix71
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 000000000000..7d08cc9cb878
--- /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}")
+ '';
+})