xref: /unit/test/test_go_application.py (revision 2616:ab2896c980ab)
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