11902Szelenkov@nginx.comimport socket 21902Szelenkov@nginx.com 31596Szelenkov@nginx.comimport pytest 4*2616Szelenkov@nginx.com 52491Szelenkov@nginx.comfrom unit.control import Control 6484Szelenkov@nginx.com 72488Szelenkov@nginx.comprerequisites = {'modules': {'python': 'any'}} 82488Szelenkov@nginx.com 92491Szelenkov@nginx.comclient = Control() 101017Szelenkov@nginx.com 111913Szelenkov@nginx.com 122491Szelenkov@nginx.comdef try_addr(addr): 132491Szelenkov@nginx.com return client.conf( 142491Szelenkov@nginx.com { 152491Szelenkov@nginx.com "listeners": {addr: {"pass": "routes"}}, 162491Szelenkov@nginx.com "routes": [{"action": {"return": 200}}], 172491Szelenkov@nginx.com "applications": {}, 182491Szelenkov@nginx.com } 192491Szelenkov@nginx.com ) 20719Szelenkov@nginx.com 212491Szelenkov@nginx.com 222491Szelenkov@nginx.comdef test_json_empty(): 232491Szelenkov@nginx.com assert 'error' in client.conf(''), 'empty' 242491Szelenkov@nginx.com 252491Szelenkov@nginx.com 262491Szelenkov@nginx.comdef test_json_leading_zero(): 272491Szelenkov@nginx.com assert 'error' in client.conf('00'), 'leading zero' 282491Szelenkov@nginx.com 29484Szelenkov@nginx.com 302491Szelenkov@nginx.comdef test_json_unicode(): 312491Szelenkov@nginx.com assert 'success' in client.conf( 322491Szelenkov@nginx.com """ 332491Szelenkov@nginx.com { 342491Szelenkov@nginx.com "ap\u0070": { 352491Szelenkov@nginx.com "type": "\u0070ython", 362491Szelenkov@nginx.com "processes": { "spare": 0 }, 372491Szelenkov@nginx.com "path": "\u002Fapp", 382491Szelenkov@nginx.com "module": "wsgi" 39495Szelenkov@nginx.com } 402491Szelenkov@nginx.com } 412491Szelenkov@nginx.com """, 422491Szelenkov@nginx.com 'applications', 432491Szelenkov@nginx.com ), 'unicode' 44484Szelenkov@nginx.com 452491Szelenkov@nginx.com assert client.conf_get('applications') == { 462491Szelenkov@nginx.com "app": { 472491Szelenkov@nginx.com "type": "python", 482491Szelenkov@nginx.com "processes": {"spare": 0}, 492491Szelenkov@nginx.com "path": "/app", 502491Szelenkov@nginx.com "module": "wsgi", 512491Szelenkov@nginx.com } 522491Szelenkov@nginx.com }, 'unicode get' 532491Szelenkov@nginx.com 542491Szelenkov@nginx.com 552491Szelenkov@nginx.comdef test_json_unicode_2(): 562491Szelenkov@nginx.com assert 'success' in client.conf( 572491Szelenkov@nginx.com { 582491Szelenkov@nginx.com "приложение": { 591596Szelenkov@nginx.com "type": "python", 601596Szelenkov@nginx.com "processes": {"spare": 0}, 611596Szelenkov@nginx.com "path": "/app", 621596Szelenkov@nginx.com "module": "wsgi", 631596Szelenkov@nginx.com } 642491Szelenkov@nginx.com }, 652491Szelenkov@nginx.com 'applications', 662491Szelenkov@nginx.com ), 'unicode 2' 672491Szelenkov@nginx.com 682491Szelenkov@nginx.com assert 'приложение' in client.conf_get('applications') 692491Szelenkov@nginx.com 702491Szelenkov@nginx.com 712491Szelenkov@nginx.comdef test_json_unicode_number(): 722491Szelenkov@nginx.com assert 'success' in client.conf( 732491Szelenkov@nginx.com """ 742491Szelenkov@nginx.com { 752491Szelenkov@nginx.com "app": { 762491Szelenkov@nginx.com "type": "python", 772491Szelenkov@nginx.com "processes": { "spare": \u0030 }, 782491Szelenkov@nginx.com "path": "/app", 792491Szelenkov@nginx.com "module": "wsgi" 802491Szelenkov@nginx.com } 812491Szelenkov@nginx.com } 822491Szelenkov@nginx.com """, 832491Szelenkov@nginx.com 'applications', 842491Szelenkov@nginx.com ), 'unicode number' 852491Szelenkov@nginx.com 862491Szelenkov@nginx.com 872491Szelenkov@nginx.comdef test_json_utf8_bom(): 882491Szelenkov@nginx.com assert 'success' in client.conf( 892491Szelenkov@nginx.com b"""\xEF\xBB\xBF 902491Szelenkov@nginx.com { 912491Szelenkov@nginx.com "app": { 922491Szelenkov@nginx.com "type": "python", 932491Szelenkov@nginx.com "processes": {"spare": 0}, 942491Szelenkov@nginx.com "path": "/app", 952491Szelenkov@nginx.com "module": "wsgi" 962491Szelenkov@nginx.com } 972491Szelenkov@nginx.com } 982491Szelenkov@nginx.com """, 992491Szelenkov@nginx.com 'applications', 1002491Szelenkov@nginx.com ), 'UTF-8 BOM' 1012491Szelenkov@nginx.com 1022491Szelenkov@nginx.com 1032491Szelenkov@nginx.comdef test_json_comment_single_line(): 1042491Szelenkov@nginx.com assert 'success' in client.conf( 1052491Szelenkov@nginx.com b""" 1062491Szelenkov@nginx.com // this is bridge 1072491Szelenkov@nginx.com { 1082491Szelenkov@nginx.com "//app": { 1092491Szelenkov@nginx.com "type": "python", // end line 1102491Szelenkov@nginx.com "processes": {"spare": 0}, 1112491Szelenkov@nginx.com // inside of block 1122491Szelenkov@nginx.com "path": "/app", 1132491Szelenkov@nginx.com "module": "wsgi" 1142491Szelenkov@nginx.com } 1152491Szelenkov@nginx.com // double // 1162491Szelenkov@nginx.com } 1172491Szelenkov@nginx.com // end of json \xEF\t 1182491Szelenkov@nginx.com """, 1192491Szelenkov@nginx.com 'applications', 1202491Szelenkov@nginx.com ), 'single line comments' 1212491Szelenkov@nginx.com 1222491Szelenkov@nginx.com 1232491Szelenkov@nginx.comdef test_json_comment_multi_line(): 1242491Szelenkov@nginx.com assert 'success' in client.conf( 1252491Szelenkov@nginx.com b""" 1262491Szelenkov@nginx.com /* this is bridge */ 1272491Szelenkov@nginx.com { 1282491Szelenkov@nginx.com "/*app": { 1292491Szelenkov@nginx.com /** 1302491Szelenkov@nginx.com * multiple lines 1312491Szelenkov@nginx.com **/ 1322491Szelenkov@nginx.com "type": "python", 1332491Szelenkov@nginx.com "processes": /* inline */ {"spare": 0}, 1342491Szelenkov@nginx.com "path": "/app", 1352491Szelenkov@nginx.com "module": "wsgi" 1362491Szelenkov@nginx.com /* 1372491Szelenkov@nginx.com // end of block */ 1382491Szelenkov@nginx.com } 1392491Szelenkov@nginx.com /* blah * / blah /* blah */ 1402491Szelenkov@nginx.com } 1412491Szelenkov@nginx.com /* end of json \xEF\t\b */ 1422491Szelenkov@nginx.com """, 1432491Szelenkov@nginx.com 'applications', 1442491Szelenkov@nginx.com ), 'multi line comments' 1452491Szelenkov@nginx.com 1462491Szelenkov@nginx.com 1472491Szelenkov@nginx.comdef test_json_comment_invalid(): 1482491Szelenkov@nginx.com assert 'error' in client.conf(b'/{}', 'applications'), 'slash' 1492491Szelenkov@nginx.com assert 'error' in client.conf(b'//{}', 'applications'), 'comment' 1502491Szelenkov@nginx.com assert 'error' in client.conf(b'{} /', 'applications'), 'slash end' 1512491Szelenkov@nginx.com assert 'error' in client.conf(b'/*{}', 'applications'), 'slash star' 1522491Szelenkov@nginx.com assert 'error' in client.conf(b'{} /*', 'applications'), 'slash star end' 1532491Szelenkov@nginx.com 1542491Szelenkov@nginx.com 1552491Szelenkov@nginx.comdef test_applications_open_brace(): 1562491Szelenkov@nginx.com assert 'error' in client.conf('{', 'applications'), 'open brace' 1572491Szelenkov@nginx.com 1582491Szelenkov@nginx.com 1592491Szelenkov@nginx.comdef test_applications_string(): 1602491Szelenkov@nginx.com assert 'error' in client.conf('"{}"', 'applications'), 'string' 1612491Szelenkov@nginx.com 1622491Szelenkov@nginx.com 1632491Szelenkov@nginx.com@pytest.mark.skip('not yet, unsafe') 1642491Szelenkov@nginx.comdef test_applications_type_only(): 1652491Szelenkov@nginx.com assert 'error' in client.conf( 1662491Szelenkov@nginx.com {"app": {"type": "python"}}, 'applications' 1672491Szelenkov@nginx.com ), 'type only' 1682491Szelenkov@nginx.com 1692491Szelenkov@nginx.com 1702491Szelenkov@nginx.comdef test_applications_miss_quote(): 1712491Szelenkov@nginx.com assert 'error' in client.conf( 1722491Szelenkov@nginx.com """ 1732491Szelenkov@nginx.com { 1742491Szelenkov@nginx.com app": { 1752491Szelenkov@nginx.com "type": "python", 1762491Szelenkov@nginx.com "processes": { "spare": 0 }, 1772491Szelenkov@nginx.com "path": "/app", 1782491Szelenkov@nginx.com "module": "wsgi" 1792491Szelenkov@nginx.com } 1802491Szelenkov@nginx.com } 1812491Szelenkov@nginx.com """, 1822491Szelenkov@nginx.com 'applications', 1832491Szelenkov@nginx.com ), 'miss quote' 1842491Szelenkov@nginx.com 1851596Szelenkov@nginx.com 1862491Szelenkov@nginx.comdef test_applications_miss_colon(): 1872491Szelenkov@nginx.com assert 'error' in client.conf( 1882491Szelenkov@nginx.com """ 1892491Szelenkov@nginx.com { 1902491Szelenkov@nginx.com "app" { 1912491Szelenkov@nginx.com "type": "python", 1922491Szelenkov@nginx.com "processes": { "spare": 0 }, 1932491Szelenkov@nginx.com "path": "/app", 1942491Szelenkov@nginx.com "module": "wsgi" 1952491Szelenkov@nginx.com } 1962491Szelenkov@nginx.com } 1972491Szelenkov@nginx.com """, 1982491Szelenkov@nginx.com 'applications', 1992491Szelenkov@nginx.com ), 'miss colon' 2002491Szelenkov@nginx.com 2012491Szelenkov@nginx.com 2022491Szelenkov@nginx.comdef test_applications_miss_comma(): 2032491Szelenkov@nginx.com assert 'error' in client.conf( 2042491Szelenkov@nginx.com """ 2052491Szelenkov@nginx.com { 2062491Szelenkov@nginx.com "app": { 2072491Szelenkov@nginx.com "type": "python" 2082491Szelenkov@nginx.com "processes": { "spare": 0 }, 2092491Szelenkov@nginx.com "path": "/app", 2102491Szelenkov@nginx.com "module": "wsgi" 2112491Szelenkov@nginx.com } 2122491Szelenkov@nginx.com } 2132491Szelenkov@nginx.com """, 2142491Szelenkov@nginx.com 'applications', 2152491Szelenkov@nginx.com ), 'miss comma' 2162491Szelenkov@nginx.com 2172491Szelenkov@nginx.com 2182491Szelenkov@nginx.comdef test_applications_skip_spaces(): 2192491Szelenkov@nginx.com assert 'success' in client.conf(b'{ \n\r\t}', 'applications'), 'skip spaces' 2202491Szelenkov@nginx.com 2212491Szelenkov@nginx.com 2222491Szelenkov@nginx.comdef test_applications_relative_path(): 2232491Szelenkov@nginx.com assert 'success' in client.conf( 2242491Szelenkov@nginx.com { 2252491Szelenkov@nginx.com "app": { 2262491Szelenkov@nginx.com "type": "python", 2272491Szelenkov@nginx.com "processes": {"spare": 0}, 2282491Szelenkov@nginx.com "path": "../app", 2292491Szelenkov@nginx.com "module": "wsgi", 2302491Szelenkov@nginx.com } 2312491Szelenkov@nginx.com }, 2322491Szelenkov@nginx.com 'applications', 2332491Szelenkov@nginx.com ), 'relative path' 2342491Szelenkov@nginx.com 2352491Szelenkov@nginx.com 2362491Szelenkov@nginx.com@pytest.mark.skip('not yet, unsafe') 2372491Szelenkov@nginx.comdef test_listeners_empty(): 2382592Szelenkov@nginx.com assert 'error' in client.conf({"*:8080": {}}, 'listeners'), 'listener empty' 2392491Szelenkov@nginx.com 2402491Szelenkov@nginx.com 2412491Szelenkov@nginx.comdef test_listeners_no_app(): 2422491Szelenkov@nginx.com assert 'error' in client.conf( 2432592Szelenkov@nginx.com {"*:8080": {"pass": "applications/app"}}, 'listeners' 2442491Szelenkov@nginx.com ), 'listeners no app' 2452491Szelenkov@nginx.com 2462491Szelenkov@nginx.com 2472491Szelenkov@nginx.comdef test_listeners_unix_abstract(system): 2482491Szelenkov@nginx.com if system != 'Linux': 2492491Szelenkov@nginx.com assert 'error' in try_addr("unix:@sock"), 'abstract at' 2502491Szelenkov@nginx.com 2512491Szelenkov@nginx.com pytest.skip('not yet') 2522491Szelenkov@nginx.com 2532491Szelenkov@nginx.com assert 'error' in try_addr("unix:\0soc"), 'abstract \0' 2542491Szelenkov@nginx.com assert 'error' in try_addr("unix:\u0000soc"), 'abstract \0 unicode' 2552491Szelenkov@nginx.com 2562491Szelenkov@nginx.com 2572491Szelenkov@nginx.comdef test_listeners_addr(): 2582592Szelenkov@nginx.com assert 'success' in try_addr("*:8080"), 'wildcard' 2592592Szelenkov@nginx.com assert 'success' in try_addr("127.0.0.1:8081"), 'explicit' 2602592Szelenkov@nginx.com assert 'success' in try_addr("[::1]:8082"), 'explicit ipv6' 2612491Szelenkov@nginx.com 2622491Szelenkov@nginx.com 2632491Szelenkov@nginx.comdef test_listeners_addr_error(): 2642491Szelenkov@nginx.com assert 'error' in try_addr("127.0.0.1"), 'no port' 2652491Szelenkov@nginx.com 2662491Szelenkov@nginx.com 2672491Szelenkov@nginx.comdef test_listeners_addr_error_2(skip_alert): 2682491Szelenkov@nginx.com skip_alert(r'bind.*failed', r'failed to apply new conf') 2692491Szelenkov@nginx.com 2702592Szelenkov@nginx.com assert 'error' in try_addr("[f607:7403:1e4b:6c66:33b2:843f:2517:da27]:8080") 2712491Szelenkov@nginx.com 2722491Szelenkov@nginx.com 2732491Szelenkov@nginx.comdef test_listeners_port_release(): 2742491Szelenkov@nginx.com for _ in range(10): 2752491Szelenkov@nginx.com fail = False 2762491Szelenkov@nginx.com with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: 2772491Szelenkov@nginx.com s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 2782491Szelenkov@nginx.com 2792491Szelenkov@nginx.com client.conf( 2802491Szelenkov@nginx.com { 2812592Szelenkov@nginx.com "listeners": {"127.0.0.1:8080": {"pass": "routes"}}, 2822491Szelenkov@nginx.com "routes": [], 2832491Szelenkov@nginx.com } 2842491Szelenkov@nginx.com ) 2852491Szelenkov@nginx.com 2862491Szelenkov@nginx.com resp = client.conf({"listeners": {}, "applications": {}}) 2872491Szelenkov@nginx.com 2882491Szelenkov@nginx.com try: 2892592Szelenkov@nginx.com s.bind(('127.0.0.1', 8080)) 2902491Szelenkov@nginx.com s.listen() 2912491Szelenkov@nginx.com 2922491Szelenkov@nginx.com except OSError: 2932491Szelenkov@nginx.com fail = True 2942491Szelenkov@nginx.com 2952491Szelenkov@nginx.com if fail: 2962491Szelenkov@nginx.com pytest.fail('cannot bind or listen to the address') 2972491Szelenkov@nginx.com 2982491Szelenkov@nginx.com assert 'success' in resp, 'port release' 2992491Szelenkov@nginx.com 3002491Szelenkov@nginx.com 3012491Szelenkov@nginx.comdef test_json_application_name_large(): 3022491Szelenkov@nginx.com name = "X" * 1024 * 1024 3032491Szelenkov@nginx.com 3042491Szelenkov@nginx.com assert 'success' in client.conf( 3052491Szelenkov@nginx.com { 3062592Szelenkov@nginx.com "listeners": {"*:8080": {"pass": f"applications/{name}"}}, 3072491Szelenkov@nginx.com "applications": { 3082491Szelenkov@nginx.com name: { 3091017Szelenkov@nginx.com "type": "python", 3101017Szelenkov@nginx.com "processes": {"spare": 0}, 3111017Szelenkov@nginx.com "path": "/app", 3121017Szelenkov@nginx.com "module": "wsgi", 3131017Szelenkov@nginx.com } 3141017Szelenkov@nginx.com }, 3152491Szelenkov@nginx.com } 3162491Szelenkov@nginx.com ) 317555Szelenkov@nginx.com 318495Szelenkov@nginx.com 3192491Szelenkov@nginx.com@pytest.mark.skip('not yet') 3202491Szelenkov@nginx.comdef test_json_application_many(): 3212491Szelenkov@nginx.com apps = 999 3221427Szelenkov@nginx.com 3232491Szelenkov@nginx.com conf = { 3242491Szelenkov@nginx.com "applications": { 3252491Szelenkov@nginx.com f"app-{a}": { 3262491Szelenkov@nginx.com "type": "python", 3272491Szelenkov@nginx.com "processes": {"spare": 0}, 3282491Szelenkov@nginx.com "path": "/app", 3292491Szelenkov@nginx.com "module": "wsgi", 3301427Szelenkov@nginx.com } 3312491Szelenkov@nginx.com for a in range(apps) 3322491Szelenkov@nginx.com }, 3332491Szelenkov@nginx.com "listeners": { 3342491Szelenkov@nginx.com f"*:{(7000 + a)}": {"pass": f"applications/app-{a}"} 3352491Szelenkov@nginx.com for a in range(apps) 3362491Szelenkov@nginx.com }, 3372491Szelenkov@nginx.com } 3381427Szelenkov@nginx.com 3392491Szelenkov@nginx.com assert 'success' in client.conf(conf) 340495Szelenkov@nginx.com 341484Szelenkov@nginx.com 3422491Szelenkov@nginx.comdef test_json_application_python_prefix(): 3432491Szelenkov@nginx.com conf = { 3442491Szelenkov@nginx.com "applications": { 3452491Szelenkov@nginx.com "sub-app": { 3462491Szelenkov@nginx.com "type": "python", 3472491Szelenkov@nginx.com "processes": {"spare": 0}, 3482491Szelenkov@nginx.com "path": "/app", 3492491Szelenkov@nginx.com "module": "wsgi", 3502491Szelenkov@nginx.com "prefix": "/app", 351484Szelenkov@nginx.com } 3522491Szelenkov@nginx.com }, 3532592Szelenkov@nginx.com "listeners": {"*:8080": {"pass": "routes"}}, 3542491Szelenkov@nginx.com "routes": [ 355484Szelenkov@nginx.com { 3562491Szelenkov@nginx.com "match": {"uri": "/app/*"}, 3572491Szelenkov@nginx.com "action": {"pass": "applications/sub-app"}, 358484Szelenkov@nginx.com } 3592491Szelenkov@nginx.com ], 3602491Szelenkov@nginx.com } 361484Szelenkov@nginx.com 3622491Szelenkov@nginx.com assert 'success' in client.conf(conf) 363484Szelenkov@nginx.com 3642182Szelenkov@nginx.com 3652491Szelenkov@nginx.comdef test_json_application_prefix_target(): 3662491Szelenkov@nginx.com conf = { 3672491Szelenkov@nginx.com "applications": { 3682491Szelenkov@nginx.com "sub-app": { 3692491Szelenkov@nginx.com "type": "python", 3702491Szelenkov@nginx.com "processes": {"spare": 0}, 3712491Szelenkov@nginx.com "path": "/app", 3722491Szelenkov@nginx.com "targets": { 3732491Szelenkov@nginx.com "foo": {"module": "foo.wsgi", "prefix": "/app"}, 3742491Szelenkov@nginx.com "bar": { 3752491Szelenkov@nginx.com "module": "bar.wsgi", 3762491Szelenkov@nginx.com "callable": "bar", 3772491Szelenkov@nginx.com "prefix": "/api", 3782491Szelenkov@nginx.com }, 3791596Szelenkov@nginx.com }, 3801596Szelenkov@nginx.com } 3812491Szelenkov@nginx.com }, 3822592Szelenkov@nginx.com "listeners": {"*:8080": {"pass": "routes"}}, 3832491Szelenkov@nginx.com "routes": [ 3842491Szelenkov@nginx.com { 3852491Szelenkov@nginx.com "match": {"uri": "/app/*"}, 3862491Szelenkov@nginx.com "action": {"pass": "applications/sub-app/foo"}, 3871017Szelenkov@nginx.com }, 3882491Szelenkov@nginx.com { 3892491Szelenkov@nginx.com "match": {"uri": "/api/*"}, 3902491Szelenkov@nginx.com "action": {"pass": "applications/sub-app/bar"}, 3912273Sjeff.iadarola@gmail.com }, 3922491Szelenkov@nginx.com ], 3932491Szelenkov@nginx.com } 3942273Sjeff.iadarola@gmail.com 3952491Szelenkov@nginx.com assert 'success' in client.conf(conf) 3962491Szelenkov@nginx.com 3972273Sjeff.iadarola@gmail.com 3982491Szelenkov@nginx.comdef test_json_application_invalid_python_prefix(): 3992491Szelenkov@nginx.com conf = { 4002491Szelenkov@nginx.com "applications": { 4012491Szelenkov@nginx.com "sub-app": { 4022491Szelenkov@nginx.com "type": "python", 4032491Szelenkov@nginx.com "processes": {"spare": 0}, 4042491Szelenkov@nginx.com "path": "/app", 4052491Szelenkov@nginx.com "module": "wsgi", 4062491Szelenkov@nginx.com "prefix": "app", 4072491Szelenkov@nginx.com } 4082491Szelenkov@nginx.com }, 4092592Szelenkov@nginx.com "listeners": {"*:8080": {"pass": "applications/sub-app"}}, 4102491Szelenkov@nginx.com } 4112273Sjeff.iadarola@gmail.com 4122491Szelenkov@nginx.com assert 'error' in client.conf(conf) 4132491Szelenkov@nginx.com 4142491Szelenkov@nginx.com 4152491Szelenkov@nginx.comdef test_json_application_empty_python_prefix(): 4162491Szelenkov@nginx.com conf = { 4172491Szelenkov@nginx.com "applications": { 4182491Szelenkov@nginx.com "sub-app": { 4192491Szelenkov@nginx.com "type": "python", 4202491Szelenkov@nginx.com "processes": {"spare": 0}, 4212491Szelenkov@nginx.com "path": "/app", 4222491Szelenkov@nginx.com "module": "wsgi", 4232491Szelenkov@nginx.com "prefix": "", 4242491Szelenkov@nginx.com } 4252491Szelenkov@nginx.com }, 4262592Szelenkov@nginx.com "listeners": {"*:8080": {"pass": "applications/sub-app"}}, 4272491Szelenkov@nginx.com } 4282273Sjeff.iadarola@gmail.com 4292491Szelenkov@nginx.com assert 'error' in client.conf(conf) 4302491Szelenkov@nginx.com 4312273Sjeff.iadarola@gmail.com 4322491Szelenkov@nginx.comdef test_json_application_many2(): 4332491Szelenkov@nginx.com conf = { 4342491Szelenkov@nginx.com "applications": { 4352491Szelenkov@nginx.com f"app-{a}": { 4362491Szelenkov@nginx.com "type": "python", 4372491Szelenkov@nginx.com "processes": {"spare": 0}, 4382491Szelenkov@nginx.com "path": "/app", 4392491Szelenkov@nginx.com "module": "wsgi", 4402491Szelenkov@nginx.com } 4412491Szelenkov@nginx.com # Larger number of applications can cause test fail with default 4422491Szelenkov@nginx.com # open files limit due to the lack of file descriptors. 4432491Szelenkov@nginx.com for a in range(100) 4442491Szelenkov@nginx.com }, 4452592Szelenkov@nginx.com "listeners": {"*:8080": {"pass": "applications/app-1"}}, 4462491Szelenkov@nginx.com } 4472273Sjeff.iadarola@gmail.com 4482491Szelenkov@nginx.com assert 'success' in client.conf(conf) 4492491Szelenkov@nginx.com 4502491Szelenkov@nginx.com 4512491Szelenkov@nginx.comdef test_unprivileged_user_error(require, skip_alert): 4522491Szelenkov@nginx.com require({'privileged_user': False}) 4532491Szelenkov@nginx.com 4542491Szelenkov@nginx.com skip_alert(r'cannot set user "root"', r'failed to apply new conf') 4551006Smax.romanov@nginx.com 4562491Szelenkov@nginx.com assert 'error' in client.conf( 4572491Szelenkov@nginx.com { 4582491Szelenkov@nginx.com "app": { 4592491Szelenkov@nginx.com "type": "external", 4602491Szelenkov@nginx.com "processes": 1, 4612491Szelenkov@nginx.com "executable": "/app", 4622491Szelenkov@nginx.com "user": "root", 4632491Szelenkov@nginx.com } 4642491Szelenkov@nginx.com }, 4652491Szelenkov@nginx.com 'applications', 4662491Szelenkov@nginx.com ), 'setting user' 467