From a759fc28f715f4c7523a830314e3ccf09e2f0d70 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Sun, 8 May 2022 16:36:28 -0600 Subject: [PATCH] Add test target to Makefile to run full integration tests --- Makefile | 33 +++++++++++---------------------- default.nix | 4 +++- srv/default.nix | 8 ++++++++ test.sh | 23 +++++++++++++++++++++++ 4 files changed, 45 insertions(+), 23 deletions(-) create mode 100644 test.sh diff --git a/Makefile b/Makefile index d074a3d..de7e4f1 100644 --- a/Makefile +++ b/Makefile @@ -1,34 +1,23 @@ -SKIP_SERVICES = [] -all: - nix-build -A entrypoint \ - --arg baseConfig '(import ./config.nix)' \ - --arg baseSkipServices '${SKIP_SERVICES}' - -run: all - ./result +CONFIG = ./config.nix -all.prod: +entrypoint: nix-build -A entrypoint \ - --arg baseConfig '(import ./prod.config.nix)' \ - --arg baseSkipServices '${SKIP_SERVICES}' + --arg baseConfig '(import ${CONFIG})' -run.prod: all.prod +install: + nix-build -A install --arg baseConfig '(import ${CONFIG})' ./result -install.prod: - nix-build -A install --arg baseConfig '(import ./prod.config.nix)' - ./result +test: + $$(nix-build --no-out-link -A pkgs.bash)/bin/bash test.sh + @if [ $$? == 0 ]; then echo "TESTS PASSED!"; else echo "TESTS FAILED!"; fi srv.shell: - nix-shell -A srv.shell --command 'cd srv; return' - -srv.shell.prod: - nix-shell -A srv.shell --arg baseConfig '(import ./prod.config.nix)' --command 'cd srv; return' - -static.shell: - nix-shell -A static.shell --command 'cd static; return' + nix-shell -A srv.shell --arg baseConfig '(import ${CONFIG})' \ + --command 'cd srv; return' +# TODO static is on the way out, these aren't well supported static.serve: nix-shell -A static.shell --run 'cd static; static-serve' diff --git a/default.nix b/default.nix index 78a86fd..8d20c38 100644 --- a/default.nix +++ b/default.nix @@ -1,6 +1,6 @@ { - pkgs ? import (fetchTarball { + pkgsArg ? import (fetchTarball { name = "nixpkgs-21-05"; url = "https://github.com/NixOS/nixpkgs/archive/7e9b0dff974c89e070da1ad85713ff3c20b0ca97.tar.gz"; sha256 = "1ckzhh24mgz6jd1xhfgx0i9mijk6xjqxwsshnvq789xsavrmsc36"; @@ -11,6 +11,8 @@ }: rec { + pkgs = pkgsArg; + config = baseConfig // { redisListenPath = "${config.runDir}/redis"; }; diff --git a/srv/default.nix b/srv/default.nix index 5510744..df54d84 100644 --- a/srv/default.nix +++ b/srv/default.nix @@ -63,4 +63,12 @@ cd src ''; }; + + test = stdenv.mkDerivation { + name = "mediocre-blog-srv-test"; + buildInputs = [ go ]; + shellHook = '' + source ${init} + ''; + }; } diff --git a/test.sh b/test.sh new file mode 100644 index 0000000..e204f91 --- /dev/null +++ b/test.sh @@ -0,0 +1,23 @@ + +test_dir="$(mktemp -d)" + +mkdir -p "$test_dir"/run +mkdir -p "$test_dir"/data + +test_cfg="(import ./config.nix) // { + runDir=\"${test_dir}/run\"; + dataDir=\"${test_dir}/data\"; +}" + +$(nix-build --no-out-link -A entrypoint \ + --arg baseConfig "$test_cfg" \ + --arg baseSkipServices '["srv" "static"]') & + +trap "kill $!; wait; rm -rf $test_dir" EXIT + +# TODO there's a race condition here, we should wait until redis is definitely +# listening before commencing the tests. + +nix-shell -A srv.test \ + --arg baseConfig "$test_cfg" \ + --run "cd srv/src && go test ./... -count=1 -tags integration"