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