memcachedTestHook: init

+139
+53
doc/hooks/memcached-test-hook.section.md
··· 1 + 2 + # `memcachedTestHook` {#sec-memcachedTestHook} 3 + 4 + This hook starts a Memcached server during `checkPhase`. Example: 5 + 6 + ```nix 7 + { 8 + stdenv, 9 + memcachedTestHook, 10 + }: 11 + stdenv.mkDerivation { 12 + 13 + # ... 14 + 15 + nativeCheckInputs = [ 16 + memcachedTestHook 17 + ]; 18 + } 19 + ``` 20 + 21 + If you use a custom `checkPhase`, remember to add the `runHook` calls: 22 + ```nix 23 + checkPhase '' 24 + runHook preCheck 25 + 26 + # ... your tests 27 + 28 + runHook postCheck 29 + '' 30 + ``` 31 + 32 + ## Variables {#sec-memcachedTestHook-variables} 33 + 34 + Bash-only variables: 35 + 36 + - `memcachedTestPort`: Port to use by Memcached. Defaults to `11211` 37 + 38 + Example usage: 39 + 40 + ```nix 41 + { stdenv, memcachedTestHook }: 42 + stdenv.mkDerivation { 43 + 44 + # ... 45 + 46 + nativeCheckInputs = [ 47 + memcachedTestHook 48 + ]; 49 + 50 + preCheck = '' 51 + memcachedTestPort=1234 52 + '' 53 + }
+27
pkgs/by-name/me/memcachedTestHook/memcached-test-hook.sh
··· 1 + preCheckHooks+=('memcachedStart') 2 + postCheckHooks+=('memcachedStop') 3 + 4 + 5 + memcachedStart() { 6 + if [[ "${memcachedTestPort:-}" == "" ]]; then 7 + memcachedTestPort=11211 8 + fi 9 + 10 + echo 'starting memcached' 11 + 12 + # Note about Darwin: unless the output is redirected, the parent process becomes launchd instead of bash. 13 + # This would leave the memcached process running in case of a test failure (the postCheckHook would not be executed), 14 + # hanging the Nix build forever. 15 + @memcached@ -p "$memcachedTestPort" >/dev/null 2>&1 & 16 + MEMCACHED_PID=$! 17 + 18 + echo 'waiting for memcached to be ready' 19 + while ! (echo 'quit' | @nc@ localhost "$memcachedTestPort") ; do 20 + sleep 1 21 + done 22 + } 23 + 24 + memcachedStop() { 25 + echo 'stopping memcached' 26 + kill "$MEMCACHED_PID" 27 + }
+18
pkgs/by-name/me/memcachedTestHook/package.nix
··· 1 + { 2 + callPackage, 3 + makeSetupHook, 4 + lib, 5 + memcached, 6 + netcat, 7 + }: 8 + 9 + makeSetupHook { 10 + name = "memcached-test-hook"; 11 + substitutions = { 12 + memcached = lib.getExe memcached; 13 + nc = lib.getExe netcat; 14 + }; 15 + passthru.tests = { 16 + simple = callPackage ./test.nix { }; 17 + }; 18 + } ./memcached-test-hook.sh
+41
pkgs/by-name/me/memcachedTestHook/test.nix
··· 1 + { 2 + memcachedTestHook, 3 + netcat, 4 + stdenv, 5 + }: 6 + 7 + stdenv.mkDerivation { 8 + name = "memcached-test-hook-test"; 9 + 10 + nativeCheckInputs = [ 11 + memcachedTestHook 12 + netcat 13 + ]; 14 + 15 + dontUnpack = true; 16 + doCheck = true; 17 + 18 + preCheck = '' 19 + memcachedTestPort=11212 20 + ''; 21 + 22 + checkPhase = '' 23 + runHook preCheck 24 + 25 + echo "running test" 26 + if echo -e "stats\nquit" | nc localhost $memcachedTestPort; then 27 + echo "connected to memcached" 28 + TEST_RAN=1 29 + fi 30 + 31 + runHook postCheck 32 + ''; 33 + 34 + __darwinAllowLocalNetworking = true; 35 + 36 + installPhase = '' 37 + [[ $TEST_RAN == 1 ]] 38 + echo "test passed" 39 + touch $out 40 + ''; 41 + }