at master 3.1 kB view raw
1{ 2 pkgs, 3 config, 4 ... 5}: 6{ 7 name = "davis"; 8 9 meta.maintainers = pkgs.davis.meta.maintainers; 10 11 nodes.machine1 = 12 { config, ... }: 13 { 14 virtualisation = { 15 memorySize = 512; 16 }; 17 18 services.davis = { 19 enable = true; 20 hostname = "davis.example.com"; 21 database = { 22 driver = "postgresql"; 23 }; 24 mail = { 25 dsnFile = "${pkgs.writeText "davisMailDns" "smtp://username:password@example.com:25"}"; 26 inviteFromAddress = "dav@example.com"; 27 }; 28 adminLogin = "admin"; 29 appSecretFile = "${pkgs.writeText "davisAppSecret" "52882ef142066e09ab99ce816ba72522e789505caba224"}"; 30 adminPasswordFile = "${pkgs.writeText "davisAdminPass" "nixos"}"; 31 }; 32 }; 33 nodes.machine2 = 34 { nodes, config, ... }: 35 { 36 virtualisation = { 37 memorySize = 512; 38 }; 39 environment.systemPackages = [ pkgs.fcgi ]; 40 41 # no nginx, and no mail dsn 42 services.davis = { 43 enable = true; 44 hostname = "davis.example.com"; 45 database = { 46 driver = "postgresql"; 47 }; 48 adminLogin = "admin"; 49 appSecretFile = "${pkgs.writeText "davisAppSecret" "52882ef142066e09ab99ce816ba72522e789505caba224"}"; 50 adminPasswordFile = "${pkgs.writeText "davisAdminPass" "nixos"}"; 51 nginx = null; 52 }; 53 }; 54 55 testScript = '' 56 start_all() 57 58 machine1.wait_for_unit("postgresql.target") 59 machine1.wait_for_unit("davis-env-setup.service") 60 machine1.wait_for_unit("davis-db-migrate.service") 61 machine1.wait_for_unit("phpfpm-davis.service") 62 63 with subtest("welcome screen loads"): 64 machine1.succeed( 65 "curl -sSfL --resolve davis.example.com:80:127.0.0.1 http://davis.example.com/ | grep '<title>Davis</title>'" 66 ) 67 68 with subtest("login works"): 69 csrf_token = machine1.succeed( 70 "curl -c /tmp/cookies -sSfL --resolve davis.example.com:80:127.0.0.1 http://davis.example.com/login | grep '_csrf_token' | sed -E 's,.*value=\"(.*)\".*,\\1,g'" 71 ) 72 r = machine1.succeed( 73 f"curl -b /tmp/cookies --resolve davis.example.com:80:127.0.0.1 http://davis.example.com/login -X POST -F _username=admin -F _password=nixos -F _csrf_token={csrf_token.strip()} -D headers" 74 ) 75 print(r) 76 machine1.succeed( 77 "[[ $(grep -i 'location: ' headers | cut -d: -f2- | xargs echo) == /dashboard* ]]" 78 ) 79 machine2.wait_for_unit("davis-env-setup.service") 80 machine2.wait_for_unit("davis-db-migrate.service") 81 machine2.wait_for_unit("phpfpm-davis.service") 82 r = machine2.succeed( 83 "find /var/lib/davis/var/log" 84 ) 85 print(r) 86 env = ( 87 "SCRIPT_NAME=/index.php", 88 "SCRIPT_FILENAME=${config.nodes.machine2.services.davis.package}/public/index.php", 89 "REMOTE_ADDR=127.0.0.1", 90 "REQUEST_METHOD=GET", 91 ); 92 page = machine2.succeed(f"{' '.join(env)} ${pkgs.fcgi}/bin/cgi-fcgi -bind -connect ${config.nodes.machine2.services.phpfpm.pools.davis.socket}") 93 ''; 94}