mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-07-06 17:13:24 -05:00
81 lines
2.4 KiB
Nix
81 lines
2.4 KiB
Nix
{ pkgs, ... }:
|
|
let
|
|
ankiSyncTest = pkgs.writeScript "anki-sync-test.py" ''
|
|
#!${pkgs.python3}/bin/python
|
|
|
|
import sys
|
|
import os
|
|
|
|
# anki is built with buildPythonApplication.
|
|
# anki.lib is not a 'proper' python library, meaning it
|
|
# is not recognized in 'withPackages' (due to hasPythonModule in
|
|
# https://github.com/NixOS/nixpkgs/blob/7ef35a9f3abb638647d68b10cccae549094b8054/pkgs/development/interpreters/python/python-packages-base.nix#L89
|
|
# and contains the collection of all python libraries used
|
|
# by anki rather than just the anki itself.
|
|
anki_libs = "${pkgs.anki.lib}/${pkgs.python3.sitePackages}"
|
|
if not os.path.isdir(anki_libs):
|
|
print(f"'{anki_libs}' not found, possible python version mismatch")
|
|
exit(1)
|
|
sys.path.append(anki_libs)
|
|
|
|
import anki.collection
|
|
|
|
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 = {
|
|
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}")
|
|
'';
|
|
}
|