summaryrefslogtreecommitdiffstats
path: root/nixos/tests/acme.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/tests/acme.nix')
-rw-r--r--nixos/tests/acme.nix59
1 files changed, 49 insertions, 10 deletions
diff --git a/nixos/tests/acme.nix b/nixos/tests/acme.nix
index a31cb12477a0..d540bc6ec31b 100644
--- a/nixos/tests/acme.nix
+++ b/nixos/tests/acme.nix
@@ -41,6 +41,16 @@
inherit documentRoot;
};
+ simpleConfig = {
+ security.acme = {
+ certs."http.example.test" = {
+ listenHTTP = ":80";
+ };
+ };
+
+ networking.firewall.allowedTCPPorts = [ 80 ];
+ };
+
# Base specialisation config for testing general ACME features
webserverBasicConfig = {
services.nginx.enable = true;
@@ -174,15 +184,24 @@ in {
specialisation = {
# Tests HTTP-01 verification using Lego's built-in web server
- http01lego.configuration = { ... }: {
- security.acme = {
- certs."http.example.test" = {
- listenHTTP = ":80";
- };
- };
+ http01lego.configuration = simpleConfig;
- networking.firewall.allowedTCPPorts = [ 80 ];
- };
+ renew.configuration = lib.mkMerge [
+ simpleConfig
+ {
+ # Pebble provides 5 year long certs,
+ # needs to be higher than that to test renewal
+ security.acme.certs."http.example.test".validMinDays = 9999;
+ }
+ ];
+
+ # Tests that account creds can be safely changed.
+ accountchange.configuration = lib.mkMerge [
+ simpleConfig
+ {
+ security.acme.certs."http.example.test".email = "admin@example.test";
+ }
+ ];
# First derivation used to test general ACME features
general.configuration = { ... }: let
@@ -458,12 +477,32 @@ in {
download_ca_certs(client)
# Perform http-01 w/ lego test first
- switch_to(webserver, "http01lego")
-
with subtest("Can request certificate with Lego's built in web server"):
+ switch_to(webserver, "http01lego")
+ webserver.wait_for_unit("acme-finished-http.example.test.target")
+ check_fullchain(webserver, "http.example.test")
+ check_issuer(webserver, "http.example.test", "pebble")
+
+ # Perform renewal test
+ with subtest("Can renew certificates when they expire"):
+ hash = webserver.succeed("sha256sum /var/lib/acme/http.example.test/cert.pem")
+ switch_to(webserver, "renew")
+ webserver.wait_for_unit("acme-finished-http.example.test.target")
+ check_fullchain(webserver, "http.example.test")
+ check_issuer(webserver, "http.example.test", "pebble")
+ hash_after = webserver.succeed("sha256sum /var/lib/acme/http.example.test/cert.pem")
+ assert hash != hash_after
+
+ # Perform account change test
+ with subtest("Handles email change correctly"):
+ hash = webserver.succeed("sha256sum /var/lib/acme/http.example.test/cert.pem")
+ switch_to(webserver, "accountchange")
webserver.wait_for_unit("acme-finished-http.example.test.target")
check_fullchain(webserver, "http.example.test")
check_issuer(webserver, "http.example.test", "pebble")
+ hash_after = webserver.succeed("sha256sum /var/lib/acme/http.example.test/cert.pem")
+ # Has to do a full run to register account, which creates new certs.
+ assert hash != hash_after
# Perform general tests
switch_to(webserver, "general")