11475Saxel.duch@nginx.com# -*- coding: utf-8 -*- 21596Szelenkov@nginx.comimport pytest 3*2616Szelenkov@nginx.com 42491Szelenkov@nginx.comfrom unit.applications.lang.python import ApplicationPython 51730Szelenkov@nginx.comfrom unit.option import option 6972Szelenkov@nginx.com 72488Szelenkov@nginx.comprerequisites = {'modules': {'python': 'any'}} 82488Szelenkov@nginx.com 92491Szelenkov@nginx.comclient = ApplicationPython() 101017Szelenkov@nginx.com 11972Szelenkov@nginx.com 122491Szelenkov@nginx.com@pytest.fixture(autouse=True) 132491Szelenkov@nginx.comdef setup_method_fixture(): 142491Szelenkov@nginx.com assert 'success' in client.conf( 152491Szelenkov@nginx.com { 162592Szelenkov@nginx.com "listeners": {"*:8080": {"pass": "routes"}}, 172491Szelenkov@nginx.com "routes": [ 182491Szelenkov@nginx.com { 192491Szelenkov@nginx.com "match": {"method": "GET"}, 202491Szelenkov@nginx.com "action": {"return": 200}, 212491Szelenkov@nginx.com } 222491Szelenkov@nginx.com ], 232491Szelenkov@nginx.com "applications": {}, 242491Szelenkov@nginx.com } 252491Szelenkov@nginx.com ), 'routing configure' 261101Szelenkov@nginx.com 271037Szelenkov@nginx.com 28*2616Szelenkov@nginx.comdef route(conf_route): 29*2616Szelenkov@nginx.com return client.conf([conf_route], 'routes') 302491Szelenkov@nginx.com 311037Szelenkov@nginx.com 322491Szelenkov@nginx.comdef route_match(match): 332491Szelenkov@nginx.com assert 'success' in route( 342491Szelenkov@nginx.com {"match": match, "action": {"return": 200}} 352491Szelenkov@nginx.com ), 'route match configure' 362491Szelenkov@nginx.com 372491Szelenkov@nginx.com 382491Szelenkov@nginx.comdef route_match_invalid(match): 392491Szelenkov@nginx.com assert 'error' in route( 402491Szelenkov@nginx.com {"match": match, "action": {"return": 200}} 412491Szelenkov@nginx.com ), 'route match configure invalid' 422491Szelenkov@nginx.com 431308Szelenkov@nginx.com 44*2616Szelenkov@nginx.comdef host(host_header, status): 452491Szelenkov@nginx.com assert ( 46*2616Szelenkov@nginx.com client.get(headers={'Host': host_header, 'Connection': 'close'})[ 47*2616Szelenkov@nginx.com 'status' 48*2616Szelenkov@nginx.com ] 492491Szelenkov@nginx.com == status 502491Szelenkov@nginx.com ), 'match host' 512491Szelenkov@nginx.com 521037Szelenkov@nginx.com 53*2616Szelenkov@nginx.comdef cookie(cookie_header, status): 542491Szelenkov@nginx.com assert ( 552491Szelenkov@nginx.com client.get( 562491Szelenkov@nginx.com headers={ 572491Szelenkov@nginx.com 'Host': 'localhost', 58*2616Szelenkov@nginx.com 'Cookie': cookie_header, 592491Szelenkov@nginx.com 'Connection': 'close', 602491Szelenkov@nginx.com }, 612491Szelenkov@nginx.com )['status'] 622491Szelenkov@nginx.com == status 632491Szelenkov@nginx.com ), 'match cookie' 641308Szelenkov@nginx.com 651308Szelenkov@nginx.com 662491Szelenkov@nginx.comdef test_routes_match_method_positive(): 672491Szelenkov@nginx.com assert client.get()['status'] == 200, 'GET' 682491Szelenkov@nginx.com assert client.post()['status'] == 404, 'POST' 691308Szelenkov@nginx.com 701308Szelenkov@nginx.com 712491Szelenkov@nginx.comdef test_routes_match_method_positive_many(): 722491Szelenkov@nginx.com route_match({"method": ["GET", "POST"]}) 731308Szelenkov@nginx.com 742491Szelenkov@nginx.com assert client.get()['status'] == 200, 'GET' 752491Szelenkov@nginx.com assert client.post()['status'] == 200, 'POST' 762491Szelenkov@nginx.com assert client.delete()['status'] == 404, 'DELETE' 772491Szelenkov@nginx.com 781308Szelenkov@nginx.com 792491Szelenkov@nginx.comdef test_routes_match_method_negative(): 802491Szelenkov@nginx.com route_match({"method": "!GET"}) 811308Szelenkov@nginx.com 822491Szelenkov@nginx.com assert client.get()['status'] == 404, 'GET' 832491Szelenkov@nginx.com assert client.post()['status'] == 200, 'POST' 841037Szelenkov@nginx.com 852491Szelenkov@nginx.com 862491Szelenkov@nginx.comdef test_routes_match_method_negative_many(): 872491Szelenkov@nginx.com route_match({"method": ["!GET", "!POST"]}) 881308Szelenkov@nginx.com 892491Szelenkov@nginx.com assert client.get()['status'] == 404, 'GET' 902491Szelenkov@nginx.com assert client.post()['status'] == 404, 'POST' 912491Szelenkov@nginx.com assert client.delete()['status'] == 200, 'DELETE' 921308Szelenkov@nginx.com 932491Szelenkov@nginx.com 942491Szelenkov@nginx.comdef test_routes_match_method_wildcard_left(): 952491Szelenkov@nginx.com route_match({"method": "*ET"}) 961308Szelenkov@nginx.com 972491Szelenkov@nginx.com assert client.get()['status'] == 200, 'GET' 982491Szelenkov@nginx.com assert client.post()['status'] == 404, 'POST' 992491Szelenkov@nginx.com 1001308Szelenkov@nginx.com 1012491Szelenkov@nginx.comdef test_routes_match_method_wildcard_right(): 1022491Szelenkov@nginx.com route_match({"method": "GE*"}) 1031308Szelenkov@nginx.com 1042491Szelenkov@nginx.com assert client.get()['status'] == 200, 'GET' 1052491Szelenkov@nginx.com assert client.post()['status'] == 404, 'POST' 1061508Saxel.duch@nginx.com 1072491Szelenkov@nginx.com 1082491Szelenkov@nginx.comdef test_routes_match_method_wildcard_left_right(): 1092491Szelenkov@nginx.com route_match({"method": "*GET*"}) 1101508Saxel.duch@nginx.com 1112491Szelenkov@nginx.com assert client.get()['status'] == 200, 'GET' 1122491Szelenkov@nginx.com assert client.post()['status'] == 404, 'POST' 1132491Szelenkov@nginx.com 1141508Saxel.duch@nginx.com 1152491Szelenkov@nginx.comdef test_routes_match_method_wildcard(): 1162491Szelenkov@nginx.com route_match({"method": "*"}) 1172491Szelenkov@nginx.com 1182491Szelenkov@nginx.com assert client.get()['status'] == 200, 'GET' 1191508Saxel.duch@nginx.com 1201633Svbart@nginx.com 1212491Szelenkov@nginx.comdef test_routes_match_invalid(): 1222491Szelenkov@nginx.com route_match_invalid({"method": "**"}) 1231508Saxel.duch@nginx.com 1241508Saxel.duch@nginx.com 1252491Szelenkov@nginx.comdef test_routes_match_valid(): 1262491Szelenkov@nginx.com route_match({"method": "blah*"}) 1272491Szelenkov@nginx.com route_match({"host": "*blah*blah"}) 1282491Szelenkov@nginx.com route_match({"host": "blah*blah*blah"}) 1292491Szelenkov@nginx.com route_match({"host": "blah*blah*"}) 1302491Szelenkov@nginx.com 1311508Saxel.duch@nginx.com 1322491Szelenkov@nginx.comdef test_routes_match_empty_exact(): 1332491Szelenkov@nginx.com route_match({"uri": ""}) 1342491Szelenkov@nginx.com assert client.get()['status'] == 404 1351308Szelenkov@nginx.com 1362491Szelenkov@nginx.com route_match({"uri": "/"}) 1372491Szelenkov@nginx.com assert client.get()['status'] == 200 1382491Szelenkov@nginx.com assert client.get(url='/blah')['status'] == 404 1391308Szelenkov@nginx.com 1402491Szelenkov@nginx.com 1412491Szelenkov@nginx.comdef test_routes_match_negative(): 1422491Szelenkov@nginx.com route_match({"uri": "!"}) 1432491Szelenkov@nginx.com assert client.get()['status'] == 200 1441037Szelenkov@nginx.com 1452491Szelenkov@nginx.com route_match({"uri": "!*"}) 1462491Szelenkov@nginx.com assert client.get()['status'] == 404 147972Szelenkov@nginx.com 1482491Szelenkov@nginx.com route_match({"uri": "!/"}) 1492491Szelenkov@nginx.com assert client.get()['status'] == 404 1502491Szelenkov@nginx.com assert client.get(url='/blah')['status'] == 200 1511037Szelenkov@nginx.com 1522491Szelenkov@nginx.com route_match({"uri": "!*blah"}) 1532491Szelenkov@nginx.com assert client.get()['status'] == 200 1542491Szelenkov@nginx.com assert client.get(url='/bla')['status'] == 200 1552491Szelenkov@nginx.com assert client.get(url='/blah')['status'] == 404 1562491Szelenkov@nginx.com assert client.get(url='/blah1')['status'] == 200 1571037Szelenkov@nginx.com 1582491Szelenkov@nginx.com route_match({"uri": "!/blah*1*"}) 1592491Szelenkov@nginx.com assert client.get()['status'] == 200 1602491Szelenkov@nginx.com assert client.get(url='/blah')['status'] == 200 1612491Szelenkov@nginx.com assert client.get(url='/blah1')['status'] == 404 1622491Szelenkov@nginx.com assert client.get(url='/blah12')['status'] == 404 1632491Szelenkov@nginx.com assert client.get(url='/blah2')['status'] == 200 1641037Szelenkov@nginx.com 1652491Szelenkov@nginx.com 1662491Szelenkov@nginx.comdef test_routes_match_wildcard_middle(): 1672491Szelenkov@nginx.com route_match({"host": "ex*le"}) 1681037Szelenkov@nginx.com 1692491Szelenkov@nginx.com host('example', 200) 1702491Szelenkov@nginx.com host('www.example', 404) 1712491Szelenkov@nginx.com host('example.com', 404) 1722491Szelenkov@nginx.com host('exampl', 404) 1731037Szelenkov@nginx.com 1741037Szelenkov@nginx.com 1752491Szelenkov@nginx.comdef test_routes_match_method_case_insensitive(): 1762491Szelenkov@nginx.com route_match({"method": "get"}) 1771037Szelenkov@nginx.com 1782491Szelenkov@nginx.com assert client.get()['status'] == 200, 'GET' 1792491Szelenkov@nginx.com 1801037Szelenkov@nginx.com 1812491Szelenkov@nginx.comdef test_routes_match_wildcard_left_case_insensitive(): 1822491Szelenkov@nginx.com route_match({"method": "*get"}) 1832491Szelenkov@nginx.com assert client.get()['status'] == 200, 'GET' 1841037Szelenkov@nginx.com 1852491Szelenkov@nginx.com route_match({"method": "*et"}) 1862491Szelenkov@nginx.com assert client.get()['status'] == 200, 'GET' 1872491Szelenkov@nginx.com 1881037Szelenkov@nginx.com 1892491Szelenkov@nginx.comdef test_routes_match_wildcard_middle_case_insensitive(): 1902491Szelenkov@nginx.com route_match({"method": "g*t"}) 1912491Szelenkov@nginx.com 1922491Szelenkov@nginx.com assert client.get()['status'] == 200, 'GET' 1931037Szelenkov@nginx.com 1941510Saxel.duch@nginx.com 1952491Szelenkov@nginx.comdef test_routes_match_wildcard_right_case_insensitive(): 1962491Szelenkov@nginx.com route_match({"method": "get*"}) 1972491Szelenkov@nginx.com assert client.get()['status'] == 200, 'GET' 1981510Saxel.duch@nginx.com 1992491Szelenkov@nginx.com route_match({"method": "ge*"}) 2002491Szelenkov@nginx.com assert client.get()['status'] == 200, 'GET' 2011510Saxel.duch@nginx.com 2021510Saxel.duch@nginx.com 2032491Szelenkov@nginx.comdef test_routes_match_wildcard_substring_case_insensitive(): 2042491Szelenkov@nginx.com route_match({"method": "*et*"}) 2051510Saxel.duch@nginx.com 2062491Szelenkov@nginx.com assert client.get()['status'] == 200, 'GET' 2071510Saxel.duch@nginx.com 2081510Saxel.duch@nginx.com 2092491Szelenkov@nginx.comdef test_routes_match_wildcard_left_case_sensitive(): 2102491Szelenkov@nginx.com route_match({"uri": "*blah"}) 2111510Saxel.duch@nginx.com 2122491Szelenkov@nginx.com assert client.get(url='/blah')['status'] == 200, '/blah' 2132491Szelenkov@nginx.com assert client.get(url='/BLAH')['status'] == 404, '/BLAH' 2141037Szelenkov@nginx.com 2152491Szelenkov@nginx.com 2162491Szelenkov@nginx.comdef test_routes_match_wildcard_middle_case_sensitive(): 2172491Szelenkov@nginx.com route_match({"uri": "/b*h"}) 2181037Szelenkov@nginx.com 2192491Szelenkov@nginx.com assert client.get(url='/blah')['status'] == 200, '/blah' 2202491Szelenkov@nginx.com assert client.get(url='/BLAH')['status'] == 404, '/BLAH' 2212491Szelenkov@nginx.com 2221037Szelenkov@nginx.com 2232491Szelenkov@nginx.comdef test_route_match_wildcards_ordered(): 2242491Szelenkov@nginx.com route_match({"uri": "/a*x*y*"}) 2251037Szelenkov@nginx.com 2262491Szelenkov@nginx.com assert client.get(url='/axy')['status'] == 200, '/axy' 2272491Szelenkov@nginx.com assert client.get(url='/ayx')['status'] == 404, '/ayx' 2282491Szelenkov@nginx.com 2291508Saxel.duch@nginx.com 2302491Szelenkov@nginx.comdef test_route_match_wildcards_adjust_start(): 2312491Szelenkov@nginx.com route_match({"uri": "/bla*bla*"}) 2321508Saxel.duch@nginx.com 2332491Szelenkov@nginx.com assert client.get(url='/bla_foo')['status'] == 404, '/bla_foo' 2342491Szelenkov@nginx.com 2352491Szelenkov@nginx.com 2362491Szelenkov@nginx.comdef test_route_match_wildcards_adjust_start_substr(): 2372491Szelenkov@nginx.com route_match({"uri": "*bla*bla*"}) 2381807Szelenkov@nginx.com 2392491Szelenkov@nginx.com assert client.get(url='/bla_foo')['status'] == 404, '/bla_foo' 2402491Szelenkov@nginx.com 2412491Szelenkov@nginx.com 2422491Szelenkov@nginx.comdef test_route_match_wildcards_adjust_end(): 2432491Szelenkov@nginx.com route_match({"uri": "/bla*bla"}) 2441721Saxel.duch@nginx.com 2452491Szelenkov@nginx.com assert client.get(url='/foo_bla')['status'] == 404, '/foo_bla' 2462491Szelenkov@nginx.com 2471721Saxel.duch@nginx.com 2482491Szelenkov@nginx.comdef test_routes_match_wildcard_right_case_sensitive(): 2492491Szelenkov@nginx.com route_match({"uri": "/bla*"}) 2501721Saxel.duch@nginx.com 2512491Szelenkov@nginx.com assert client.get(url='/blah')['status'] == 200, '/blah' 2522491Szelenkov@nginx.com assert client.get(url='/BLAH')['status'] == 404, '/BLAH' 2532491Szelenkov@nginx.com 2542491Szelenkov@nginx.com 2552491Szelenkov@nginx.comdef test_routes_match_wildcard_substring_case_sensitive(): 2562491Szelenkov@nginx.com route_match({"uri": "*bla*"}) 2572491Szelenkov@nginx.com 2582491Szelenkov@nginx.com assert client.get(url='/blah')['status'] == 200, '/blah' 2592491Szelenkov@nginx.com assert client.get(url='/BLAH')['status'] == 404, '/BLAH' 2601721Saxel.duch@nginx.com 2612491Szelenkov@nginx.com 2622491Szelenkov@nginx.comdef test_routes_match_many_wildcard_substrings_case_sensitive(): 2632491Szelenkov@nginx.com route_match({"uri": "*a*B*c*"}) 2641721Saxel.duch@nginx.com 2652491Szelenkov@nginx.com assert client.get(url='/blah-a-B-c-blah')['status'] == 200 2662491Szelenkov@nginx.com assert client.get(url='/a-B-c')['status'] == 200 2672491Szelenkov@nginx.com assert client.get(url='/aBc')['status'] == 200 2682491Szelenkov@nginx.com assert client.get(url='/aBCaBbc')['status'] == 200 2692491Szelenkov@nginx.com assert client.get(url='/ABc')['status'] == 404 2701721Saxel.duch@nginx.com 2712491Szelenkov@nginx.com 2722491Szelenkov@nginx.comdef test_routes_empty_regex(require): 2732491Szelenkov@nginx.com require({'modules': {'regex': True}}) 2741721Saxel.duch@nginx.com 2752491Szelenkov@nginx.com route_match({"uri": "~"}) 2762491Szelenkov@nginx.com assert client.get(url='/')['status'] == 200, 'empty regexp' 2772491Szelenkov@nginx.com assert client.get(url='/anything')['status'] == 200, '/anything' 2781807Szelenkov@nginx.com 2792491Szelenkov@nginx.com route_match({"uri": "!~"}) 2802491Szelenkov@nginx.com assert client.get(url='/')['status'] == 404, 'empty regexp 2' 2812491Szelenkov@nginx.com assert client.get(url='/nothing')['status'] == 404, '/nothing' 2822491Szelenkov@nginx.com 2831721Saxel.duch@nginx.com 2842491Szelenkov@nginx.comdef test_routes_bad_regex(require): 2852491Szelenkov@nginx.com require({'modules': {'regex': True}}) 2861721Saxel.duch@nginx.com 2872491Szelenkov@nginx.com assert 'error' in route( 2882491Szelenkov@nginx.com {"match": {"uri": "~/bl[ah"}, "action": {"return": 200}} 2892491Szelenkov@nginx.com ), 'bad regex' 2902330Szelenkov@nginx.com 2912491Szelenkov@nginx.com status = route({"match": {"uri": "~(?R)?z"}, "action": {"return": 200}}) 2922491Szelenkov@nginx.com if 'error' not in status: 2932491Szelenkov@nginx.com assert client.get(url='/nothing_z')['status'] == 500, '/nothing_z' 2942491Szelenkov@nginx.com 2952491Szelenkov@nginx.com status = route({"match": {"uri": "~((?1)?z)"}, "action": {"return": 200}}) 2962491Szelenkov@nginx.com if 'error' not in status: 2972491Szelenkov@nginx.com assert client.get(url='/nothing_z')['status'] == 500, '/nothing_z' 2982491Szelenkov@nginx.com 2991478Szelenkov@nginx.com 3002491Szelenkov@nginx.comdef test_routes_match_regex_case_sensitive(require): 3012491Szelenkov@nginx.com require({'modules': {'regex': True}}) 3022491Szelenkov@nginx.com 3032491Szelenkov@nginx.com route_match({"uri": "~/bl[ah]"}) 3041478Szelenkov@nginx.com 3052491Szelenkov@nginx.com assert client.get(url='/rlah')['status'] == 404, '/rlah' 3062491Szelenkov@nginx.com assert client.get(url='/blah')['status'] == 200, '/blah' 3072491Szelenkov@nginx.com assert client.get(url='/blh')['status'] == 200, '/blh' 3082491Szelenkov@nginx.com assert client.get(url='/BLAH')['status'] == 404, '/BLAH' 3092491Szelenkov@nginx.com 3101478Szelenkov@nginx.com 3112491Szelenkov@nginx.comdef test_routes_match_regex_negative_case_sensitive(require): 3122491Szelenkov@nginx.com require({'modules': {'regex': True}}) 3132491Szelenkov@nginx.com 3142491Szelenkov@nginx.com route_match({"uri": "!~/bl[ah]"}) 3152491Szelenkov@nginx.com 3162491Szelenkov@nginx.com assert client.get(url='/rlah')['status'] == 200, '/rlah' 3172491Szelenkov@nginx.com assert client.get(url='/blah')['status'] == 404, '/blah' 3182491Szelenkov@nginx.com assert client.get(url='/blh')['status'] == 404, '/blh' 3192491Szelenkov@nginx.com assert client.get(url='/BLAH')['status'] == 200, '/BLAH' 3202491Szelenkov@nginx.com 3211478Szelenkov@nginx.com 3222491Szelenkov@nginx.comdef test_routes_pass_encode(): 3232491Szelenkov@nginx.com python_dir = f'{option.test_dir}/python' 3241478Szelenkov@nginx.com 3252491Szelenkov@nginx.com def check_pass(path, name): 3262491Szelenkov@nginx.com assert 'success' in client.conf( 3271017Szelenkov@nginx.com { 3282592Szelenkov@nginx.com "listeners": {"*:8080": {"pass": f'applications/{path}'}}, 3291017Szelenkov@nginx.com "applications": { 3302491Szelenkov@nginx.com name: { 3312491Szelenkov@nginx.com "type": client.get_application_type(), 3321017Szelenkov@nginx.com "processes": {"spare": 0}, 3332491Szelenkov@nginx.com "path": f'{python_dir}/empty', 3342491Szelenkov@nginx.com "working_directory": f'{python_dir}/empty', 3351017Szelenkov@nginx.com "module": "wsgi", 3361017Szelenkov@nginx.com } 3371017Szelenkov@nginx.com }, 338972Szelenkov@nginx.com } 3391017Szelenkov@nginx.com ) 340972Szelenkov@nginx.com 3412491Szelenkov@nginx.com assert client.get()['status'] == 200 342972Szelenkov@nginx.com 3432491Szelenkov@nginx.com check_pass("%25", "%") 3442491Szelenkov@nginx.com check_pass("blah%2Fblah", "blah/blah") 3452491Szelenkov@nginx.com check_pass("%2Fblah%2F%2Fblah%2F", "/blah//blah/") 3462491Szelenkov@nginx.com check_pass("%20blah%252Fblah%7E", " blah%2Fblah~") 3471597Shongzhidao@gmail.com 3482491Szelenkov@nginx.com def check_pass_error(path, name): 3492491Szelenkov@nginx.com assert 'error' in client.conf( 3501597Shongzhidao@gmail.com { 3512592Szelenkov@nginx.com "listeners": {"*:8080": {"pass": f'applications/{path}'}}, 3521597Shongzhidao@gmail.com "applications": { 3532491Szelenkov@nginx.com name: { 3542491Szelenkov@nginx.com "type": client.get_application_type(), 3551597Shongzhidao@gmail.com "processes": {"spare": 0}, 3562491Szelenkov@nginx.com "path": f'{python_dir}/empty', 3572491Szelenkov@nginx.com "working_directory": f'{python_dir}/empty', 3581596Szelenkov@nginx.com "module": "wsgi", 3591596Szelenkov@nginx.com } 3601596Szelenkov@nginx.com }, 3611596Szelenkov@nginx.com } 3621379Szelenkov@nginx.com ) 3631379Szelenkov@nginx.com 3642491Szelenkov@nginx.com check_pass_error("%", "%") 3652491Szelenkov@nginx.com check_pass_error("%1", "%1") 3662491Szelenkov@nginx.com 3672491Szelenkov@nginx.com 3682491Szelenkov@nginx.comdef test_routes_absent(): 3692491Szelenkov@nginx.com assert 'success' in client.conf( 3702491Szelenkov@nginx.com { 3712592Szelenkov@nginx.com "listeners": {"*:8081": {"pass": "applications/empty"}}, 3722491Szelenkov@nginx.com "applications": { 3732491Szelenkov@nginx.com "empty": { 3742491Szelenkov@nginx.com "type": client.get_application_type(), 3752491Szelenkov@nginx.com "processes": {"spare": 0}, 3762491Szelenkov@nginx.com "path": f'{option.test_dir}/python/empty', 3772491Szelenkov@nginx.com "working_directory": f'{option.test_dir}/python/empty', 3782491Szelenkov@nginx.com "module": "wsgi", 3792491Szelenkov@nginx.com } 3802073Szelenkov@nginx.com }, 3812491Szelenkov@nginx.com } 3822491Szelenkov@nginx.com ) 3832491Szelenkov@nginx.com 3842592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 200, 'routes absent' 3852491Szelenkov@nginx.com 3862491Szelenkov@nginx.com 3872491Szelenkov@nginx.comdef test_routes_pass_invalid(): 3882491Szelenkov@nginx.com assert 'error' in client.conf( 3892592Szelenkov@nginx.com {"pass": "routes/blah"}, 'listeners/*:8080' 3902491Szelenkov@nginx.com ), 'routes invalid' 3912491Szelenkov@nginx.com 3921379Szelenkov@nginx.com 3932491Szelenkov@nginx.comdef test_route_empty(): 3942491Szelenkov@nginx.com assert 'success' in client.conf( 3952491Szelenkov@nginx.com { 3962592Szelenkov@nginx.com "listeners": {"*:8080": {"pass": "routes/main"}}, 3972491Szelenkov@nginx.com "routes": {"main": []}, 3982491Szelenkov@nginx.com "applications": {}, 3992491Szelenkov@nginx.com } 4002491Szelenkov@nginx.com ), 'route empty configure' 401972Szelenkov@nginx.com 4022491Szelenkov@nginx.com assert client.get()['status'] == 404, 'route empty' 4032491Szelenkov@nginx.com 4042491Szelenkov@nginx.com 4052491Szelenkov@nginx.comdef test_routes_route_empty(): 4062491Szelenkov@nginx.com assert 'success' in client.conf( 4072491Szelenkov@nginx.com {}, 'listeners' 4082491Szelenkov@nginx.com ), 'routes empty listeners configure' 409972Szelenkov@nginx.com 4102491Szelenkov@nginx.com assert 'success' in client.conf({}, 'routes'), 'routes empty configure' 4112491Szelenkov@nginx.com 4122491Szelenkov@nginx.com 4132491Szelenkov@nginx.comdef test_routes_route_match_absent(): 4142491Szelenkov@nginx.com assert 'success' in client.conf( 4152491Szelenkov@nginx.com [{"action": {"return": 200}}], 'routes' 4162491Szelenkov@nginx.com ), 'route match absent configure' 417972Szelenkov@nginx.com 4182491Szelenkov@nginx.com assert client.get()['status'] == 200, 'route match absent' 4192491Szelenkov@nginx.com 420972Szelenkov@nginx.com 4212491Szelenkov@nginx.comdef test_routes_route_action_absent(skip_alert): 4222491Szelenkov@nginx.com skip_alert(r'failed to apply new conf') 4232491Szelenkov@nginx.com 4242491Szelenkov@nginx.com assert 'error' in client.conf( 4252491Szelenkov@nginx.com [{"match": {"method": "GET"}}], 'routes' 4262491Szelenkov@nginx.com ), 'route pass absent configure' 4272491Szelenkov@nginx.com 428972Szelenkov@nginx.com 4292491Szelenkov@nginx.comdef test_routes_route_pass(): 4302491Szelenkov@nginx.com assert 'success' in client.conf( 4312491Szelenkov@nginx.com { 4322491Szelenkov@nginx.com "applications": { 4332491Szelenkov@nginx.com "app": { 4342491Szelenkov@nginx.com "type": client.get_application_type(), 4352491Szelenkov@nginx.com "processes": {"spare": 0}, 4362491Szelenkov@nginx.com "path": "/app", 4372491Szelenkov@nginx.com "module": "wsgi", 4382491Szelenkov@nginx.com } 4392491Szelenkov@nginx.com }, 4402491Szelenkov@nginx.com "upstreams": { 4412491Szelenkov@nginx.com "one": { 4422491Szelenkov@nginx.com "servers": { 4432592Szelenkov@nginx.com "127.0.0.1:8081": {}, 4442592Szelenkov@nginx.com "127.0.0.1:8082": {}, 4452491Szelenkov@nginx.com }, 4462491Szelenkov@nginx.com }, 4472491Szelenkov@nginx.com "two": { 4482491Szelenkov@nginx.com "servers": { 4492592Szelenkov@nginx.com "127.0.0.1:8081": {}, 4502592Szelenkov@nginx.com "127.0.0.1:8082": {}, 4512491Szelenkov@nginx.com }, 4522491Szelenkov@nginx.com }, 4532491Szelenkov@nginx.com }, 4542491Szelenkov@nginx.com } 4552491Szelenkov@nginx.com ) 456972Szelenkov@nginx.com 4572491Szelenkov@nginx.com assert 'success' in client.conf([{"action": {"pass": "routes"}}], 'routes') 4582491Szelenkov@nginx.com assert 'success' in client.conf( 4592491Szelenkov@nginx.com [{"action": {"pass": "applications/app"}}], 'routes' 4602491Szelenkov@nginx.com ) 4612491Szelenkov@nginx.com assert 'success' in client.conf( 4622491Szelenkov@nginx.com [{"action": {"pass": "upstreams/one"}}], 'routes' 4632491Szelenkov@nginx.com ) 464972Szelenkov@nginx.com 465972Szelenkov@nginx.com 4662491Szelenkov@nginx.comdef test_routes_route_pass_absent(): 4672491Szelenkov@nginx.com assert 'error' in client.conf( 4682491Szelenkov@nginx.com [{"match": {"method": "GET"}, "action": {}}], 'routes' 4692491Szelenkov@nginx.com ), 'route pass absent configure' 470972Szelenkov@nginx.com 471972Szelenkov@nginx.com 4722491Szelenkov@nginx.comdef test_routes_route_pass_invalid(): 4732491Szelenkov@nginx.com assert 'success' in client.conf( 4742491Szelenkov@nginx.com { 4752491Szelenkov@nginx.com "applications": { 4762491Szelenkov@nginx.com "app": { 4772491Szelenkov@nginx.com "type": client.get_application_type(), 4782491Szelenkov@nginx.com "processes": {"spare": 0}, 4792491Szelenkov@nginx.com "path": "/app", 4802491Szelenkov@nginx.com "module": "wsgi", 4812491Szelenkov@nginx.com } 4822491Szelenkov@nginx.com }, 4832491Szelenkov@nginx.com "upstreams": { 4842491Szelenkov@nginx.com "one": { 4852491Szelenkov@nginx.com "servers": { 4862592Szelenkov@nginx.com "127.0.0.1:8081": {}, 4872592Szelenkov@nginx.com "127.0.0.1:8082": {}, 4882491Szelenkov@nginx.com }, 4892491Szelenkov@nginx.com }, 4902491Szelenkov@nginx.com "two": { 4912491Szelenkov@nginx.com "servers": { 4922592Szelenkov@nginx.com "127.0.0.1:8081": {}, 4932592Szelenkov@nginx.com "127.0.0.1:8082": {}, 4942491Szelenkov@nginx.com }, 4952491Szelenkov@nginx.com }, 4962491Szelenkov@nginx.com }, 4972491Szelenkov@nginx.com } 4982491Szelenkov@nginx.com ) 499972Szelenkov@nginx.com 5002491Szelenkov@nginx.com assert 'error' in client.conf( 5012491Szelenkov@nginx.com [{"action": {"pass": "blah"}}], 'routes' 5022491Szelenkov@nginx.com ), 'route pass invalid' 5032491Szelenkov@nginx.com assert 'error' in client.conf( 5042491Szelenkov@nginx.com [{"action": {"pass": "routes/blah"}}], 'routes' 5052491Szelenkov@nginx.com ), 'route pass routes invalid' 5062491Szelenkov@nginx.com assert 'error' in client.conf( 5072491Szelenkov@nginx.com [{"action": {"pass": "applications/blah"}}], 'routes' 5082491Szelenkov@nginx.com ), 'route pass applications invalid' 5092491Szelenkov@nginx.com assert 'error' in client.conf( 5102491Szelenkov@nginx.com [{"action": {"pass": "upstreams/blah"}}], 'routes' 5112491Szelenkov@nginx.com ), 'route pass upstreams invalid' 5122491Szelenkov@nginx.com 513972Szelenkov@nginx.com 5142491Szelenkov@nginx.comdef test_routes_action_unique(temp_dir): 5152491Szelenkov@nginx.com assert 'success' in client.conf( 5162491Szelenkov@nginx.com { 5172491Szelenkov@nginx.com "listeners": { 5182592Szelenkov@nginx.com "*:8080": {"pass": "routes"}, 5192592Szelenkov@nginx.com "*:8081": {"pass": "applications/app"}, 5202491Szelenkov@nginx.com }, 5212592Szelenkov@nginx.com "routes": [{"action": {"proxy": "http://127.0.0.1:8081"}}], 5222491Szelenkov@nginx.com "applications": { 5232491Szelenkov@nginx.com "app": { 5242491Szelenkov@nginx.com "type": client.get_application_type(), 5252491Szelenkov@nginx.com "processes": {"spare": 0}, 5262491Szelenkov@nginx.com "path": "/app", 5272491Szelenkov@nginx.com "module": "wsgi", 5282491Szelenkov@nginx.com } 5292491Szelenkov@nginx.com }, 5302491Szelenkov@nginx.com } 5312491Szelenkov@nginx.com ) 532972Szelenkov@nginx.com 5332491Szelenkov@nginx.com assert 'error' in client.conf( 5342592Szelenkov@nginx.com {"proxy": "http://127.0.0.1:8081", "share": temp_dir}, 5352491Szelenkov@nginx.com 'routes/0/action', 5362491Szelenkov@nginx.com ), 'proxy share' 5372491Szelenkov@nginx.com assert 'error' in client.conf( 5382491Szelenkov@nginx.com { 5392592Szelenkov@nginx.com "proxy": "http://127.0.0.1:8081", 5402491Szelenkov@nginx.com "pass": "applications/app", 5412491Szelenkov@nginx.com }, 5422491Szelenkov@nginx.com 'routes/0/action', 5432491Szelenkov@nginx.com ), 'proxy pass' 5442491Szelenkov@nginx.com assert 'error' in client.conf( 5452491Szelenkov@nginx.com {"share": temp_dir, "pass": "applications/app"}, 5462491Szelenkov@nginx.com 'routes/0/action', 5472491Szelenkov@nginx.com ), 'share pass' 5481053Szelenkov@nginx.com 5491053Szelenkov@nginx.com 5502491Szelenkov@nginx.comdef test_routes_rules_two(): 5512491Szelenkov@nginx.com assert 'success' in client.conf( 5522491Szelenkov@nginx.com [ 5532491Szelenkov@nginx.com {"match": {"method": "GET"}, "action": {"return": 200}}, 5542491Szelenkov@nginx.com {"match": {"method": "POST"}, "action": {"return": 201}}, 5552491Szelenkov@nginx.com ], 5562491Szelenkov@nginx.com 'routes', 5572491Szelenkov@nginx.com ), 'rules two configure' 5582491Szelenkov@nginx.com 5592491Szelenkov@nginx.com assert client.get()['status'] == 200, 'rules two match first' 5602491Szelenkov@nginx.com assert client.post()['status'] == 201, 'rules two match second' 5612491Szelenkov@nginx.com 5621596Szelenkov@nginx.com 5632491Szelenkov@nginx.comdef test_routes_two(): 5642491Szelenkov@nginx.com assert 'success' in client.conf( 5652491Szelenkov@nginx.com { 5662592Szelenkov@nginx.com "listeners": {"*:8080": {"pass": "routes/first"}}, 5672491Szelenkov@nginx.com "routes": { 5682491Szelenkov@nginx.com "first": [ 5692491Szelenkov@nginx.com { 5702491Szelenkov@nginx.com "match": {"method": "GET"}, 5712491Szelenkov@nginx.com "action": {"pass": "routes/second"}, 5722491Szelenkov@nginx.com } 5732491Szelenkov@nginx.com ], 5742491Szelenkov@nginx.com "second": [ 5752491Szelenkov@nginx.com { 5762491Szelenkov@nginx.com "match": {"host": "localhost"}, 5772491Szelenkov@nginx.com "action": {"return": 200}, 5782491Szelenkov@nginx.com } 5792491Szelenkov@nginx.com ], 5802491Szelenkov@nginx.com }, 5812491Szelenkov@nginx.com "applications": {}, 5822491Szelenkov@nginx.com } 5832491Szelenkov@nginx.com ), 'routes two configure' 5841053Szelenkov@nginx.com 5852491Szelenkov@nginx.com assert client.get()['status'] == 200, 'routes two' 5861053Szelenkov@nginx.com 5871053Szelenkov@nginx.com 5882491Szelenkov@nginx.comdef test_routes_match_host_positive(): 5892491Szelenkov@nginx.com route_match({"host": "localhost"}) 5902491Szelenkov@nginx.com 5912491Szelenkov@nginx.com assert client.get()['status'] == 200, 'localhost' 5922491Szelenkov@nginx.com host('localhost.', 200) 5932491Szelenkov@nginx.com host('localhost.', 200) 5942491Szelenkov@nginx.com host('.localhost', 404) 5952491Szelenkov@nginx.com host('www.localhost', 404) 5962491Szelenkov@nginx.com host('localhost1', 404) 5972491Szelenkov@nginx.com 5981063Szelenkov@nginx.com 5992491Szelenkov@nginx.com@pytest.mark.skip('not yet') 6002491Szelenkov@nginx.comdef test_routes_match_host_absent(): 6012491Szelenkov@nginx.com route_match({"host": "localhost"}) 6022491Szelenkov@nginx.com 6032491Szelenkov@nginx.com assert ( 6042491Szelenkov@nginx.com client.get(headers={'Connection': 'close'})['status'] == 400 6052491Szelenkov@nginx.com ), 'match host absent' 6061596Szelenkov@nginx.com 6072491Szelenkov@nginx.com 6082491Szelenkov@nginx.comdef test_routes_match_host_ipv4(): 6092491Szelenkov@nginx.com route_match({"host": "127.0.0.1"}) 6101063Szelenkov@nginx.com 6112491Szelenkov@nginx.com host('127.0.0.1', 200) 6122592Szelenkov@nginx.com host('127.0.0.1:8080', 200) 6131053Szelenkov@nginx.com 6141053Szelenkov@nginx.com 6152491Szelenkov@nginx.comdef test_routes_match_host_ipv6(): 6162491Szelenkov@nginx.com route_match({"host": "[::1]"}) 6172491Szelenkov@nginx.com 6182491Szelenkov@nginx.com host('[::1]', 200) 6192592Szelenkov@nginx.com host('[::1]:8080', 200) 6202491Szelenkov@nginx.com 6212491Szelenkov@nginx.com 6222491Szelenkov@nginx.comdef test_routes_match_host_positive_many(): 6232491Szelenkov@nginx.com route_match({"host": ["localhost", "example.com"]}) 6242491Szelenkov@nginx.com 6252491Szelenkov@nginx.com assert client.get()['status'] == 200, 'localhost' 6262491Szelenkov@nginx.com host('example.com', 200) 6271053Szelenkov@nginx.com 6282491Szelenkov@nginx.com 6292491Szelenkov@nginx.comdef test_routes_match_host_positive_and_negative(): 6302491Szelenkov@nginx.com route_match({"host": ["*example.com", "!www.example.com"]}) 6311053Szelenkov@nginx.com 6322491Szelenkov@nginx.com assert client.get()['status'] == 404, 'localhost' 6332491Szelenkov@nginx.com host('example.com', 200) 6342491Szelenkov@nginx.com host('www.example.com', 404) 6352491Szelenkov@nginx.com host('!www.example.com', 200) 6361053Szelenkov@nginx.com 6372491Szelenkov@nginx.com 6382491Szelenkov@nginx.comdef test_routes_match_host_positive_and_negative_wildcard(): 6392491Szelenkov@nginx.com route_match({"host": ["*example*", "!www.example*"]}) 6401053Szelenkov@nginx.com 6412491Szelenkov@nginx.com host('example.com', 200) 6422491Szelenkov@nginx.com host('www.example.com', 404) 6432491Szelenkov@nginx.com 6441053Szelenkov@nginx.com 6452491Szelenkov@nginx.comdef test_routes_match_host_case_insensitive(): 6462491Szelenkov@nginx.com route_match({"host": "Example.com"}) 6472491Szelenkov@nginx.com 6482491Szelenkov@nginx.com host('example.com', 200) 6492491Szelenkov@nginx.com host('EXAMPLE.COM', 200) 6502491Szelenkov@nginx.com 6511053Szelenkov@nginx.com 6522491Szelenkov@nginx.comdef test_routes_match_host_port(): 6532491Szelenkov@nginx.com route_match({"host": "example.com"}) 6541053Szelenkov@nginx.com 6552592Szelenkov@nginx.com host('example.com:8080', 200) 6562491Szelenkov@nginx.com 6571053Szelenkov@nginx.com 6582491Szelenkov@nginx.comdef test_routes_match_host_empty(): 6592491Szelenkov@nginx.com route_match({"host": ""}) 6601053Szelenkov@nginx.com 6612491Szelenkov@nginx.com host('', 200) 6622491Szelenkov@nginx.com assert ( 6632491Szelenkov@nginx.com client.get(http_10=True, headers={})['status'] == 200 6642491Szelenkov@nginx.com ), 'match host empty 2' 6652491Szelenkov@nginx.com assert client.get()['status'] == 404, 'match host empty 3' 6662491Szelenkov@nginx.com 6671053Szelenkov@nginx.com 6682491Szelenkov@nginx.comdef test_routes_match_uri_positive(): 6692491Szelenkov@nginx.com route_match({"uri": ["/blah", "/slash/"]}) 6701053Szelenkov@nginx.com 6712491Szelenkov@nginx.com assert client.get()['status'] == 404, '/' 6722491Szelenkov@nginx.com assert client.get(url='/blah')['status'] == 200, '/blah' 6732491Szelenkov@nginx.com assert client.get(url='/blah#foo')['status'] == 200, '/blah#foo' 6742491Szelenkov@nginx.com assert client.get(url='/blah?var')['status'] == 200, '/blah?var' 6752491Szelenkov@nginx.com assert client.get(url='//blah')['status'] == 200, '//blah' 6762491Szelenkov@nginx.com assert client.get(url='/slash/foo/../')['status'] == 200, 'relative' 6772491Szelenkov@nginx.com assert client.get(url='/slash/./')['status'] == 200, '/slash/./' 6782491Szelenkov@nginx.com assert client.get(url='/slash//.//')['status'] == 200, 'adjacent slashes' 6792491Szelenkov@nginx.com assert client.get(url='/%')['status'] == 400, 'percent' 6802491Szelenkov@nginx.com assert client.get(url='/%1')['status'] == 400, 'percent digit' 6812491Szelenkov@nginx.com assert client.get(url='/%A')['status'] == 400, 'percent letter' 6822491Szelenkov@nginx.com assert client.get(url='/slash/.?args')['status'] == 200, 'dot args' 6832491Szelenkov@nginx.com assert client.get(url='/slash/.#frag')['status'] == 200, 'dot frag' 6842491Szelenkov@nginx.com assert client.get(url='/slash/foo/..?args')['status'] == 200, 'dot dot args' 6852491Szelenkov@nginx.com assert client.get(url='/slash/foo/..#frag')['status'] == 200, 'dot dot frag' 6862491Szelenkov@nginx.com assert client.get(url='/slash/.')['status'] == 200, 'trailing dot' 6872491Szelenkov@nginx.com assert client.get(url='/slash/foo/..')['status'] == 200, 'trailing dot dot' 6881053Szelenkov@nginx.com 6892491Szelenkov@nginx.com 6902491Szelenkov@nginx.comdef test_routes_match_uri_case_sensitive(): 6912491Szelenkov@nginx.com route_match({"uri": "/BLAH"}) 6921053Szelenkov@nginx.com 6932491Szelenkov@nginx.com assert client.get(url='/blah')['status'] == 404, '/blah' 6942491Szelenkov@nginx.com assert client.get(url='/BlaH')['status'] == 404, '/BlaH' 6952491Szelenkov@nginx.com assert client.get(url='/BLAH')['status'] == 200, '/BLAH' 6962491Szelenkov@nginx.com 6971053Szelenkov@nginx.com 6982491Szelenkov@nginx.comdef test_routes_match_uri_normalize(): 6992491Szelenkov@nginx.com route_match({"uri": "/blah"}) 7001053Szelenkov@nginx.com 7012491Szelenkov@nginx.com assert client.get(url='/%62%6c%61%68')['status'] == 200, 'normalize' 7022491Szelenkov@nginx.com 7031053Szelenkov@nginx.com 7042491Szelenkov@nginx.comdef test_routes_match_empty_array(): 7052491Szelenkov@nginx.com route_match({"uri": []}) 7062491Szelenkov@nginx.com 7072491Szelenkov@nginx.com assert client.get(url='/blah')['status'] == 200, 'empty array' 7082491Szelenkov@nginx.com 7091053Szelenkov@nginx.com 7102491Szelenkov@nginx.comdef test_routes_reconfigure(): 7112491Szelenkov@nginx.com assert 'success' in client.conf([], 'routes'), 'redefine' 7122491Szelenkov@nginx.com assert client.get()['status'] == 404, 'redefine request' 7131053Szelenkov@nginx.com 7142491Szelenkov@nginx.com assert 'success' in client.conf( 7152491Szelenkov@nginx.com [{"action": {"return": 200}}], 'routes' 7162491Szelenkov@nginx.com ), 'redefine 2' 7172491Szelenkov@nginx.com assert client.get()['status'] == 200, 'redefine request 2' 7181053Szelenkov@nginx.com 7192491Szelenkov@nginx.com assert 'success' in client.conf([], 'routes'), 'redefine 3' 7202491Szelenkov@nginx.com assert client.get()['status'] == 404, 'redefine request 3' 7211053Szelenkov@nginx.com 7222491Szelenkov@nginx.com assert 'success' in client.conf( 7232491Szelenkov@nginx.com { 7242592Szelenkov@nginx.com "listeners": {"*:8080": {"pass": "routes/main"}}, 7252491Szelenkov@nginx.com "routes": {"main": [{"action": {"return": 200}}]}, 7262491Szelenkov@nginx.com "applications": {}, 7272491Szelenkov@nginx.com } 7282491Szelenkov@nginx.com ), 'redefine 4' 7292491Szelenkov@nginx.com assert client.get()['status'] == 200, 'redefine request 4' 7301053Szelenkov@nginx.com 7312491Szelenkov@nginx.com assert 'success' in client.conf_delete('routes/main/0'), 'redefine 5' 7322491Szelenkov@nginx.com assert client.get()['status'] == 404, 'redefine request 5' 7331053Szelenkov@nginx.com 7342491Szelenkov@nginx.com assert 'success' in client.conf_post( 7352491Szelenkov@nginx.com {"action": {"return": 200}}, 'routes/main' 7362491Szelenkov@nginx.com ), 'redefine 6' 7372491Szelenkov@nginx.com assert client.get()['status'] == 200, 'redefine request 6' 7382491Szelenkov@nginx.com 7392491Szelenkov@nginx.com assert 'error' in client.conf( 7402491Szelenkov@nginx.com {"action": {"return": 200}}, 'routes/main/2' 7412491Szelenkov@nginx.com ), 'redefine 7' 7422491Szelenkov@nginx.com assert 'success' in client.conf( 7432491Szelenkov@nginx.com {"action": {"return": 201}}, 'routes/main/1' 7442491Szelenkov@nginx.com ), 'redefine 8' 7451053Szelenkov@nginx.com 7462491Szelenkov@nginx.com assert len(client.conf_get('routes/main')) == 2, 'redefine conf 8' 7472491Szelenkov@nginx.com assert client.get()['status'] == 200, 'redefine request 8' 7482491Szelenkov@nginx.com 7492491Szelenkov@nginx.com 7502491Szelenkov@nginx.comdef test_routes_edit(): 7512491Szelenkov@nginx.com route_match({"method": "GET"}) 7522491Szelenkov@nginx.com 7532491Szelenkov@nginx.com assert client.get()['status'] == 200, 'routes edit GET' 7542491Szelenkov@nginx.com assert client.post()['status'] == 404, 'routes edit POST' 7551053Szelenkov@nginx.com 7562491Szelenkov@nginx.com assert 'success' in client.conf_post( 7572491Szelenkov@nginx.com {"match": {"method": "POST"}, "action": {"return": 200}}, 7582491Szelenkov@nginx.com 'routes', 7592491Szelenkov@nginx.com ), 'routes edit configure 2' 7602491Szelenkov@nginx.com assert 'GET' == client.conf_get( 7612491Szelenkov@nginx.com 'routes/0/match/method' 7622491Szelenkov@nginx.com ), 'routes edit configure 2 check' 7632491Szelenkov@nginx.com assert 'POST' == client.conf_get( 7642491Szelenkov@nginx.com 'routes/1/match/method' 7652491Szelenkov@nginx.com ), 'routes edit configure 2 check 2' 7661596Szelenkov@nginx.com 7672491Szelenkov@nginx.com assert client.get()['status'] == 200, 'routes edit GET 2' 7682491Szelenkov@nginx.com assert client.post()['status'] == 200, 'routes edit POST 2' 7691053Szelenkov@nginx.com 7702491Szelenkov@nginx.com assert 'success' in client.conf_delete( 7712491Szelenkov@nginx.com 'routes/0' 7722491Szelenkov@nginx.com ), 'routes edit configure 3' 7731053Szelenkov@nginx.com 7742491Szelenkov@nginx.com assert client.get()['status'] == 404, 'routes edit GET 3' 7752491Szelenkov@nginx.com assert client.post()['status'] == 200, 'routes edit POST 3' 7761053Szelenkov@nginx.com 7772491Szelenkov@nginx.com assert 'error' in client.conf_delete( 7782491Szelenkov@nginx.com 'routes/1' 7792491Szelenkov@nginx.com ), 'routes edit configure invalid' 7802491Szelenkov@nginx.com assert 'error' in client.conf_delete( 7812491Szelenkov@nginx.com 'routes/-1' 7822491Szelenkov@nginx.com ), 'routes edit configure invalid 2' 7832491Szelenkov@nginx.com assert 'error' in client.conf_delete( 7842491Szelenkov@nginx.com 'routes/blah' 7852491Szelenkov@nginx.com ), 'routes edit configure invalid 3' 7861053Szelenkov@nginx.com 7872491Szelenkov@nginx.com assert client.get()['status'] == 404, 'routes edit GET 4' 7882491Szelenkov@nginx.com assert client.post()['status'] == 200, 'routes edit POST 4' 7892491Szelenkov@nginx.com 7902491Szelenkov@nginx.com assert 'success' in client.conf_delete( 7912491Szelenkov@nginx.com 'routes/0' 7922491Szelenkov@nginx.com ), 'routes edit configure 5' 7932491Szelenkov@nginx.com 7942491Szelenkov@nginx.com assert client.get()['status'] == 404, 'routes edit GET 5' 7952491Szelenkov@nginx.com assert client.post()['status'] == 404, 'routes edit POST 5' 7961053Szelenkov@nginx.com 7972491Szelenkov@nginx.com assert 'success' in client.conf_post( 7982491Szelenkov@nginx.com {"match": {"method": "POST"}, "action": {"return": 200}}, 7992491Szelenkov@nginx.com 'routes', 8002491Szelenkov@nginx.com ), 'routes edit configure 6' 8011053Szelenkov@nginx.com 8022491Szelenkov@nginx.com assert client.get()['status'] == 404, 'routes edit GET 6' 8032491Szelenkov@nginx.com assert client.post()['status'] == 200, 'routes edit POST 6' 804972Szelenkov@nginx.com 8052491Szelenkov@nginx.com assert 'success' in client.conf( 8062491Szelenkov@nginx.com { 8072592Szelenkov@nginx.com "listeners": {"*:8080": {"pass": "routes/main"}}, 8082491Szelenkov@nginx.com "routes": {"main": [{"action": {"return": 200}}]}, 8092491Szelenkov@nginx.com "applications": {}, 8102491Szelenkov@nginx.com } 8112491Szelenkov@nginx.com ), 'route edit configure 7' 812972Szelenkov@nginx.com 8132491Szelenkov@nginx.com assert 'error' in client.conf_delete( 8142491Szelenkov@nginx.com 'routes/0' 8152491Szelenkov@nginx.com ), 'routes edit configure invalid 4' 8162491Szelenkov@nginx.com assert 'error' in client.conf_delete( 8172491Szelenkov@nginx.com 'routes/main' 8182491Szelenkov@nginx.com ), 'routes edit configure invalid 5' 819972Szelenkov@nginx.com 8202491Szelenkov@nginx.com assert client.get()['status'] == 200, 'routes edit GET 7' 821972Szelenkov@nginx.com 8222491Szelenkov@nginx.com assert 'success' in client.conf_delete( 8232592Szelenkov@nginx.com 'listeners/*:8080' 8242491Szelenkov@nginx.com ), 'route edit configure 8' 8252491Szelenkov@nginx.com assert 'success' in client.conf_delete( 8262491Szelenkov@nginx.com 'routes/main' 8272491Szelenkov@nginx.com ), 'route edit configure 9' 8282491Szelenkov@nginx.com 8292491Szelenkov@nginx.com 8302491Szelenkov@nginx.comdef test_match_edit(skip_alert): 8312491Szelenkov@nginx.com skip_alert(r'failed to apply new conf') 8321066Szelenkov@nginx.com 8332491Szelenkov@nginx.com route_match({"method": ["GET", "POST"]}) 8342491Szelenkov@nginx.com 8352491Szelenkov@nginx.com assert client.get()['status'] == 200, 'match edit GET' 8362491Szelenkov@nginx.com assert client.post()['status'] == 200, 'match edit POST' 8372491Szelenkov@nginx.com assert client.put()['status'] == 404, 'match edit PUT' 8381066Szelenkov@nginx.com 8392491Szelenkov@nginx.com assert 'success' in client.conf_post( 8402491Szelenkov@nginx.com '\"PUT\"', 'routes/0/match/method' 8412491Szelenkov@nginx.com ), 'match edit configure 2' 8422491Szelenkov@nginx.com assert ['GET', 'POST', 'PUT'] == client.conf_get( 8432491Szelenkov@nginx.com 'routes/0/match/method' 8442491Szelenkov@nginx.com ), 'match edit configure 2 check' 8451066Szelenkov@nginx.com 8462491Szelenkov@nginx.com assert client.get()['status'] == 200, 'match edit GET 2' 8472491Szelenkov@nginx.com assert client.post()['status'] == 200, 'match edit POST 2' 8482491Szelenkov@nginx.com assert client.put()['status'] == 200, 'match edit PUT 2' 8492491Szelenkov@nginx.com 8502491Szelenkov@nginx.com assert 'success' in client.conf_delete( 8512491Szelenkov@nginx.com 'routes/0/match/method/1' 8522491Szelenkov@nginx.com ), 'match edit configure 3' 8532491Szelenkov@nginx.com assert ['GET', 'PUT'] == client.conf_get( 8542491Szelenkov@nginx.com 'routes/0/match/method' 8552491Szelenkov@nginx.com ), 'match edit configure 3 check' 8561066Szelenkov@nginx.com 8572491Szelenkov@nginx.com assert client.get()['status'] == 200, 'match edit GET 3' 8582491Szelenkov@nginx.com assert client.post()['status'] == 404, 'match edit POST 3' 8592491Szelenkov@nginx.com assert client.put()['status'] == 200, 'match edit PUT 3' 8601066Szelenkov@nginx.com 8612491Szelenkov@nginx.com assert 'success' in client.conf_delete( 8622491Szelenkov@nginx.com 'routes/0/match/method/1' 8632491Szelenkov@nginx.com ), 'match edit configure 4' 8642491Szelenkov@nginx.com assert ['GET'] == client.conf_get( 8652491Szelenkov@nginx.com 'routes/0/match/method' 8662491Szelenkov@nginx.com ), 'match edit configure 4 check' 8672491Szelenkov@nginx.com 8682491Szelenkov@nginx.com assert client.get()['status'] == 200, 'match edit GET 4' 8692491Szelenkov@nginx.com assert client.post()['status'] == 404, 'match edit POST 4' 8702491Szelenkov@nginx.com assert client.put()['status'] == 404, 'match edit PUT 4' 8711066Szelenkov@nginx.com 8722491Szelenkov@nginx.com assert 'error' in client.conf_delete( 8732491Szelenkov@nginx.com 'routes/0/match/method/1' 8742491Szelenkov@nginx.com ), 'match edit configure invalid' 8752491Szelenkov@nginx.com assert 'error' in client.conf_delete( 8762491Szelenkov@nginx.com 'routes/0/match/method/-1' 8772491Szelenkov@nginx.com ), 'match edit configure invalid 2' 8782491Szelenkov@nginx.com assert 'error' in client.conf_delete( 8792491Szelenkov@nginx.com 'routes/0/match/method/blah' 8802491Szelenkov@nginx.com ), 'match edit configure invalid 3' 8812491Szelenkov@nginx.com assert ['GET'] == client.conf_get( 8822491Szelenkov@nginx.com 'routes/0/match/method' 8832491Szelenkov@nginx.com ), 'match edit configure 5 check' 8842491Szelenkov@nginx.com 8852491Szelenkov@nginx.com assert client.get()['status'] == 200, 'match edit GET 5' 8862491Szelenkov@nginx.com assert client.post()['status'] == 404, 'match edit POST 5' 8872491Szelenkov@nginx.com assert client.put()['status'] == 404, 'match edit PUT 5' 8882491Szelenkov@nginx.com 8892491Szelenkov@nginx.com assert 'success' in client.conf_delete( 8902491Szelenkov@nginx.com 'routes/0/match/method/0' 8912491Szelenkov@nginx.com ), 'match edit configure 6' 8922491Szelenkov@nginx.com assert [] == client.conf_get( 8932491Szelenkov@nginx.com 'routes/0/match/method' 8942491Szelenkov@nginx.com ), 'match edit configure 6 check' 8951066Szelenkov@nginx.com 8962491Szelenkov@nginx.com assert client.get()['status'] == 200, 'match edit GET 6' 8972491Szelenkov@nginx.com assert client.post()['status'] == 200, 'match edit POST 6' 8982491Szelenkov@nginx.com assert client.put()['status'] == 200, 'match edit PUT 6' 8992491Szelenkov@nginx.com 9002491Szelenkov@nginx.com assert 'success' in client.conf( 9012491Szelenkov@nginx.com '"GET"', 'routes/0/match/method' 9022491Szelenkov@nginx.com ), 'match edit configure 7' 9032491Szelenkov@nginx.com 9042491Szelenkov@nginx.com assert client.get()['status'] == 200, 'match edit GET 7' 9052491Szelenkov@nginx.com assert client.post()['status'] == 404, 'match edit POST 7' 9062491Szelenkov@nginx.com assert client.put()['status'] == 404, 'match edit PUT 7' 9072491Szelenkov@nginx.com 9082491Szelenkov@nginx.com assert 'error' in client.conf_delete( 9092491Szelenkov@nginx.com 'routes/0/match/method/0' 9102491Szelenkov@nginx.com ), 'match edit configure invalid 5' 9112491Szelenkov@nginx.com assert 'error' in client.conf( 9122491Szelenkov@nginx.com {}, 'routes/0/action' 9132491Szelenkov@nginx.com ), 'match edit configure invalid 6' 9142491Szelenkov@nginx.com 9152491Szelenkov@nginx.com assert 'success' in client.conf( 9162491Szelenkov@nginx.com {}, 'routes/0/match' 9172491Szelenkov@nginx.com ), 'match edit configure 8' 9182491Szelenkov@nginx.com 9192491Szelenkov@nginx.com assert client.get()['status'] == 200, 'match edit GET 8' 9202491Szelenkov@nginx.com 9211066Szelenkov@nginx.com 9222491Szelenkov@nginx.comdef test_routes_match_rules(): 9232491Szelenkov@nginx.com route_match({"method": "GET", "host": "localhost", "uri": "/"}) 9242491Szelenkov@nginx.com 9252491Szelenkov@nginx.com assert client.get()['status'] == 200, 'routes match rules' 9262491Szelenkov@nginx.com 9272491Szelenkov@nginx.com 9282491Szelenkov@nginx.comdef test_routes_loop(): 9292491Szelenkov@nginx.com assert 'success' in route( 9302491Szelenkov@nginx.com {"match": {"uri": "/"}, "action": {"pass": "routes"}} 9312491Szelenkov@nginx.com ), 'routes loop configure' 9322491Szelenkov@nginx.com 9332491Szelenkov@nginx.com assert client.get()['status'] == 500, 'routes loop' 9342491Szelenkov@nginx.com 9352491Szelenkov@nginx.com 9362491Szelenkov@nginx.comdef test_routes_match_headers(): 9372491Szelenkov@nginx.com route_match({"headers": {"host": "localhost"}}) 9382491Szelenkov@nginx.com 9392491Szelenkov@nginx.com assert client.get()['status'] == 200, 'match headers' 9402491Szelenkov@nginx.com host('Localhost', 200) 9412491Szelenkov@nginx.com host('localhost.com', 404) 9422491Szelenkov@nginx.com host('llocalhost', 404) 9432491Szelenkov@nginx.com host('host', 404) 9442491Szelenkov@nginx.com 9452491Szelenkov@nginx.com 9462491Szelenkov@nginx.comdef test_routes_match_headers_multiple(): 9472491Szelenkov@nginx.com route_match({"headers": {"host": "localhost", "x-blah": "test"}}) 9481066Szelenkov@nginx.com 9492491Szelenkov@nginx.com assert client.get()['status'] == 404, 'match headers multiple' 9502491Szelenkov@nginx.com assert ( 9512491Szelenkov@nginx.com client.get( 9522491Szelenkov@nginx.com headers={ 9532491Szelenkov@nginx.com "Host": "localhost", 9542491Szelenkov@nginx.com "X-blah": "test", 9552491Szelenkov@nginx.com "Connection": "close", 9562491Szelenkov@nginx.com } 9572491Szelenkov@nginx.com )['status'] 9582491Szelenkov@nginx.com == 200 9592491Szelenkov@nginx.com ), 'match headers multiple 2' 9601066Szelenkov@nginx.com 9612491Szelenkov@nginx.com assert ( 9622491Szelenkov@nginx.com client.get( 9632491Szelenkov@nginx.com headers={ 9642491Szelenkov@nginx.com "Host": "localhost", 9652491Szelenkov@nginx.com "X-blah": "", 9662491Szelenkov@nginx.com "Connection": "close", 9672491Szelenkov@nginx.com } 9682491Szelenkov@nginx.com )['status'] 9692491Szelenkov@nginx.com == 404 9702491Szelenkov@nginx.com ), 'match headers multiple 3' 9711066Szelenkov@nginx.com 9721066Szelenkov@nginx.com 9732491Szelenkov@nginx.comdef test_routes_match_headers_multiple_values(): 9742491Szelenkov@nginx.com route_match({"headers": {"x-blah": "test"}}) 9751066Szelenkov@nginx.com 9762491Szelenkov@nginx.com assert ( 9772491Szelenkov@nginx.com client.get( 9782491Szelenkov@nginx.com headers={ 9792491Szelenkov@nginx.com "Host": "localhost", 9802491Szelenkov@nginx.com "X-blah": ["test", "test", "test"], 9812491Szelenkov@nginx.com "Connection": "close", 9822491Szelenkov@nginx.com } 9832491Szelenkov@nginx.com )['status'] 9842491Szelenkov@nginx.com == 200 9852491Szelenkov@nginx.com ), 'match headers multiple values' 9862491Szelenkov@nginx.com assert ( 9872491Szelenkov@nginx.com client.get( 9882491Szelenkov@nginx.com headers={ 9892491Szelenkov@nginx.com "Host": "localhost", 9902491Szelenkov@nginx.com "X-blah": ["test", "blah", "test"], 9912491Szelenkov@nginx.com "Connection": "close", 9922491Szelenkov@nginx.com } 9932491Szelenkov@nginx.com )['status'] 9942491Szelenkov@nginx.com == 404 9952491Szelenkov@nginx.com ), 'match headers multiple values 2' 9962491Szelenkov@nginx.com assert ( 9972491Szelenkov@nginx.com client.get( 9982491Szelenkov@nginx.com headers={ 9992491Szelenkov@nginx.com "Host": "localhost", 10002491Szelenkov@nginx.com "X-blah": ["test", "", "test"], 10012491Szelenkov@nginx.com "Connection": "close", 10022491Szelenkov@nginx.com } 10032491Szelenkov@nginx.com )['status'] 10042491Szelenkov@nginx.com == 404 10052491Szelenkov@nginx.com ), 'match headers multiple values 3' 10061066Szelenkov@nginx.com 10071066Szelenkov@nginx.com 10082491Szelenkov@nginx.comdef test_routes_match_headers_multiple_rules(): 10092491Szelenkov@nginx.com route_match({"headers": {"x-blah": ["test", "blah"]}}) 10101875Szelenkov@nginx.com 10112491Szelenkov@nginx.com assert client.get()['status'] == 404, 'match headers multiple rules' 10122491Szelenkov@nginx.com assert ( 10132491Szelenkov@nginx.com client.get( 10142491Szelenkov@nginx.com headers={ 10152491Szelenkov@nginx.com "Host": "localhost", 10162491Szelenkov@nginx.com "X-blah": "test", 10172491Szelenkov@nginx.com "Connection": "close", 10182491Szelenkov@nginx.com } 10192491Szelenkov@nginx.com )['status'] 10202491Szelenkov@nginx.com == 200 10212491Szelenkov@nginx.com ), 'match headers multiple rules 2' 10222491Szelenkov@nginx.com assert ( 10232491Szelenkov@nginx.com client.get( 10242491Szelenkov@nginx.com headers={ 10252491Szelenkov@nginx.com "Host": "localhost", 10262491Szelenkov@nginx.com "X-blah": "blah", 10272491Szelenkov@nginx.com "Connection": "close", 10282491Szelenkov@nginx.com } 10292491Szelenkov@nginx.com )['status'] 10302491Szelenkov@nginx.com == 200 10312491Szelenkov@nginx.com ), 'match headers multiple rules 3' 10322491Szelenkov@nginx.com assert ( 10332491Szelenkov@nginx.com client.get( 10342491Szelenkov@nginx.com headers={ 10352491Szelenkov@nginx.com "Host": "localhost", 10362491Szelenkov@nginx.com "X-blah": ["test", "blah", "test"], 10372491Szelenkov@nginx.com "Connection": "close", 10382491Szelenkov@nginx.com } 10392491Szelenkov@nginx.com )['status'] 10402491Szelenkov@nginx.com == 200 10412491Szelenkov@nginx.com ), 'match headers multiple rules 4' 10421066Szelenkov@nginx.com 10432491Szelenkov@nginx.com assert ( 10442491Szelenkov@nginx.com client.get( 10452491Szelenkov@nginx.com headers={ 10462491Szelenkov@nginx.com "Host": "localhost", 10472491Szelenkov@nginx.com "X-blah": ["blah", ""], 10482491Szelenkov@nginx.com "Connection": "close", 10492491Szelenkov@nginx.com } 10502491Szelenkov@nginx.com )['status'] 10512491Szelenkov@nginx.com == 404 10522491Szelenkov@nginx.com ), 'match headers multiple rules 5' 10531017Szelenkov@nginx.com 10542491Szelenkov@nginx.com 10552491Szelenkov@nginx.comdef test_routes_match_headers_case_insensitive(): 10562491Szelenkov@nginx.com route_match({"headers": {"X-BLAH": "TEST"}}) 10571067Szelenkov@nginx.com 10582491Szelenkov@nginx.com assert ( 10592491Szelenkov@nginx.com client.get( 10602491Szelenkov@nginx.com headers={ 10612491Szelenkov@nginx.com "Host": "localhost", 10622491Szelenkov@nginx.com "x-blah": "test", 10632491Szelenkov@nginx.com "Connection": "close", 10642491Szelenkov@nginx.com } 10652491Szelenkov@nginx.com )['status'] 10662491Szelenkov@nginx.com == 200 10672491Szelenkov@nginx.com ), 'match headers case insensitive' 10682491Szelenkov@nginx.com 10691067Szelenkov@nginx.com 10702491Szelenkov@nginx.comdef test_routes_match_headers_invalid(): 10712491Szelenkov@nginx.com route_match_invalid({"headers": ["blah"]}) 10722491Szelenkov@nginx.com route_match_invalid({"headers": {"foo": ["bar", {}]}}) 10732491Szelenkov@nginx.com route_match_invalid({"headers": {"": "blah"}}) 10742491Szelenkov@nginx.com 10752491Szelenkov@nginx.com 10762491Szelenkov@nginx.comdef test_routes_match_headers_empty_rule(): 10772491Szelenkov@nginx.com route_match({"headers": {"host": ""}}) 10782491Szelenkov@nginx.com 10792491Szelenkov@nginx.com assert client.get()['status'] == 404, 'localhost' 10802491Szelenkov@nginx.com host('', 200) 10811475Saxel.duch@nginx.com 10822491Szelenkov@nginx.com 10832491Szelenkov@nginx.comdef test_routes_match_headers_empty(): 10842491Szelenkov@nginx.com route_match({"headers": {}}) 10852491Szelenkov@nginx.com assert client.get()['status'] == 200, 'empty' 10862491Szelenkov@nginx.com 10872491Szelenkov@nginx.com route_match({"headers": []}) 10882491Szelenkov@nginx.com assert client.get()['status'] == 200, 'empty 2' 10892491Szelenkov@nginx.com 10902491Szelenkov@nginx.com 10912491Szelenkov@nginx.comdef test_routes_match_headers_rule_array_empty(): 10922491Szelenkov@nginx.com route_match({"headers": {"blah": []}}) 10931475Saxel.duch@nginx.com 10942491Szelenkov@nginx.com assert client.get()['status'] == 404, 'array empty' 10952491Szelenkov@nginx.com assert ( 10962491Szelenkov@nginx.com client.get( 10972491Szelenkov@nginx.com headers={ 10982491Szelenkov@nginx.com "Host": "localhost", 10992491Szelenkov@nginx.com "blah": "foo", 11002491Szelenkov@nginx.com "Connection": "close", 11012491Szelenkov@nginx.com } 11022491Szelenkov@nginx.com )['status'] 11032491Szelenkov@nginx.com == 200 11042491Szelenkov@nginx.com ), 'match headers rule array empty 2' 11051475Saxel.duch@nginx.com 11061475Saxel.duch@nginx.com 11072491Szelenkov@nginx.comdef test_routes_match_headers_array(): 11082491Szelenkov@nginx.com route_match( 11092491Szelenkov@nginx.com { 11102491Szelenkov@nginx.com "headers": [ 11112491Szelenkov@nginx.com {"x-header1": "foo*"}, 11122491Szelenkov@nginx.com {"x-header2": "bar"}, 11132491Szelenkov@nginx.com {"x-header3": ["foo", "bar"]}, 11142491Szelenkov@nginx.com {"x-header1": "bar", "x-header4": "foo"}, 11152491Szelenkov@nginx.com ] 11162491Szelenkov@nginx.com } 11172491Szelenkov@nginx.com ) 11181067Szelenkov@nginx.com 11192491Szelenkov@nginx.com def check_headers(hds): 11202491Szelenkov@nginx.com hds = dict({"Host": "localhost", "Connection": "close"}, **hds) 11212491Szelenkov@nginx.com assert client.get(headers=hds)['status'] == 200, 'headers array match' 11221067Szelenkov@nginx.com 11232491Szelenkov@nginx.com def check_headers_404(hds): 11242491Szelenkov@nginx.com hds = dict({"Host": "localhost", "Connection": "close"}, **hds) 11252491Szelenkov@nginx.com assert ( 11262491Szelenkov@nginx.com client.get(headers=hds)['status'] == 404 11272491Szelenkov@nginx.com ), 'headers array no match' 11281067Szelenkov@nginx.com 11292491Szelenkov@nginx.com assert client.get()['status'] == 404, 'match headers array' 11302491Szelenkov@nginx.com check_headers({"x-header1": "foo123"}) 11312491Szelenkov@nginx.com check_headers({"x-header2": "bar"}) 11322491Szelenkov@nginx.com check_headers({"x-header3": "bar"}) 11332491Szelenkov@nginx.com check_headers_404({"x-header1": "bar"}) 11342491Szelenkov@nginx.com check_headers({"x-header1": "bar", "x-header4": "foo"}) 11352491Szelenkov@nginx.com 11362491Szelenkov@nginx.com assert 'success' in client.conf_delete( 11372491Szelenkov@nginx.com 'routes/0/match/headers/1' 11382491Szelenkov@nginx.com ), 'match headers array configure 2' 11391475Saxel.duch@nginx.com 11402491Szelenkov@nginx.com check_headers_404({"x-header2": "bar"}) 11412491Szelenkov@nginx.com check_headers({"x-header3": "foo"}) 11422491Szelenkov@nginx.com 11432491Szelenkov@nginx.com 11442491Szelenkov@nginx.comdef test_routes_match_arguments(): 11452491Szelenkov@nginx.com route_match({"arguments": {"foo": "bar"}}) 11461475Saxel.duch@nginx.com 11472491Szelenkov@nginx.com assert client.get()['status'] == 404, 'args' 11482491Szelenkov@nginx.com assert client.get(url='/?foo=bar')['status'] == 200, 'args 2' 11492491Szelenkov@nginx.com assert client.get(url='/?foo=bar1')['status'] == 404, 'args 3' 11502491Szelenkov@nginx.com assert client.get(url='/?1foo=bar')['status'] == 404, 'args 4' 11512491Szelenkov@nginx.com assert client.get(url='/?Foo=bar')['status'] == 404, 'case' 11522491Szelenkov@nginx.com assert client.get(url='/?foo=Bar')['status'] == 404, 'case 2' 11531475Saxel.duch@nginx.com 11541475Saxel.duch@nginx.com 11552491Szelenkov@nginx.comdef test_routes_match_arguments_chars(): 11562491Szelenkov@nginx.com chars = ( 11572491Szelenkov@nginx.com " !\"%23$%25%26'()*%2B,-./0123456789:;<%3D>?@" 11582491Szelenkov@nginx.com "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" 11592491Szelenkov@nginx.com ) 11601475Saxel.duch@nginx.com 11612491Szelenkov@nginx.com chars_enc = "" 11622491Szelenkov@nginx.com for h1 in ["2", "3", "4", "5", "6", "7"]: 11632491Szelenkov@nginx.com for h2 in [ 11642491Szelenkov@nginx.com "0", 11652491Szelenkov@nginx.com "1", 11662491Szelenkov@nginx.com "2", 11672491Szelenkov@nginx.com "3", 11682491Szelenkov@nginx.com "4", 11692491Szelenkov@nginx.com "5", 11702491Szelenkov@nginx.com "6", 11712491Szelenkov@nginx.com "7", 11722491Szelenkov@nginx.com "8", 11732491Szelenkov@nginx.com "9", 11742491Szelenkov@nginx.com "A", 11752491Szelenkov@nginx.com "B", 11762491Szelenkov@nginx.com "C", 11772491Szelenkov@nginx.com "D", 11782491Szelenkov@nginx.com "E", 11792491Szelenkov@nginx.com "F", 11802491Szelenkov@nginx.com ]: 11812491Szelenkov@nginx.com chars_enc += f'%{h1}{h2}' 11822491Szelenkov@nginx.com chars_enc = chars_enc[:-3] 11831475Saxel.duch@nginx.com 11842491Szelenkov@nginx.com def check_args(args, query): 11852491Szelenkov@nginx.com route_match({"arguments": args}) 11862491Szelenkov@nginx.com assert client.get(url=f'/?{query}')['status'] == 200 11871633Svbart@nginx.com 11882491Szelenkov@nginx.com check_args({chars: chars}, f'{chars}={chars}') 11892491Szelenkov@nginx.com check_args({chars: chars}, f'{chars}={chars_enc}') 11902491Szelenkov@nginx.com check_args({chars: chars}, f'{chars_enc}={chars}') 11912491Szelenkov@nginx.com check_args({chars: chars}, f'{chars_enc}={chars_enc}') 11922491Szelenkov@nginx.com check_args({chars_enc: chars_enc}, f'{chars}={chars}') 11932491Szelenkov@nginx.com check_args({chars_enc: chars_enc}, f'{chars}={chars_enc}') 11942491Szelenkov@nginx.com check_args({chars_enc: chars_enc}, f'{chars_enc}={chars}') 11952491Szelenkov@nginx.com check_args({chars_enc: chars_enc}, f'{chars_enc}={chars_enc}') 11961633Svbart@nginx.com 11971475Saxel.duch@nginx.com 11982491Szelenkov@nginx.comdef test_routes_match_arguments_empty(): 11992491Szelenkov@nginx.com route_match({"arguments": {}}) 12002491Szelenkov@nginx.com assert client.get()['status'] == 200, 'arguments empty' 12012491Szelenkov@nginx.com 12022491Szelenkov@nginx.com route_match({"arguments": []}) 12032491Szelenkov@nginx.com assert client.get()['status'] == 200, 'arguments empty 2' 12042491Szelenkov@nginx.com 12051475Saxel.duch@nginx.com 12062491Szelenkov@nginx.comdef test_routes_match_arguments_space(): 12072491Szelenkov@nginx.com route_match({"arguments": {"+fo o%20": "%20b+a r"}}) 12082491Szelenkov@nginx.com assert client.get(url='/? fo o = b a r&')['status'] == 200 12092491Szelenkov@nginx.com assert client.get(url='/?+fo+o+=+b+a+r&')['status'] == 200 12102491Szelenkov@nginx.com assert client.get(url='/?%20fo%20o%20=%20b%20a%20r&')['status'] == 200 12112491Szelenkov@nginx.com 12122491Szelenkov@nginx.com route_match({"arguments": {"%20foo": " bar"}}) 12132491Szelenkov@nginx.com assert client.get(url='/? foo= bar')['status'] == 200 12142491Szelenkov@nginx.com assert client.get(url='/?+foo=+bar')['status'] == 200 12152491Szelenkov@nginx.com assert client.get(url='/?%20foo=%20bar')['status'] == 200 12162491Szelenkov@nginx.com assert client.get(url='/?+foo= bar')['status'] == 200 12172491Szelenkov@nginx.com assert client.get(url='/?%20foo=+bar')['status'] == 200 12182491Szelenkov@nginx.com 12191067Szelenkov@nginx.com 12202491Szelenkov@nginx.comdef test_routes_match_arguments_equal(): 12212491Szelenkov@nginx.com route_match({"arguments": {"=": "="}}) 12222491Szelenkov@nginx.com assert client.get(url='/?%3D=%3D')['status'] == 200 12232491Szelenkov@nginx.com assert client.get(url='/?%3D==')['status'] == 200 12242491Szelenkov@nginx.com assert client.get(url='/?===')['status'] == 404 12252491Szelenkov@nginx.com assert client.get(url='/?%3D%3D%3D')['status'] == 404 12262491Szelenkov@nginx.com assert client.get(url='/?==%3D')['status'] == 404 12271475Saxel.duch@nginx.com 12281067Szelenkov@nginx.com 12292491Szelenkov@nginx.comdef test_routes_match_arguments_enc(): 12302491Szelenkov@nginx.com route_match({"arguments": {"Ю": "н"}}) 12312491Szelenkov@nginx.com assert client.get(url='/?%D0%AE=%D0%BD')['status'] == 200 12322491Szelenkov@nginx.com assert client.get(url='/?%d0%ae=%d0%Bd')['status'] == 200 12332491Szelenkov@nginx.com 12341475Saxel.duch@nginx.com 12352491Szelenkov@nginx.comdef test_routes_match_arguments_hash(): 12362491Szelenkov@nginx.com route_match({"arguments": {"#": "#"}}) 12372491Szelenkov@nginx.com assert client.get(url='/?%23=%23')['status'] == 200 12382491Szelenkov@nginx.com assert client.get(url='/?%23=%23#')['status'] == 200 12392491Szelenkov@nginx.com assert client.get(url='/?#=#')['status'] == 404 12402491Szelenkov@nginx.com assert client.get(url='/?%23=#')['status'] == 404 12412491Szelenkov@nginx.com 12421475Saxel.duch@nginx.com 12432491Szelenkov@nginx.comdef test_routes_match_arguments_wildcard(): 12442491Szelenkov@nginx.com route_match({"arguments": {"foo": "*"}}) 12452491Szelenkov@nginx.com assert client.get(url='/?foo')['status'] == 200 12462491Szelenkov@nginx.com assert client.get(url='/?foo=')['status'] == 200 12472491Szelenkov@nginx.com assert client.get(url='/?foo=blah')['status'] == 200 12482491Szelenkov@nginx.com assert client.get(url='/?blah=foo')['status'] == 404 12491067Szelenkov@nginx.com 12502491Szelenkov@nginx.com route_match({"arguments": {"foo": "%25*"}}) 12512491Szelenkov@nginx.com assert client.get(url='/?foo=%xx')['status'] == 200 12522491Szelenkov@nginx.com 12532491Szelenkov@nginx.com route_match({"arguments": {"foo": "%2A*"}}) 12542491Szelenkov@nginx.com assert client.get(url='/?foo=*xx')['status'] == 200 12552491Szelenkov@nginx.com assert client.get(url='/?foo=xx')['status'] == 404 12562491Szelenkov@nginx.com 12572491Szelenkov@nginx.com route_match({"arguments": {"foo": "*%2A"}}) 12582491Szelenkov@nginx.com assert client.get(url='/?foo=xx*')['status'] == 200 12592491Szelenkov@nginx.com assert client.get(url='/?foo=xx*x')['status'] == 404 12601067Szelenkov@nginx.com 12612491Szelenkov@nginx.com route_match({"arguments": {"foo": "1*2"}}) 12622491Szelenkov@nginx.com assert client.get(url='/?foo=12')['status'] == 200 12632491Szelenkov@nginx.com assert client.get(url='/?foo=1blah2')['status'] == 200 12642491Szelenkov@nginx.com assert client.get(url='/?foo=1%2A2')['status'] == 200 12652491Szelenkov@nginx.com assert client.get(url='/?foo=x12')['status'] == 404 12661067Szelenkov@nginx.com 12672491Szelenkov@nginx.com route_match({"arguments": {"foo": "bar*", "%25": "%25"}}) 12682491Szelenkov@nginx.com assert client.get(url='/?foo=barxx&%=%')['status'] == 200 12692491Szelenkov@nginx.com assert client.get(url='/?foo=barxx&x%=%')['status'] == 404 12702491Szelenkov@nginx.com 12711067Szelenkov@nginx.com 12722491Szelenkov@nginx.comdef test_routes_match_arguments_negative(): 12732491Szelenkov@nginx.com route_match({"arguments": {"foo": "!"}}) 12742491Szelenkov@nginx.com assert client.get(url='/?bar')['status'] == 404 12752491Szelenkov@nginx.com assert client.get(url='/?foo')['status'] == 404 12762491Szelenkov@nginx.com assert client.get(url='/?foo=')['status'] == 404 12772491Szelenkov@nginx.com assert client.get(url='/?foo=%25')['status'] == 200 12781067Szelenkov@nginx.com 12792491Szelenkov@nginx.com route_match({"arguments": {"foo": "!*"}}) 12802491Szelenkov@nginx.com assert client.get(url='/?bar')['status'] == 404 12812491Szelenkov@nginx.com assert client.get(url='/?foo')['status'] == 404 12822491Szelenkov@nginx.com assert client.get(url='/?foo=')['status'] == 404 12832491Szelenkov@nginx.com assert client.get(url='/?foo=blah')['status'] == 404 12842491Szelenkov@nginx.com 12852491Szelenkov@nginx.com route_match({"arguments": {"foo": "!%25"}}) 12862491Szelenkov@nginx.com assert client.get(url='/?foo=blah')['status'] == 200 12872491Szelenkov@nginx.com assert client.get(url='/?foo=%')['status'] == 404 12881067Szelenkov@nginx.com 12892491Szelenkov@nginx.com route_match({"arguments": {"foo": "%21blah"}}) 12902491Szelenkov@nginx.com assert client.get(url='/?foo=%21blah')['status'] == 200 12912491Szelenkov@nginx.com assert client.get(url='/?foo=!blah')['status'] == 200 12922491Szelenkov@nginx.com assert client.get(url='/?foo=bar')['status'] == 404 12932491Szelenkov@nginx.com 12942491Szelenkov@nginx.com route_match({"arguments": {"foo": "!!%21*a"}}) 12952491Szelenkov@nginx.com assert client.get(url='/?foo=blah')['status'] == 200 12962491Szelenkov@nginx.com assert client.get(url='/?foo=!blah')['status'] == 200 12972491Szelenkov@nginx.com assert client.get(url='/?foo=!!a')['status'] == 404 12982491Szelenkov@nginx.com assert client.get(url='/?foo=!!bla')['status'] == 404 12992491Szelenkov@nginx.com 13002491Szelenkov@nginx.com 13012491Szelenkov@nginx.comdef test_routes_match_arguments_percent(): 13022491Szelenkov@nginx.com route_match({"arguments": {"%25": "%25"}}) 13032491Szelenkov@nginx.com assert client.get(url='/?%=%')['status'] == 200 13042491Szelenkov@nginx.com assert client.get(url='/?%25=%25')['status'] == 200 13052491Szelenkov@nginx.com assert client.get(url='/?%25=%')['status'] == 200 13062491Szelenkov@nginx.com 13072491Szelenkov@nginx.com route_match({"arguments": {"%251": "%252"}}) 13082491Szelenkov@nginx.com assert client.get(url='/?%1=%2')['status'] == 200 13092491Szelenkov@nginx.com assert client.get(url='/?%251=%252')['status'] == 200 13102491Szelenkov@nginx.com assert client.get(url='/?%251=%2')['status'] == 200 13111067Szelenkov@nginx.com 13122491Szelenkov@nginx.com route_match({"arguments": {"%25%21%251": "%25%24%252"}}) 13132491Szelenkov@nginx.com assert client.get(url='/?%!%1=%$%2')['status'] == 200 13142491Szelenkov@nginx.com assert client.get(url='/?%25!%251=%25$%252')['status'] == 200 13152491Szelenkov@nginx.com assert client.get(url='/?%25!%1=%$%2')['status'] == 200 13162491Szelenkov@nginx.com 13171067Szelenkov@nginx.com 13182491Szelenkov@nginx.comdef test_routes_match_arguments_ampersand(): 13192491Szelenkov@nginx.com route_match({"arguments": {"foo": "&"}}) 13202491Szelenkov@nginx.com assert client.get(url='/?foo=%26')['status'] == 200 13212491Szelenkov@nginx.com assert client.get(url='/?foo=%26&')['status'] == 200 13222491Szelenkov@nginx.com assert client.get(url='/?foo=%26%26')['status'] == 404 13232491Szelenkov@nginx.com assert client.get(url='/?foo=&')['status'] == 404 13241067Szelenkov@nginx.com 13252491Szelenkov@nginx.com route_match({"arguments": {"&": ""}}) 13262491Szelenkov@nginx.com assert client.get(url='/?%26=')['status'] == 200 13272491Szelenkov@nginx.com assert client.get(url='/?%26=&')['status'] == 200 13282491Szelenkov@nginx.com assert client.get(url='/?%26=%26')['status'] == 404 13292491Szelenkov@nginx.com assert client.get(url='/?&=')['status'] == 404 13301067Szelenkov@nginx.com 13312491Szelenkov@nginx.com 13322491Szelenkov@nginx.comdef test_routes_match_arguments_complex(): 13332491Szelenkov@nginx.com route_match({"arguments": {"foo": ""}}) 13341067Szelenkov@nginx.com 13352491Szelenkov@nginx.com assert client.get(url='/?foo')['status'] == 200, 'complex' 13362491Szelenkov@nginx.com assert client.get(url='/?blah=blah&foo=')['status'] == 200, 'complex 2' 13372491Szelenkov@nginx.com assert client.get(url='/?&&&foo&&&')['status'] == 200, 'complex 3' 13382491Szelenkov@nginx.com assert client.get(url='/?foo&foo=bar&foo')['status'] == 404, 'complex 4' 13392491Szelenkov@nginx.com assert client.get(url='/?foo=&foo')['status'] == 200, 'complex 5' 13402491Szelenkov@nginx.com assert client.get(url='/?&=&foo&==&')['status'] == 200, 'complex 6' 13412491Szelenkov@nginx.com assert client.get(url='/?&=&bar&==&')['status'] == 404, 'complex 7' 13422491Szelenkov@nginx.com 13432491Szelenkov@nginx.com 13442491Szelenkov@nginx.comdef test_routes_match_arguments_multiple(): 13452491Szelenkov@nginx.com route_match({"arguments": {"foo": "bar", "blah": "test"}}) 13461475Saxel.duch@nginx.com 13472491Szelenkov@nginx.com assert client.get()['status'] == 404, 'multiple' 13482491Szelenkov@nginx.com assert client.get(url='/?foo=bar&blah=test')['status'] == 200, 'multiple 2' 13492491Szelenkov@nginx.com assert client.get(url='/?foo=bar&blah')['status'] == 404, 'multiple 3' 13502491Szelenkov@nginx.com assert client.get(url='/?foo=bar&blah=tes')['status'] == 404, 'multiple 4' 13512491Szelenkov@nginx.com assert ( 13522491Szelenkov@nginx.com client.get(url='/?foo=b%61r&bl%61h=t%65st')['status'] == 200 13532491Szelenkov@nginx.com ), 'multiple 5' 13541991Sz.hong@f5.com 13551991Sz.hong@f5.com 13562491Szelenkov@nginx.comdef test_routes_match_arguments_multiple_rules(): 13572491Szelenkov@nginx.com route_match({"arguments": {"foo": ["bar", "blah"]}}) 13581991Sz.hong@f5.com 13592491Szelenkov@nginx.com assert client.get()['status'] == 404, 'rules' 13602491Szelenkov@nginx.com assert client.get(url='/?foo=bar')['status'] == 200, 'rules 2' 13612491Szelenkov@nginx.com assert client.get(url='/?foo=blah')['status'] == 200, 'rules 3' 13622491Szelenkov@nginx.com assert ( 13632491Szelenkov@nginx.com client.get(url='/?foo=blah&foo=bar&foo=blah')['status'] == 200 13642491Szelenkov@nginx.com ), 'rules 4' 13652491Szelenkov@nginx.com assert client.get(url='/?foo=blah&foo=bar&foo=')['status'] == 404, 'rules 5' 13661991Sz.hong@f5.com 13671991Sz.hong@f5.com 13682491Szelenkov@nginx.comdef test_routes_match_arguments_array(): 13692491Szelenkov@nginx.com route_match( 13702491Szelenkov@nginx.com { 13712491Szelenkov@nginx.com "arguments": [ 13722491Szelenkov@nginx.com {"var1": "val1*"}, 13732491Szelenkov@nginx.com {"var2": "val2"}, 13742491Szelenkov@nginx.com {"var3": ["foo", "bar"]}, 13752491Szelenkov@nginx.com {"var1": "bar", "var4": "foo"}, 13762491Szelenkov@nginx.com ] 13772491Szelenkov@nginx.com } 13782491Szelenkov@nginx.com ) 13792001Szelenkov@nginx.com 13802491Szelenkov@nginx.com assert client.get()['status'] == 404, 'arr' 13812491Szelenkov@nginx.com assert client.get(url='/?var1=val123')['status'] == 200, 'arr 2' 13822491Szelenkov@nginx.com assert client.get(url='/?var2=val2')['status'] == 200, 'arr 3' 13832491Szelenkov@nginx.com assert client.get(url='/?var3=bar')['status'] == 200, 'arr 4' 13842491Szelenkov@nginx.com assert client.get(url='/?var1=bar')['status'] == 404, 'arr 5' 13852491Szelenkov@nginx.com assert client.get(url='/?var1=bar&var4=foo')['status'] == 200, 'arr 6' 13861991Sz.hong@f5.com 13872491Szelenkov@nginx.com assert 'success' in client.conf_delete( 13882491Szelenkov@nginx.com 'routes/0/match/arguments/1' 13892491Szelenkov@nginx.com ), 'match arguments array configure 2' 13901991Sz.hong@f5.com 13912491Szelenkov@nginx.com assert client.get(url='/?var2=val2')['status'] == 404, 'arr 7' 13922491Szelenkov@nginx.com assert client.get(url='/?var3=foo')['status'] == 200, 'arr 8' 13932491Szelenkov@nginx.com 13941991Sz.hong@f5.com 13952491Szelenkov@nginx.comdef test_routes_match_arguments_invalid(): 13962491Szelenkov@nginx.com route_match_invalid({"arguments": ["var"]}) 13972491Szelenkov@nginx.com route_match_invalid({"arguments": [{"var1": {}}]}) 13982491Szelenkov@nginx.com route_match_invalid({"arguments": {"": "bar"}}) 13992491Szelenkov@nginx.com route_match_invalid({"arguments": {"foo": "%"}}) 14002491Szelenkov@nginx.com route_match_invalid({"arguments": {"foo": "%1G"}}) 14012491Szelenkov@nginx.com route_match_invalid({"arguments": {"%": "bar"}}) 14022491Szelenkov@nginx.com route_match_invalid({"arguments": {"foo": "%0"}}) 14032491Szelenkov@nginx.com route_match_invalid({"arguments": {"foo": "%%1F"}}) 14042491Szelenkov@nginx.com route_match_invalid({"arguments": {"%%1F": ""}}) 14052491Szelenkov@nginx.com route_match_invalid({"arguments": {"%7%F": ""}}) 14062491Szelenkov@nginx.com 14071068Szelenkov@nginx.com 14082491Szelenkov@nginx.comdef test_routes_match_query(): 14092491Szelenkov@nginx.com route_match({"query": "!"}) 14102491Szelenkov@nginx.com assert client.get(url='/')['status'] == 404 14112491Szelenkov@nginx.com assert client.get(url='/?')['status'] == 404 14122491Szelenkov@nginx.com assert client.get(url='/?foo')['status'] == 200 14132491Szelenkov@nginx.com assert client.get(url='/?foo=')['status'] == 200 14142491Szelenkov@nginx.com assert client.get(url='/?foo=baz')['status'] == 200 14152491Szelenkov@nginx.com 14162491Szelenkov@nginx.com route_match({"query": "foo=%26"}) 14172491Szelenkov@nginx.com assert client.get(url='/?foo=&')['status'] == 200 14182491Szelenkov@nginx.com 14192491Szelenkov@nginx.com route_match({"query": "a=b&c=d"}) 14202491Szelenkov@nginx.com assert client.get(url='/?a=b&c=d')['status'] == 200 14211068Szelenkov@nginx.com 14222491Szelenkov@nginx.com route_match({"query": "a=b%26c%3Dd"}) 14232491Szelenkov@nginx.com assert client.get(url='/?a=b%26c%3Dd')['status'] == 200 14242491Szelenkov@nginx.com assert client.get(url='/?a=b&c=d')['status'] == 200 14251068Szelenkov@nginx.com 14262491Szelenkov@nginx.com route_match({"query": "a=b%26c%3Dd+e"}) 14272491Szelenkov@nginx.com assert client.get(url='/?a=b&c=d e')['status'] == 200 14281068Szelenkov@nginx.com 14292491Szelenkov@nginx.com 14302491Szelenkov@nginx.comdef test_routes_match_query_array(): 14312491Szelenkov@nginx.com route_match({"query": ["foo", "bar"]}) 14321068Szelenkov@nginx.com 14332491Szelenkov@nginx.com assert client.get()['status'] == 404, 'no args' 14342491Szelenkov@nginx.com assert client.get(url='/?foo')['status'] == 200, 'arg first' 14352491Szelenkov@nginx.com assert client.get(url='/?bar')['status'] == 200, 'arg second' 14362203Sz.hong@f5.com 14372491Szelenkov@nginx.com assert 'success' in client.conf_delete( 14382491Szelenkov@nginx.com 'routes/0/match/query/1' 14392491Szelenkov@nginx.com ), 'query array remove second' 14402491Szelenkov@nginx.com 14412491Szelenkov@nginx.com assert client.get(url='/?foo')['status'] == 200, 'still arg first' 14422491Szelenkov@nginx.com assert client.get(url='/?bar')['status'] == 404, 'no arg second' 14432491Szelenkov@nginx.com 14442491Szelenkov@nginx.com route_match({"query": ["!f", "foo"]}) 14452491Szelenkov@nginx.com 14462491Szelenkov@nginx.com assert client.get(url='/?f')['status'] == 404, 'negative arg' 14472491Szelenkov@nginx.com assert client.get(url='/?fo')['status'] == 404, 'negative arg 2' 14482491Szelenkov@nginx.com assert client.get(url='/?foo')['status'] == 200, 'negative arg 3' 14492203Sz.hong@f5.com 14502491Szelenkov@nginx.com route_match({"query": []}) 14512491Szelenkov@nginx.com assert client.get()['status'] == 200, 'empty array' 14522491Szelenkov@nginx.com 14531308Szelenkov@nginx.com 14542491Szelenkov@nginx.comdef test_routes_match_query_invalid(): 14552491Szelenkov@nginx.com route_match_invalid({"query": [1]}) 14562491Szelenkov@nginx.com route_match_invalid({"query": "%"}) 14572491Szelenkov@nginx.com route_match_invalid({"query": "%1G"}) 14582491Szelenkov@nginx.com route_match_invalid({"query": "%0"}) 14592491Szelenkov@nginx.com route_match_invalid({"query": "%%1F"}) 14602491Szelenkov@nginx.com route_match_invalid({"query": ["foo", "%3D", "%%1F"]}) 14611068Szelenkov@nginx.com 14621308Szelenkov@nginx.com 14632491Szelenkov@nginx.comdef test_routes_match_cookies(): 14642491Szelenkov@nginx.com route_match({"cookies": {"foO": "bar"}}) 14651308Szelenkov@nginx.com 14662491Szelenkov@nginx.com assert client.get()['status'] == 404, 'cookie' 14672491Szelenkov@nginx.com cookie('foO=bar', 200) 14682491Szelenkov@nginx.com cookie('foO=bar;1', 200) 14692491Szelenkov@nginx.com cookie(['foO=bar', 'blah=blah'], 200) 14702491Szelenkov@nginx.com cookie('foO=bar; blah=blah', 200) 14712491Szelenkov@nginx.com cookie('Foo=bar', 404) 14722491Szelenkov@nginx.com cookie('foO=Bar', 404) 14732491Szelenkov@nginx.com cookie('foO=bar1', 404) 14742491Szelenkov@nginx.com cookie('1foO=bar;', 404) 14751068Szelenkov@nginx.com 14762491Szelenkov@nginx.com 14772491Szelenkov@nginx.comdef test_routes_match_cookies_empty(): 14782491Szelenkov@nginx.com route_match({"cookies": {}}) 14792491Szelenkov@nginx.com assert client.get()['status'] == 200, 'cookies empty' 14801068Szelenkov@nginx.com 14812491Szelenkov@nginx.com route_match({"cookies": []}) 14822491Szelenkov@nginx.com assert client.get()['status'] == 200, 'cookies empty 2' 14832491Szelenkov@nginx.com 14842491Szelenkov@nginx.com 14852491Szelenkov@nginx.comdef test_routes_match_cookies_invalid(): 14862491Szelenkov@nginx.com route_match_invalid({"cookies": ["var"]}) 14872491Szelenkov@nginx.com route_match_invalid({"cookies": [{"foo": {}}]}) 14882491Szelenkov@nginx.com 14891068Szelenkov@nginx.com 14902491Szelenkov@nginx.comdef test_routes_match_cookies_complex(): 14912491Szelenkov@nginx.com route_match({"cookies": {"foo": "bar=baz"}}) 14922491Szelenkov@nginx.com cookie('foo=bar=baz', 200) 14932491Szelenkov@nginx.com cookie(' foo=bar=baz ', 200) 14942491Szelenkov@nginx.com cookie('=foo=bar=baz', 404) 14951068Szelenkov@nginx.com 14962491Szelenkov@nginx.com route_match({"cookies": {"foo": ""}}) 14972491Szelenkov@nginx.com cookie('foo=', 200) 14982491Szelenkov@nginx.com cookie('foo=;', 200) 14992491Szelenkov@nginx.com cookie(' foo=;', 200) 15002491Szelenkov@nginx.com cookie('foo', 404) 15012491Szelenkov@nginx.com cookie('', 404) 15022491Szelenkov@nginx.com cookie('=', 404) 15031068Szelenkov@nginx.com 15041068Szelenkov@nginx.com 15052491Szelenkov@nginx.comdef test_routes_match_cookies_multiple(): 15062491Szelenkov@nginx.com route_match({"cookies": {"foo": "bar", "blah": "blah"}}) 15071110Saxel.duch@nginx.com 15082491Szelenkov@nginx.com assert client.get()['status'] == 404, 'multiple' 15092491Szelenkov@nginx.com cookie('foo=bar; blah=blah', 200) 15102491Szelenkov@nginx.com cookie(['foo=bar', 'blah=blah'], 200) 15112491Szelenkov@nginx.com cookie(['foo=bar; blah', 'blah'], 404) 15122491Szelenkov@nginx.com cookie(['foo=bar; blah=test', 'blah=blah'], 404) 15132491Szelenkov@nginx.com 15142491Szelenkov@nginx.com 15152491Szelenkov@nginx.comdef test_routes_match_cookies_multiple_values(): 15162491Szelenkov@nginx.com route_match({"cookies": {"blah": "blah"}}) 15171308Szelenkov@nginx.com 15182491Szelenkov@nginx.com cookie(['blah=blah', 'blah=blah', 'blah=blah'], 200) 15192491Szelenkov@nginx.com cookie(['blah=blah', 'blah=test', 'blah=blah'], 404) 15202491Szelenkov@nginx.com cookie(['blah=blah; blah=', 'blah=blah'], 404) 15212491Szelenkov@nginx.com 15222491Szelenkov@nginx.com 15232491Szelenkov@nginx.comdef test_routes_match_cookies_multiple_rules(): 15242491Szelenkov@nginx.com route_match({"cookies": {"blah": ["test", "blah"]}}) 15251325Saxel.duch@nginx.com 15262491Szelenkov@nginx.com assert client.get()['status'] == 404, 'multiple rules' 15272491Szelenkov@nginx.com cookie('blah=test', 200) 15282491Szelenkov@nginx.com cookie('blah=blah', 200) 15292491Szelenkov@nginx.com cookie(['blah=blah', 'blah=test', 'blah=blah'], 200) 15302491Szelenkov@nginx.com cookie(['blah=blah; blah=test', 'blah=blah'], 200) 15312491Szelenkov@nginx.com cookie(['blah=blah', 'blah'], 200) # invalid cookie 15321325Saxel.duch@nginx.com 15331325Saxel.duch@nginx.com 15342491Szelenkov@nginx.comdef test_routes_match_cookies_array(): 15352491Szelenkov@nginx.com route_match( 15362491Szelenkov@nginx.com { 15372491Szelenkov@nginx.com "cookies": [ 15382491Szelenkov@nginx.com {"var1": "val1*"}, 15392491Szelenkov@nginx.com {"var2": "val2"}, 15402491Szelenkov@nginx.com {"var3": ["foo", "bar"]}, 15412491Szelenkov@nginx.com {"var1": "bar", "var4": "foo"}, 15422491Szelenkov@nginx.com ] 15432491Szelenkov@nginx.com } 15442491Szelenkov@nginx.com ) 15451325Saxel.duch@nginx.com 15462491Szelenkov@nginx.com assert client.get()['status'] == 404, 'cookies array' 15472491Szelenkov@nginx.com cookie('var1=val123', 200) 15482491Szelenkov@nginx.com cookie('var2=val2', 200) 15492491Szelenkov@nginx.com cookie(' var2=val2 ', 200) 15502491Szelenkov@nginx.com cookie('var3=bar', 200) 15512491Szelenkov@nginx.com cookie('var3=bar;', 200) 15522491Szelenkov@nginx.com cookie('var1=bar', 404) 15532491Szelenkov@nginx.com cookie('var1=bar; var4=foo;', 200) 15542491Szelenkov@nginx.com cookie(['var1=bar', 'var4=foo'], 200) 15551391Szelenkov@nginx.com 15562491Szelenkov@nginx.com assert 'success' in client.conf_delete( 15572491Szelenkov@nginx.com 'routes/0/match/cookies/1' 15582491Szelenkov@nginx.com ), 'match cookies array configure 2' 15591391Szelenkov@nginx.com 15602491Szelenkov@nginx.com cookie('var2=val2', 404) 15612491Szelenkov@nginx.com cookie('var3=foo', 200) 15622491Szelenkov@nginx.com 15631325Saxel.duch@nginx.com 15642491Szelenkov@nginx.comdef test_routes_match_scheme(): 15652491Szelenkov@nginx.com route_match({"scheme": "http"}) 15662491Szelenkov@nginx.com route_match({"scheme": "https"}) 15672491Szelenkov@nginx.com route_match({"scheme": "HtTp"}) 15682491Szelenkov@nginx.com route_match({"scheme": "HtTpS"}) 15692491Szelenkov@nginx.com 15701325Saxel.duch@nginx.com 15712491Szelenkov@nginx.comdef test_routes_match_scheme_invalid(): 15722491Szelenkov@nginx.com route_match_invalid({"scheme": ["http"]}) 15732491Szelenkov@nginx.com route_match_invalid({"scheme": "ftp"}) 15742491Szelenkov@nginx.com route_match_invalid({"scheme": "ws"}) 15752491Szelenkov@nginx.com route_match_invalid({"scheme": "*"}) 15762491Szelenkov@nginx.com route_match_invalid({"scheme": ""}) 15772491Szelenkov@nginx.com 15781325Saxel.duch@nginx.com 15792491Szelenkov@nginx.comdef test_routes_source_port(): 15802491Szelenkov@nginx.com def sock_port(): 15812491Szelenkov@nginx.com sock = client.http(b'', raw=True, no_recv=True) 15822491Szelenkov@nginx.com port = sock.getsockname()[1] 15832491Szelenkov@nginx.com return (sock, port) 15842491Szelenkov@nginx.com 15852491Szelenkov@nginx.com sock, port = sock_port() 15862491Szelenkov@nginx.com sock2, _ = sock_port() 15871325Saxel.duch@nginx.com 15882491Szelenkov@nginx.com route_match({"source": f'127.0.0.1:{port}'}) 15892491Szelenkov@nginx.com assert client.get(sock=sock)['status'] == 200, 'exact' 15902491Szelenkov@nginx.com assert client.get(sock=sock2)['status'] == 404, 'exact 2' 15912491Szelenkov@nginx.com 15922491Szelenkov@nginx.com sock, port = sock_port() 15932491Szelenkov@nginx.com sock2, _ = sock_port() 15942491Szelenkov@nginx.com 15952491Szelenkov@nginx.com route_match({"source": f'!127.0.0.1:{port}'}) 15962491Szelenkov@nginx.com assert client.get(sock=sock)['status'] == 404, 'negative' 15972491Szelenkov@nginx.com assert client.get(sock=sock2)['status'] == 200, 'negative 2' 15981325Saxel.duch@nginx.com 15992491Szelenkov@nginx.com sock, port = sock_port() 16002491Szelenkov@nginx.com sock2, _ = sock_port() 16012491Szelenkov@nginx.com 16022491Szelenkov@nginx.com route_match({"source": [f'*:{port}', "!127.0.0.1"]}) 16032491Szelenkov@nginx.com assert client.get(sock=sock)['status'] == 404, 'negative 3' 16042491Szelenkov@nginx.com assert client.get(sock=sock2)['status'] == 404, 'negative 4' 16052491Szelenkov@nginx.com 16062491Szelenkov@nginx.com sock, port = sock_port() 16072491Szelenkov@nginx.com sock2, _ = sock_port() 16081325Saxel.duch@nginx.com 16092491Szelenkov@nginx.com route_match({"source": f'127.0.0.1:{port}-{port}'}) 16102491Szelenkov@nginx.com assert client.get(sock=sock)['status'] == 200, 'range single' 16112491Szelenkov@nginx.com assert client.get(sock=sock2)['status'] == 404, 'range single 2' 16121325Saxel.duch@nginx.com 16132491Szelenkov@nginx.com socks = [ 16142491Szelenkov@nginx.com sock_port(), 16152491Szelenkov@nginx.com sock_port(), 16162491Szelenkov@nginx.com sock_port(), 16172491Szelenkov@nginx.com sock_port(), 16182491Szelenkov@nginx.com sock_port(), 16192491Szelenkov@nginx.com ] 16202491Szelenkov@nginx.com socks.sort(key=lambda sock: sock[1]) 16211325Saxel.duch@nginx.com 16222491Szelenkov@nginx.com route_match({"source": f'127.0.0.1:{socks[1][1]}-{socks[3][1]}'}) 16232491Szelenkov@nginx.com assert client.get(sock=socks[0][0])['status'] == 404, 'range' 16242491Szelenkov@nginx.com assert client.get(sock=socks[1][0])['status'] == 200, 'range 2' 16252491Szelenkov@nginx.com assert client.get(sock=socks[2][0])['status'] == 200, 'range 3' 16262491Szelenkov@nginx.com assert client.get(sock=socks[3][0])['status'] == 200, 'range 4' 16272491Szelenkov@nginx.com assert client.get(sock=socks[4][0])['status'] == 404, 'range 5' 16281325Saxel.duch@nginx.com 16292491Szelenkov@nginx.com socks = [ 16302491Szelenkov@nginx.com sock_port(), 16312491Szelenkov@nginx.com sock_port(), 16322491Szelenkov@nginx.com sock_port(), 16332491Szelenkov@nginx.com ] 16342491Szelenkov@nginx.com socks.sort(key=lambda sock: sock[1]) 16351325Saxel.duch@nginx.com 16362491Szelenkov@nginx.com route_match( 16372491Szelenkov@nginx.com { 16382491Szelenkov@nginx.com "source": [ 16392491Szelenkov@nginx.com f'127.0.0.1:{socks[0][1]}', 16402491Szelenkov@nginx.com f'127.0.0.1:{socks[2][1]}', 16412491Szelenkov@nginx.com ] 16422491Szelenkov@nginx.com } 16432491Szelenkov@nginx.com ) 16442491Szelenkov@nginx.com assert client.get(sock=socks[0][0])['status'] == 200, 'array' 16452491Szelenkov@nginx.com assert client.get(sock=socks[1][0])['status'] == 404, 'array 2' 16462491Szelenkov@nginx.com assert client.get(sock=socks[2][0])['status'] == 200, 'array 3' 16471325Saxel.duch@nginx.com 16481325Saxel.duch@nginx.com 16492491Szelenkov@nginx.comdef test_routes_source_addr(): 16502491Szelenkov@nginx.com assert 'success' in client.conf( 16512491Szelenkov@nginx.com { 16522592Szelenkov@nginx.com "*:8080": {"pass": "routes"}, 16532592Szelenkov@nginx.com "[::1]:8081": {"pass": "routes"}, 16542491Szelenkov@nginx.com }, 16552491Szelenkov@nginx.com 'listeners', 16562491Szelenkov@nginx.com ), 'source listeners configure' 16571325Saxel.duch@nginx.com 16582491Szelenkov@nginx.com def get_ipv6(): 16592592Szelenkov@nginx.com return client.get(sock_type='ipv6', port=8081) 16601325Saxel.duch@nginx.com 16612491Szelenkov@nginx.com route_match({"source": "127.0.0.1"}) 16622491Szelenkov@nginx.com assert client.get()['status'] == 200, 'exact' 16632491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, 'exact ipv6' 16641325Saxel.duch@nginx.com 16652491Szelenkov@nginx.com route_match({"source": ["127.0.0.1"]}) 16662491Szelenkov@nginx.com assert client.get()['status'] == 200, 'exact 2' 16672491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, 'exact 2 ipv6' 16681325Saxel.duch@nginx.com 16692491Szelenkov@nginx.com route_match({"source": "!127.0.0.1"}) 16702491Szelenkov@nginx.com assert client.get()['status'] == 404, 'exact neg' 16712491Szelenkov@nginx.com assert get_ipv6()['status'] == 200, 'exact neg ipv6' 16721325Saxel.duch@nginx.com 16732491Szelenkov@nginx.com route_match({"source": "127.0.0.2"}) 16742491Szelenkov@nginx.com assert client.get()['status'] == 404, 'exact 3' 16752491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, 'exact 3 ipv6' 16762491Szelenkov@nginx.com 16772491Szelenkov@nginx.com route_match({"source": "127.0.0.1-127.0.0.1"}) 16782491Szelenkov@nginx.com assert client.get()['status'] == 200, 'range single' 16792491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, 'range single ipv6' 16802491Szelenkov@nginx.com 16812491Szelenkov@nginx.com route_match({"source": "127.0.0.2-127.0.0.2"}) 16822491Szelenkov@nginx.com assert client.get()['status'] == 404, 'range single 2' 16832491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, 'range single 2 ipv6' 16841325Saxel.duch@nginx.com 16852491Szelenkov@nginx.com route_match({"source": "127.0.0.2-127.0.0.3"}) 16862491Szelenkov@nginx.com assert client.get()['status'] == 404, 'range' 16872491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, 'range ipv6' 16881325Saxel.duch@nginx.com 16892491Szelenkov@nginx.com route_match({"source": "127.0.0.1-127.0.0.2"}) 16902491Szelenkov@nginx.com assert client.get()['status'] == 200, 'range 2' 16912491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, 'range 2 ipv6' 16921325Saxel.duch@nginx.com 16932491Szelenkov@nginx.com route_match({"source": "127.0.0.0-127.0.0.2"}) 16942491Szelenkov@nginx.com assert client.get()['status'] == 200, 'range 3' 16952491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, 'range 3 ipv6' 16961325Saxel.duch@nginx.com 16972491Szelenkov@nginx.com route_match({"source": "127.0.0.0-127.0.0.1"}) 16982491Szelenkov@nginx.com assert client.get()['status'] == 200, 'range 4' 16992491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, 'range 4 ipv6' 17001325Saxel.duch@nginx.com 17012491Szelenkov@nginx.com route_match({"source": "126.0.0.0-127.0.0.0"}) 17022491Szelenkov@nginx.com assert client.get()['status'] == 404, 'range 5' 17032491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, 'range 5 ipv6' 17041325Saxel.duch@nginx.com 17052491Szelenkov@nginx.com route_match({"source": "126.126.126.126-127.0.0.2"}) 17062491Szelenkov@nginx.com assert client.get()['status'] == 200, 'range 6' 17072491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, 'range 6 ipv6' 17082491Szelenkov@nginx.com 17091325Saxel.duch@nginx.com 17102491Szelenkov@nginx.comdef test_routes_source_ipv6(): 17112491Szelenkov@nginx.com assert 'success' in client.conf( 17122491Szelenkov@nginx.com { 17132592Szelenkov@nginx.com "[::1]:8080": {"pass": "routes"}, 17142592Szelenkov@nginx.com "127.0.0.1:8081": {"pass": "routes"}, 17152491Szelenkov@nginx.com }, 17162491Szelenkov@nginx.com 'listeners', 17172491Szelenkov@nginx.com ), 'source listeners configure' 17181325Saxel.duch@nginx.com 17192491Szelenkov@nginx.com route_match({"source": "::1"}) 17202491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 200, 'exact' 17212592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'exact ipv4' 17221325Saxel.duch@nginx.com 17232491Szelenkov@nginx.com route_match({"source": ["::1"]}) 17242491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 200, 'exact 2' 17252592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'exact 2 ipv4' 17262491Szelenkov@nginx.com 17272491Szelenkov@nginx.com route_match({"source": "!::1"}) 17282491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 404, 'exact neg' 17292592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 200, 'exact neg ipv4' 17302491Szelenkov@nginx.com 17312491Szelenkov@nginx.com route_match({"source": "::2"}) 17322491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 404, 'exact 3' 17332592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'exact 3 ipv4' 17341325Saxel.duch@nginx.com 17352491Szelenkov@nginx.com route_match({"source": "::1-::1"}) 17362491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 200, 'range' 17372592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'range ipv4' 17382491Szelenkov@nginx.com 17392491Szelenkov@nginx.com route_match({"source": "::2-::2"}) 17402491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 404, 'range 2' 17412592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'range 2 ipv4' 17421325Saxel.duch@nginx.com 17432491Szelenkov@nginx.com route_match({"source": "::2-::3"}) 17442491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 404, 'range 3' 17452592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'range 3 ipv4' 17461325Saxel.duch@nginx.com 17472491Szelenkov@nginx.com route_match({"source": "::1-::2"}) 17482491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 200, 'range 4' 17492592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'range 4 ipv4' 17501325Saxel.duch@nginx.com 17512491Szelenkov@nginx.com route_match({"source": "::0-::2"}) 17522491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 200, 'range 5' 17532592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'range 5 ipv4' 17541325Saxel.duch@nginx.com 17552491Szelenkov@nginx.com route_match({"source": "::0-::1"}) 17562491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 200, 'range 6' 17572592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'range 6 ipv4' 17582491Szelenkov@nginx.com 17591325Saxel.duch@nginx.com 17602491Szelenkov@nginx.comdef test_routes_source_cidr(): 17612491Szelenkov@nginx.com assert 'success' in client.conf( 17622491Szelenkov@nginx.com { 17632592Szelenkov@nginx.com "*:8080": {"pass": "routes"}, 17642592Szelenkov@nginx.com "[::1]:8081": {"pass": "routes"}, 17652491Szelenkov@nginx.com }, 17662491Szelenkov@nginx.com 'listeners', 17672491Szelenkov@nginx.com ), 'source listeners configure' 17681325Saxel.duch@nginx.com 17692491Szelenkov@nginx.com def get_ipv6(): 17702592Szelenkov@nginx.com return client.get(sock_type='ipv6', port=8081) 17712491Szelenkov@nginx.com 17722491Szelenkov@nginx.com route_match({"source": "127.0.0.1/32"}) 17732491Szelenkov@nginx.com assert client.get()['status'] == 200, '32' 17742491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, '32 ipv6' 17751325Saxel.duch@nginx.com 17762491Szelenkov@nginx.com route_match({"source": "127.0.0.0/32"}) 17772491Szelenkov@nginx.com assert client.get()['status'] == 404, '32 2' 17782491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, '32 2 ipv6' 17791325Saxel.duch@nginx.com 17802491Szelenkov@nginx.com route_match({"source": "127.0.0.0/31"}) 17812491Szelenkov@nginx.com assert client.get()['status'] == 200, '31' 17822491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, '31 ipv6' 17831325Saxel.duch@nginx.com 17842491Szelenkov@nginx.com route_match({"source": "0.0.0.0/1"}) 17852491Szelenkov@nginx.com assert client.get()['status'] == 200, '1' 17862491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, '1 ipv6' 17871325Saxel.duch@nginx.com 17882491Szelenkov@nginx.com route_match({"source": "0.0.0.0/0"}) 17892491Szelenkov@nginx.com assert client.get()['status'] == 200, '0' 17902491Szelenkov@nginx.com assert get_ipv6()['status'] == 404, '0 ipv6' 17912491Szelenkov@nginx.com 17921325Saxel.duch@nginx.com 17932491Szelenkov@nginx.comdef test_routes_source_cidr_ipv6(): 17942491Szelenkov@nginx.com assert 'success' in client.conf( 17952491Szelenkov@nginx.com { 17962592Szelenkov@nginx.com "[::1]:8080": {"pass": "routes"}, 17972592Szelenkov@nginx.com "127.0.0.1:8081": {"pass": "routes"}, 17982491Szelenkov@nginx.com }, 17992491Szelenkov@nginx.com 'listeners', 18002491Szelenkov@nginx.com ), 'source listeners configure' 18011325Saxel.duch@nginx.com 18022491Szelenkov@nginx.com route_match({"source": "::1/128"}) 18032491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 200, '128' 18042592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, '128 ipv4' 18051325Saxel.duch@nginx.com 18062491Szelenkov@nginx.com route_match({"source": "::0/128"}) 18072491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 404, '128 2' 18082592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, '128 ipv4' 18092491Szelenkov@nginx.com 18102491Szelenkov@nginx.com route_match({"source": "::0/127"}) 18112491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 200, '127' 18122592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, '127 ipv4' 18132491Szelenkov@nginx.com 18142491Szelenkov@nginx.com route_match({"source": "::0/32"}) 18152491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 200, '32' 18162592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, '32 ipv4' 18172491Szelenkov@nginx.com 18182491Szelenkov@nginx.com route_match({"source": "::0/1"}) 18192491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 200, '1' 18202592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, '1 ipv4' 18212491Szelenkov@nginx.com 18222491Szelenkov@nginx.com route_match({"source": "::/0"}) 18232491Szelenkov@nginx.com assert client.get(sock_type='ipv6')['status'] == 200, '0' 18242592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, '0 ipv4' 18252491Szelenkov@nginx.com 18261325Saxel.duch@nginx.com 18272491Szelenkov@nginx.comdef test_routes_source_unix(temp_dir): 18282491Szelenkov@nginx.com addr = f'{temp_dir}/sock' 18292491Szelenkov@nginx.com 18302491Szelenkov@nginx.com assert 'success' in client.conf( 18312491Szelenkov@nginx.com { 18322592Szelenkov@nginx.com "127.0.0.1:8081": {"pass": "routes"}, 18332491Szelenkov@nginx.com f'unix:{addr}': {"pass": "routes"}, 18342491Szelenkov@nginx.com }, 18352491Szelenkov@nginx.com 'listeners', 18362491Szelenkov@nginx.com ), 'source listeners configure' 18371325Saxel.duch@nginx.com 18382491Szelenkov@nginx.com route_match({"source": "!0.0.0.0/0"}) 18392491Szelenkov@nginx.com assert ( 18402491Szelenkov@nginx.com client.get(sock_type='unix', addr=addr)['status'] == 200 18412491Szelenkov@nginx.com ), 'unix ipv4 neg' 18422171Szelenkov@nginx.com 18432491Szelenkov@nginx.com route_match({"source": "!::/0"}) 18442491Szelenkov@nginx.com assert ( 18452491Szelenkov@nginx.com client.get(sock_type='unix', addr=addr)['status'] == 200 18462491Szelenkov@nginx.com ), 'unix ipv6 neg' 18472491Szelenkov@nginx.com 18482491Szelenkov@nginx.com route_match({"source": "unix"}) 18492592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'unix ipv4' 18502491Szelenkov@nginx.com assert client.get(sock_type='unix', addr=addr)['status'] == 200, 'unix' 18512491Szelenkov@nginx.com 18521325Saxel.duch@nginx.com 18532491Szelenkov@nginx.comdef test_routes_match_source(): 18542491Szelenkov@nginx.com route_match({"source": "::"}) 18552491Szelenkov@nginx.com route_match( 18562491Szelenkov@nginx.com { 18572491Szelenkov@nginx.com "source": [ 18582491Szelenkov@nginx.com "127.0.0.1", 18592491Szelenkov@nginx.com "192.168.0.10:8080", 18602491Szelenkov@nginx.com "192.168.0.11:8080-8090", 18612491Szelenkov@nginx.com ] 18622491Szelenkov@nginx.com } 18632491Szelenkov@nginx.com ) 18642491Szelenkov@nginx.com route_match( 18652491Szelenkov@nginx.com { 18662491Szelenkov@nginx.com "source": [ 18672491Szelenkov@nginx.com "10.0.0.0/8", 18682491Szelenkov@nginx.com "10.0.0.0/7:1000", 18692491Szelenkov@nginx.com "10.0.0.0/32:8080-8090", 18702491Szelenkov@nginx.com ] 18712491Szelenkov@nginx.com } 18722491Szelenkov@nginx.com ) 18732491Szelenkov@nginx.com route_match( 18742491Szelenkov@nginx.com { 18752491Szelenkov@nginx.com "source": [ 18762491Szelenkov@nginx.com "10.0.0.0-10.0.0.1", 18772491Szelenkov@nginx.com "10.0.0.0-11.0.0.0:1000", 18782491Szelenkov@nginx.com "127.0.0.0-127.0.0.255:8080-8090", 18792491Szelenkov@nginx.com ] 18802491Szelenkov@nginx.com } 18812491Szelenkov@nginx.com ) 18822491Szelenkov@nginx.com route_match({"source": ["2001::", "[2002::]:8000", "[2003::]:8080-8090"]}) 18832491Szelenkov@nginx.com route_match( 18842491Szelenkov@nginx.com { 18852491Szelenkov@nginx.com "source": [ 18862491Szelenkov@nginx.com "2001::-200f:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 18872491Szelenkov@nginx.com "[fe08::-feff::]:8000", 18882491Szelenkov@nginx.com "[fff0::-fff0::10]:8080-8090", 18892491Szelenkov@nginx.com ] 18902491Szelenkov@nginx.com } 18912491Szelenkov@nginx.com ) 18922491Szelenkov@nginx.com route_match( 18932491Szelenkov@nginx.com { 18942491Szelenkov@nginx.com "source": [ 18952491Szelenkov@nginx.com "2001::/16", 18962491Szelenkov@nginx.com "[0ff::/64]:8000", 18972491Szelenkov@nginx.com "[fff0:abcd:ffff:ffff:ffff::/128]:8080-8090", 18982491Szelenkov@nginx.com ] 18992491Szelenkov@nginx.com } 19002491Szelenkov@nginx.com ) 19012491Szelenkov@nginx.com route_match({"source": "*:0-65535"}) 19022491Szelenkov@nginx.com assert client.get()['status'] == 200, 'source any' 19032491Szelenkov@nginx.com 19041325Saxel.duch@nginx.com 19052491Szelenkov@nginx.comdef test_routes_match_source_invalid(): 19062491Szelenkov@nginx.com route_match_invalid({"source": "127"}) 19072491Szelenkov@nginx.com route_match_invalid({"source": "256.0.0.1"}) 19082491Szelenkov@nginx.com route_match_invalid({"source": "127.0.0."}) 19092491Szelenkov@nginx.com route_match_invalid({"source": " 127.0.0.1"}) 19102491Szelenkov@nginx.com route_match_invalid({"source": "127.0.0.1:"}) 19112491Szelenkov@nginx.com route_match_invalid({"source": "127.0.0.1/"}) 19122491Szelenkov@nginx.com route_match_invalid({"source": "11.0.0.0/33"}) 19132491Szelenkov@nginx.com route_match_invalid({"source": "11.0.0.0/65536"}) 19142491Szelenkov@nginx.com route_match_invalid({"source": "11.0.0.0-10.0.0.0"}) 19152491Szelenkov@nginx.com route_match_invalid({"source": "11.0.0.0:3000-2000"}) 19162491Szelenkov@nginx.com route_match_invalid({"source": ["11.0.0.0:3000-2000"]}) 19172491Szelenkov@nginx.com route_match_invalid({"source": "[2001::]:3000-2000"}) 19182491Szelenkov@nginx.com route_match_invalid({"source": "2001::-2000::"}) 19192491Szelenkov@nginx.com route_match_invalid({"source": "2001::/129"}) 19202491Szelenkov@nginx.com route_match_invalid({"source": "::FFFFF"}) 19212491Szelenkov@nginx.com route_match_invalid({"source": "[::1]:"}) 19222592Szelenkov@nginx.com route_match_invalid({"source": "[:::]:8080"}) 19232491Szelenkov@nginx.com route_match_invalid({"source": "*:"}) 19242491Szelenkov@nginx.com route_match_invalid({"source": "*:1-a"}) 19252491Szelenkov@nginx.com route_match_invalid({"source": "*:65536"}) 19261325Saxel.duch@nginx.com 19271930So.canty@f5.com 19282491Szelenkov@nginx.comdef test_routes_match_source_none(): 19292491Szelenkov@nginx.com route_match({"source": []}) 19302491Szelenkov@nginx.com assert client.get()['status'] == 404, 'source none' 19312491Szelenkov@nginx.com 19321327Saxel.duch@nginx.com 19332491Szelenkov@nginx.comdef test_routes_match_destination(): 19342491Szelenkov@nginx.com assert 'success' in client.conf( 19352592Szelenkov@nginx.com {"*:8080": {"pass": "routes"}, "*:8081": {"pass": "routes"}}, 19362491Szelenkov@nginx.com 'listeners', 19372491Szelenkov@nginx.com ), 'listeners configure' 19381327Saxel.duch@nginx.com 19392592Szelenkov@nginx.com route_match({"destination": "*:8080"}) 19402491Szelenkov@nginx.com assert client.get()['status'] == 200, 'dest' 19412592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'dest 2' 19421327Saxel.duch@nginx.com 19432592Szelenkov@nginx.com route_match({"destination": ["127.0.0.1:8080"]}) 19442491Szelenkov@nginx.com assert client.get()['status'] == 200, 'dest 3' 19452592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'dest 4' 19461327Saxel.duch@nginx.com 19472592Szelenkov@nginx.com route_match({"destination": "!*:8080"}) 19482491Szelenkov@nginx.com assert client.get()['status'] == 404, 'dest neg' 19492592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 200, 'dest neg 2' 19501391Szelenkov@nginx.com 19512592Szelenkov@nginx.com route_match({"destination": ['!*:8080', '!*:8081']}) 19522491Szelenkov@nginx.com assert client.get()['status'] == 404, 'dest neg 3' 19532592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'dest neg 4' 19541391Szelenkov@nginx.com 19552592Szelenkov@nginx.com route_match({"destination": ['!*:8081', '!*:8082']}) 19562491Szelenkov@nginx.com assert client.get()['status'] == 200, 'dest neg 5' 19571391Szelenkov@nginx.com 19582592Szelenkov@nginx.com route_match({"destination": ['*:8080', '!*:8080']}) 19592491Szelenkov@nginx.com assert client.get()['status'] == 404, 'dest neg 6' 19601391Szelenkov@nginx.com 19612592Szelenkov@nginx.com route_match({"destination": ['127.0.0.1:8080', '*:8081', '!*:8080']}) 19622491Szelenkov@nginx.com assert client.get()['status'] == 404, 'dest neg 7' 19632592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 200, 'dest neg 8' 19642491Szelenkov@nginx.com 19652592Szelenkov@nginx.com route_match({"destination": ['!*:8081', '!*:8082', '*:8083']}) 19662491Szelenkov@nginx.com assert client.get()['status'] == 404, 'dest neg 9' 19671391Szelenkov@nginx.com 19682592Szelenkov@nginx.com route_match({"destination": ['*:8081', '!127.0.0.1:8080', '*:8080']}) 19692491Szelenkov@nginx.com assert client.get()['status'] == 404, 'dest neg 10' 19702592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 200, 'dest neg 11' 19711391Szelenkov@nginx.com 19722491Szelenkov@nginx.com assert 'success' in client.conf_delete( 19732491Szelenkov@nginx.com 'routes/0/match/destination/0' 19742491Szelenkov@nginx.com ), 'remove destination rule' 19752491Szelenkov@nginx.com assert client.get()['status'] == 404, 'dest neg 12' 19762592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'dest neg 13' 19771391Szelenkov@nginx.com 19782491Szelenkov@nginx.com assert 'success' in client.conf_delete( 19792491Szelenkov@nginx.com 'routes/0/match/destination/0' 19802491Szelenkov@nginx.com ), 'remove destination rule 2' 19812491Szelenkov@nginx.com assert client.get()['status'] == 200, 'dest neg 14' 19822592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'dest neg 15' 19831391Szelenkov@nginx.com 19842491Szelenkov@nginx.com assert 'success' in client.conf_post( 19852491Szelenkov@nginx.com "\"!127.0.0.1\"", 'routes/0/match/destination' 19862491Szelenkov@nginx.com ), 'add destination rule' 19872491Szelenkov@nginx.com assert client.get()['status'] == 404, 'dest neg 16' 19882592Szelenkov@nginx.com assert client.get(port=8081)['status'] == 404, 'dest neg 17' 19892491Szelenkov@nginx.com 19901391Szelenkov@nginx.com 19912491Szelenkov@nginx.comdef test_routes_match_destination_proxy(): 19922491Szelenkov@nginx.com assert 'success' in client.conf( 19932491Szelenkov@nginx.com { 19942491Szelenkov@nginx.com "listeners": { 19952592Szelenkov@nginx.com "*:8080": {"pass": "routes/first"}, 19962592Szelenkov@nginx.com "*:8081": {"pass": "routes/second"}, 19972491Szelenkov@nginx.com }, 19982491Szelenkov@nginx.com "routes": { 19992592Szelenkov@nginx.com "first": [{"action": {"proxy": "http://127.0.0.1:8081"}}], 20002491Szelenkov@nginx.com "second": [ 20012491Szelenkov@nginx.com { 20022592Szelenkov@nginx.com "match": {"destination": ["127.0.0.1:8081"]}, 20032491Szelenkov@nginx.com "action": {"return": 200}, 20042491Szelenkov@nginx.com } 20052491Szelenkov@nginx.com ], 20062491Szelenkov@nginx.com }, 20072491Szelenkov@nginx.com "applications": {}, 20082491Szelenkov@nginx.com } 20092491Szelenkov@nginx.com ), 'proxy configure' 20101327Saxel.duch@nginx.com 20112491Szelenkov@nginx.com assert client.get()['status'] == 200, 'proxy' 2012