 25bef2d8f9
			
		
	
	
		25bef2d8f9
		
	
	
	
	
		
			
			The library does not depend on stdenv, that `stdenv` exposes `lib` is an artifact of the ancient origins of nixpkgs.
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| import ./make-test-python.nix ({ pkgs, ... }: {
 | |
|   name = "caddy";
 | |
|   meta = with pkgs.lib.maintainers; {
 | |
|     maintainers = [ xfix Br1ght0ne ];
 | |
|   };
 | |
| 
 | |
|   nodes = {
 | |
|     webserver = { pkgs, lib, ... }: {
 | |
|       services.caddy.enable = true;
 | |
|       services.caddy.config = ''
 | |
|         http://localhost {
 | |
|           encode gzip
 | |
| 
 | |
|           file_server
 | |
|           root * ${
 | |
|             pkgs.runCommand "testdir" {} ''
 | |
|               mkdir "$out"
 | |
|               echo hello world > "$out/example.html"
 | |
|             ''
 | |
|           }
 | |
|         }
 | |
|       '';
 | |
| 
 | |
|       specialisation.etag.configuration = {
 | |
|         services.caddy.config = lib.mkForce ''
 | |
|           http://localhost {
 | |
|             encode gzip
 | |
| 
 | |
|             file_server
 | |
|             root * ${
 | |
|               pkgs.runCommand "testdir2" {} ''
 | |
|                 mkdir "$out"
 | |
|                 echo changed > "$out/example.html"
 | |
|               ''
 | |
|             }
 | |
|           }
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       specialisation.config-reload.configuration = {
 | |
|         services.caddy.config = ''
 | |
|           http://localhost:8080 {
 | |
|           }
 | |
|         '';
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   testScript = { nodes, ... }: let
 | |
|     etagSystem = "${nodes.webserver.config.system.build.toplevel}/specialisation/etag";
 | |
|     justReloadSystem = "${nodes.webserver.config.system.build.toplevel}/specialisation/config-reload";
 | |
|   in ''
 | |
|     url = "http://localhost/example.html"
 | |
|     webserver.wait_for_unit("caddy")
 | |
|     webserver.wait_for_open_port("80")
 | |
| 
 | |
| 
 | |
|     def check_etag(url):
 | |
|         etag = webserver.succeed(
 | |
|             "curl --fail -v '{}' 2>&1 | sed -n -e \"s/^< [Ee][Tt][Aa][Gg]: *//p\"".format(
 | |
|                 url
 | |
|             )
 | |
|         )
 | |
|         etag = etag.replace("\r\n", " ")
 | |
|         http_code = webserver.succeed(
 | |
|             "curl --fail --silent --show-error -o /dev/null -w \"%{{http_code}}\" --head -H 'If-None-Match: {}' {}".format(
 | |
|                 etag, url
 | |
|             )
 | |
|         )
 | |
|         assert int(http_code) == 304, "HTTP code is {}, expected 304".format(http_code)
 | |
|         return etag
 | |
| 
 | |
| 
 | |
|     with subtest("check ETag if serving Nix store paths"):
 | |
|         old_etag = check_etag(url)
 | |
|         webserver.succeed(
 | |
|             "${etagSystem}/bin/switch-to-configuration test >&2"
 | |
|         )
 | |
|         webserver.sleep(1)
 | |
|         new_etag = check_etag(url)
 | |
|         assert old_etag != new_etag, "Old ETag {} is the same as {}".format(
 | |
|             old_etag, new_etag
 | |
|         )
 | |
| 
 | |
|     with subtest("config is reloaded on nixos-rebuild switch"):
 | |
|         webserver.succeed(
 | |
|             "${justReloadSystem}/bin/switch-to-configuration test >&2"
 | |
|         )
 | |
|         webserver.wait_for_open_port("8080")
 | |
|   '';
 | |
| })
 |