83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| import ./make-test.nix ({ pkgs, ... }: {
 | |
|   name = "caddy";
 | |
|   meta = with pkgs.stdenv.lib.maintainers; {
 | |
|     maintainers = [ xfix ];
 | |
|   };
 | |
| 
 | |
|   nodes = {
 | |
|     webserver = { pkgs, lib, ... }: {
 | |
|       services.caddy.enable = true;
 | |
|       services.caddy.config = ''
 | |
|         http://localhost {
 | |
|           gzip
 | |
| 
 | |
|           root ${
 | |
|             pkgs.runCommand "testdir" {} ''
 | |
|               mkdir "$out"
 | |
|               echo hello world > "$out/example.html"
 | |
|             ''
 | |
|           }
 | |
|         }
 | |
|       '';
 | |
| 
 | |
|       nesting.clone = [
 | |
|         {
 | |
|           services.caddy.config = lib.mkForce ''
 | |
|             http://localhost {
 | |
|               gzip
 | |
| 
 | |
|               root ${
 | |
|                 pkgs.runCommand "testdir2" {} ''
 | |
|                   mkdir "$out"
 | |
|                   echo changed > "$out/example.html"
 | |
|                 ''
 | |
|               }
 | |
|             }
 | |
|           '';
 | |
|         }
 | |
| 
 | |
|         {
 | |
|           services.caddy.config = ''
 | |
|             http://localhost:8080 {
 | |
|             }
 | |
|           '';
 | |
|         }
 | |
|       ];
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   testScript = { nodes, ... }: let
 | |
|     etagSystem = "${nodes.webserver.config.system.build.toplevel}/fine-tune/child-1";
 | |
|     justReloadSystem = "${nodes.webserver.config.system.build.toplevel}/fine-tune/child-2";
 | |
|   in ''
 | |
|     my $url = 'http://localhost/example.html';
 | |
|     $webserver->waitForUnit("caddy");
 | |
|     $webserver->waitForOpenPort("80");
 | |
| 
 | |
|     sub checkEtag {
 | |
|       my $etag = $webserver->succeed(
 | |
|         'curl -v '.$url.' 2>&1 | sed -n -e "s/^< [Ee][Tt][Aa][Gg]: *//p"'
 | |
|       );
 | |
|       $etag =~ s/\r?\n$//;
 | |
|       my $httpCode = $webserver->succeed(
 | |
|         'curl -w "%{http_code}" -X HEAD -H \'If-None-Match: '.$etag.'\' '.$url
 | |
|       );
 | |
|       die "HTTP code is not 304" unless $httpCode == 304;
 | |
|       return $etag;
 | |
|     }
 | |
| 
 | |
|     subtest "check ETag if serving Nix store paths", sub {
 | |
|       my $oldEtag = checkEtag;
 | |
|       $webserver->succeed("${etagSystem}/bin/switch-to-configuration test >&2");
 | |
|       $webserver->sleep(1); # race condition
 | |
|       my $newEtag = checkEtag;
 | |
|       die "Old ETag $oldEtag is the same as $newEtag" if $oldEtag eq $newEtag;
 | |
|     };
 | |
| 
 | |
|     subtest "config is reloaded on nixos-rebuild switch", sub {
 | |
|       $webserver->succeed("${justReloadSystem}/bin/switch-to-configuration test >&2");
 | |
|       $webserver->waitForOpenPort("8080");
 | |
|     };
 | |
|   '';
 | |
| })
 | 
