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