nixpkgs/nixos/tests/caddy.nix

90 lines
2.5 KiB
Nix
Raw Normal View History

2019-11-06 15:56:16 +03:00
import ./make-test-python.nix ({ pkgs, ... }: {
2019-10-09 14:32:03 +03:00
name = "caddy";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ xfix filalex77 ];
2019-10-09 14:32:03 +03:00
};
nodes = {
webserver = { pkgs, lib, ... }: {
services.caddy.enable = true;
services.caddy.config = ''
http://localhost {
encode gzip
2019-10-09 14:32:03 +03:00
file_server
root * ${
2019-10-09 14:32:03 +03:00
pkgs.runCommand "testdir" {} ''
mkdir "$out"
echo hello world > "$out/example.html"
''
}
}
'';
specialisation.etag.configuration = {
services.caddy.config = lib.mkForce ''
http://localhost {
encode gzip
2019-10-09 14:32:03 +03:00
file_server
root * ${
pkgs.runCommand "testdir2" {} ''
mkdir "$out"
echo changed > "$out/example.html"
''
2019-10-09 14:32:03 +03:00
}
}
'';
};
2019-10-09 14:32:03 +03:00
specialisation.config-reload.configuration = {
services.caddy.config = ''
http://localhost:8080 {
}
'';
};
2019-10-09 14:32:03 +03:00
};
};
testScript = { nodes, ... }: let
etagSystem = "${nodes.webserver.config.system.build.toplevel}/specialisation/etag";
justReloadSystem = "${nodes.webserver.config.system.build.toplevel}/specialisation/config-reload";
2019-10-09 14:32:03 +03:00
in ''
2019-11-06 15:56:16 +03:00
url = "http://localhost/example.html"
webserver.wait_for_unit("caddy")
webserver.wait_for_open_port("80")
2019-10-09 14:32:03 +03:00
2019-11-06 15:56:16 +03:00
def check_etag(url):
etag = webserver.succeed(
"curl -v '{}' 2>&1 | sed -n -e \"s/^< [Ee][Tt][Aa][Gg]: *//p\"".format(url)
)
etag = etag.replace("\r\n", " ")
http_code = webserver.succeed(
"curl --silent --show-error -o /dev/null -w \"%{{http_code}}\" --head -H 'If-None-Match: {}' {}".format(
etag, url
)
2019-11-06 15:56:16 +03:00
)
assert int(http_code) == 304, "HTTP code is {}, expected 304".format(http_code)
2019-11-06 15:56:16 +03:00
return etag
2019-10-09 14:32:03 +03:00
2019-11-06 15:56:16 +03:00
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
)
2019-11-06 15:56:16 +03:00
with subtest("config is reloaded on nixos-rebuild switch"):
webserver.succeed(
"${justReloadSystem}/bin/switch-to-configuration test >&2"
)
webserver.wait_for_open_port("8080")
2019-10-09 14:32:03 +03:00
'';
})