xref: /unit/test/test_configuration.py (revision 1232)
1484Szelenkov@nginx.comimport unittest
21019Szelenkov@nginx.comfrom unit.control import TestControl
3484Szelenkov@nginx.com
41017Szelenkov@nginx.com
51019Szelenkov@nginx.comclass TestConfiguration(TestControl):
61165Szelenkov@nginx.com    prerequisites = {'modules': ['python']}
7484Szelenkov@nginx.com
8719Szelenkov@nginx.com    def test_json_empty(self):
9719Szelenkov@nginx.com        self.assertIn('error', self.conf(''), 'empty')
10719Szelenkov@nginx.com
11495Szelenkov@nginx.com    def test_json_leading_zero(self):
12504Szelenkov@nginx.com        self.assertIn('error', self.conf('00'), 'leading zero')
13484Szelenkov@nginx.com
14495Szelenkov@nginx.com    def test_json_unicode(self):
151017Szelenkov@nginx.com        self.assertIn(
161017Szelenkov@nginx.com            'success',
171017Szelenkov@nginx.com            self.conf(
181017Szelenkov@nginx.com                b"""
19495Szelenkov@nginx.com            {
20495Szelenkov@nginx.com                "ap\u0070": {
21495Szelenkov@nginx.com                    "type": "\u0070ython",
22507Smax.romanov@nginx.com                    "processes": { "spare": 0 },
23495Szelenkov@nginx.com                    "path": "\u002Fapp",
24495Szelenkov@nginx.com                    "module": "wsgi"
25495Szelenkov@nginx.com                }
26495Szelenkov@nginx.com            }
271017Szelenkov@nginx.com            """,
281017Szelenkov@nginx.com                'applications',
291017Szelenkov@nginx.com            ),
301017Szelenkov@nginx.com            'unicode',
311017Szelenkov@nginx.com        )
32484Szelenkov@nginx.com
331017Szelenkov@nginx.com        self.assertDictEqual(
341017Szelenkov@nginx.com            self.conf_get('applications'),
351017Szelenkov@nginx.com            {
361017Szelenkov@nginx.com                "app": {
371017Szelenkov@nginx.com                    "type": "python",
381017Szelenkov@nginx.com                    "processes": {"spare": 0},
391017Szelenkov@nginx.com                    "path": "/app",
401017Szelenkov@nginx.com                    "module": "wsgi",
411017Szelenkov@nginx.com                }
421017Szelenkov@nginx.com            },
431017Szelenkov@nginx.com            'unicode get',
441017Szelenkov@nginx.com        )
45555Szelenkov@nginx.com
46495Szelenkov@nginx.com    def test_json_unicode_2(self):
471017Szelenkov@nginx.com        self.assertIn(
481017Szelenkov@nginx.com            'success',
491017Szelenkov@nginx.com            self.conf(
501017Szelenkov@nginx.com                {
511017Szelenkov@nginx.com                    "приложение": {
521017Szelenkov@nginx.com                        "type": "python",
531017Szelenkov@nginx.com                        "processes": {"spare": 0},
541017Szelenkov@nginx.com                        "path": "/app",
551017Szelenkov@nginx.com                        "module": "wsgi",
561017Szelenkov@nginx.com                    }
571017Szelenkov@nginx.com                },
581017Szelenkov@nginx.com                'applications',
591017Szelenkov@nginx.com            ),
601017Szelenkov@nginx.com            'unicode 2',
611017Szelenkov@nginx.com        )
62495Szelenkov@nginx.com
631017Szelenkov@nginx.com        self.assertIn(
641017Szelenkov@nginx.com            'приложение', self.conf_get('applications'), 'unicode 2 get'
651017Szelenkov@nginx.com        )
66555Szelenkov@nginx.com
67495Szelenkov@nginx.com    def test_json_unicode_number(self):
681017Szelenkov@nginx.com        self.assertIn(
691017Szelenkov@nginx.com            'error',
701017Szelenkov@nginx.com            self.conf(
711017Szelenkov@nginx.com                b"""
72495Szelenkov@nginx.com            {
73495Szelenkov@nginx.com                "app": {
74495Szelenkov@nginx.com                    "type": "python",
75507Smax.romanov@nginx.com                    "processes": { "spare": \u0030 },
76495Szelenkov@nginx.com                    "path": "/app",
77495Szelenkov@nginx.com                    "module": "wsgi"
78495Szelenkov@nginx.com                }
79495Szelenkov@nginx.com            }
801017Szelenkov@nginx.com            """,
811017Szelenkov@nginx.com                'applications',
821017Szelenkov@nginx.com            ),
831017Szelenkov@nginx.com            'unicode number',
841017Szelenkov@nginx.com        )
85495Szelenkov@nginx.com
86495Szelenkov@nginx.com    def test_applications_open_brace(self):
87760Szelenkov@nginx.com        self.assertIn('error', self.conf('{', 'applications'), 'open brace')
88495Szelenkov@nginx.com
89495Szelenkov@nginx.com    def test_applications_string(self):
90760Szelenkov@nginx.com        self.assertIn('error', self.conf('"{}"', 'applications'), 'string')
91495Szelenkov@nginx.com
921064Szelenkov@nginx.com    @unittest.skip('not yet, unsafe')
93495Szelenkov@nginx.com    def test_applications_type_only(self):
941017Szelenkov@nginx.com        self.assertIn(
951017Szelenkov@nginx.com            'error',
961017Szelenkov@nginx.com            self.conf({"app": {"type": "python"}}, 'applications'),
971017Szelenkov@nginx.com            'type only',
981017Szelenkov@nginx.com        )
99484Szelenkov@nginx.com
100495Szelenkov@nginx.com    def test_applications_miss_quote(self):
1011017Szelenkov@nginx.com        self.assertIn(
1021017Szelenkov@nginx.com            'error',
1031017Szelenkov@nginx.com            self.conf(
1041017Szelenkov@nginx.com                """
105484Szelenkov@nginx.com            {
106484Szelenkov@nginx.com                app": {
107484Szelenkov@nginx.com                    "type": "python",
108507Smax.romanov@nginx.com                    "processes": { "spare": 0 },
109484Szelenkov@nginx.com                    "path": "/app",
110484Szelenkov@nginx.com                    "module": "wsgi"
111484Szelenkov@nginx.com                }
112484Szelenkov@nginx.com            }
1131017Szelenkov@nginx.com            """,
1141017Szelenkov@nginx.com                'applications',
1151017Szelenkov@nginx.com            ),
1161017Szelenkov@nginx.com            'miss quote',
1171017Szelenkov@nginx.com        )
118484Szelenkov@nginx.com
119495Szelenkov@nginx.com    def test_applications_miss_colon(self):
1201017Szelenkov@nginx.com        self.assertIn(
1211017Szelenkov@nginx.com            'error',
1221017Szelenkov@nginx.com            self.conf(
1231017Szelenkov@nginx.com                """
124484Szelenkov@nginx.com            {
125484Szelenkov@nginx.com                "app" {
126484Szelenkov@nginx.com                    "type": "python",
127507Smax.romanov@nginx.com                    "processes": { "spare": 0 },
128484Szelenkov@nginx.com                    "path": "/app",
129484Szelenkov@nginx.com                    "module": "wsgi"
130484Szelenkov@nginx.com                }
131484Szelenkov@nginx.com            }
1321017Szelenkov@nginx.com            """,
1331017Szelenkov@nginx.com                'applications',
1341017Szelenkov@nginx.com            ),
1351017Szelenkov@nginx.com            'miss colon',
1361017Szelenkov@nginx.com        )
137484Szelenkov@nginx.com
138495Szelenkov@nginx.com    def test_applications_miss_comma(self):
1391017Szelenkov@nginx.com        self.assertIn(
1401017Szelenkov@nginx.com            'error',
1411017Szelenkov@nginx.com            self.conf(
1421017Szelenkov@nginx.com                """
143484Szelenkov@nginx.com            {
144484Szelenkov@nginx.com                "app": {
145484Szelenkov@nginx.com                    "type": "python"
146507Smax.romanov@nginx.com                    "processes": { "spare": 0 },
147484Szelenkov@nginx.com                    "path": "/app",
148484Szelenkov@nginx.com                    "module": "wsgi"
149484Szelenkov@nginx.com                }
150484Szelenkov@nginx.com            }
1511017Szelenkov@nginx.com            """,
1521017Szelenkov@nginx.com                'applications',
1531017Szelenkov@nginx.com            ),
1541017Szelenkov@nginx.com            'miss comma',
1551017Szelenkov@nginx.com        )
156484Szelenkov@nginx.com
157495Szelenkov@nginx.com    def test_applications_skip_spaces(self):
1581017Szelenkov@nginx.com        self.assertIn(
1591017Szelenkov@nginx.com            'success', self.conf(b'{ \n\r\t}', 'applications'), 'skip spaces'
1601017Szelenkov@nginx.com        )
161484Szelenkov@nginx.com
162495Szelenkov@nginx.com    def test_applications_relative_path(self):
1631017Szelenkov@nginx.com        self.assertIn(
1641017Szelenkov@nginx.com            'success',
1651017Szelenkov@nginx.com            self.conf(
1661017Szelenkov@nginx.com                {
1671017Szelenkov@nginx.com                    "app": {
1681017Szelenkov@nginx.com                        "type": "python",
1691017Szelenkov@nginx.com                        "processes": {"spare": 0},
1701017Szelenkov@nginx.com                        "path": "../app",
1711017Szelenkov@nginx.com                        "module": "wsgi",
1721017Szelenkov@nginx.com                    }
1731017Szelenkov@nginx.com                },
1741017Szelenkov@nginx.com                'applications',
1751017Szelenkov@nginx.com            ),
1761017Szelenkov@nginx.com            'relative path',
1771017Szelenkov@nginx.com        )
178484Szelenkov@nginx.com
1791064Szelenkov@nginx.com    @unittest.skip('not yet, unsafe')
180495Szelenkov@nginx.com    def test_listeners_empty(self):
1811017Szelenkov@nginx.com        self.assertIn(
1821017Szelenkov@nginx.com            'error', self.conf({"*:7080": {}}, 'listeners'), 'listener empty'
1831017Szelenkov@nginx.com        )
184484Szelenkov@nginx.com
185495Szelenkov@nginx.com    def test_listeners_no_app(self):
1861017Szelenkov@nginx.com        self.assertIn(
1871017Szelenkov@nginx.com            'error',
1881041Svbart@nginx.com            self.conf({"*:7080": {"pass": "applications/app"}}, 'listeners'),
1891017Szelenkov@nginx.com            'listeners no app',
1901017Szelenkov@nginx.com        )
191484Szelenkov@nginx.com
192495Szelenkov@nginx.com    def test_listeners_wildcard(self):
1931017Szelenkov@nginx.com        self.assertIn(
1941017Szelenkov@nginx.com            'success',
1951017Szelenkov@nginx.com            self.conf(
1961017Szelenkov@nginx.com                {
1971041Svbart@nginx.com                    "listeners": {"*:7080": {"pass": "applications/app"}},
1981017Szelenkov@nginx.com                    "applications": {
1991017Szelenkov@nginx.com                        "app": {
2001017Szelenkov@nginx.com                            "type": "python",
2011017Szelenkov@nginx.com                            "processes": {"spare": 0},
2021017Szelenkov@nginx.com                            "path": "/app",
2031017Szelenkov@nginx.com                            "module": "wsgi",
2041017Szelenkov@nginx.com                        }
2051017Szelenkov@nginx.com                    },
206504Szelenkov@nginx.com                }
2071017Szelenkov@nginx.com            ),
2081017Szelenkov@nginx.com            'listeners wildcard',
2091017Szelenkov@nginx.com        )
210495Szelenkov@nginx.com
211495Szelenkov@nginx.com    def test_listeners_explicit(self):
2121017Szelenkov@nginx.com        self.assertIn(
2131017Szelenkov@nginx.com            'success',
2141017Szelenkov@nginx.com            self.conf(
2151017Szelenkov@nginx.com                {
2161041Svbart@nginx.com                    "listeners": {"127.0.0.1:7080": {"pass": "applications/app"}},
2171017Szelenkov@nginx.com                    "applications": {
2181017Szelenkov@nginx.com                        "app": {
2191017Szelenkov@nginx.com                            "type": "python",
2201017Szelenkov@nginx.com                            "processes": {"spare": 0},
2211017Szelenkov@nginx.com                            "path": "/app",
2221017Szelenkov@nginx.com                            "module": "wsgi",
2231017Szelenkov@nginx.com                        }
2241017Szelenkov@nginx.com                    },
225504Szelenkov@nginx.com                }
2261017Szelenkov@nginx.com            ),
2271017Szelenkov@nginx.com            'explicit',
2281017Szelenkov@nginx.com        )
229484Szelenkov@nginx.com
230495Szelenkov@nginx.com    def test_listeners_explicit_ipv6(self):
2311017Szelenkov@nginx.com        self.assertIn(
2321017Szelenkov@nginx.com            'success',
2331017Szelenkov@nginx.com            self.conf(
2341017Szelenkov@nginx.com                {
2351041Svbart@nginx.com                    "listeners": {"[::1]:7080": {"pass": "applications/app"}},
2361017Szelenkov@nginx.com                    "applications": {
2371017Szelenkov@nginx.com                        "app": {
2381017Szelenkov@nginx.com                            "type": "python",
2391017Szelenkov@nginx.com                            "processes": {"spare": 0},
2401017Szelenkov@nginx.com                            "path": "/app",
2411017Szelenkov@nginx.com                            "module": "wsgi",
2421017Szelenkov@nginx.com                        }
2431017Szelenkov@nginx.com                    },
244504Szelenkov@nginx.com                }
2451017Szelenkov@nginx.com            ),
2461017Szelenkov@nginx.com            'explicit ipv6',
2471017Szelenkov@nginx.com        )
248495Szelenkov@nginx.com
2491064Szelenkov@nginx.com    @unittest.skip('not yet, unsafe')
250495Szelenkov@nginx.com    def test_listeners_no_port(self):
2511017Szelenkov@nginx.com        self.assertIn(
2521017Szelenkov@nginx.com            'error',
2531017Szelenkov@nginx.com            self.conf(
2541017Szelenkov@nginx.com                {
2551041Svbart@nginx.com                    "listeners": {"127.0.0.1": {"pass": "applications/app"}},
2561017Szelenkov@nginx.com                    "applications": {
2571017Szelenkov@nginx.com                        "app": {
2581017Szelenkov@nginx.com                            "type": "python",
2591017Szelenkov@nginx.com                            "processes": {"spare": 0},
2601017Szelenkov@nginx.com                            "path": "/app",
2611017Szelenkov@nginx.com                            "module": "wsgi",
2621017Szelenkov@nginx.com                        }
2631017Szelenkov@nginx.com                    },
264504Szelenkov@nginx.com                }
2651017Szelenkov@nginx.com            ),
2661017Szelenkov@nginx.com            'no port',
2671017Szelenkov@nginx.com        )
268484Szelenkov@nginx.com
269917Szelenkov@nginx.com    def test_json_application_name_large(self):
270917Szelenkov@nginx.com        name = "X" * 1024 * 1024
271917Szelenkov@nginx.com
2721017Szelenkov@nginx.com        self.assertIn(
2731017Szelenkov@nginx.com            'success',
2741017Szelenkov@nginx.com            self.conf(
2751017Szelenkov@nginx.com                {
2761041Svbart@nginx.com                    "listeners": {"*:7080": {"pass": "applications/" + name}},
2771017Szelenkov@nginx.com                    "applications": {
2781017Szelenkov@nginx.com                        name: {
2791017Szelenkov@nginx.com                            "type": "python",
2801017Szelenkov@nginx.com                            "processes": {"spare": 0},
2811017Szelenkov@nginx.com                            "path": "/app",
2821017Szelenkov@nginx.com                            "module": "wsgi",
2831017Szelenkov@nginx.com                        }
2841017Szelenkov@nginx.com                    },
285917Szelenkov@nginx.com                }
2861017Szelenkov@nginx.com            ),
2871017Szelenkov@nginx.com        )
288917Szelenkov@nginx.com
2891064Szelenkov@nginx.com    @unittest.skip('not yet')
290917Szelenkov@nginx.com    def test_json_application_many(self):
291946Szelenkov@nginx.com        apps = 999
292917Szelenkov@nginx.com
293917Szelenkov@nginx.com        conf = {
2941017Szelenkov@nginx.com            "applications": {
2951017Szelenkov@nginx.com                "app-"
2961017Szelenkov@nginx.com                + str(a): {
297917Szelenkov@nginx.com                    "type": "python",
2981017Szelenkov@nginx.com                    "processes": {"spare": 0},
299917Szelenkov@nginx.com                    "path": "/app",
3001017Szelenkov@nginx.com                    "module": "wsgi",
3011017Szelenkov@nginx.com                }
3021017Szelenkov@nginx.com                for a in range(apps)
303917Szelenkov@nginx.com            },
304917Szelenkov@nginx.com            "listeners": {
3051041Svbart@nginx.com                "*:" + str(7000 + a): {"pass": "applications/app-" + str(a)}
3061017Szelenkov@nginx.com                for a in range(apps)
3071017Szelenkov@nginx.com            },
308917Szelenkov@nginx.com        }
309917Szelenkov@nginx.com
310917Szelenkov@nginx.com        self.assertIn('success', self.conf(conf))
311917Szelenkov@nginx.com
3121006Smax.romanov@nginx.com    def test_json_application_many2(self):
3131006Smax.romanov@nginx.com        conf = {
3141017Szelenkov@nginx.com            "applications": {
3151017Szelenkov@nginx.com                "app-"
3161017Szelenkov@nginx.com                + str(a): {
3171006Smax.romanov@nginx.com                    "type": "python",
3181017Szelenkov@nginx.com                    "processes": {"spare": 0},
3191006Smax.romanov@nginx.com                    "path": "/app",
3201017Szelenkov@nginx.com                    "module": "wsgi",
3211017Szelenkov@nginx.com                }
3221017Szelenkov@nginx.com                for a in range(999)
3231006Smax.romanov@nginx.com            },
324*1232Szelenkov@nginx.com            "listeners": {"*:7080": {"pass": "applications/app-1"}},
3251006Smax.romanov@nginx.com        }
3261006Smax.romanov@nginx.com
3271006Smax.romanov@nginx.com        self.assertIn('success', self.conf(conf))
3281006Smax.romanov@nginx.com
3291017Szelenkov@nginx.com
330484Szelenkov@nginx.comif __name__ == '__main__':
3311019Szelenkov@nginx.com    TestConfiguration.main()
332