about summary refs log tree commit diff
path: root/pkgs/servers/http/hiawatha/test.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/servers/http/hiawatha/test.nix')
-rw-r--r--pkgs/servers/http/hiawatha/test.nix84
1 files changed, 84 insertions, 0 deletions
diff --git a/pkgs/servers/http/hiawatha/test.nix b/pkgs/servers/http/hiawatha/test.nix
new file mode 100644
index 0000000000000..157d0ee79644d
--- /dev/null
+++ b/pkgs/servers/http/hiawatha/test.nix
@@ -0,0 +1,84 @@
+{ lib
+, stdenvNoCC
+, hiawatha
+, curl
+, mbedtls
+, enableTls
+}:
+
+stdenvNoCC.mkDerivation {
+  name = "hiawatha-test";
+
+  nativeBuildInputs = [
+    hiawatha
+    curl
+  ] ++ lib.optional enableTls mbedtls;
+
+  env = {
+    inherit enableTls;
+  };
+
+  buildCommand = ''
+    cp -r --no-preserve=mode ${hiawatha}/etc/hiawatha config
+    sed "1i set TEST_DIR = $(pwd)" $serverConfigPath > config/hiawatha.conf
+
+    mkdir www
+    echo "it works" > www/index.html
+
+    if [ -n "$enableTls" ]; then
+      echo "Generating self-signed certificate"
+      gen_key type=ec filename=server.key
+      cert_write selfsign=1 issuer_key=server.key output_file=server.crt
+      cat server.crt server.key > config/server.crt
+    fi
+
+    echo "Checking server configuration"
+    hiawatha -c ./config -k
+
+    echo "Starting server"
+    hiawatha -c ./config
+
+    testUrl() {
+      echo "Testing $1"
+      curl --verbose --insecure --fail "$1" | tee response
+      grep -q "it works" response
+    }
+
+    testUrl http://127.0.0.1:8000
+    if [ -n "$enableTls" ]; then
+      testUrl https://127.0.0.1:8443
+    fi
+
+    touch $out
+  '';
+
+  serverConfig = ''
+    # By default the server uses read-only directories like /var/lib and /etc
+    WorkDirectory = TEST_DIR
+    PIDfile = TEST_DIR/hiawatha.pid
+    SystemLogfile = TEST_DIR/system.log
+    GarbageLogfile = TEST_DIR/garbage.log
+    ExploitLogfile = TEST_DIR/exploit.log
+    AccessLogfile = TEST_DIR/access.log
+    ErrorLogfile = TEST_DIR/error.log
+
+    Binding {
+      Interface = 127.0.0.1
+      Port = 8000
+    }
+
+    ${lib.optionalString enableTls ''
+      Binding {
+        Interface = 127.0.0.1
+        Port = 8443
+        TLScertFile = TEST_DIR/config/server.crt
+      }
+    ''}
+
+    Hostname = 127.0.0.1
+    WebsiteRoot = TEST_DIR/www
+    StartFile = index.html
+  '';
+
+  passAsFile = [ "serverConfig" ];
+}