injection_points: Add basic isolation test
This test can act as a template when implementing an isolation test with injection points, and tracks in a much simpler way some of the behaviors implied in the existing isolation test "inplace" that has been added in c35f419d6efb. Particularly, a detach does not affect a backend wait; a wait needs to be interrupted by a wakeup. Reviewed-by: Bertrand Drouvot Discussion: https://postgr.es/m/ZxGTONm_ctQz--io@paquier.xyz
This commit is contained in:
parent
f1c141fe14
commit
a7800cf498
@ -13,7 +13,7 @@ PGFILEDESC = "injection_points - facility for injection points"
|
||||
REGRESS = injection_points reindex_conc
|
||||
REGRESS_OPTS = --dlpath=$(top_builddir)/src/test/regress
|
||||
|
||||
ISOLATION = inplace
|
||||
ISOLATION = basic inplace
|
||||
|
||||
TAP_TESTS = 1
|
||||
|
||||
|
74
src/test/modules/injection_points/expected/basic.out
Normal file
74
src/test/modules/injection_points/expected/basic.out
Normal file
@ -0,0 +1,74 @@
|
||||
Parsed test spec with 2 sessions
|
||||
|
||||
starting permutation: wait1 wakeup2 detach2
|
||||
injection_points_attach
|
||||
-----------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step wait1: SELECT injection_points_run('injection-points-wait'); <waiting ...>
|
||||
step wakeup2: SELECT injection_points_wakeup('injection-points-wait');
|
||||
injection_points_wakeup
|
||||
-----------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step wait1: <... completed>
|
||||
injection_points_run
|
||||
--------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step detach2: SELECT injection_points_detach('injection-points-wait');
|
||||
injection_points_detach
|
||||
-----------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
|
||||
starting permutation: wait1 detach2 wakeup2
|
||||
injection_points_attach
|
||||
-----------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step wait1: SELECT injection_points_run('injection-points-wait'); <waiting ...>
|
||||
step detach2: SELECT injection_points_detach('injection-points-wait');
|
||||
injection_points_detach
|
||||
-----------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step wakeup2: SELECT injection_points_wakeup('injection-points-wait');
|
||||
injection_points_wakeup
|
||||
-----------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step wait1: <... completed>
|
||||
injection_points_run
|
||||
--------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
|
||||
starting permutation: detach2 wait1 wakeup2
|
||||
injection_points_attach
|
||||
-----------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step detach2: SELECT injection_points_detach('injection-points-wait');
|
||||
injection_points_detach
|
||||
-----------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step wait1: SELECT injection_points_run('injection-points-wait');
|
||||
injection_points_run
|
||||
--------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step wakeup2: SELECT injection_points_wakeup('injection-points-wait');
|
||||
ERROR: could not find injection point injection-points-wait to wake up
|
@ -42,6 +42,7 @@ tests += {
|
||||
},
|
||||
'isolation': {
|
||||
'specs': [
|
||||
'basic',
|
||||
'inplace',
|
||||
],
|
||||
},
|
||||
|
35
src/test/modules/injection_points/specs/basic.spec
Normal file
35
src/test/modules/injection_points/specs/basic.spec
Normal file
@ -0,0 +1,35 @@
|
||||
# Basic isolation test for injection points.
|
||||
#
|
||||
# This checks the interactions between wakeup, wait and detach.
|
||||
# Feel free to use it as a template when implementing an isolation
|
||||
# test with injection points.
|
||||
|
||||
setup
|
||||
{
|
||||
CREATE EXTENSION injection_points;
|
||||
}
|
||||
teardown
|
||||
{
|
||||
DROP EXTENSION injection_points;
|
||||
}
|
||||
|
||||
# Wait happens in the first session, wakeup in the second session.
|
||||
session s1
|
||||
setup {
|
||||
SELECT injection_points_set_local();
|
||||
SELECT injection_points_attach('injection-points-wait', 'wait');
|
||||
}
|
||||
step wait1 { SELECT injection_points_run('injection-points-wait'); }
|
||||
|
||||
session s2
|
||||
step wakeup2 { SELECT injection_points_wakeup('injection-points-wait'); }
|
||||
step detach2 { SELECT injection_points_detach('injection-points-wait'); }
|
||||
|
||||
# Detach after wait and wakeup.
|
||||
permutation wait1 wakeup2 detach2
|
||||
|
||||
# Detach before wakeup. s1 waits until wakeup, ignores the detach.
|
||||
permutation wait1 detach2 wakeup2
|
||||
|
||||
# Detach before wait does not cause a wait, wakeup produces an error.
|
||||
permutation detach2 wait1 wakeup2
|
Loading…
x
Reference in New Issue
Block a user