1{ pkgs, ... }:
2let
3 client =
4 { pkgs, ... }:
5 {
6 environment.systemPackages = [ pkgs.croc ];
7 };
8 pass = "PassRelay";
9in
10{
11 name = "croc";
12 meta = with pkgs.lib.maintainers; {
13 maintainers = [
14 equirosa
15 SuperSandro2000
16 ryan4yin
17 ];
18 };
19
20 nodes = {
21 relay = {
22 services.croc = {
23 enable = true;
24 pass = pass;
25 openFirewall = true;
26 };
27 };
28 sender = client;
29 receiver = client;
30 };
31
32 testScript = ''
33 start_all()
34
35 # wait until relay is up
36 relay.wait_for_unit("croc")
37 relay.wait_for_open_port(9009)
38 relay.wait_for_open_port(9010)
39 relay.wait_for_open_port(9011)
40 relay.wait_for_open_port(9012)
41 relay.wait_for_open_port(9013)
42
43 # generate testfiles and send them
44 sender.wait_for_unit("multi-user.target")
45 sender.execute("echo Hello World > testfile01.txt")
46 sender.execute("echo Hello Earth > testfile02.txt")
47 sender.execute(
48 "env CROC_SECRET=topSecret croc --pass ${pass} --relay relay send testfile01.txt testfile02.txt >&2 &"
49 )
50
51 # receive the testfiles and check them
52 receiver.succeed(
53 "env CROC_SECRET=topSecret croc --pass ${pass} --yes --relay relay"
54 )
55 assert "Hello World" in receiver.succeed("cat testfile01.txt")
56 assert "Hello Earth" in receiver.succeed("cat testfile02.txt")
57 '';
58}