lol

redisTestHook: init

+157
+60
doc/hooks/redis-test-hook.section.md
··· 1 + 2 + # `redisTestHook` {#sec-redisTestHook} 3 + 4 + This hook starts a Redis server during `checkPhase`. Example: 5 + 6 + ```nix 7 + { 8 + stdenv, 9 + redis, 10 + redisTestHook 11 + }: 12 + stdenv.mkDerivation { 13 + 14 + # ... 15 + 16 + nativeCheckInputs = [ 17 + redisTestHook 18 + ]; 19 + } 20 + ``` 21 + 22 + If you use a custom `checkPhase`, remember to add the `runHook` calls: 23 + ```nix 24 + checkPhase '' 25 + runHook preCheck 26 + 27 + # ... your tests 28 + 29 + runHook postCheck 30 + '' 31 + ``` 32 + 33 + ## Variables {#sec-redisTestHook-variables} 34 + 35 + The hook logic will read the following variables and set them to a default value if unset or empty. 36 + 37 + Exported variables: 38 + 39 + - `REDIS_SOCKET`: UNIX domain socket path 40 + 41 + Bash-only variables: 42 + 43 + - `redisTestPort`: Port to use by Redis. Defaults to `6379` 44 + 45 + Example usage: 46 + 47 + ```nix 48 + { stdenv, redis, redisTestHook }: 49 + stdenv.mkDerivation { 50 + 51 + # ... 52 + 53 + nativeCheckInputs = [ 54 + redisTestHook 55 + ]; 56 + 57 + preCheck = '' 58 + redisTestPort=6390 59 + '' 60 + }
+17
pkgs/by-name/re/redisTestHook/package.nix
··· 1 + { 2 + lib, 3 + callPackage, 4 + makeSetupHook, 5 + redis, 6 + }: 7 + 8 + makeSetupHook { 9 + name = "redis-test-hook"; 10 + substitutions = { 11 + cli = lib.getExe' redis "redis-cli"; 12 + server = lib.getExe' redis "redis-server"; 13 + }; 14 + passthru.tests = { 15 + simple = callPackage ./test.nix { }; 16 + }; 17 + } ./redis-test-hook.sh
+33
pkgs/by-name/re/redisTestHook/redis-test-hook.sh
··· 1 + preCheckHooks+=('redisStart') 2 + postCheckHooks+=('redisStop') 3 + 4 + 5 + redisStart() { 6 + if [[ "${redisTestPort:-}" == "" ]]; then 7 + redisTestPort=6379 8 + fi 9 + 10 + if [[ "${REDIS_SOCKET:-}" == "" ]]; then 11 + mkdir -p "$NIX_BUILD_TOP/run/" 12 + REDIS_SOCKET="$NIX_BUILD_TOP/run/redis.sock" 13 + fi 14 + export REDIS_SOCKET 15 + 16 + echo 'starting redis' 17 + 18 + # Note about Darwin: unless the output is redirected, the parent process becomes launchd instead of bash. 19 + # This would leave the Redis process running in case of a test failure (the postCheckHook would not be executed), 20 + # hanging the Nix build forever. 21 + @server@ --unixsocket "$REDIS_SOCKET" --port "$redisTestPort" > /dev/null 2>&1 & 22 + REDIS_PID=$! 23 + 24 + echo 'waiting for redis to be ready' 25 + while ! @cli@ --scan -s "$REDIS_SOCKET" ; do 26 + sleep 1 27 + done 28 + } 29 + 30 + redisStop() { 31 + echo 'stopping redis' 32 + kill "$REDIS_PID" 33 + }
+47
pkgs/by-name/re/redisTestHook/test.nix
··· 1 + { 2 + redis, 3 + redisTestHook, 4 + stdenv, 5 + }: 6 + 7 + stdenv.mkDerivation { 8 + name = "redis-test-hook-test"; 9 + 10 + nativeCheckInputs = [ 11 + redis 12 + redisTestHook 13 + ]; 14 + 15 + dontUnpack = true; 16 + doCheck = true; 17 + 18 + preCheck = '' 19 + redisTestPort=6380 20 + REDIS_SOCKET=/tmp/customredis.sock 21 + ''; 22 + 23 + checkPhase = '' 24 + runHook preCheck 25 + 26 + echo "running test" 27 + if redis-cli --scan -p $redisTestPort; then 28 + echo "connected to redis via localhost" 29 + PORT_TEST_RAN=1 30 + fi 31 + 32 + if redis-cli --scan -s $REDIS_SOCKET; then 33 + echo "connected to redis via domain socket" 34 + SOCKET_TEST_RAN=1 35 + fi 36 + 37 + runHook postCheck 38 + ''; 39 + 40 + installPhase = '' 41 + [[ $PORT_TEST_RAN == 1 && $SOCKET_TEST_RAN == 1 ]] 42 + echo "test passed" 43 + touch $out 44 + ''; 45 + 46 + __darwinAllowLocalNetworking = true; 47 + }