From e65552171786e6f0b7b36791ac5622984c9e6986 Mon Sep 17 00:00:00 2001 From: Patrick Date: Sun, 3 Nov 2024 22:21:42 +0100 Subject: [PATCH] nixos/octoprint: add tests for reachability over IPv6 --- nixos/tests/octoprint.nix | 43 +++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/nixos/tests/octoprint.nix b/nixos/tests/octoprint.nix index 9473797d50475..4499e5e67674a 100644 --- a/nixos/tests/octoprint.nix +++ b/nixos/tests/octoprint.nix @@ -35,33 +35,40 @@ import ./make-test-python.nix ( }; testScript = '' - import json + import json - @polling_condition - def octoprint_running(): - machine.succeed("pgrep octoprint") + @polling_condition + def octoprint_running(): + machine.succeed("pgrep octoprint") - with subtest("Wait for octoprint service to start"): - machine.wait_for_unit("octoprint.service") - machine.wait_until_succeeds("pgrep octoprint") + with subtest("Wait for octoprint service to start"): + machine.wait_for_unit("octoprint.service") + machine.wait_until_succeeds("pgrep octoprint") - with subtest("Wait for final boot"): - # this appears whe octoprint is almost finished starting - machine.wait_for_file("/var/lib/octoprint/uploads") + with subtest("Wait for final boot"): + # this appears whe octoprint is almost finished starting + machine.wait_for_file("/var/lib/octoprint/uploads") - # octoprint takes some time to start. This makes sure we'll retry just in case it takes longer - # retry-all-errors in necessary, since octoprint will report a 404 error when not yet ready - curl_cmd = "curl --retry-all-errors --connect-timeout 5 --max-time 10 --retry 5 --retry-delay 0 \ - --retry-max-time 40 -X GET --header 'X-API-Key: ${apikey}' " + # octoprint takes some time to start. This makes sure we'll retry just in case it takes longer + # retry-all-errors in necessary, since octoprint will report a 404 error when not yet ready + curl_cmd = "curl --retry-all-errors --connect-timeout 5 --max-time 10 --retry 5 --retry-delay 0 \ + --retry-max-time 40 -X GET --header 'X-API-Key: ${apikey}' " # used to fail early, in case octoprint first starts and then crashes with octoprint_running: # type: ignore[union-attr] with subtest("Check for web interface"): - machine.wait_until_succeeds("curl -s localhost:5000") + machine.wait_until_succeeds("curl -s -4 localhost:5000") + machine.wait_until_succeeds("curl -s -6 localhost:5000") - with subtest("Check API"): - version = json.loads(machine.succeed(curl_cmd + "localhost:5000/api/version")) - server = json.loads(machine.succeed(curl_cmd + "localhost:5000/api/server")) + with subtest("Check API IPv4"): + version = json.loads(machine.succeed(curl_cmd + "-4 localhost:5000/api/version")) + server = json.loads(machine.succeed(curl_cmd + "-4 localhost:5000/api/server")) + assert version["server"] == str("${pkgs.octoprint.version}") + assert server["safemode"] == None + + with subtest("Check API IPv6"): + version = json.loads(machine.succeed(curl_cmd + "-6 localhost:5000/api/version")) + server = json.loads(machine.succeed(curl_cmd + "-6 localhost:5000/api/server")) assert version["server"] == str("${pkgs.octoprint.version}") assert server["safemode"] == None '';