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}