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...
This commit is contained in:
parent
8fe9c18ed3
commit
f0f6c77781
3 changed files with 74 additions and 0 deletions
|
@ -120,6 +120,7 @@ in {
|
||||||
amazon-ssm-agent = handleTest ./amazon-ssm-agent.nix {};
|
amazon-ssm-agent = handleTest ./amazon-ssm-agent.nix {};
|
||||||
amd-sev = runTest ./amd-sev.nix;
|
amd-sev = runTest ./amd-sev.nix;
|
||||||
anbox = runTest ./anbox.nix;
|
anbox = runTest ./anbox.nix;
|
||||||
|
anki-sync-server = handleTest ./anki-sync-server.nix {};
|
||||||
anuko-time-tracker = handleTest ./anuko-time-tracker.nix {};
|
anuko-time-tracker = handleTest ./anuko-time-tracker.nix {};
|
||||||
apcupsd = handleTest ./apcupsd.nix {};
|
apcupsd = handleTest ./apcupsd.nix {};
|
||||||
apfs = runTest ./apfs.nix;
|
apfs = runTest ./apfs.nix;
|
||||||
|
|
71
nixos/tests/anki-sync-server.nix
Normal file
71
nixos/tests/anki-sync-server.nix
Normal file
|
@ -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}")
|
||||||
|
'';
|
||||||
|
})
|
|
@ -9,6 +9,7 @@
|
||||||
, lame
|
, lame
|
||||||
, mpv-unwrapped
|
, mpv-unwrapped
|
||||||
, ninja
|
, ninja
|
||||||
|
, nixosTests
|
||||||
, nodejs
|
, nodejs
|
||||||
, nodejs-slim
|
, nodejs-slim
|
||||||
, prefetch-yarn-deps
|
, prefetch-yarn-deps
|
||||||
|
@ -270,6 +271,7 @@ python3.pkgs.buildPythonApplication {
|
||||||
passthru = {
|
passthru = {
|
||||||
# cargoLock is reused in anki-sync-server
|
# cargoLock is reused in anki-sync-server
|
||||||
inherit cargoLock;
|
inherit cargoLock;
|
||||||
|
tests.anki-sync-server = nixosTests.anki-sync-server;
|
||||||
};
|
};
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
|
|
Loading…
Reference in a new issue