aboutsummaryrefslogtreecommitdiff
path: root/src/test/modules/injection_points/specs/basic.spec
blob: 13d2793f6e4cce65be5727acbb2690326a97df6c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 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'); }
step noop1	{ }

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.  Note that the detach may finish before
# the SQL function doing the wait returns its result.  In order to avoid
# any ordering issues, a no-op step is added after the wait, so as the
# detach is not launched until the wait has completed.
permutation wait1 wakeup2 noop1 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