xref: /unit/test/test_ruby_hooks.py (revision 2692:97b0a59051f1)
1from unit.applications.lang.ruby import ApplicationRuby
2from unit.option import option
3from unit.utils import waitforglob
4from packaging import version
5
6prerequisites = {
7    'modules': {'ruby': lambda v: version.parse(v) >= version.parse('3.0')}
8}
9
10client = ApplicationRuby()
11
12
13def wait_cookie(pattern, count):
14    return waitforglob(f'{option.temp_dir}/ruby/hooks/cookie_{pattern}', count)
15
16
17def test_ruby_hooks_eval():
18    processes = 2
19
20    client.load('hooks', processes=processes, hooks='eval.rb')
21
22    hooked = wait_cookie('eval.*', processes)
23
24    assert hooked, 'hooks evaluated'
25
26
27def test_ruby_hooks_on_worker_boot():
28    processes = 2
29
30    client.load('hooks', processes=processes, hooks='on_worker_boot.rb')
31
32    hooked = wait_cookie('worker_boot.*', processes)
33
34    assert hooked, 'on_worker_boot called'
35
36
37def test_ruby_hooks_on_worker_shutdown():
38    processes = 2
39
40    client.load('hooks', processes=processes, hooks='on_worker_shutdown.rb')
41
42    assert client.get()['status'] == 200, 'app response'
43
44    client.load('empty')
45
46    hooked = wait_cookie('worker_shutdown.*', processes)
47
48    assert hooked, 'on_worker_shutdown called'
49
50
51def test_ruby_hooks_on_thread_boot():
52    processes = 1
53    threads = 2
54
55    client.load(
56        'hooks',
57        processes=processes,
58        threads=threads,
59        hooks='on_thread_boot.rb',
60    )
61
62    hooked = wait_cookie('thread_boot.*', processes * threads)
63
64    assert hooked, 'on_thread_boot called'
65
66
67def test_ruby_hooks_on_thread_shutdown():
68    processes = 1
69    threads = 2
70
71    client.load(
72        'hooks',
73        processes=processes,
74        threads=threads,
75        hooks='on_thread_shutdown.rb',
76    )
77
78    assert client.get()['status'] == 200, 'app response'
79
80    client.load('empty')
81
82    hooked = wait_cookie('thread_shutdown.*', processes * threads)
83
84    assert hooked, 'on_thread_shutdown called'
85
86
87def test_ruby_hooks_multiple():
88    processes = 1
89    threads = 1
90
91    client.load(
92        'hooks',
93        processes=processes,
94        threads=threads,
95        hooks='multiple.rb',
96    )
97
98    hooked = wait_cookie('worker_boot.*', processes)
99    assert hooked, 'on_worker_boot called'
100
101    hooked = wait_cookie('thread_boot.*', threads)
102    assert hooked, 'on_thread_boot called'
103