1{ pkgs, ... }:
2{
3 name = "vsftpd";
4
5 nodes = {
6 server = {
7 services.vsftpd = {
8 enable = true;
9 userlistDeny = false;
10 localUsers = true;
11 userlist = [ "ftp-test-user" ];
12 writeEnable = true;
13 localRoot = "/tmp";
14 };
15 networking.firewall.enable = false;
16
17 users = {
18 users.ftp-test-user = {
19 isSystemUser = true;
20 password = "ftp-test-password";
21 group = "ftp-test-group";
22 };
23 groups.ftp-test-group = { };
24 };
25 };
26
27 client = { };
28 };
29
30 testScript = ''
31 client.start()
32 server.wait_for_unit("vsftpd")
33 server.wait_for_open_port(21)
34
35 client.succeed("curl -u ftp-test-user:ftp-test-password ftp://server")
36 client.succeed('echo "this is a test" > /tmp/test.file.up')
37 client.succeed("curl -v -T /tmp/test.file.up -u ftp-test-user:ftp-test-password ftp://server")
38 client.succeed("curl -u ftp-test-user:ftp-test-password ftp://server/test.file.up > /tmp/test.file.down")
39 client.succeed("diff /tmp/test.file.up /tmp/test.file.down")
40 assert client.succeed("cat /tmp/test.file.up") == server.succeed("cat /tmp/test.file.up")
41 assert client.succeed("cat /tmp/test.file.down") == server.succeed("cat /tmp/test.file.up")
42 '';
43}