From b8ca1bb04c46015a479c0010ceba300c41b69c99 Mon Sep 17 00:00:00 2001 From: steve-chavez Date: Sun, 21 Dec 2025 22:02:42 -0500 Subject: [PATCH] nix: add new loadtest for errors Also included it in CI. --- .github/workflows/test.yaml | 2 +- nix/tools/loadtest.nix | 13 +++++++++++-- test/load/errors.http | 15 +++++++++++++++ test/load/errors.sql | 7 +++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 test/load/errors.http create mode 100644 test/load/errors.sql diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index eccfa969a..67a2505f1 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -120,7 +120,7 @@ jobs: loadtest: strategy: matrix: - kind: ['mixed', 'jwt-hs', 'jwt-hs-cache', 'jwt-hs-cache-worst', 'jwt-rsa', 'jwt-rsa-cache', 'jwt-rsa-cache-worst'] + kind: ['mixed', 'errors', 'jwt-hs', 'jwt-hs-cache', 'jwt-hs-cache-worst', 'jwt-rsa', 'jwt-rsa-cache', 'jwt-rsa-cache-worst'] name: Loadtest runs-on: ubuntu-24.04 steps: diff --git a/nix/tools/loadtest.nix b/nix/tools/loadtest.nix index d66934478..b25c43591 100644 --- a/nix/tools/loadtest.nix +++ b/nix/tools/loadtest.nix @@ -45,7 +45,7 @@ let "ARG_OPTIONAL_SINGLE([testdir], [t], [Directory to load tests and fixtures from], [./test/load])" "ARG_OPTIONAL_SINGLE([kind], [k], [Kind of loadtest], [mixed])" "ARG_OPTIONAL_SINGLE([method],, [HTTP method used for the jwt loadtests], [OPTIONS])" - "ARG_TYPE_GROUP_SET([KIND], [KIND], [kind], [mixed,jwt-hs,jwt-hs-cache,jwt-hs-cache-worst,jwt-rsa,jwt-rsa-cache,jwt-rsa-cache-worst])" + "ARG_TYPE_GROUP_SET([KIND], [KIND], [kind], [mixed,errors,jwt-hs,jwt-hs-cache,jwt-hs-cache-worst,jwt-rsa,jwt-rsa-cache,jwt-rsa-cache-worst])" "ARG_TYPE_GROUP_SET([METHOD], [METHOD], [method], [OPTIONS,GET])" "ARG_OPTIONAL_SINGLE([monitor], [m], [Monitoring file], [./loadtest/result.csv])" "ARG_LEFTOVERS([additional vegeta arguments])" @@ -152,11 +152,20 @@ let sh -c "cd \"$_arg_testdir\" && \ ${runner} -targets targets.http -output \"$abs_output\" \"''${_arg_leftovers[@]}\"" ;; + + # here we sleep purposefully to check how much memory does the schema cache consume in the final report + errors) + # shellcheck disable=SC2145 + ${withTools.withPg} -f "$_arg_testdir"/errors.sql \ + ${withTools.withPgrst} --timeout 2 --sleep 5 -m "$_arg_monitor" \ + sh -c "cd \"$_arg_testdir\" && \ + ${runner} -targets errors.http -output \"$abs_output\" \"''${_arg_leftovers[@]}\"" + ;; esac ${vegeta}/bin/vegeta report -type=text "$_arg_output" - if [ "$_arg_kind" != "mixed" ]; then + if [ "$_arg_kind" != "errors" ]; then # fail in case 401 happened on jwt loadtests unauthorized_count="$(${vegeta}/bin/vegeta report -type=json "$_arg_output" \ | ${jq}/bin/jq -r '.status_codes["401"] // 0')" diff --git a/test/load/errors.http b/test/load/errors.http new file mode 100644 index 000000000..b72b4354e --- /dev/null +++ b/test/load/errors.http @@ -0,0 +1,15 @@ +# Misspelled relations +GET http://postgrest/actoxs?actor=eq.1 +Prefer: tx=commit + +# Misspelled relations on embeds +GET http://postgrest/actors?select=*,rolws(*,films(*)) +Prefer: tx=commit + +# Misspelled function names +GET http://postgrest/rpc/call_em_x?name=John +Prefer: tx=commit + +# Permission denied errors +GET http://postgrest/actors_1 +Prefer: tx=commit diff --git a/test/load/errors.sql b/test/load/errors.sql new file mode 100644 index 000000000..cf70ab708 --- /dev/null +++ b/test/load/errors.sql @@ -0,0 +1,7 @@ +\ir fixtures.sql + +SELECT format('CREATE TABLE test.actors_%s ();', n) +FROM generate_series(1, 20000) n +\gexec + +-- TODO add many function for fuzzy search (somehow this is making the loadtest start slow)