1{ pkgs, lib, ... }:
2
3let
4 port = 1080;
5
6 client =
7 { pkgs, ... }:
8 {
9 environment.systemPackages = [ pkgs.curl ];
10 };
11
12 server =
13 { pkgs, ... }:
14 {
15 # tusd does not have a NixOS service yet.
16 systemd.services.tusd = {
17 wantedBy = [ "multi-user.target" ];
18
19 serviceConfig = {
20 ExecStart = ''${pkgs.tusd}/bin/tusd -port "${toString port}" -upload-dir=/data'';
21 };
22 };
23 networking.firewall.allowedTCPPorts = [ port ];
24 };
25in
26{
27 name = "tusd";
28 meta.maintainers = with lib.maintainers; [
29 nh2
30 kalbasit
31 ];
32
33 nodes = {
34 inherit server;
35 inherit client;
36 };
37
38 testScript = ''
39 server.wait_for_unit("tusd.service")
40 server.wait_for_open_port(${toString port})
41
42 # Create large file.
43 client.succeed("${pkgs.coreutils}/bin/truncate --size=100M file-100M.bin")
44
45 # Upload it.
46 client.wait_for_unit("network.target")
47 client.succeed("${./tus-curl-upload.sh} file-100M.bin http://server:${toString port}/files/")
48
49 print("Upload succeeded")
50 '';
51}