71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
"IO tests for PostgREST started on the big schema."
|
|
|
|
import pytest
|
|
|
|
from config import *
|
|
from util import *
|
|
from postgrest import *
|
|
|
|
|
|
def test_requests_wait_for_schema_cache_reload(defaultenv):
|
|
"requests that use the schema cache (e.g. resource embedding) wait for the schema cache to reload"
|
|
|
|
env = {
|
|
**defaultenv,
|
|
"PGRST_DB_SCHEMAS": "apflora",
|
|
"PGRST_DB_POOL": "2",
|
|
"PGRST_DB_ANON_ROLE": "postgrest_test_anonymous",
|
|
"PGRST_SERVER_TIMING_ENABLED": "true",
|
|
}
|
|
|
|
with run(env=env, wait_max_seconds=30) as postgrest:
|
|
# reload the schema cache
|
|
response = postgrest.session.get("/rpc/notify_pgrst")
|
|
assert response.status_code == 204
|
|
|
|
postgrest.wait_until_scache_starts_loading()
|
|
|
|
response = postgrest.session.get("/tpopmassn?select=*,tpop(*)")
|
|
assert response.status_code == 200
|
|
|
|
plan_dur = parse_server_timings_header(response.headers["Server-Timing"])[
|
|
"plan"
|
|
]
|
|
assert plan_dur > 10000.0
|
|
|
|
|
|
# TODO: This test fails now because of https://github.com/PostgREST/postgrest/pull/2122
|
|
# The stack size of 1K(-with-rtsopts=-K1K) is not enough and this fails with "stack overflow"
|
|
# A stack size of 200K seems to be enough for succeess
|
|
@pytest.mark.skip
|
|
def test_openapi_in_big_schema(defaultenv):
|
|
"Should get a successful response from openapi on a big schema"
|
|
|
|
env = {
|
|
**defaultenv,
|
|
"PGRST_DB_SCHEMAS": "apflora",
|
|
"PGRST_OPENAPI_MODE": "ignore-privileges",
|
|
}
|
|
|
|
with run(env=env) as postgrest:
|
|
response = postgrest.session.get("/")
|
|
assert response.status_code == 200
|
|
|
|
|
|
# See: https://github.com/PostgREST/postgrest/issues/3329
|
|
def test_should_not_fail_with_stack_overflow(defaultenv):
|
|
"requesting a non-existent relationship should not fail with stack overflow due to fuzzy search of candidates"
|
|
|
|
env = {
|
|
**defaultenv,
|
|
"PGRST_DB_SCHEMAS": "apflora",
|
|
"PGRST_DB_POOL": "2",
|
|
"PGRST_DB_ANON_ROLE": "postgrest_test_anonymous",
|
|
}
|
|
|
|
with run(env=env, wait_max_seconds=30) as postgrest:
|
|
response = postgrest.session.get("/unknown-table?select=unknown-rel(*)")
|
|
assert response.status_code == 400
|
|
data = response.json()
|
|
assert data["code"] == "PGRST200"
|