lol

nixos/c2fmzq-server: add test

Co-authored-by: h7x4 <h7x4@nani.wtf>

+79
+1
nixos/tests/all-tests.nix
··· 153 153 budgie = handleTest ./budgie.nix {}; 154 154 buildbot = handleTest ./buildbot.nix {}; 155 155 buildkite-agents = handleTest ./buildkite-agents.nix {}; 156 + c2fmzq = handleTest ./c2fmzq.nix {}; 156 157 caddy = handleTest ./caddy.nix {}; 157 158 cadvisor = handleTestOn ["x86_64-linux"] ./cadvisor.nix {}; 158 159 cage = handleTest ./cage.nix {};
+75
nixos/tests/c2fmzq.nix
··· 1 + import ./make-test-python.nix ({ pkgs, lib, ... }: { 2 + name = "c2FmZQ"; 3 + meta.maintainers = with lib.maintainers; [ hmenke ]; 4 + 5 + nodes.machine = { 6 + services.c2fmzq-server = { 7 + enable = true; 8 + port = 8080; 9 + passphraseFile = builtins.toFile "pwfile" "hunter2"; # don't do this on real deployments 10 + settings = { 11 + verbose = 3; # debug 12 + }; 13 + }; 14 + environment = { 15 + sessionVariables = { 16 + C2FMZQ_PASSPHRASE = "lol"; 17 + C2FMZQ_API_SERVER = "http://localhost:8080"; 18 + }; 19 + systemPackages = [ 20 + pkgs.c2fmzq 21 + (pkgs.writeScriptBin "c2FmZQ-client-wrapper" '' 22 + #!${pkgs.expect}/bin/expect -f 23 + spawn c2FmZQ-client {*}$argv 24 + expect { 25 + "Enter password:" { send "$env(PASSWORD)\r" } 26 + "Type YES to confirm:" { send "YES\r" } 27 + timeout { exit 1 } 28 + eof { exit 0 } 29 + } 30 + interact 31 + '') 32 + ]; 33 + }; 34 + }; 35 + 36 + testScript = { nodes, ... }: '' 37 + machine.start() 38 + machine.wait_for_unit("c2fmzq-server.service") 39 + machine.wait_for_open_port(8080) 40 + 41 + with subtest("Create accounts for alice and bob"): 42 + machine.succeed("PASSWORD=foobar c2FmZQ-client-wrapper -- -v 3 create-account alice@example.com") 43 + machine.succeed("PASSWORD=fizzbuzz c2FmZQ-client-wrapper -- -v 3 create-account bob@example.com") 44 + 45 + with subtest("Log in as alice"): 46 + machine.succeed("PASSWORD=foobar c2FmZQ-client-wrapper -- -v 3 login alice@example.com") 47 + msg = machine.succeed("c2FmZQ-client -v 3 status") 48 + assert "Logged in as alice@example.com" in msg, f"ERROR: Not logged in as alice:\n{msg}" 49 + 50 + with subtest("Create a new album, upload a file, and delete the uploaded file"): 51 + machine.succeed("c2FmZQ-client -v 3 create-album 'Rarest Memes'") 52 + machine.succeed("echo 'pls do not steal' > meme.txt") 53 + machine.succeed("c2FmZQ-client -v 3 import meme.txt 'Rarest Memes'") 54 + machine.succeed("c2FmZQ-client -v 3 sync") 55 + machine.succeed("rm meme.txt") 56 + 57 + with subtest("Share the album with bob"): 58 + machine.succeed("c2FmZQ-client-wrapper -- -v 3 share 'Rarest Memes' bob@example.com") 59 + 60 + with subtest("Log in as bob"): 61 + machine.succeed("PASSWORD=fizzbuzz c2FmZQ-client-wrapper -- -v 3 login bob@example.com") 62 + msg = machine.succeed("c2FmZQ-client -v 3 status") 63 + assert "Logged in as bob@example.com" in msg, f"ERROR: Not logged in as bob:\n{msg}" 64 + 65 + with subtest("Download the shared file"): 66 + machine.succeed("c2FmZQ-client -v 3 download 'shared/Rarest Memes/meme.txt'") 67 + machine.succeed("c2FmZQ-client -v 3 export 'shared/Rarest Memes/meme.txt' .") 68 + msg = machine.succeed("cat meme.txt") 69 + assert "pls do not steal\n" == msg, f"File content is not the same:\n{msg}" 70 + 71 + with subtest("Test that PWA is served"): 72 + msg = machine.succeed("curl -sSfL http://localhost:8080") 73 + assert "c2FmZQ" in msg, f"Could not find 'c2FmZQ' in the output:\n{msg}" 74 + ''; 75 + })
+3
pkgs/by-name/c2/c2fmzq/package.nix
··· 1 1 { lib 2 2 , buildGoModule 3 3 , fetchFromGitHub 4 + , nixosTests 4 5 }: 5 6 6 7 buildGoModule rec { ··· 21 22 vendorHash = "sha256-Hz6P+ptn1i+8Ek3pp8j+iB8NN5Xks50jyZuT8Ullxbo="; 22 23 23 24 subPackages = [ "c2FmZQ-client" "c2FmZQ-server" ]; 25 + 26 + passthru.tests = { inherit (nixosTests) c2fmzq; }; 24 27 25 28 meta = with lib; { 26 29 description = "Securely encrypt, store, and share files, including but not limited to pictures and videos";