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