test: add optional latency to postgrest-loadtest
This pipes data between client/postgrest and between postgrest/database through a proxy that adds delay (github.com/robx/slocat).
This commit is contained in:
@@ -41,6 +41,7 @@ let
|
|||||||
allOverlays.postgresql-legacy
|
allOverlays.postgresql-legacy
|
||||||
allOverlays.postgresql-future
|
allOverlays.postgresql-future
|
||||||
(allOverlays.haskell-packages { inherit compiler; })
|
(allOverlays.haskell-packages { inherit compiler; })
|
||||||
|
allOverlays.slocat
|
||||||
];
|
];
|
||||||
|
|
||||||
# Evaluated expression of the Nixpkgs repository.
|
# Evaluated expression of the Nixpkgs repository.
|
||||||
|
|||||||
@@ -204,6 +204,9 @@ postgrest-loadtest
|
|||||||
# You can loadtest comparing to a different branch
|
# You can loadtest comparing to a different branch
|
||||||
postgrest-loadtest-against master
|
postgrest-loadtest-against master
|
||||||
|
|
||||||
|
# You can simulate latency client/postgrest and postgrest/database
|
||||||
|
PGRST_DELAY=5ms PGDELAY=5ms postgrest-loadtest
|
||||||
|
|
||||||
# Produce a markdown report to be used on CI
|
# Produce a markdown report to be used on CI
|
||||||
postgrest-loadtest-report
|
postgrest-loadtest-report
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -7,4 +7,5 @@
|
|||||||
postgresql-default = import ./postgresql-default.nix;
|
postgresql-default = import ./postgresql-default.nix;
|
||||||
postgresql-legacy = import ./postgresql-legacy.nix;
|
postgresql-legacy = import ./postgresql-legacy.nix;
|
||||||
postgresql-future = import ./postgresql-future.nix;
|
postgresql-future = import ./postgresql-future.nix;
|
||||||
|
slocat = import ./slocat.nix;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
final: prev:
|
||||||
|
{
|
||||||
|
slocat = prev.buildGoModule {
|
||||||
|
name = "slocat";
|
||||||
|
src = prev.fetchFromGitHub {
|
||||||
|
owner = "robx";
|
||||||
|
repo = "slocat";
|
||||||
|
rev = "52e7512c6029fd00483e41ccce260a3b4b9b3b64";
|
||||||
|
sha256 = "sha256-qn6luuh5wqREu3s8RfuMCP5PKdS2WdwPrujRYTpfzQ8=";
|
||||||
|
};
|
||||||
|
vendorSha256 = "sha256-pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo=";
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -60,7 +60,9 @@ let
|
|||||||
|
|
||||||
# shellcheck disable=SC2145
|
# shellcheck disable=SC2145
|
||||||
${withTools.withPg} --fixtures "$_arg_testdir"/fixtures.sql \
|
${withTools.withPg} --fixtures "$_arg_testdir"/fixtures.sql \
|
||||||
|
${withTools.withSlowPg} \
|
||||||
${withTools.withPgrst} \
|
${withTools.withPgrst} \
|
||||||
|
${withTools.withSlowPgrst} \
|
||||||
sh -c "cd \"$_arg_testdir\" && ${runner} -targets targets.http -output \"$abs_output\" \"''${_arg_leftovers[@]}\""
|
sh -c "cd \"$_arg_testdir\" && ${runner} -targets targets.http -output \"$abs_output\" \"''${_arg_leftovers[@]}\""
|
||||||
${vegeta}/bin/vegeta report -type=text "$_arg_output"
|
${vegeta}/bin/vegeta report -type=text "$_arg_output"
|
||||||
'';
|
'';
|
||||||
|
|||||||
+78
-2
@@ -8,6 +8,7 @@
|
|||||||
, lib
|
, lib
|
||||||
, postgresqlVersions
|
, postgresqlVersions
|
||||||
, postgrest
|
, postgrest
|
||||||
|
, slocat
|
||||||
, writeText
|
, writeText
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
@@ -137,6 +138,81 @@ let
|
|||||||
|
|
||||||
withPg = builtins.head withPgVersions;
|
withPg = builtins.head withPgVersions;
|
||||||
|
|
||||||
|
withSlowPg =
|
||||||
|
checkedShellScript
|
||||||
|
{
|
||||||
|
name = "postgrest-with-slow-pg";
|
||||||
|
docs = "Run the given command with simulated high latency postgresql";
|
||||||
|
args =
|
||||||
|
[
|
||||||
|
"ARG_POSITIONAL_SINGLE([command], [Command to run])"
|
||||||
|
"ARG_LEFTOVERS([command arguments])"
|
||||||
|
"ARG_USE_ENV([PGHOST], [], [PG host (socket name)])"
|
||||||
|
"ARG_USE_ENV([PGDELAY], [0ms], [extra PG latency (duration)])"
|
||||||
|
];
|
||||||
|
positionalCompletion = "_command";
|
||||||
|
inRootDir = true;
|
||||||
|
redirectTixFiles = false;
|
||||||
|
withTmpDir = true;
|
||||||
|
}
|
||||||
|
''
|
||||||
|
delay="''${PGDELAY:-0ms}"
|
||||||
|
echo "delaying data to/from postgres by $delay"
|
||||||
|
|
||||||
|
REALPGHOST="$PGHOST"
|
||||||
|
export PGHOST="$tmpdir/socket"
|
||||||
|
mkdir -p "$PGHOST"
|
||||||
|
|
||||||
|
${slocat}/bin/slocat -delay "$delay" -src "$PGHOST/.s.PGSQL.5432" -dst "$REALPGHOST/.s.PGSQL.5432" &
|
||||||
|
SLOCAT_PID=$!
|
||||||
|
# shellcheck disable=SC2317
|
||||||
|
stop_slocat() {
|
||||||
|
kill "$SLOCAT_PID" || true
|
||||||
|
wait "$SLOCAT_PID" || true
|
||||||
|
}
|
||||||
|
trap stop_slocat EXIT
|
||||||
|
sleep 1 # should wait for socket file to appear instead
|
||||||
|
|
||||||
|
("$_arg_command" "''${_arg_leftovers[@]}")
|
||||||
|
'';
|
||||||
|
|
||||||
|
withSlowPgrst =
|
||||||
|
checkedShellScript
|
||||||
|
{
|
||||||
|
name = "postgrest-with-slow-postgrest";
|
||||||
|
docs = "Run the given command with simulated high latency postgrest";
|
||||||
|
args =
|
||||||
|
[
|
||||||
|
"ARG_POSITIONAL_SINGLE([command], [Command to run])"
|
||||||
|
"ARG_LEFTOVERS([command arguments])"
|
||||||
|
"ARG_USE_ENV([PGRST_SERVER_UNIX_SOCKET], [], [PostgREST host (socket name)])"
|
||||||
|
"ARG_USE_ENV([PGRST_DELAY], [0ms], [extra PostgREST latency (duration)])"
|
||||||
|
];
|
||||||
|
positionalCompletion = "_command";
|
||||||
|
inRootDir = true;
|
||||||
|
redirectTixFiles = false;
|
||||||
|
withTmpDir = true;
|
||||||
|
}
|
||||||
|
''
|
||||||
|
delay="''${PGRST_DELAY:-0ms}"
|
||||||
|
echo "delaying data to/from PostgREST by $delay"
|
||||||
|
|
||||||
|
REAL_PGRST_SERVER_UNIX_SOCKET="$PGRST_SERVER_UNIX_SOCKET"
|
||||||
|
export PGRST_SERVER_UNIX_SOCKET="$tmpdir/postgrest.socket"
|
||||||
|
|
||||||
|
${slocat}/bin/slocat -delay "$delay" -src "$PGRST_SERVER_UNIX_SOCKET" -dst "$REAL_PGRST_SERVER_UNIX_SOCKET" &
|
||||||
|
SLOCAT_PID=$!
|
||||||
|
# shellcheck disable=SC2317
|
||||||
|
stop_slocat() {
|
||||||
|
kill "$SLOCAT_PID" || true
|
||||||
|
wait "$SLOCAT_PID" || true
|
||||||
|
}
|
||||||
|
trap stop_slocat EXIT
|
||||||
|
sleep 1 # should wait for socket file to appear instead
|
||||||
|
|
||||||
|
("$_arg_command" "''${_arg_leftovers[@]}")
|
||||||
|
'';
|
||||||
|
|
||||||
withGit =
|
withGit =
|
||||||
let
|
let
|
||||||
name = "postgrest-with-git";
|
name = "postgrest-with-git";
|
||||||
@@ -288,7 +364,7 @@ in
|
|||||||
buildToolbox
|
buildToolbox
|
||||||
{
|
{
|
||||||
name = "postgrest-with";
|
name = "postgrest-with";
|
||||||
tools = [ withPgAll withGit withPgrst ] ++ withPgVersions;
|
tools = [ withPgAll withGit withPgrst withSlowPg withSlowPgrst ] ++ withPgVersions;
|
||||||
# make withTools available for other nix files
|
# make withTools available for other nix files
|
||||||
extra = { inherit withGit withPg withPgAll withPgrst; };
|
extra = { inherit withGit withPg withPgAll withPgrst withSlowPg withSlowPgrst; };
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user