test: sanity tests for primary and replica
* new --replica option to `postgrest-with-postgresql-*` * new command `postgrest-test-replica` * new sanity tests on test_replica.py * add postgrest-test-replica to postgrest-check and postgrest-coverage
This commit is contained in:
committed by
Steve Chavez
parent
cdb877135b
commit
d9a51f23ce
@@ -45,6 +45,27 @@ def defaultenv(baseenv):
|
||||
}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def replicaenv(defaultenv):
|
||||
"Default environment for a PostgREST replica."
|
||||
conf = {
|
||||
"PGRST_DB_ANON_ROLE": "postgrest_test_anonymous",
|
||||
"PGRST_DB_SCHEMAS": "replica",
|
||||
}
|
||||
return {
|
||||
"primary": {
|
||||
**defaultenv,
|
||||
**conf,
|
||||
},
|
||||
"replica": {
|
||||
**defaultenv,
|
||||
**conf,
|
||||
"PGHOST": os.environ["PGREPLICAHOST"],
|
||||
"PGREPLICASLOT": os.environ["PGREPLICASLOT"],
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def slow_schema_cache_env(defaultenv):
|
||||
"Slow schema cache load environment PostgREST."
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
create schema replica;
|
||||
|
||||
create or replace function replica.is_replica() returns bool as $$
|
||||
select pg_is_in_recovery();
|
||||
$$ language sql;
|
||||
|
||||
create or replace function replica.get_replica_slot() returns name as $$
|
||||
select slot_name from pg_replication_slots limit 1;
|
||||
$$ language sql;
|
||||
|
||||
create table replica.items as select x as id from generate_series(1, 10) x;
|
||||
|
||||
DROP ROLE IF EXISTS postgrest_test_anonymous;
|
||||
CREATE ROLE postgrest_test_anonymous;
|
||||
|
||||
GRANT postgrest_test_anonymous TO :PGUSER;
|
||||
|
||||
GRANT USAGE ON SCHEMA replica TO postgrest_test_anonymous;
|
||||
|
||||
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA replica
|
||||
TO postgrest_test_anonymous;
|
||||
@@ -0,0 +1,28 @@
|
||||
"IO tests for PostgREST started on replicas"
|
||||
|
||||
import pytest
|
||||
|
||||
from config import *
|
||||
from util import *
|
||||
from postgrest import *
|
||||
|
||||
|
||||
def test_sanity_replica(replicaenv):
|
||||
"Test that primary and replica are working as intended"
|
||||
|
||||
with run(env=replicaenv["primary"]) as postgrest:
|
||||
response = postgrest.session.get("/rpc/is_replica")
|
||||
assert response.text == "false"
|
||||
|
||||
response = postgrest.session.get("/rpc/get_replica_slot")
|
||||
assert response.text == '"' + replicaenv["replica"]["PGREPLICASLOT"] + '"'
|
||||
|
||||
response = postgrest.session.get("/items?select=count")
|
||||
assert response.text == '[{"count":10}]'
|
||||
|
||||
with run(env=replicaenv["replica"]) as postgrest:
|
||||
response = postgrest.session.get("/rpc/is_replica")
|
||||
assert response.text == "true"
|
||||
|
||||
response = postgrest.session.get("/items?select=count")
|
||||
assert response.text == '[{"count":10}]'
|
||||
Reference in New Issue
Block a user