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