12491Szelenkov@nginx.comfrom unit.applications.lang.ruby import ApplicationRuby 21912So.canty@f5.comfrom unit.option import option 31912So.canty@f5.comfrom unit.utils import waitforglob 4*2692Szelenkov@nginx.comfrom packaging import version 51912So.canty@f5.com 6*2692Szelenkov@nginx.comprerequisites = { 7*2692Szelenkov@nginx.com 'modules': {'ruby': lambda v: version.parse(v) >= version.parse('3.0')} 8*2692Szelenkov@nginx.com} 92488Szelenkov@nginx.com 102491Szelenkov@nginx.comclient = ApplicationRuby() 111912So.canty@f5.com 122491Szelenkov@nginx.com 132491Szelenkov@nginx.comdef wait_cookie(pattern, count): 142491Szelenkov@nginx.com return waitforglob(f'{option.temp_dir}/ruby/hooks/cookie_{pattern}', count) 151912So.canty@f5.com 162491Szelenkov@nginx.com 172491Szelenkov@nginx.comdef test_ruby_hooks_eval(): 182491Szelenkov@nginx.com processes = 2 191912So.canty@f5.com 202491Szelenkov@nginx.com client.load('hooks', processes=processes, hooks='eval.rb') 211912So.canty@f5.com 222491Szelenkov@nginx.com hooked = wait_cookie('eval.*', processes) 232491Szelenkov@nginx.com 242491Szelenkov@nginx.com assert hooked, 'hooks evaluated' 251912So.canty@f5.com 261912So.canty@f5.com 272491Szelenkov@nginx.comdef test_ruby_hooks_on_worker_boot(): 282491Szelenkov@nginx.com processes = 2 291912So.canty@f5.com 302491Szelenkov@nginx.com client.load('hooks', processes=processes, hooks='on_worker_boot.rb') 311912So.canty@f5.com 322491Szelenkov@nginx.com hooked = wait_cookie('worker_boot.*', processes) 331912So.canty@f5.com 342491Szelenkov@nginx.com assert hooked, 'on_worker_boot called' 352491Szelenkov@nginx.com 361912So.canty@f5.com 372491Szelenkov@nginx.comdef test_ruby_hooks_on_worker_shutdown(): 382491Szelenkov@nginx.com processes = 2 391912So.canty@f5.com 402491Szelenkov@nginx.com client.load('hooks', processes=processes, hooks='on_worker_shutdown.rb') 411912So.canty@f5.com 422491Szelenkov@nginx.com assert client.get()['status'] == 200, 'app response' 431912So.canty@f5.com 442491Szelenkov@nginx.com client.load('empty') 451912So.canty@f5.com 462491Szelenkov@nginx.com hooked = wait_cookie('worker_shutdown.*', processes) 471912So.canty@f5.com 482491Szelenkov@nginx.com assert hooked, 'on_worker_shutdown called' 492491Szelenkov@nginx.com 501912So.canty@f5.com 512491Szelenkov@nginx.comdef test_ruby_hooks_on_thread_boot(): 522491Szelenkov@nginx.com processes = 1 532491Szelenkov@nginx.com threads = 2 541912So.canty@f5.com 552491Szelenkov@nginx.com client.load( 562491Szelenkov@nginx.com 'hooks', 572491Szelenkov@nginx.com processes=processes, 582491Szelenkov@nginx.com threads=threads, 592491Szelenkov@nginx.com hooks='on_thread_boot.rb', 602491Szelenkov@nginx.com ) 611912So.canty@f5.com 622491Szelenkov@nginx.com hooked = wait_cookie('thread_boot.*', processes * threads) 631912So.canty@f5.com 642491Szelenkov@nginx.com assert hooked, 'on_thread_boot called' 651912So.canty@f5.com 662491Szelenkov@nginx.com 672491Szelenkov@nginx.comdef test_ruby_hooks_on_thread_shutdown(): 682491Szelenkov@nginx.com processes = 1 692491Szelenkov@nginx.com threads = 2 701912So.canty@f5.com 712491Szelenkov@nginx.com client.load( 722491Szelenkov@nginx.com 'hooks', 732491Szelenkov@nginx.com processes=processes, 742491Szelenkov@nginx.com threads=threads, 752491Szelenkov@nginx.com hooks='on_thread_shutdown.rb', 762491Szelenkov@nginx.com ) 771912So.canty@f5.com 782491Szelenkov@nginx.com assert client.get()['status'] == 200, 'app response' 791912So.canty@f5.com 802491Szelenkov@nginx.com client.load('empty') 811912So.canty@f5.com 822491Szelenkov@nginx.com hooked = wait_cookie('thread_shutdown.*', processes * threads) 831912So.canty@f5.com 842491Szelenkov@nginx.com assert hooked, 'on_thread_shutdown called' 852491Szelenkov@nginx.com 861912So.canty@f5.com 872491Szelenkov@nginx.comdef test_ruby_hooks_multiple(): 882491Szelenkov@nginx.com processes = 1 892491Szelenkov@nginx.com threads = 1 901912So.canty@f5.com 912491Szelenkov@nginx.com client.load( 922491Szelenkov@nginx.com 'hooks', 932491Szelenkov@nginx.com processes=processes, 942491Szelenkov@nginx.com threads=threads, 952491Szelenkov@nginx.com hooks='multiple.rb', 962491Szelenkov@nginx.com ) 971912So.canty@f5.com 982491Szelenkov@nginx.com hooked = wait_cookie('worker_boot.*', processes) 992491Szelenkov@nginx.com assert hooked, 'on_worker_boot called' 1001912So.canty@f5.com 1012491Szelenkov@nginx.com hooked = wait_cookie('thread_boot.*', threads) 1022491Szelenkov@nginx.com assert hooked, 'on_thread_boot called' 103