11635Szelenkov@nginx.comimport re 21635Szelenkov@nginx.com 32491Szelenkov@nginx.comfrom unit.applications.lang.go import ApplicationGo 4693Szelenkov@nginx.com 52488Szelenkov@nginx.comprerequisites = {'modules': {'go': 'all'}} 62488Szelenkov@nginx.com 72491Szelenkov@nginx.comclient = ApplicationGo() 81017Szelenkov@nginx.com 9693Szelenkov@nginx.com 102491Szelenkov@nginx.comdef test_go_application_variables(date_to_sec_epoch, sec_epoch): 112491Szelenkov@nginx.com client.load('variables') 12693Szelenkov@nginx.com 132491Szelenkov@nginx.com body = 'Test body string.' 14693Szelenkov@nginx.com 152491Szelenkov@nginx.com resp = client.post( 162491Szelenkov@nginx.com headers={ 172491Szelenkov@nginx.com 'Host': 'localhost', 181596Szelenkov@nginx.com 'Content-Type': 'text/html', 191596Szelenkov@nginx.com 'Custom-Header': 'blah', 201596Szelenkov@nginx.com 'Connection': 'close', 212491Szelenkov@nginx.com }, 222491Szelenkov@nginx.com body=body, 232491Szelenkov@nginx.com ) 24693Szelenkov@nginx.com 252491Szelenkov@nginx.com assert resp['status'] == 200, 'status' 262491Szelenkov@nginx.com headers = resp['headers'] 272491Szelenkov@nginx.com header_server = headers.pop('Server') 282491Szelenkov@nginx.com assert re.search(r'Unit/[\d\.]+', header_server), 'server header' 29693Szelenkov@nginx.com 302491Szelenkov@nginx.com date = headers.pop('Date') 312491Szelenkov@nginx.com assert date[-4:] == ' GMT', 'date header timezone' 322491Szelenkov@nginx.com assert abs(date_to_sec_epoch(date) - sec_epoch) < 5, 'date header' 33693Szelenkov@nginx.com 342491Szelenkov@nginx.com assert headers == { 352491Szelenkov@nginx.com 'Content-Length': str(len(body)), 362491Szelenkov@nginx.com 'Content-Type': 'text/html', 372491Szelenkov@nginx.com 'Request-Method': 'POST', 382491Szelenkov@nginx.com 'Request-Uri': '/', 392491Szelenkov@nginx.com 'Http-Host': 'localhost', 402491Szelenkov@nginx.com 'Server-Protocol': 'HTTP/1.1', 412491Szelenkov@nginx.com 'Server-Protocol-Major': '1', 422491Szelenkov@nginx.com 'Server-Protocol-Minor': '1', 432491Szelenkov@nginx.com 'Custom-Header': 'blah', 442491Szelenkov@nginx.com 'Connection': 'close', 452491Szelenkov@nginx.com }, 'headers' 462491Szelenkov@nginx.com assert resp['body'] == body, 'body' 47693Szelenkov@nginx.com 48693Szelenkov@nginx.com 492491Szelenkov@nginx.comdef test_go_application_get_variables(): 502491Szelenkov@nginx.com client.load('get_variables') 51693Szelenkov@nginx.com 522491Szelenkov@nginx.com resp = client.get(url='/?var1=val1&var2=&var3') 532491Szelenkov@nginx.com assert resp['headers']['X-Var-1'] == 'val1', 'GET variables' 542491Szelenkov@nginx.com assert resp['headers']['X-Var-2'] == '', 'GET variables 2' 552491Szelenkov@nginx.com assert resp['headers']['X-Var-3'] == '', 'GET variables 3' 56693Szelenkov@nginx.com 572491Szelenkov@nginx.com 582491Szelenkov@nginx.comdef test_go_application_post_variables(): 592491Szelenkov@nginx.com client.load('post_variables') 60693Szelenkov@nginx.com 612491Szelenkov@nginx.com resp = client.post( 622491Szelenkov@nginx.com headers={ 632491Szelenkov@nginx.com 'Host': 'localhost', 642491Szelenkov@nginx.com 'Content-Type': 'application/x-www-form-urlencoded', 652491Szelenkov@nginx.com 'Connection': 'close', 662491Szelenkov@nginx.com }, 672491Szelenkov@nginx.com body='var1=val1&var2=&var3', 682491Szelenkov@nginx.com ) 691029Szelenkov@nginx.com 702491Szelenkov@nginx.com assert resp['headers']['X-Var-1'] == 'val1', 'POST variables' 712491Szelenkov@nginx.com assert resp['headers']['X-Var-2'] == '', 'POST variables 2' 722491Szelenkov@nginx.com assert resp['headers']['X-Var-3'] == '', 'POST variables 3' 732491Szelenkov@nginx.com 742491Szelenkov@nginx.com 752491Szelenkov@nginx.comdef test_go_application_404(): 762491Szelenkov@nginx.com client.load('404') 77693Szelenkov@nginx.com 782491Szelenkov@nginx.com resp = client.get() 792491Szelenkov@nginx.com 802491Szelenkov@nginx.com assert resp['status'] == 404, '404 status' 812491Szelenkov@nginx.com assert re.search(r'<title>404 Not Found</title>', resp['body']), '404 body' 82693Szelenkov@nginx.com 832491Szelenkov@nginx.com 842491Szelenkov@nginx.comdef test_go_keepalive_body(): 852491Szelenkov@nginx.com client.load('mirror') 862491Szelenkov@nginx.com 872491Szelenkov@nginx.com assert client.get()['status'] == 200, 'init' 88693Szelenkov@nginx.com 892491Szelenkov@nginx.com body = '0123456789' * 500 902491Szelenkov@nginx.com (resp, sock) = client.post( 912491Szelenkov@nginx.com headers={ 922491Szelenkov@nginx.com 'Host': 'localhost', 932491Szelenkov@nginx.com 'Connection': 'keep-alive', 942491Szelenkov@nginx.com }, 952491Szelenkov@nginx.com start=True, 962491Szelenkov@nginx.com body=body, 972491Szelenkov@nginx.com read_timeout=1, 982491Szelenkov@nginx.com ) 99693Szelenkov@nginx.com 1002491Szelenkov@nginx.com assert resp['body'] == body, 'keep-alive 1' 101693Szelenkov@nginx.com 1022491Szelenkov@nginx.com body = '0123456789' 1032491Szelenkov@nginx.com resp = client.post(sock=sock, body=body) 1042491Szelenkov@nginx.com assert resp['body'] == body, 'keep-alive 2' 1052491Szelenkov@nginx.com 106693Szelenkov@nginx.com 1072491Szelenkov@nginx.comdef test_go_application_cookies(): 1082491Szelenkov@nginx.com client.load('cookies') 109693Szelenkov@nginx.com 1102491Szelenkov@nginx.com resp = client.get( 1112491Szelenkov@nginx.com headers={ 1122491Szelenkov@nginx.com 'Host': 'localhost', 1132491Szelenkov@nginx.com 'Cookie': 'var1=val1; var2=val2', 1142491Szelenkov@nginx.com 'Connection': 'close', 1152491Szelenkov@nginx.com } 1162491Szelenkov@nginx.com ) 117693Szelenkov@nginx.com 1182491Szelenkov@nginx.com assert resp['headers']['X-Cookie-1'] == 'val1', 'cookie 1' 1192491Szelenkov@nginx.com assert resp['headers']['X-Cookie-2'] == 'val2', 'cookie 2' 1202491Szelenkov@nginx.com 121693Szelenkov@nginx.com 1222491Szelenkov@nginx.comdef test_go_application_command_line_arguments_type(): 1232491Szelenkov@nginx.com client.load('command_line_arguments') 1242491Szelenkov@nginx.com 1252491Szelenkov@nginx.com assert 'error' in client.conf( 126*2616Szelenkov@nginx.com "a b c", 'applications/command_line_arguments/arguments' 1272491Szelenkov@nginx.com ), 'arguments type' 128693Szelenkov@nginx.com 1292491Szelenkov@nginx.com 1302491Szelenkov@nginx.comdef test_go_application_command_line_arguments_0(): 1312491Szelenkov@nginx.com client.load('command_line_arguments') 132693Szelenkov@nginx.com 1332491Szelenkov@nginx.com assert client.get()['headers']['X-Arg-0'] == client.conf_get( 1342491Szelenkov@nginx.com 'applications/command_line_arguments/executable' 1352491Szelenkov@nginx.com ), 'argument 0' 136693Szelenkov@nginx.com 1372491Szelenkov@nginx.com 1382491Szelenkov@nginx.comdef test_go_application_command_line_arguments(): 1392491Szelenkov@nginx.com client.load('command_line_arguments') 140693Szelenkov@nginx.com 1412491Szelenkov@nginx.com arg1 = '--cc=gcc-7.2.0' 1422491Szelenkov@nginx.com arg2 = "--cc-opt='-O0 -DNXT_DEBUG_MEMORY=1 -fsanitize=address'" 1432491Szelenkov@nginx.com arg3 = '--debug' 144693Szelenkov@nginx.com 1452491Szelenkov@nginx.com assert 'success' in client.conf( 1462491Szelenkov@nginx.com f'["{arg1}", "{arg2}", "{arg3}"]', 1472491Szelenkov@nginx.com 'applications/command_line_arguments/arguments', 1482491Szelenkov@nginx.com ) 149693Szelenkov@nginx.com 1502491Szelenkov@nginx.com assert client.get()['body'] == f'{arg1},{arg2},{arg3}', 'arguments' 1512491Szelenkov@nginx.com 152693Szelenkov@nginx.com 1532491Szelenkov@nginx.comdef test_go_application_command_line_arguments_change(): 1542491Szelenkov@nginx.com client.load('command_line_arguments') 155693Szelenkov@nginx.com 1562491Szelenkov@nginx.com args_path = 'applications/command_line_arguments/arguments' 157693Szelenkov@nginx.com 1582491Szelenkov@nginx.com assert 'success' in client.conf('["0", "a", "$", ""]', args_path) 1592491Szelenkov@nginx.com 1602491Szelenkov@nginx.com assert client.get()['body'] == '0,a,$,', 'arguments' 161693Szelenkov@nginx.com 1622491Szelenkov@nginx.com assert 'success' in client.conf('["-1", "b", "%"]', args_path) 1632491Szelenkov@nginx.com 1642491Szelenkov@nginx.com assert client.get()['body'] == '-1,b,%', 'arguments change' 165693Szelenkov@nginx.com 1662491Szelenkov@nginx.com assert 'success' in client.conf('[]', args_path) 167693Szelenkov@nginx.com 1682491Szelenkov@nginx.com assert client.get()['headers']['Content-Length'] == '0', 'arguments empty' 169