blob: 33996b7aac91157f65a1cd389bc54f129c772ff8 [file] [log] [blame]
-- Wait until number of replication sessions drop to 0 or timeout
-- occurs. Returns false if timeout occurred.
create function check_and_wait_for_replication(
timeout int)
returns boolean as
$$
declare
d bigint;
i int;
begin
i := 0;
loop
SELECT count(*) into d FROM pg_stat_replication where application_name = 'walreceiver_test';
if (d = 0) then
return true;
end if;
if i >= $1 then
return false;
end if;
perform pg_sleep(.5);
i := i + 1;
end loop;
end;
$$ language plpgsql;
-- Avoid generating spurious WAL records by hint bit updates. The test below
-- is quite sensitive.
vacuum freeze;
-- Test connection
SELECT test_connect('application_name=walreceiver_test');
-- Should report 1 replication
SELECT count(*) FROM pg_stat_replication where application_name = 'walreceiver_test';
SELECT test_disconnect();
SELECT check_and_wait_for_replication(10);
-- Test connection passing hostname
SELECT test_connect('host=localhost application_name=walreceiver_test');
SELECT count(*) FROM pg_stat_replication where application_name = 'walreceiver_test';
SELECT test_disconnect();
SELECT check_and_wait_for_replication(10);
-- remember current_wal_lsn.
-- start_ignore
select pg_current_wal_lsn() as lsn;
-- end_ignore
\gset
-- lets generate some xlogs
create table testwalreceiver(a int);
insert into testwalreceiver select * from generate_series(0, 9);
-- Connect and receive the xlogs, validate everything was received from start to
-- end
SELECT test_connect('');
SELECT test_receive_and_verify(:'lsn', pg_current_wal_lsn());
SELECT test_send();
SELECT test_disconnect();