11019Szelenkov@nginx.comimport re 2675Szelenkov@nginx.comimport unittest 31019Szelenkov@nginx.comfrom unit.applications.lang.php import TestApplicationPHP 4675Szelenkov@nginx.com 51019Szelenkov@nginx.comclass TestPHPApplication(TestApplicationPHP): 61025Szelenkov@nginx.com prerequisites = ['php'] 7675Szelenkov@nginx.com 8982Szelenkov@nginx.com def before_disable_functions(self): 9982Szelenkov@nginx.com body = self.get()['body'] 10982Szelenkov@nginx.com 11982Szelenkov@nginx.com self.assertRegex(body, r'time: \d+', 'disable_functions before time') 12982Szelenkov@nginx.com self.assertRegex(body, r'exec: \/\w+', 'disable_functions before exec') 13865Szelenkov@nginx.com 14675Szelenkov@nginx.com def test_php_application_variables(self): 15675Szelenkov@nginx.com self.load('variables') 16675Szelenkov@nginx.com 17675Szelenkov@nginx.com body = 'Test body string.' 18675Szelenkov@nginx.com 191017Szelenkov@nginx.com resp = self.post( 201017Szelenkov@nginx.com headers={ 211017Szelenkov@nginx.com 'Host': 'localhost', 221017Szelenkov@nginx.com 'Content-Type': 'text/html', 231017Szelenkov@nginx.com 'Custom-Header': 'blah', 241017Szelenkov@nginx.com 'Connection': 'close', 251017Szelenkov@nginx.com }, 261017Szelenkov@nginx.com body=body, 271017Szelenkov@nginx.com ) 28675Szelenkov@nginx.com 29675Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'status') 30675Szelenkov@nginx.com headers = resp['headers'] 31675Szelenkov@nginx.com header_server = headers.pop('Server') 32675Szelenkov@nginx.com self.assertRegex(header_server, r'Unit/[\d\.]+', 'server header') 331017Szelenkov@nginx.com self.assertEqual( 341017Szelenkov@nginx.com headers.pop('Server-Software'), 351017Szelenkov@nginx.com header_server, 361017Szelenkov@nginx.com 'server software header', 371017Szelenkov@nginx.com ) 38675Szelenkov@nginx.com 39675Szelenkov@nginx.com date = headers.pop('Date') 40675Szelenkov@nginx.com self.assertEqual(date[-4:], ' GMT', 'date header timezone') 411017Szelenkov@nginx.com self.assertLess( 421017Szelenkov@nginx.com abs(self.date_to_sec_epoch(date) - self.sec_epoch()), 431017Szelenkov@nginx.com 5, 441017Szelenkov@nginx.com 'date header', 451017Szelenkov@nginx.com ) 46675Szelenkov@nginx.com 47675Szelenkov@nginx.com if 'X-Powered-By' in headers: 48675Szelenkov@nginx.com headers.pop('X-Powered-By') 49675Szelenkov@nginx.com 50675Szelenkov@nginx.com headers.pop('Content-type') 511017Szelenkov@nginx.com self.assertDictEqual( 521017Szelenkov@nginx.com headers, 531017Szelenkov@nginx.com { 541017Szelenkov@nginx.com 'Connection': 'close', 551017Szelenkov@nginx.com 'Content-Length': str(len(body)), 561017Szelenkov@nginx.com 'Request-Method': 'POST', 571017Szelenkov@nginx.com 'Request-Uri': '/', 581017Szelenkov@nginx.com 'Http-Host': 'localhost', 591017Szelenkov@nginx.com 'Server-Protocol': 'HTTP/1.1', 601017Szelenkov@nginx.com 'Custom-Header': 'blah', 611017Szelenkov@nginx.com }, 621017Szelenkov@nginx.com 'headers', 631017Szelenkov@nginx.com ) 64675Szelenkov@nginx.com self.assertEqual(resp['body'], body, 'body') 65675Szelenkov@nginx.com 66894Szelenkov@nginx.com def test_php_application_query_string(self): 67894Szelenkov@nginx.com self.load('query_string') 68894Szelenkov@nginx.com 69894Szelenkov@nginx.com resp = self.get(url='/?var1=val1&var2=val2') 70894Szelenkov@nginx.com 711017Szelenkov@nginx.com self.assertEqual( 721017Szelenkov@nginx.com resp['headers']['Query-String'], 731017Szelenkov@nginx.com 'var1=val1&var2=val2', 741017Szelenkov@nginx.com 'query string', 751017Szelenkov@nginx.com ) 76894Szelenkov@nginx.com 77894Szelenkov@nginx.com def test_php_application_query_string_empty(self): 78894Szelenkov@nginx.com self.load('query_string') 79894Szelenkov@nginx.com 80894Szelenkov@nginx.com resp = self.get(url='/?') 81894Szelenkov@nginx.com 82894Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'query string empty status') 831017Szelenkov@nginx.com self.assertEqual( 841017Szelenkov@nginx.com resp['headers']['Query-String'], '', 'query string empty' 851017Szelenkov@nginx.com ) 86894Szelenkov@nginx.com 87894Szelenkov@nginx.com @unittest.expectedFailure 88894Szelenkov@nginx.com def test_php_application_query_string_absent(self): 89894Szelenkov@nginx.com self.load('query_string') 90894Szelenkov@nginx.com 91894Szelenkov@nginx.com resp = self.get() 92894Szelenkov@nginx.com 93894Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'query string absent status') 941017Szelenkov@nginx.com self.assertEqual( 951017Szelenkov@nginx.com resp['headers']['Query-String'], '', 'query string absent' 961017Szelenkov@nginx.com ) 97894Szelenkov@nginx.com 98675Szelenkov@nginx.com def test_php_application_phpinfo(self): 99675Szelenkov@nginx.com self.load('phpinfo') 100675Szelenkov@nginx.com 101675Szelenkov@nginx.com resp = self.get() 102675Szelenkov@nginx.com 103675Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'status') 104675Szelenkov@nginx.com self.assertNotEqual(resp['body'], '', 'body not empty') 105675Szelenkov@nginx.com 106675Szelenkov@nginx.com def test_php_application_404(self): 107675Szelenkov@nginx.com self.load('404') 108675Szelenkov@nginx.com 109675Szelenkov@nginx.com resp = self.get() 110675Szelenkov@nginx.com 111675Szelenkov@nginx.com self.assertEqual(resp['status'], 404, '404 status') 1121017Szelenkov@nginx.com self.assertRegex( 1131017Szelenkov@nginx.com resp['body'], r'<title>404 Not Found</title>', '404 body' 1141017Szelenkov@nginx.com ) 115675Szelenkov@nginx.com 116675Szelenkov@nginx.com def test_php_application_keepalive_body(self): 117675Szelenkov@nginx.com self.load('mirror') 118675Szelenkov@nginx.com 119*1029Szelenkov@nginx.com self.assertEqual(self.get()['status'], 200, 'init') 120*1029Szelenkov@nginx.com 1211017Szelenkov@nginx.com (resp, sock) = self.post( 1221017Szelenkov@nginx.com headers={ 1231017Szelenkov@nginx.com 'Host': 'localhost', 1241017Szelenkov@nginx.com 'Connection': 'keep-alive', 1251017Szelenkov@nginx.com 'Content-Type': 'text/html', 1261017Szelenkov@nginx.com }, 1271017Szelenkov@nginx.com start=True, 1281017Szelenkov@nginx.com body='0123456789' * 500, 129*1029Szelenkov@nginx.com read_timeout=1, 1301017Szelenkov@nginx.com ) 131675Szelenkov@nginx.com 132675Szelenkov@nginx.com self.assertEqual(resp['body'], '0123456789' * 500, 'keep-alive 1') 133675Szelenkov@nginx.com 1341017Szelenkov@nginx.com resp = self.post( 1351017Szelenkov@nginx.com headers={ 1361017Szelenkov@nginx.com 'Host': 'localhost', 1371017Szelenkov@nginx.com 'Connection': 'close', 1381017Szelenkov@nginx.com 'Content-Type': 'text/html', 1391017Szelenkov@nginx.com }, 1401017Szelenkov@nginx.com sock=sock, 1411017Szelenkov@nginx.com body='0123456789', 1421017Szelenkov@nginx.com ) 143675Szelenkov@nginx.com 144675Szelenkov@nginx.com self.assertEqual(resp['body'], '0123456789', 'keep-alive 2') 145675Szelenkov@nginx.com 146675Szelenkov@nginx.com def test_php_application_conditional(self): 147675Szelenkov@nginx.com self.load('conditional') 148675Szelenkov@nginx.com 149675Szelenkov@nginx.com self.assertRegex(self.get()['body'], r'True', 'conditional true') 150675Szelenkov@nginx.com self.assertRegex(self.post()['body'], r'False', 'conditional false') 151675Szelenkov@nginx.com 152675Szelenkov@nginx.com def test_php_application_get_variables(self): 153675Szelenkov@nginx.com self.load('get_variables') 154675Szelenkov@nginx.com 155675Szelenkov@nginx.com resp = self.get(url='/?var1=val1&var2=&var3') 156675Szelenkov@nginx.com self.assertEqual(resp['headers']['X-Var-1'], 'val1', 'GET variables') 157675Szelenkov@nginx.com self.assertEqual(resp['headers']['X-Var-2'], '1', 'GET variables 2') 158675Szelenkov@nginx.com self.assertEqual(resp['headers']['X-Var-3'], '1', 'GET variables 3') 159675Szelenkov@nginx.com self.assertEqual(resp['headers']['X-Var-4'], '', 'GET variables 4') 160675Szelenkov@nginx.com 161675Szelenkov@nginx.com def test_php_application_post_variables(self): 162675Szelenkov@nginx.com self.load('post_variables') 163675Szelenkov@nginx.com 1641017Szelenkov@nginx.com resp = self.post( 1651017Szelenkov@nginx.com headers={ 1661017Szelenkov@nginx.com 'Content-Type': 'application/x-www-form-urlencoded', 1671017Szelenkov@nginx.com 'Host': 'localhost', 1681017Szelenkov@nginx.com 'Connection': 'close', 1691017Szelenkov@nginx.com }, 1701017Szelenkov@nginx.com body='var1=val1&var2=', 1711017Szelenkov@nginx.com ) 172675Szelenkov@nginx.com self.assertEqual(resp['headers']['X-Var-1'], 'val1', 'POST variables') 173675Szelenkov@nginx.com self.assertEqual(resp['headers']['X-Var-2'], '1', 'POST variables 2') 174675Szelenkov@nginx.com self.assertEqual(resp['headers']['X-Var-3'], '', 'POST variables 3') 175675Szelenkov@nginx.com 176675Szelenkov@nginx.com def test_php_application_cookies(self): 177675Szelenkov@nginx.com self.load('cookies') 178675Szelenkov@nginx.com 1791017Szelenkov@nginx.com resp = self.get( 1801017Szelenkov@nginx.com headers={ 1811017Szelenkov@nginx.com 'Cookie': 'var=val; var2=val2', 1821017Szelenkov@nginx.com 'Host': 'localhost', 1831017Szelenkov@nginx.com 'Connection': 'close', 1841017Szelenkov@nginx.com } 1851017Szelenkov@nginx.com ) 186675Szelenkov@nginx.com 187675Szelenkov@nginx.com self.assertEqual(resp['headers']['X-Cookie-1'], 'val', 'cookie') 188675Szelenkov@nginx.com self.assertEqual(resp['headers']['X-Cookie-2'], 'val2', 'cookie') 189675Szelenkov@nginx.com 190692Szelenkov@nginx.com def test_php_application_ini_precision(self): 191692Szelenkov@nginx.com self.load('ini_precision') 192692Szelenkov@nginx.com 1931017Szelenkov@nginx.com self.assertNotEqual( 1941017Szelenkov@nginx.com self.get()['headers']['X-Precision'], '4', 'ini value default' 1951017Szelenkov@nginx.com ) 1961017Szelenkov@nginx.com 1971017Szelenkov@nginx.com self.conf( 1981017Szelenkov@nginx.com {"file": "ini/php.ini"}, 'applications/ini_precision/options' 1991017Szelenkov@nginx.com ) 200692Szelenkov@nginx.com 2011017Szelenkov@nginx.com self.assertEqual( 2021017Szelenkov@nginx.com self.get()['headers']['X-File'], 2031017Szelenkov@nginx.com self.current_dir + '/php/ini_precision/ini/php.ini', 2041017Szelenkov@nginx.com 'ini file', 2051017Szelenkov@nginx.com ) 2061017Szelenkov@nginx.com self.assertEqual( 2071017Szelenkov@nginx.com self.get()['headers']['X-Precision'], '4', 'ini value' 2081017Szelenkov@nginx.com ) 209692Szelenkov@nginx.com 210721Szelenkov@nginx.com @unittest.expectedFailure 211721Szelenkov@nginx.com def test_php_application_ini_admin_user(self): 212721Szelenkov@nginx.com self.load('ini_precision') 213721Szelenkov@nginx.com 2141017Szelenkov@nginx.com self.assertIn( 2151017Szelenkov@nginx.com 'error', 2161017Szelenkov@nginx.com self.conf( 2171017Szelenkov@nginx.com {"user": {"precision": "4"}, "admin": {"precision": "5"}}, 2181017Szelenkov@nginx.com 'applications/ini_precision/options', 2191017Szelenkov@nginx.com ), 2201017Szelenkov@nginx.com 'ini admin user', 2211017Szelenkov@nginx.com ) 222721Szelenkov@nginx.com 223721Szelenkov@nginx.com def test_php_application_ini_admin(self): 224721Szelenkov@nginx.com self.load('ini_precision') 225721Szelenkov@nginx.com 2261017Szelenkov@nginx.com self.conf( 2271017Szelenkov@nginx.com {"file": "php.ini", "admin": {"precision": "5"}}, 2281017Szelenkov@nginx.com 'applications/ini_precision/options', 2291017Szelenkov@nginx.com ) 230721Szelenkov@nginx.com 2311017Szelenkov@nginx.com self.assertEqual( 2321017Szelenkov@nginx.com self.get()['headers']['X-Precision'], '5', 'ini value admin' 2331017Szelenkov@nginx.com ) 234721Szelenkov@nginx.com 235721Szelenkov@nginx.com def test_php_application_ini_user(self): 236721Szelenkov@nginx.com self.load('ini_precision') 237721Szelenkov@nginx.com 2381017Szelenkov@nginx.com self.conf( 2391017Szelenkov@nginx.com {"file": "php.ini", "user": {"precision": "5"}}, 2401017Szelenkov@nginx.com 'applications/ini_precision/options', 2411017Szelenkov@nginx.com ) 242721Szelenkov@nginx.com 2431017Szelenkov@nginx.com self.assertEqual( 2441017Szelenkov@nginx.com self.get()['headers']['X-Precision'], '5', 'ini value user' 2451017Szelenkov@nginx.com ) 246721Szelenkov@nginx.com 247721Szelenkov@nginx.com def test_php_application_ini_user_2(self): 248721Szelenkov@nginx.com self.load('ini_precision') 249721Szelenkov@nginx.com 2501017Szelenkov@nginx.com self.conf( 2511017Szelenkov@nginx.com {"file": "ini/php.ini"}, 'applications/ini_precision/options' 2521017Szelenkov@nginx.com ) 253721Szelenkov@nginx.com 2541017Szelenkov@nginx.com self.assertEqual( 2551017Szelenkov@nginx.com self.get()['headers']['X-Precision'], '4', 'ini user file' 2561017Szelenkov@nginx.com ) 257721Szelenkov@nginx.com 2581017Szelenkov@nginx.com self.conf( 2591017Szelenkov@nginx.com {"precision": "5"}, 'applications/ini_precision/options/user' 2601017Szelenkov@nginx.com ) 261721Szelenkov@nginx.com 2621017Szelenkov@nginx.com self.assertEqual( 2631017Szelenkov@nginx.com self.get()['headers']['X-Precision'], '5', 'ini value user' 2641017Szelenkov@nginx.com ) 265721Szelenkov@nginx.com 266721Szelenkov@nginx.com def test_php_application_ini_set_admin(self): 267721Szelenkov@nginx.com self.load('ini_precision') 268721Szelenkov@nginx.com 2691017Szelenkov@nginx.com self.conf( 2701017Szelenkov@nginx.com {"admin": {"precision": "5"}}, 'applications/ini_precision/options' 2711017Szelenkov@nginx.com ) 272721Szelenkov@nginx.com 2731017Szelenkov@nginx.com self.assertEqual( 2741017Szelenkov@nginx.com self.get(url='/?precision=6')['headers']['X-Precision'], 2751017Szelenkov@nginx.com '5', 2761017Szelenkov@nginx.com 'ini set admin', 2771017Szelenkov@nginx.com ) 278721Szelenkov@nginx.com 279721Szelenkov@nginx.com def test_php_application_ini_set_user(self): 280721Szelenkov@nginx.com self.load('ini_precision') 281721Szelenkov@nginx.com 2821017Szelenkov@nginx.com self.conf( 2831017Szelenkov@nginx.com {"user": {"precision": "5"}}, 'applications/ini_precision/options' 2841017Szelenkov@nginx.com ) 285721Szelenkov@nginx.com 2861017Szelenkov@nginx.com self.assertEqual( 2871017Szelenkov@nginx.com self.get(url='/?precision=6')['headers']['X-Precision'], 2881017Szelenkov@nginx.com '6', 2891017Szelenkov@nginx.com 'ini set user', 2901017Szelenkov@nginx.com ) 291721Szelenkov@nginx.com 292721Szelenkov@nginx.com def test_php_application_ini_repeat(self): 293721Szelenkov@nginx.com self.load('ini_precision') 294721Szelenkov@nginx.com 2951017Szelenkov@nginx.com self.conf( 2961017Szelenkov@nginx.com {"user": {"precision": "5"}}, 'applications/ini_precision/options' 2971017Szelenkov@nginx.com ) 298721Szelenkov@nginx.com 2991017Szelenkov@nginx.com self.assertEqual( 3001017Szelenkov@nginx.com self.get()['headers']['X-Precision'], '5', 'ini value' 3011017Szelenkov@nginx.com ) 302721Szelenkov@nginx.com 3031017Szelenkov@nginx.com self.assertEqual( 3041017Szelenkov@nginx.com self.get()['headers']['X-Precision'], '5', 'ini value repeat' 3051017Szelenkov@nginx.com ) 306721Szelenkov@nginx.com 307865Szelenkov@nginx.com def test_php_application_disable_functions_exec(self): 308982Szelenkov@nginx.com self.load('time_exec') 309982Szelenkov@nginx.com 310982Szelenkov@nginx.com self.before_disable_functions() 311865Szelenkov@nginx.com 3121017Szelenkov@nginx.com self.conf( 3131017Szelenkov@nginx.com {"admin": {"disable_functions": "exec"}}, 3141017Szelenkov@nginx.com 'applications/time_exec/options', 3151017Szelenkov@nginx.com ) 316865Szelenkov@nginx.com 317982Szelenkov@nginx.com body = self.get()['body'] 318865Szelenkov@nginx.com 319982Szelenkov@nginx.com self.assertRegex(body, r'time: \d+', 'disable_functions time') 320982Szelenkov@nginx.com self.assertNotRegex(body, r'exec: \/\w+', 'disable_functions exec') 321865Szelenkov@nginx.com 322865Szelenkov@nginx.com def test_php_application_disable_functions_comma(self): 323982Szelenkov@nginx.com self.load('time_exec') 324865Szelenkov@nginx.com 325982Szelenkov@nginx.com self.before_disable_functions() 326865Szelenkov@nginx.com 3271017Szelenkov@nginx.com self.conf( 3281017Szelenkov@nginx.com {"admin": {"disable_functions": "exec,time"}}, 3291017Szelenkov@nginx.com 'applications/time_exec/options', 3301017Szelenkov@nginx.com ) 331865Szelenkov@nginx.com 332982Szelenkov@nginx.com body = self.get()['body'] 333982Szelenkov@nginx.com 334982Szelenkov@nginx.com self.assertNotRegex(body, r'time: \d+', 'disable_functions comma time') 3351017Szelenkov@nginx.com self.assertNotRegex( 3361017Szelenkov@nginx.com body, r'exec: \/\w+', 'disable_functions comma exec' 3371017Szelenkov@nginx.com ) 338865Szelenkov@nginx.com 339865Szelenkov@nginx.com def test_php_application_disable_functions_space(self): 340982Szelenkov@nginx.com self.load('time_exec') 341865Szelenkov@nginx.com 342982Szelenkov@nginx.com self.before_disable_functions() 343865Szelenkov@nginx.com 3441017Szelenkov@nginx.com self.conf( 3451017Szelenkov@nginx.com {"admin": {"disable_functions": "exec time"}}, 3461017Szelenkov@nginx.com 'applications/time_exec/options', 3471017Szelenkov@nginx.com ) 348865Szelenkov@nginx.com 349982Szelenkov@nginx.com body = self.get()['body'] 350982Szelenkov@nginx.com 351982Szelenkov@nginx.com self.assertNotRegex(body, r'time: \d+', 'disable_functions space time') 3521017Szelenkov@nginx.com self.assertNotRegex( 3531017Szelenkov@nginx.com body, r'exec: \/\w+', 'disable_functions space exec' 3541017Szelenkov@nginx.com ) 355865Szelenkov@nginx.com 356865Szelenkov@nginx.com def test_php_application_disable_functions_user(self): 357982Szelenkov@nginx.com self.load('time_exec') 358982Szelenkov@nginx.com 359982Szelenkov@nginx.com self.before_disable_functions() 360865Szelenkov@nginx.com 3611017Szelenkov@nginx.com self.conf( 3621017Szelenkov@nginx.com {"user": {"disable_functions": "exec"}}, 3631017Szelenkov@nginx.com 'applications/time_exec/options', 3641017Szelenkov@nginx.com ) 365865Szelenkov@nginx.com 366982Szelenkov@nginx.com body = self.get()['body'] 367982Szelenkov@nginx.com 368982Szelenkov@nginx.com self.assertRegex(body, r'time: \d+', 'disable_functions user time') 3691017Szelenkov@nginx.com self.assertNotRegex( 3701017Szelenkov@nginx.com body, r'exec: \/\w+', 'disable_functions user exec' 3711017Szelenkov@nginx.com ) 372865Szelenkov@nginx.com 373865Szelenkov@nginx.com def test_php_application_disable_functions_nonexistent(self): 374982Szelenkov@nginx.com self.load('time_exec') 375982Szelenkov@nginx.com 376982Szelenkov@nginx.com self.before_disable_functions() 377865Szelenkov@nginx.com 3781017Szelenkov@nginx.com self.conf( 3791017Szelenkov@nginx.com {"admin": {"disable_functions": "blah"}}, 3801017Szelenkov@nginx.com 'applications/time_exec/options', 3811017Szelenkov@nginx.com ) 382865Szelenkov@nginx.com 383982Szelenkov@nginx.com body = self.get()['body'] 384865Szelenkov@nginx.com 3851017Szelenkov@nginx.com self.assertRegex( 3861017Szelenkov@nginx.com body, r'time: \d+', 'disable_functions nonexistent time' 3871017Szelenkov@nginx.com ) 3881017Szelenkov@nginx.com self.assertRegex( 3891017Szelenkov@nginx.com body, r'exec: \/\w+', 'disable_functions nonexistent exec' 3901017Szelenkov@nginx.com ) 391865Szelenkov@nginx.com 392865Szelenkov@nginx.com def test_php_application_disable_classes(self): 393865Szelenkov@nginx.com self.load('date_time') 394865Szelenkov@nginx.com 3951017Szelenkov@nginx.com self.assertRegex( 3961017Szelenkov@nginx.com self.get()['body'], r'012345', 'disable_classes before' 3971017Szelenkov@nginx.com ) 398865Szelenkov@nginx.com 3991017Szelenkov@nginx.com self.conf( 4001017Szelenkov@nginx.com {"admin": {"disable_classes": "DateTime"}}, 4011017Szelenkov@nginx.com 'applications/date_time/options', 4021017Szelenkov@nginx.com ) 403865Szelenkov@nginx.com 4041017Szelenkov@nginx.com self.assertNotRegex( 4051017Szelenkov@nginx.com self.get()['body'], r'012345', 'disable_classes before' 4061017Szelenkov@nginx.com ) 407865Szelenkov@nginx.com 408865Szelenkov@nginx.com def test_php_application_disable_classes_user(self): 409865Szelenkov@nginx.com self.load('date_time') 410865Szelenkov@nginx.com 4111017Szelenkov@nginx.com self.assertRegex( 4121017Szelenkov@nginx.com self.get()['body'], r'012345', 'disable_classes before' 4131017Szelenkov@nginx.com ) 414982Szelenkov@nginx.com 4151017Szelenkov@nginx.com self.conf( 4161017Szelenkov@nginx.com {"user": {"disable_classes": "DateTime"}}, 4171017Szelenkov@nginx.com 'applications/date_time/options', 4181017Szelenkov@nginx.com ) 419865Szelenkov@nginx.com 4201017Szelenkov@nginx.com self.assertNotRegex( 4211017Szelenkov@nginx.com self.get()['body'], r'012345', 'disable_classes before' 4221017Szelenkov@nginx.com ) 4231017Szelenkov@nginx.com 424865Szelenkov@nginx.com 425675Szelenkov@nginx.comif __name__ == '__main__': 4261019Szelenkov@nginx.com TestPHPApplication.main() 427