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 = injection_points reindex_conc
|
||||||
REGRESS_OPTS = --dlpath=$(top_builddir)/src/test/regress
|
REGRESS_OPTS = --dlpath=$(top_builddir)/src/test/regress
|
||||||
|
|
||||||
ISOLATION = inplace
|
ISOLATION = basic inplace
|
||||||
|
|
||||||
TAP_TESTS = 1
|
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': {
|
'isolation': {
|
||||||
'specs': [
|
'specs': [
|
||||||
|
'basic',
|
||||||
'inplace',
|
'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