11355St.nateldemoura@f5.comimport io
21293St.nateldemoura@f5.comimport os
3977Smax.romanov@gmail.comimport time
4*1477Szelenkov@nginx.com
51019Szelenkov@nginx.comfrom unit.applications.lang.java import TestApplicationJava
6977Smax.romanov@gmail.com
71017Szelenkov@nginx.com
81019Szelenkov@nginx.comclass TestJavaApplication(TestApplicationJava):
91467Szelenkov@nginx.com    prerequisites = {'modules': {'java': 'all'}}
10977Smax.romanov@gmail.com
111106Szelenkov@nginx.com    def test_java_conf_error(self):
121106Szelenkov@nginx.com        self.skip_alerts.extend(
131106Szelenkov@nginx.com            [
141106Szelenkov@nginx.com                r'realpath.*failed',
151106Szelenkov@nginx.com                r'failed to apply new conf',
161106Szelenkov@nginx.com            ]
171106Szelenkov@nginx.com        )
181106Szelenkov@nginx.com        self.assertIn(
191106Szelenkov@nginx.com            'error',
201106Szelenkov@nginx.com            self.conf(
211106Szelenkov@nginx.com                {
221106Szelenkov@nginx.com                    "listeners": {"*:7080": {"pass": "applications/app"}},
231106Szelenkov@nginx.com                    "applications": {
241106Szelenkov@nginx.com                        "app": {
251106Szelenkov@nginx.com                            "type": "java",
261106Szelenkov@nginx.com                            "processes": 1,
271106Szelenkov@nginx.com                            "working_directory": self.current_dir
281106Szelenkov@nginx.com                            + "/java/empty",
291106Szelenkov@nginx.com                            "webapp": self.testdir + "/java",
301109Szelenkov@nginx.com                            "unit_jars": self.testdir + "/no_such_dir",
311106Szelenkov@nginx.com                        }
321106Szelenkov@nginx.com                    },
331106Szelenkov@nginx.com                }
341106Szelenkov@nginx.com            ),
351106Szelenkov@nginx.com            'conf error',
361106Szelenkov@nginx.com        )
371106Szelenkov@nginx.com
381106Szelenkov@nginx.com    def test_java_war(self):
391106Szelenkov@nginx.com        self.load('empty_war')
401106Szelenkov@nginx.com
411106Szelenkov@nginx.com        self.assertIn(
421106Szelenkov@nginx.com            'success',
431106Szelenkov@nginx.com            self.conf(
441106Szelenkov@nginx.com                '"' + self.testdir + '/java/empty.war"',
451106Szelenkov@nginx.com                '/config/applications/empty_war/webapp',
461106Szelenkov@nginx.com            ),
471106Szelenkov@nginx.com            'configure war',
481106Szelenkov@nginx.com        )
491106Szelenkov@nginx.com
501106Szelenkov@nginx.com        self.assertEqual(self.get()['status'], 200, 'war')
511106Szelenkov@nginx.com
52977Smax.romanov@gmail.com    def test_java_application_cookies(self):
53977Smax.romanov@gmail.com        self.load('cookies')
54977Smax.romanov@gmail.com
551017Szelenkov@nginx.com        headers = self.get(
561017Szelenkov@nginx.com            headers={
571017Szelenkov@nginx.com                'Cookie': 'var1=val1; var2=val2',
581017Szelenkov@nginx.com                'Host': 'localhost',
591017Szelenkov@nginx.com                'Connection': 'close',
601017Szelenkov@nginx.com            }
611017Szelenkov@nginx.com        )['headers']
62977Smax.romanov@gmail.com
63977Smax.romanov@gmail.com        self.assertEqual(headers['X-Cookie-1'], 'val1', 'cookie 1')
64977Smax.romanov@gmail.com        self.assertEqual(headers['X-Cookie-2'], 'val2', 'cookie 2')
65977Smax.romanov@gmail.com
66977Smax.romanov@gmail.com    def test_java_application_filter(self):
67977Smax.romanov@gmail.com        self.load('filter')
68977Smax.romanov@gmail.com
69977Smax.romanov@gmail.com        headers = self.get()['headers']
70977Smax.romanov@gmail.com
71977Smax.romanov@gmail.com        self.assertEqual(headers['X-Filter-Before'], '1', 'filter before')
72977Smax.romanov@gmail.com        self.assertEqual(headers['X-Filter-After'], '1', 'filter after')
73977Smax.romanov@gmail.com
741017Szelenkov@nginx.com        self.assertEqual(
751017Szelenkov@nginx.com            self.get(url='/test')['headers']['X-Filter-After'],
761017Szelenkov@nginx.com            '0',
771017Szelenkov@nginx.com            'filter after 2',
781017Szelenkov@nginx.com        )
79977Smax.romanov@gmail.com
80977Smax.romanov@gmail.com    def test_java_application_get_variables(self):
81977Smax.romanov@gmail.com        self.load('get_params')
82977Smax.romanov@gmail.com
831017Szelenkov@nginx.com        headers = self.get(url='/?var1=val1&var2=&var4=val4&var4=foo')[
841017Szelenkov@nginx.com            'headers'
851017Szelenkov@nginx.com        ]
86977Smax.romanov@gmail.com
87977Smax.romanov@gmail.com        self.assertEqual(headers['X-Var-1'], 'val1', 'GET variables')
88977Smax.romanov@gmail.com        self.assertEqual(headers['X-Var-2'], 'true', 'GET variables 2')
89977Smax.romanov@gmail.com        self.assertEqual(headers['X-Var-3'], 'false', 'GET variables 3')
90977Smax.romanov@gmail.com
911017Szelenkov@nginx.com        self.assertEqual(
921017Szelenkov@nginx.com            headers['X-Param-Names'], 'var4 var2 var1 ', 'getParameterNames'
931017Szelenkov@nginx.com        )
941017Szelenkov@nginx.com        self.assertEqual(
951017Szelenkov@nginx.com            headers['X-Param-Values'], 'val4 foo ', 'getParameterValues'
961017Szelenkov@nginx.com        )
971017Szelenkov@nginx.com        self.assertEqual(
981017Szelenkov@nginx.com            headers['X-Param-Map'],
991017Szelenkov@nginx.com            'var2= var1=val1 var4=val4,foo ',
1001017Szelenkov@nginx.com            'getParameterMap',
1011017Szelenkov@nginx.com        )
102977Smax.romanov@gmail.com
103977Smax.romanov@gmail.com    def test_java_application_post_variables(self):
104977Smax.romanov@gmail.com        self.load('post_params')
105977Smax.romanov@gmail.com
1061017Szelenkov@nginx.com        headers = self.post(
1071017Szelenkov@nginx.com            headers={
1081017Szelenkov@nginx.com                'Content-Type': 'application/x-www-form-urlencoded',
1091017Szelenkov@nginx.com                'Host': 'localhost',
1101017Szelenkov@nginx.com                'Connection': 'close',
1111017Szelenkov@nginx.com            },
1121017Szelenkov@nginx.com            body='var1=val1&var2=',
1131017Szelenkov@nginx.com        )['headers']
114977Smax.romanov@gmail.com
115977Smax.romanov@gmail.com        self.assertEqual(headers['X-Var-1'], 'val1', 'POST variables')
116977Smax.romanov@gmail.com        self.assertEqual(headers['X-Var-2'], 'true', 'POST variables 2')
117977Smax.romanov@gmail.com        self.assertEqual(headers['X-Var-3'], 'false', 'POST variables 3')
118977Smax.romanov@gmail.com
119977Smax.romanov@gmail.com    def test_java_application_session(self):
120977Smax.romanov@gmail.com        self.load('session')
121977Smax.romanov@gmail.com
122977Smax.romanov@gmail.com        headers = self.get(url='/?var1=val1')['headers']
123977Smax.romanov@gmail.com        session_id = headers['X-Session-Id']
124977Smax.romanov@gmail.com
125977Smax.romanov@gmail.com        self.assertEqual(headers['X-Var-1'], 'null', 'variable empty')
126977Smax.romanov@gmail.com        self.assertEqual(headers['X-Session-New'], 'true', 'session create')
127977Smax.romanov@gmail.com
1281017Szelenkov@nginx.com        headers = self.get(
1291017Szelenkov@nginx.com            headers={
1301017Szelenkov@nginx.com                'Host': 'localhost',
1311017Szelenkov@nginx.com                'Cookie': 'JSESSIONID=' + session_id,
1321017Szelenkov@nginx.com                'Connection': 'close',
1331017Szelenkov@nginx.com            },
1341017Szelenkov@nginx.com            url='/?var1=val2',
1351017Szelenkov@nginx.com        )['headers']
136977Smax.romanov@gmail.com
137977Smax.romanov@gmail.com        self.assertEqual(headers['X-Var-1'], 'val1', 'variable')
138977Smax.romanov@gmail.com        self.assertEqual(headers['X-Session-New'], 'false', 'session resume')
1391017Szelenkov@nginx.com        self.assertEqual(
1401017Szelenkov@nginx.com            session_id, headers['X-Session-Id'], 'session same id'
1411017Szelenkov@nginx.com        )
142977Smax.romanov@gmail.com
143977Smax.romanov@gmail.com    def test_java_application_session_active(self):
144977Smax.romanov@gmail.com        self.load('session_inactive')
145977Smax.romanov@gmail.com
1461088Szelenkov@nginx.com        resp = self.get(headers={
1471088Szelenkov@nginx.com            'X-Interval': '4',
1481088Szelenkov@nginx.com            'Host': 'localhost',
1491088Szelenkov@nginx.com            'Connection': 'close',
1501088Szelenkov@nginx.com        })
151977Smax.romanov@gmail.com        session_id = resp['headers']['X-Session-Id']
152977Smax.romanov@gmail.com
153977Smax.romanov@gmail.com        self.assertEqual(resp['status'], 200, 'session init')
1541017Szelenkov@nginx.com        self.assertEqual(
1551088Szelenkov@nginx.com            resp['headers']['X-Session-Interval'], '4', 'session interval'
1561017Szelenkov@nginx.com        )
1571017Szelenkov@nginx.com        self.assertLess(
1581017Szelenkov@nginx.com            abs(
1591017Szelenkov@nginx.com                self.date_to_sec_epoch(
1601017Szelenkov@nginx.com                    resp['headers']['X-Session-Last-Access-Time']
1611017Szelenkov@nginx.com                )
1621017Szelenkov@nginx.com                - self.sec_epoch()
1631017Szelenkov@nginx.com            ),
1641017Szelenkov@nginx.com            5,
1651017Szelenkov@nginx.com            'session last access time',
1661017Szelenkov@nginx.com        )
167977Smax.romanov@gmail.com
168977Smax.romanov@gmail.com        time.sleep(1)
169977Smax.romanov@gmail.com
1701017Szelenkov@nginx.com        resp = self.get(
1711017Szelenkov@nginx.com            headers={
1721017Szelenkov@nginx.com                'Host': 'localhost',
1731017Szelenkov@nginx.com                'Cookie': 'JSESSIONID=' + session_id,
1741017Szelenkov@nginx.com                'Connection': 'close',
1751017Szelenkov@nginx.com            }
1761017Szelenkov@nginx.com        )
177977Smax.romanov@gmail.com
1781017Szelenkov@nginx.com        self.assertEqual(
1791017Szelenkov@nginx.com            resp['headers']['X-Session-Id'], session_id, 'session active'
1801017Szelenkov@nginx.com        )
181977Smax.romanov@gmail.com
182977Smax.romanov@gmail.com        session_id = resp['headers']['X-Session-Id']
183977Smax.romanov@gmail.com
184977Smax.romanov@gmail.com        time.sleep(1)
185977Smax.romanov@gmail.com
1861017Szelenkov@nginx.com        resp = self.get(
1871017Szelenkov@nginx.com            headers={
1881017Szelenkov@nginx.com                'Host': 'localhost',
1891017Szelenkov@nginx.com                'Cookie': 'JSESSIONID=' + session_id,
1901017Szelenkov@nginx.com                'Connection': 'close',
1911017Szelenkov@nginx.com            }
1921017Szelenkov@nginx.com        )
193977Smax.romanov@gmail.com
1941017Szelenkov@nginx.com        self.assertEqual(
1951017Szelenkov@nginx.com            resp['headers']['X-Session-Id'], session_id, 'session active 2'
1961017Szelenkov@nginx.com        )
197977Smax.romanov@gmail.com
1981088Szelenkov@nginx.com        time.sleep(2)
199977Smax.romanov@gmail.com
2001017Szelenkov@nginx.com        resp = self.get(
2011017Szelenkov@nginx.com            headers={
2021017Szelenkov@nginx.com                'Host': 'localhost',
2031017Szelenkov@nginx.com                'Cookie': 'JSESSIONID=' + session_id,
2041017Szelenkov@nginx.com                'Connection': 'close',
2051017Szelenkov@nginx.com            }
2061017Szelenkov@nginx.com        )
207977Smax.romanov@gmail.com
2081017Szelenkov@nginx.com        self.assertEqual(
2091017Szelenkov@nginx.com            resp['headers']['X-Session-Id'], session_id, 'session active 3'
2101017Szelenkov@nginx.com        )
211977Smax.romanov@gmail.com
212977Smax.romanov@gmail.com    def test_java_application_session_inactive(self):
213977Smax.romanov@gmail.com        self.load('session_inactive')
214977Smax.romanov@gmail.com
2151088Szelenkov@nginx.com        resp = self.get(headers={
2161088Szelenkov@nginx.com            'X-Interval': '1',
2171088Szelenkov@nginx.com            'Host': 'localhost',
2181088Szelenkov@nginx.com            'Connection': 'close',
2191088Szelenkov@nginx.com        })
220977Smax.romanov@gmail.com        session_id = resp['headers']['X-Session-Id']
221977Smax.romanov@gmail.com
222977Smax.romanov@gmail.com        time.sleep(3)
223977Smax.romanov@gmail.com
2241017Szelenkov@nginx.com        resp = self.get(
2251017Szelenkov@nginx.com            headers={
2261017Szelenkov@nginx.com                'Host': 'localhost',
2271017Szelenkov@nginx.com                'Cookie': 'JSESSIONID=' + session_id,
2281017Szelenkov@nginx.com                'Connection': 'close',
2291017Szelenkov@nginx.com            }
2301017Szelenkov@nginx.com        )
231977Smax.romanov@gmail.com
2321017Szelenkov@nginx.com        self.assertNotEqual(
2331017Szelenkov@nginx.com            resp['headers']['X-Session-Id'], session_id, 'session inactive'
2341017Szelenkov@nginx.com        )
235977Smax.romanov@gmail.com
236977Smax.romanov@gmail.com    def test_java_application_session_invalidate(self):
237977Smax.romanov@gmail.com        self.load('session_invalidate')
238977Smax.romanov@gmail.com
239977Smax.romanov@gmail.com        resp = self.get()
240977Smax.romanov@gmail.com        session_id = resp['headers']['X-Session-Id']
241977Smax.romanov@gmail.com
2421017Szelenkov@nginx.com        resp = self.get(
2431017Szelenkov@nginx.com            headers={
2441017Szelenkov@nginx.com                'Host': 'localhost',
2451017Szelenkov@nginx.com                'Cookie': 'JSESSIONID=' + session_id,
2461017Szelenkov@nginx.com                'Connection': 'close',
2471017Szelenkov@nginx.com            }
2481017Szelenkov@nginx.com        )
249977Smax.romanov@gmail.com
2501017Szelenkov@nginx.com        self.assertNotEqual(
2511017Szelenkov@nginx.com            resp['headers']['X-Session-Id'], session_id, 'session invalidate'
2521017Szelenkov@nginx.com        )
253977Smax.romanov@gmail.com
254977Smax.romanov@gmail.com    def test_java_application_session_listeners(self):
255977Smax.romanov@gmail.com        self.load('session_listeners')
256977Smax.romanov@gmail.com
257977Smax.romanov@gmail.com        headers = self.get(url='/test?var1=val1')['headers']
258977Smax.romanov@gmail.com        session_id = headers['X-Session-Id']
259977Smax.romanov@gmail.com
2601017Szelenkov@nginx.com        self.assertEqual(
2611017Szelenkov@nginx.com            headers['X-Session-Created'], session_id, 'session create'
2621017Szelenkov@nginx.com        )
2631017Szelenkov@nginx.com        self.assertEqual(headers['X-Attr-Added'], 'var1=val1', 'attribute add')
264977Smax.romanov@gmail.com
2651017Szelenkov@nginx.com        headers = self.get(
2661017Szelenkov@nginx.com            headers={
2671017Szelenkov@nginx.com                'Host': 'localhost',
2681017Szelenkov@nginx.com                'Cookie': 'JSESSIONID=' + session_id,
2691017Szelenkov@nginx.com                'Connection': 'close',
2701017Szelenkov@nginx.com            },
2711017Szelenkov@nginx.com            url='/?var1=val2',
2721017Szelenkov@nginx.com        )['headers']
273977Smax.romanov@gmail.com
2741017Szelenkov@nginx.com        self.assertEqual(
2751017Szelenkov@nginx.com            session_id, headers['X-Session-Id'], 'session same id'
2761017Szelenkov@nginx.com        )
2771017Szelenkov@nginx.com        self.assertEqual(
2781017Szelenkov@nginx.com            headers['X-Attr-Replaced'], 'var1=val1', 'attribute replace'
2791017Szelenkov@nginx.com        )
280977Smax.romanov@gmail.com
2811017Szelenkov@nginx.com        headers = self.get(
2821017Szelenkov@nginx.com            headers={
2831017Szelenkov@nginx.com                'Host': 'localhost',
2841017Szelenkov@nginx.com                'Cookie': 'JSESSIONID=' + session_id,
2851017Szelenkov@nginx.com                'Connection': 'close',
2861017Szelenkov@nginx.com            },
2871017Szelenkov@nginx.com            url='/',
2881017Szelenkov@nginx.com        )['headers']
289977Smax.romanov@gmail.com
2901017Szelenkov@nginx.com        self.assertEqual(
2911017Szelenkov@nginx.com            session_id, headers['X-Session-Id'], 'session same id'
2921017Szelenkov@nginx.com        )
2931017Szelenkov@nginx.com        self.assertEqual(
2941017Szelenkov@nginx.com            headers['X-Attr-Removed'], 'var1=val2', 'attribute remove'
2951017Szelenkov@nginx.com        )
296977Smax.romanov@gmail.com
297977Smax.romanov@gmail.com    def test_java_application_jsp(self):
298977Smax.romanov@gmail.com        self.load('jsp')
299977Smax.romanov@gmail.com
300977Smax.romanov@gmail.com        headers = self.get(url='/index.jsp')['headers']
301977Smax.romanov@gmail.com
302977Smax.romanov@gmail.com        self.assertEqual(headers['X-Unit-JSP'], 'ok', 'JSP Ok header')
303977Smax.romanov@gmail.com
304977Smax.romanov@gmail.com    def test_java_application_url_pattern(self):
305977Smax.romanov@gmail.com        self.load('url_pattern')
306977Smax.romanov@gmail.com
307977Smax.romanov@gmail.com        headers = self.get(url='/foo/bar/index.html')['headers']
308977Smax.romanov@gmail.com
309977Smax.romanov@gmail.com        self.assertEqual(headers['X-Id'], 'servlet1', '#1 Servlet1 request')
3101017Szelenkov@nginx.com        self.assertEqual(
3111017Szelenkov@nginx.com            headers['X-Request-URI'], '/foo/bar/index.html', '#1 request URI'
3121017Szelenkov@nginx.com        )
3131017Szelenkov@nginx.com        self.assertEqual(
3141017Szelenkov@nginx.com            headers['X-Servlet-Path'], '/foo/bar', '#1 servlet path'
3151017Szelenkov@nginx.com        )
316977Smax.romanov@gmail.com        self.assertEqual(headers['X-Path-Info'], '/index.html', '#1 path info')
317977Smax.romanov@gmail.com
318977Smax.romanov@gmail.com        headers = self.get(url='/foo/bar/index.bop')['headers']
319977Smax.romanov@gmail.com
320977Smax.romanov@gmail.com        self.assertEqual(headers['X-Id'], 'servlet1', '#2 Servlet1 request')
3211017Szelenkov@nginx.com        self.assertEqual(
3221017Szelenkov@nginx.com            headers['X-Request-URI'], '/foo/bar/index.bop', '#2 request URI'
3231017Szelenkov@nginx.com        )
3241017Szelenkov@nginx.com        self.assertEqual(
3251017Szelenkov@nginx.com            headers['X-Servlet-Path'], '/foo/bar', '#2 servlet path'
3261017Szelenkov@nginx.com        )
327977Smax.romanov@gmail.com        self.assertEqual(headers['X-Path-Info'], '/index.bop', '#2 path info')
328977Smax.romanov@gmail.com
329977Smax.romanov@gmail.com        headers = self.get(url='/baz')['headers']
330977Smax.romanov@gmail.com
331977Smax.romanov@gmail.com        self.assertEqual(headers['X-Id'], 'servlet2', '#3 Servlet2 request')
332977Smax.romanov@gmail.com        self.assertEqual(headers['X-Request-URI'], '/baz', '#3 request URI')
333977Smax.romanov@gmail.com        self.assertEqual(headers['X-Servlet-Path'], '/baz', '#3 servlet path')
334977Smax.romanov@gmail.com        self.assertEqual(headers['X-Path-Info'], 'null', '#3 path info')
335977Smax.romanov@gmail.com
336977Smax.romanov@gmail.com        headers = self.get(url='/baz/index.html')['headers']
337977Smax.romanov@gmail.com
338977Smax.romanov@gmail.com        self.assertEqual(headers['X-Id'], 'servlet2', '#4 Servlet2 request')
3391017Szelenkov@nginx.com        self.assertEqual(
3401017Szelenkov@nginx.com            headers['X-Request-URI'], '/baz/index.html', '#4 request URI'
3411017Szelenkov@nginx.com        )
342977Smax.romanov@gmail.com        self.assertEqual(headers['X-Servlet-Path'], '/baz', '#4 servlet path')
343977Smax.romanov@gmail.com        self.assertEqual(headers['X-Path-Info'], '/index.html', '#4 path info')
344977Smax.romanov@gmail.com
345977Smax.romanov@gmail.com        headers = self.get(url='/catalog')['headers']
346977Smax.romanov@gmail.com
347977Smax.romanov@gmail.com        self.assertEqual(headers['X-Id'], 'servlet3', '#5 Servlet3 request')
3481017Szelenkov@nginx.com        self.assertEqual(
3491017Szelenkov@nginx.com            headers['X-Request-URI'], '/catalog', '#5 request URI'
3501017Szelenkov@nginx.com        )
3511017Szelenkov@nginx.com        self.assertEqual(
3521017Szelenkov@nginx.com            headers['X-Servlet-Path'], '/catalog', '#5 servlet path'
3531017Szelenkov@nginx.com        )
354977Smax.romanov@gmail.com        self.assertEqual(headers['X-Path-Info'], 'null', '#5 path info')
355977Smax.romanov@gmail.com
356977Smax.romanov@gmail.com        headers = self.get(url='/catalog/index.html')['headers']
357977Smax.romanov@gmail.com
358977Smax.romanov@gmail.com        self.assertEqual(headers['X-Id'], 'default', '#6 default request')
3591017Szelenkov@nginx.com        self.assertEqual(
3601017Szelenkov@nginx.com            headers['X-Request-URI'], '/catalog/index.html', '#6 request URI'
3611017Szelenkov@nginx.com        )
3621017Szelenkov@nginx.com        self.assertEqual(
3631017Szelenkov@nginx.com            headers['X-Servlet-Path'], '/catalog/index.html', '#6 servlet path'
3641017Szelenkov@nginx.com        )
365977Smax.romanov@gmail.com        self.assertEqual(headers['X-Path-Info'], 'null', '#6 path info')
366977Smax.romanov@gmail.com
367977Smax.romanov@gmail.com        headers = self.get(url='/catalog/racecar.bop')['headers']
368977Smax.romanov@gmail.com
369977Smax.romanov@gmail.com        self.assertEqual(headers['X-Id'], 'servlet4', '#7 servlet4 request')
3701017Szelenkov@nginx.com        self.assertEqual(
3711017Szelenkov@nginx.com            headers['X-Request-URI'], '/catalog/racecar.bop', '#7 request URI'
3721017Szelenkov@nginx.com        )
3731017Szelenkov@nginx.com        self.assertEqual(
3741017Szelenkov@nginx.com            headers['X-Servlet-Path'],
3751017Szelenkov@nginx.com            '/catalog/racecar.bop',
3761017Szelenkov@nginx.com            '#7 servlet path',
3771017Szelenkov@nginx.com        )
378977Smax.romanov@gmail.com        self.assertEqual(headers['X-Path-Info'], 'null', '#7 path info')
379977Smax.romanov@gmail.com
3801017Szelenkov@nginx.com        headers = self.get(url='/index.bop')['headers']
381977Smax.romanov@gmail.com
382977Smax.romanov@gmail.com        self.assertEqual(headers['X-Id'], 'servlet4', '#8 servlet4 request')
3831017Szelenkov@nginx.com        self.assertEqual(
3841017Szelenkov@nginx.com            headers['X-Request-URI'], '/index.bop', '#8 request URI'
3851017Szelenkov@nginx.com        )
3861017Szelenkov@nginx.com        self.assertEqual(
3871017Szelenkov@nginx.com            headers['X-Servlet-Path'], '/index.bop', '#8 servlet path'
3881017Szelenkov@nginx.com        )
389977Smax.romanov@gmail.com        self.assertEqual(headers['X-Path-Info'], 'null', '#8 path info')
390977Smax.romanov@gmail.com
391977Smax.romanov@gmail.com        headers = self.get(url='/foo/baz')['headers']
392977Smax.romanov@gmail.com
393977Smax.romanov@gmail.com        self.assertEqual(headers['X-Id'], 'servlet0', '#9 servlet0 request')
3941017Szelenkov@nginx.com        self.assertEqual(
3951017Szelenkov@nginx.com            headers['X-Request-URI'], '/foo/baz', '#9 request URI'
3961017Szelenkov@nginx.com        )
397977Smax.romanov@gmail.com        self.assertEqual(headers['X-Servlet-Path'], '/foo', '#9 servlet path')
398977Smax.romanov@gmail.com        self.assertEqual(headers['X-Path-Info'], '/baz', '#9 path info')
399977Smax.romanov@gmail.com
400977Smax.romanov@gmail.com        headers = self.get()['headers']
401977Smax.romanov@gmail.com
402977Smax.romanov@gmail.com        self.assertEqual(headers['X-Id'], 'default', '#10 default request')
403977Smax.romanov@gmail.com        self.assertEqual(headers['X-Request-URI'], '/', '#10 request URI')
404977Smax.romanov@gmail.com        self.assertEqual(headers['X-Servlet-Path'], '/', '#10 servlet path')
405977Smax.romanov@gmail.com        self.assertEqual(headers['X-Path-Info'], 'null', '#10 path info')
406977Smax.romanov@gmail.com
407977Smax.romanov@gmail.com        headers = self.get(url='/index.bop/')['headers']
408977Smax.romanov@gmail.com
409977Smax.romanov@gmail.com        self.assertEqual(headers['X-Id'], 'default', '#11 default request')
4101017Szelenkov@nginx.com        self.assertEqual(
4111017Szelenkov@nginx.com            headers['X-Request-URI'], '/index.bop/', '#11 request URI'
4121017Szelenkov@nginx.com        )
4131017Szelenkov@nginx.com        self.assertEqual(
4141017Szelenkov@nginx.com            headers['X-Servlet-Path'], '/index.bop/', '#11 servlet path'
4151017Szelenkov@nginx.com        )
416977Smax.romanov@gmail.com        self.assertEqual(headers['X-Path-Info'], 'null', '#11 path info')
417977Smax.romanov@gmail.com
418977Smax.romanov@gmail.com    def test_java_application_header(self):
419977Smax.romanov@gmail.com        self.load('header')
420977Smax.romanov@gmail.com
421977Smax.romanov@gmail.com        headers = self.get()['headers']
422977Smax.romanov@gmail.com
4231017Szelenkov@nginx.com        self.assertEqual(
4241017Szelenkov@nginx.com            headers['X-Set-Utf8-Value'], '????', 'set Utf8 header value'
4251017Szelenkov@nginx.com        )
4261017Szelenkov@nginx.com        self.assertEqual(
4271017Szelenkov@nginx.com            headers['X-Set-Utf8-Name-???'], 'x', 'set Utf8 header name'
4281017Szelenkov@nginx.com        )
4291017Szelenkov@nginx.com        self.assertEqual(
4301017Szelenkov@nginx.com            headers['X-Add-Utf8-Value'], '????', 'add Utf8 header value'
4311017Szelenkov@nginx.com        )
4321017Szelenkov@nginx.com        self.assertEqual(
4331017Szelenkov@nginx.com            headers['X-Add-Utf8-Name-???'], 'y', 'add Utf8 header name'
4341017Szelenkov@nginx.com        )
435977Smax.romanov@gmail.com        self.assertEqual(headers['X-Add-Test'], 'v1', 'add null header')
436977Smax.romanov@gmail.com        self.assertEqual('X-Set-Test1' in headers, False, 'set null header')
437977Smax.romanov@gmail.com        self.assertEqual(headers['X-Set-Test2'], '', 'set empty header')
438977Smax.romanov@gmail.com
439977Smax.romanov@gmail.com    def test_java_application_content_type(self):
440977Smax.romanov@gmail.com        self.load('content_type')
441977Smax.romanov@gmail.com
442977Smax.romanov@gmail.com        headers = self.get(url='/1')['headers']
443977Smax.romanov@gmail.com
4441017Szelenkov@nginx.com        self.assertEqual(
4451017Szelenkov@nginx.com            headers['Content-Type'],
4461017Szelenkov@nginx.com            'text/plain;charset=utf-8',
4471017Szelenkov@nginx.com            '#1 Content-Type header',
4481017Szelenkov@nginx.com        )
4491017Szelenkov@nginx.com        self.assertEqual(
4501017Szelenkov@nginx.com            headers['X-Content-Type'],
4511017Szelenkov@nginx.com            'text/plain;charset=utf-8',
4521017Szelenkov@nginx.com            '#1 response Content-Type',
4531017Szelenkov@nginx.com        )
4541017Szelenkov@nginx.com        self.assertEqual(
4551017Szelenkov@nginx.com            headers['X-Character-Encoding'], 'utf-8', '#1 response charset'
4561017Szelenkov@nginx.com        )
457977Smax.romanov@gmail.com
458977Smax.romanov@gmail.com        headers = self.get(url='/2')['headers']
459977Smax.romanov@gmail.com
4601017Szelenkov@nginx.com        self.assertEqual(
4611017Szelenkov@nginx.com            headers['Content-Type'],
4621017Szelenkov@nginx.com            'text/plain;charset=iso-8859-1',
4631017Szelenkov@nginx.com            '#2 Content-Type header',
4641017Szelenkov@nginx.com        )
4651017Szelenkov@nginx.com        self.assertEqual(
4661017Szelenkov@nginx.com            headers['X-Content-Type'],
4671017Szelenkov@nginx.com            'text/plain;charset=iso-8859-1',
4681017Szelenkov@nginx.com            '#2 response Content-Type',
4691017Szelenkov@nginx.com        )
4701017Szelenkov@nginx.com        self.assertEqual(
4711017Szelenkov@nginx.com            headers['X-Character-Encoding'],
4721017Szelenkov@nginx.com            'iso-8859-1',
4731017Szelenkov@nginx.com            '#2 response charset',
4741017Szelenkov@nginx.com        )
475977Smax.romanov@gmail.com
476977Smax.romanov@gmail.com        headers = self.get(url='/3')['headers']
477977Smax.romanov@gmail.com
4781017Szelenkov@nginx.com        self.assertEqual(
4791017Szelenkov@nginx.com            headers['Content-Type'],
4801017Szelenkov@nginx.com            'text/plain;charset=windows-1251',
4811017Szelenkov@nginx.com            '#3 Content-Type header',
4821017Szelenkov@nginx.com        )
4831017Szelenkov@nginx.com        self.assertEqual(
4841017Szelenkov@nginx.com            headers['X-Content-Type'],
4851017Szelenkov@nginx.com            'text/plain;charset=windows-1251',
4861017Szelenkov@nginx.com            '#3 response Content-Type',
4871017Szelenkov@nginx.com        )
4881017Szelenkov@nginx.com        self.assertEqual(
4891017Szelenkov@nginx.com            headers['X-Character-Encoding'],
4901017Szelenkov@nginx.com            'windows-1251',
4911017Szelenkov@nginx.com            '#3 response charset',
4921017Szelenkov@nginx.com        )
493977Smax.romanov@gmail.com
494977Smax.romanov@gmail.com        headers = self.get(url='/4')['headers']
495977Smax.romanov@gmail.com
4961017Szelenkov@nginx.com        self.assertEqual(
4971017Szelenkov@nginx.com            headers['Content-Type'],
4981017Szelenkov@nginx.com            'text/plain;charset=windows-1251',
4991017Szelenkov@nginx.com            '#4 Content-Type header',
5001017Szelenkov@nginx.com        )
5011017Szelenkov@nginx.com        self.assertEqual(
5021017Szelenkov@nginx.com            headers['X-Content-Type'],
5031017Szelenkov@nginx.com            'text/plain;charset=windows-1251',
5041017Szelenkov@nginx.com            '#4 response Content-Type',
5051017Szelenkov@nginx.com        )
5061017Szelenkov@nginx.com        self.assertEqual(
5071017Szelenkov@nginx.com            headers['X-Character-Encoding'],
5081017Szelenkov@nginx.com            'windows-1251',
5091017Szelenkov@nginx.com            '#4 response charset',
5101017Szelenkov@nginx.com        )
511977Smax.romanov@gmail.com
512977Smax.romanov@gmail.com        headers = self.get(url='/5')['headers']
513977Smax.romanov@gmail.com
5141017Szelenkov@nginx.com        self.assertEqual(
5151017Szelenkov@nginx.com            headers['Content-Type'],
5161017Szelenkov@nginx.com            'text/plain;charset=iso-8859-1',
5171017Szelenkov@nginx.com            '#5 Content-Type header',
5181017Szelenkov@nginx.com        )
5191017Szelenkov@nginx.com        self.assertEqual(
5201017Szelenkov@nginx.com            headers['X-Content-Type'],
5211017Szelenkov@nginx.com            'text/plain;charset=iso-8859-1',
5221017Szelenkov@nginx.com            '#5 response Content-Type',
5231017Szelenkov@nginx.com        )
5241017Szelenkov@nginx.com        self.assertEqual(
5251017Szelenkov@nginx.com            headers['X-Character-Encoding'],
5261017Szelenkov@nginx.com            'iso-8859-1',
5271017Szelenkov@nginx.com            '#5 response charset',
5281017Szelenkov@nginx.com        )
529977Smax.romanov@gmail.com
530977Smax.romanov@gmail.com        headers = self.get(url='/6')['headers']
531977Smax.romanov@gmail.com
5321017Szelenkov@nginx.com        self.assertEqual(
5331017Szelenkov@nginx.com            'Content-Type' in headers, False, '#6 no Content-Type header'
5341017Szelenkov@nginx.com        )
5351017Szelenkov@nginx.com        self.assertEqual(
5361017Szelenkov@nginx.com            'X-Content-Type' in headers, False, '#6 no response Content-Type'
5371017Szelenkov@nginx.com        )
5381017Szelenkov@nginx.com        self.assertEqual(
5391017Szelenkov@nginx.com            headers['X-Character-Encoding'], 'utf-8', '#6 response charset'
5401017Szelenkov@nginx.com        )
541977Smax.romanov@gmail.com
542977Smax.romanov@gmail.com        headers = self.get(url='/7')['headers']
543977Smax.romanov@gmail.com
5441017Szelenkov@nginx.com        self.assertEqual(
5451017Szelenkov@nginx.com            headers['Content-Type'],
5461017Szelenkov@nginx.com            'text/plain;charset=utf-8',
5471017Szelenkov@nginx.com            '#7 Content-Type header',
5481017Szelenkov@nginx.com        )
5491017Szelenkov@nginx.com        self.assertEqual(
5501017Szelenkov@nginx.com            headers['X-Content-Type'],
5511017Szelenkov@nginx.com            'text/plain;charset=utf-8',
5521017Szelenkov@nginx.com            '#7 response Content-Type',
5531017Szelenkov@nginx.com        )
5541017Szelenkov@nginx.com        self.assertEqual(
5551017Szelenkov@nginx.com            headers['X-Character-Encoding'], 'utf-8', '#7 response charset'
5561017Szelenkov@nginx.com        )
557977Smax.romanov@gmail.com
558977Smax.romanov@gmail.com        headers = self.get(url='/8')['headers']
559977Smax.romanov@gmail.com
5601017Szelenkov@nginx.com        self.assertEqual(
5611017Szelenkov@nginx.com            headers['Content-Type'],
5621017Szelenkov@nginx.com            'text/html;charset=utf-8',
5631017Szelenkov@nginx.com            '#8 Content-Type header',
5641017Szelenkov@nginx.com        )
5651017Szelenkov@nginx.com        self.assertEqual(
5661017Szelenkov@nginx.com            headers['X-Content-Type'],
5671017Szelenkov@nginx.com            'text/html;charset=utf-8',
5681017Szelenkov@nginx.com            '#8 response Content-Type',
5691017Szelenkov@nginx.com        )
5701017Szelenkov@nginx.com        self.assertEqual(
5711017Szelenkov@nginx.com            headers['X-Character-Encoding'], 'utf-8', '#8 response charset'
5721017Szelenkov@nginx.com        )
573977Smax.romanov@gmail.com
574977Smax.romanov@gmail.com    def test_java_application_welcome_files(self):
575977Smax.romanov@gmail.com        self.load('welcome_files')
576977Smax.romanov@gmail.com
577977Smax.romanov@gmail.com        headers = self.get()['headers']
578977Smax.romanov@gmail.com
579977Smax.romanov@gmail.com        resp = self.get(url='/dir1')
580977Smax.romanov@gmail.com
581977Smax.romanov@gmail.com        self.assertEqual(resp['status'], 302, 'dir redirect expected')
582977Smax.romanov@gmail.com
583977Smax.romanov@gmail.com        resp = self.get(url='/dir1/')
584977Smax.romanov@gmail.com
5851017Szelenkov@nginx.com        self.assertEqual(
5861017Szelenkov@nginx.com            'This is index.txt.' in resp['body'], True, 'dir1 index body'
5871017Szelenkov@nginx.com        )
5881017Szelenkov@nginx.com        self.assertEqual(
5891017Szelenkov@nginx.com            resp['headers']['X-TXT-Filter'], '1', 'TXT Filter header'
5901017Szelenkov@nginx.com        )
591977Smax.romanov@gmail.com
592977Smax.romanov@gmail.com        headers = self.get(url='/dir2/')['headers']
593977Smax.romanov@gmail.com
594977Smax.romanov@gmail.com        self.assertEqual(headers['X-Unit-JSP'], 'ok', 'JSP Ok header')
595977Smax.romanov@gmail.com        self.assertEqual(headers['X-JSP-Filter'], '1', 'JSP Filter header')
596977Smax.romanov@gmail.com
597977Smax.romanov@gmail.com        headers = self.get(url='/dir3/')['headers']
598977Smax.romanov@gmail.com
5991017Szelenkov@nginx.com        self.assertEqual(
6001017Szelenkov@nginx.com            headers['X-App-Servlet'], '1', 'URL pattern overrides welcome file'
6011017Szelenkov@nginx.com        )
602977Smax.romanov@gmail.com
603977Smax.romanov@gmail.com        headers = self.get(url='/dir4/')['headers']
604977Smax.romanov@gmail.com
6051017Szelenkov@nginx.com        self.assertEqual(
6061017Szelenkov@nginx.com            'X-App-Servlet' in headers,
6071017Szelenkov@nginx.com            False,
6081017Szelenkov@nginx.com            'Static welcome file served first',
6091017Szelenkov@nginx.com        )
610977Smax.romanov@gmail.com
611977Smax.romanov@gmail.com        headers = self.get(url='/dir5/')['headers']
612977Smax.romanov@gmail.com
6131017Szelenkov@nginx.com        self.assertEqual(
6141017Szelenkov@nginx.com            headers['X-App-Servlet'],
6151017Szelenkov@nginx.com            '1',
6161017Szelenkov@nginx.com            'Servlet for welcome file served when no static file found',
6171017Szelenkov@nginx.com        )
618977Smax.romanov@gmail.com
619977Smax.romanov@gmail.com    def test_java_application_request_listeners(self):
620977Smax.romanov@gmail.com        self.load('request_listeners')
621977Smax.romanov@gmail.com
622977Smax.romanov@gmail.com        headers = self.get(url='/test1')['headers']
623977Smax.romanov@gmail.com
6241017Szelenkov@nginx.com        self.assertEqual(
6251017Szelenkov@nginx.com            headers['X-Request-Initialized'],
6261017Szelenkov@nginx.com            '/test1',
6271017Szelenkov@nginx.com            'request initialized event',
6281017Szelenkov@nginx.com        )
6291017Szelenkov@nginx.com        self.assertEqual(
6301017Szelenkov@nginx.com            headers['X-Request-Destroyed'], '', 'request destroyed event'
6311017Szelenkov@nginx.com        )
6321017Szelenkov@nginx.com        self.assertEqual(headers['X-Attr-Added'], '', 'attribute added event')
6331017Szelenkov@nginx.com        self.assertEqual(
6341017Szelenkov@nginx.com            headers['X-Attr-Removed'], '', 'attribute removed event'
6351017Szelenkov@nginx.com        )
6361017Szelenkov@nginx.com        self.assertEqual(
6371017Szelenkov@nginx.com            headers['X-Attr-Replaced'], '', 'attribute replaced event'
6381017Szelenkov@nginx.com        )
639977Smax.romanov@gmail.com
640977Smax.romanov@gmail.com        headers = self.get(url='/test2?var1=1')['headers']
641977Smax.romanov@gmail.com
6421017Szelenkov@nginx.com        self.assertEqual(
6431017Szelenkov@nginx.com            headers['X-Request-Initialized'],
6441017Szelenkov@nginx.com            '/test2',
6451017Szelenkov@nginx.com            'request initialized event',
6461017Szelenkov@nginx.com        )
6471017Szelenkov@nginx.com        self.assertEqual(
6481017Szelenkov@nginx.com            headers['X-Request-Destroyed'], '/test1', 'request destroyed event'
6491017Szelenkov@nginx.com        )
6501017Szelenkov@nginx.com        self.assertEqual(
6511017Szelenkov@nginx.com            headers['X-Attr-Added'], 'var=1;', 'attribute added event'
6521017Szelenkov@nginx.com        )
6531017Szelenkov@nginx.com        self.assertEqual(
6541017Szelenkov@nginx.com            headers['X-Attr-Removed'], 'var=1;', 'attribute removed event'
6551017Szelenkov@nginx.com        )
6561017Szelenkov@nginx.com        self.assertEqual(
6571017Szelenkov@nginx.com            headers['X-Attr-Replaced'], '', 'attribute replaced event'
6581017Szelenkov@nginx.com        )
659977Smax.romanov@gmail.com
660977Smax.romanov@gmail.com        headers = self.get(url='/test3?var1=1&var2=2')['headers']
661977Smax.romanov@gmail.com
6621017Szelenkov@nginx.com        self.assertEqual(
6631017Szelenkov@nginx.com            headers['X-Request-Initialized'],
6641017Szelenkov@nginx.com            '/test3',
6651017Szelenkov@nginx.com            'request initialized event',
6661017Szelenkov@nginx.com        )
6671017Szelenkov@nginx.com        self.assertEqual(
6681017Szelenkov@nginx.com            headers['X-Request-Destroyed'], '/test2', 'request destroyed event'
6691017Szelenkov@nginx.com        )
6701017Szelenkov@nginx.com        self.assertEqual(
6711017Szelenkov@nginx.com            headers['X-Attr-Added'], 'var=1;', 'attribute added event'
6721017Szelenkov@nginx.com        )
6731017Szelenkov@nginx.com        self.assertEqual(
6741017Szelenkov@nginx.com            headers['X-Attr-Removed'], 'var=2;', 'attribute removed event'
6751017Szelenkov@nginx.com        )
6761017Szelenkov@nginx.com        self.assertEqual(
6771017Szelenkov@nginx.com            headers['X-Attr-Replaced'], 'var=1;', 'attribute replaced event'
6781017Szelenkov@nginx.com        )
679977Smax.romanov@gmail.com
680977Smax.romanov@gmail.com        headers = self.get(url='/test4?var1=1&var2=2&var3=3')['headers']
681977Smax.romanov@gmail.com
6821017Szelenkov@nginx.com        self.assertEqual(
6831017Szelenkov@nginx.com            headers['X-Request-Initialized'],
6841017Szelenkov@nginx.com            '/test4',
6851017Szelenkov@nginx.com            'request initialized event',
6861017Szelenkov@nginx.com        )
6871017Szelenkov@nginx.com        self.assertEqual(
6881017Szelenkov@nginx.com            headers['X-Request-Destroyed'], '/test3', 'request destroyed event'
6891017Szelenkov@nginx.com        )
6901017Szelenkov@nginx.com        self.assertEqual(
6911017Szelenkov@nginx.com            headers['X-Attr-Added'], 'var=1;', 'attribute added event'
6921017Szelenkov@nginx.com        )
6931017Szelenkov@nginx.com        self.assertEqual(
6941017Szelenkov@nginx.com            headers['X-Attr-Removed'], '', 'attribute removed event'
6951017Szelenkov@nginx.com        )
6961017Szelenkov@nginx.com        self.assertEqual(
6971017Szelenkov@nginx.com            headers['X-Attr-Replaced'],
6981017Szelenkov@nginx.com            'var=1;var=2;',
6991017Szelenkov@nginx.com            'attribute replaced event',
7001017Szelenkov@nginx.com        )
701977Smax.romanov@gmail.com
702977Smax.romanov@gmail.com    def test_java_application_request_uri_forward(self):
703977Smax.romanov@gmail.com        self.load('forward')
704977Smax.romanov@gmail.com
7051017Szelenkov@nginx.com        resp = self.get(
7061017Szelenkov@nginx.com            url='/fwd?uri=%2Fdata%2Ftest%3Furi%3Dnew_uri%26a%3D2%26b%3D3&a=1&c=4'
7071017Szelenkov@nginx.com        )
708977Smax.romanov@gmail.com        headers = resp['headers']
709977Smax.romanov@gmail.com
7101017Szelenkov@nginx.com        self.assertEqual(
7111017Szelenkov@nginx.com            headers['X-REQUEST-Id'], 'fwd', 'initial request servlet mapping'
7121017Szelenkov@nginx.com        )
7131017Szelenkov@nginx.com        self.assertEqual(
7141017Szelenkov@nginx.com            headers['X-Forward-To'],
7151017Szelenkov@nginx.com            '/data/test?uri=new_uri&a=2&b=3',
7161017Szelenkov@nginx.com            'forwarding triggered',
7171017Szelenkov@nginx.com        )
7181017Szelenkov@nginx.com        self.assertEqual(
7191017Szelenkov@nginx.com            headers['X-REQUEST-Param-uri'],
7201017Szelenkov@nginx.com            '/data/test?uri=new_uri&a=2&b=3',
7211017Szelenkov@nginx.com            'original uri parameter',
7221017Szelenkov@nginx.com        )
7231017Szelenkov@nginx.com        self.assertEqual(
7241017Szelenkov@nginx.com            headers['X-REQUEST-Param-a'], '1', 'original a parameter'
7251017Szelenkov@nginx.com        )
7261017Szelenkov@nginx.com        self.assertEqual(
7271017Szelenkov@nginx.com            headers['X-REQUEST-Param-c'], '4', 'original c parameter'
7281017Szelenkov@nginx.com        )
729977Smax.romanov@gmail.com
7301017Szelenkov@nginx.com        self.assertEqual(
7311017Szelenkov@nginx.com            headers['X-FORWARD-Id'], 'data', 'forward request servlet mapping'
7321017Szelenkov@nginx.com        )
7331017Szelenkov@nginx.com        self.assertEqual(
7341017Szelenkov@nginx.com            headers['X-FORWARD-Request-URI'],
7351017Szelenkov@nginx.com            '/data/test',
7361017Szelenkov@nginx.com            'forward request uri',
7371017Szelenkov@nginx.com        )
7381017Szelenkov@nginx.com        self.assertEqual(
7391017Szelenkov@nginx.com            headers['X-FORWARD-Servlet-Path'],
7401017Szelenkov@nginx.com            '/data',
7411017Szelenkov@nginx.com            'forward request servlet path',
7421017Szelenkov@nginx.com        )
7431017Szelenkov@nginx.com        self.assertEqual(
7441017Szelenkov@nginx.com            headers['X-FORWARD-Path-Info'],
7451017Szelenkov@nginx.com            '/test',
7461017Szelenkov@nginx.com            'forward request path info',
7471017Szelenkov@nginx.com        )
7481017Szelenkov@nginx.com        self.assertEqual(
7491017Szelenkov@nginx.com            headers['X-FORWARD-Query-String'],
7501017Szelenkov@nginx.com            'uri=new_uri&a=2&b=3',
7511017Szelenkov@nginx.com            'forward request query string',
7521017Szelenkov@nginx.com        )
7531017Szelenkov@nginx.com        self.assertEqual(
7541017Szelenkov@nginx.com            headers['X-FORWARD-Param-uri'],
7551017Szelenkov@nginx.com            'new_uri,/data/test?uri=new_uri&a=2&b=3',
7561017Szelenkov@nginx.com            'forward uri parameter',
7571017Szelenkov@nginx.com        )
7581017Szelenkov@nginx.com        self.assertEqual(
7591017Szelenkov@nginx.com            headers['X-FORWARD-Param-a'], '2,1', 'forward a parameter'
7601017Szelenkov@nginx.com        )
7611017Szelenkov@nginx.com        self.assertEqual(
7621017Szelenkov@nginx.com            headers['X-FORWARD-Param-b'], '3', 'forward b parameter'
7631017Szelenkov@nginx.com        )
7641017Szelenkov@nginx.com        self.assertEqual(
7651017Szelenkov@nginx.com            headers['X-FORWARD-Param-c'], '4', 'forward c parameter'
7661017Szelenkov@nginx.com        )
767977Smax.romanov@gmail.com
7681017Szelenkov@nginx.com        self.assertEqual(
7691017Szelenkov@nginx.com            headers['X-javax.servlet.forward.request_uri'],
7701017Szelenkov@nginx.com            '/fwd',
7711017Szelenkov@nginx.com            'original request uri',
7721017Szelenkov@nginx.com        )
7731017Szelenkov@nginx.com        self.assertEqual(
7741017Szelenkov@nginx.com            headers['X-javax.servlet.forward.context_path'],
7751017Szelenkov@nginx.com            '',
7761017Szelenkov@nginx.com            'original request context path',
7771017Szelenkov@nginx.com        )
7781017Szelenkov@nginx.com        self.assertEqual(
7791017Szelenkov@nginx.com            headers['X-javax.servlet.forward.servlet_path'],
7801017Szelenkov@nginx.com            '/fwd',
7811017Szelenkov@nginx.com            'original request servlet path',
7821017Szelenkov@nginx.com        )
7831017Szelenkov@nginx.com        self.assertEqual(
7841017Szelenkov@nginx.com            headers['X-javax.servlet.forward.path_info'],
7851017Szelenkov@nginx.com            'null',
7861017Szelenkov@nginx.com            'original request path info',
7871017Szelenkov@nginx.com        )
7881017Szelenkov@nginx.com        self.assertEqual(
7891017Szelenkov@nginx.com            headers['X-javax.servlet.forward.query_string'],
7901017Szelenkov@nginx.com            'uri=%2Fdata%2Ftest%3Furi%3Dnew_uri%26a%3D2%26b%3D3&a=1&c=4',
7911017Szelenkov@nginx.com            'original request query',
7921017Szelenkov@nginx.com        )
793977Smax.romanov@gmail.com
7941017Szelenkov@nginx.com        self.assertEqual(
7951017Szelenkov@nginx.com            'Before forwarding' in resp['body'],
7961017Szelenkov@nginx.com            False,
7971017Szelenkov@nginx.com            'discarded data added before forward() call',
7981017Szelenkov@nginx.com        )
7991017Szelenkov@nginx.com        self.assertEqual(
8001017Szelenkov@nginx.com            'X-After-Forwarding' in headers,
8011017Szelenkov@nginx.com            False,
8021017Szelenkov@nginx.com            'cannot add headers after forward() call',
8031017Szelenkov@nginx.com        )
8041017Szelenkov@nginx.com        self.assertEqual(
8051017Szelenkov@nginx.com            'After forwarding' in resp['body'],
8061017Szelenkov@nginx.com            False,
8071017Szelenkov@nginx.com            'cannot add data after forward() call',
8081017Szelenkov@nginx.com        )
809977Smax.romanov@gmail.com
810977Smax.romanov@gmail.com    def test_java_application_named_dispatcher_forward(self):
811977Smax.romanov@gmail.com        self.load('forward')
812977Smax.romanov@gmail.com
813977Smax.romanov@gmail.com        resp = self.get(url='/fwd?disp=name&uri=data')
814977Smax.romanov@gmail.com        headers = resp['headers']
815977Smax.romanov@gmail.com
8161017Szelenkov@nginx.com        self.assertEqual(
8171017Szelenkov@nginx.com            headers['X-REQUEST-Id'], 'fwd', 'initial request servlet mapping'
8181017Szelenkov@nginx.com        )
8191017Szelenkov@nginx.com        self.assertEqual(
8201017Szelenkov@nginx.com            headers['X-Forward-To'], 'data', 'forwarding triggered'
8211017Szelenkov@nginx.com        )
822977Smax.romanov@gmail.com
8231017Szelenkov@nginx.com        self.assertEqual(
8241017Szelenkov@nginx.com            headers['X-FORWARD-Id'], 'data', 'forward request servlet mapping'
8251017Szelenkov@nginx.com        )
8261017Szelenkov@nginx.com        self.assertEqual(
8271017Szelenkov@nginx.com            headers['X-FORWARD-Request-URI'], '/fwd', 'forward request uri'
8281017Szelenkov@nginx.com        )
8291017Szelenkov@nginx.com        self.assertEqual(
8301017Szelenkov@nginx.com            headers['X-FORWARD-Servlet-Path'],
8311017Szelenkov@nginx.com            '/fwd',
8321017Szelenkov@nginx.com            'forward request servlet path',
8331017Szelenkov@nginx.com        )
8341017Szelenkov@nginx.com        self.assertEqual(
8351017Szelenkov@nginx.com            headers['X-FORWARD-Path-Info'], 'null', 'forward request path info'
8361017Szelenkov@nginx.com        )
8371017Szelenkov@nginx.com        self.assertEqual(
8381017Szelenkov@nginx.com            headers['X-FORWARD-Query-String'],
8391017Szelenkov@nginx.com            'disp=name&uri=data',
8401017Szelenkov@nginx.com            'forward request query string',
8411017Szelenkov@nginx.com        )
842977Smax.romanov@gmail.com
8431017Szelenkov@nginx.com        self.assertEqual(
8441017Szelenkov@nginx.com            headers['X-javax.servlet.forward.request_uri'],
8451017Szelenkov@nginx.com            'null',
8461017Szelenkov@nginx.com            'original request uri',
8471017Szelenkov@nginx.com        )
8481017Szelenkov@nginx.com        self.assertEqual(
8491017Szelenkov@nginx.com            headers['X-javax.servlet.forward.context_path'],
8501017Szelenkov@nginx.com            'null',
8511017Szelenkov@nginx.com            'original request context path',
8521017Szelenkov@nginx.com        )
8531017Szelenkov@nginx.com        self.assertEqual(
8541017Szelenkov@nginx.com            headers['X-javax.servlet.forward.servlet_path'],
8551017Szelenkov@nginx.com            'null',
8561017Szelenkov@nginx.com            'original request servlet path',
8571017Szelenkov@nginx.com        )
8581017Szelenkov@nginx.com        self.assertEqual(
8591017Szelenkov@nginx.com            headers['X-javax.servlet.forward.path_info'],
8601017Szelenkov@nginx.com            'null',
8611017Szelenkov@nginx.com            'original request path info',
8621017Szelenkov@nginx.com        )
8631017Szelenkov@nginx.com        self.assertEqual(
8641017Szelenkov@nginx.com            headers['X-javax.servlet.forward.query_string'],
8651017Szelenkov@nginx.com            'null',
8661017Szelenkov@nginx.com            'original request query',
8671017Szelenkov@nginx.com        )
868977Smax.romanov@gmail.com
8691017Szelenkov@nginx.com        self.assertEqual(
8701017Szelenkov@nginx.com            'Before forwarding' in resp['body'],
8711017Szelenkov@nginx.com            False,
8721017Szelenkov@nginx.com            'discarded data added before forward() call',
8731017Szelenkov@nginx.com        )
8741017Szelenkov@nginx.com        self.assertEqual(
8751017Szelenkov@nginx.com            'X-After-Forwarding' in headers,
8761017Szelenkov@nginx.com            False,
8771017Szelenkov@nginx.com            'cannot add headers after forward() call',
8781017Szelenkov@nginx.com        )
8791017Szelenkov@nginx.com        self.assertEqual(
8801017Szelenkov@nginx.com            'After forwarding' in resp['body'],
8811017Szelenkov@nginx.com            False,
8821017Szelenkov@nginx.com            'cannot add data after forward() call',
8831017Szelenkov@nginx.com        )
884977Smax.romanov@gmail.com
885977Smax.romanov@gmail.com    def test_java_application_request_uri_include(self):
886977Smax.romanov@gmail.com        self.load('include')
887977Smax.romanov@gmail.com
888977Smax.romanov@gmail.com        resp = self.get(url='/inc?uri=/data/test')
889977Smax.romanov@gmail.com        headers = resp['headers']
890977Smax.romanov@gmail.com        body = resp['body']
891977Smax.romanov@gmail.com
8921017Szelenkov@nginx.com        self.assertEqual(
8931017Szelenkov@nginx.com            headers['X-REQUEST-Id'], 'inc', 'initial request servlet mapping'
8941017Szelenkov@nginx.com        )
8951017Szelenkov@nginx.com        self.assertEqual(
8961017Szelenkov@nginx.com            headers['X-Include'], '/data/test', 'including triggered'
8971017Szelenkov@nginx.com        )
898977Smax.romanov@gmail.com
8991017Szelenkov@nginx.com        self.assertEqual(
9001017Szelenkov@nginx.com            'X-INCLUDE-Id' in headers,
9011017Szelenkov@nginx.com            False,
9021017Szelenkov@nginx.com            'unable to add headers in include request',
9031017Szelenkov@nginx.com        )
904977Smax.romanov@gmail.com
9051017Szelenkov@nginx.com        self.assertEqual(
9061017Szelenkov@nginx.com            'javax.servlet.include.request_uri:  /data/test' in body,
9071017Szelenkov@nginx.com            True,
9081017Szelenkov@nginx.com            'include request uri',
9091017Szelenkov@nginx.com        )
9101017Szelenkov@nginx.com        #        self.assertEqual('javax.servlet.include.context_path: ' in body,
9111017Szelenkov@nginx.com        #            'include request context path')
9121017Szelenkov@nginx.com        self.assertEqual(
9131017Szelenkov@nginx.com            'javax.servlet.include.servlet_path: /data' in body,
9141017Szelenkov@nginx.com            True,
9151017Szelenkov@nginx.com            'include request servlet path',
9161017Szelenkov@nginx.com        )
9171017Szelenkov@nginx.com        self.assertEqual(
9181017Szelenkov@nginx.com            'javax.servlet.include.path_info:    /test' in body,
9191017Szelenkov@nginx.com            True,
9201017Szelenkov@nginx.com            'include request path info',
9211017Szelenkov@nginx.com        )
9221017Szelenkov@nginx.com        self.assertEqual(
9231017Szelenkov@nginx.com            'javax.servlet.include.query_string: null' in body,
9241017Szelenkov@nginx.com            True,
9251017Szelenkov@nginx.com            'include request query',
9261017Szelenkov@nginx.com        )
927977Smax.romanov@gmail.com
9281017Szelenkov@nginx.com        self.assertEqual(
9291017Szelenkov@nginx.com            'Before include' in body,
9301017Szelenkov@nginx.com            True,
9311017Szelenkov@nginx.com            'preserve data added before include() call',
9321017Szelenkov@nginx.com        )
9331017Szelenkov@nginx.com        self.assertEqual(
9341017Szelenkov@nginx.com            headers['X-After-Include'],
9351017Szelenkov@nginx.com            'you-should-see-this',
9361017Szelenkov@nginx.com            'add headers after include() call',
9371017Szelenkov@nginx.com        )
9381017Szelenkov@nginx.com        self.assertEqual(
9391017Szelenkov@nginx.com            'After include' in body, True, 'add data after include() call'
9401017Szelenkov@nginx.com        )
941977Smax.romanov@gmail.com
942977Smax.romanov@gmail.com    def test_java_application_named_dispatcher_include(self):
943977Smax.romanov@gmail.com        self.load('include')
944977Smax.romanov@gmail.com
945977Smax.romanov@gmail.com        resp = self.get(url='/inc?disp=name&uri=data')
946977Smax.romanov@gmail.com        headers = resp['headers']
947977Smax.romanov@gmail.com        body = resp['body']
948977Smax.romanov@gmail.com
9491017Szelenkov@nginx.com        self.assertEqual(
9501017Szelenkov@nginx.com            headers['X-REQUEST-Id'], 'inc', 'initial request servlet mapping'
9511017Szelenkov@nginx.com        )
9521017Szelenkov@nginx.com        self.assertEqual(headers['X-Include'], 'data', 'including triggered')
953977Smax.romanov@gmail.com
9541017Szelenkov@nginx.com        self.assertEqual(
9551017Szelenkov@nginx.com            'X-INCLUDE-Id' in headers,
9561017Szelenkov@nginx.com            False,
9571017Szelenkov@nginx.com            'unable to add headers in include request',
9581017Szelenkov@nginx.com        )
959977Smax.romanov@gmail.com
9601017Szelenkov@nginx.com        self.assertEqual(
9611017Szelenkov@nginx.com            'javax.servlet.include.request_uri:  null' in body,
9621017Szelenkov@nginx.com            True,
9631017Szelenkov@nginx.com            'include request uri',
9641017Szelenkov@nginx.com        )
9651017Szelenkov@nginx.com        #    self.assertEqual('javax.servlet.include.context_path: null' in body,
9661017Szelenkov@nginx.com        #        'include request context path')
9671017Szelenkov@nginx.com        self.assertEqual(
9681017Szelenkov@nginx.com            'javax.servlet.include.servlet_path: null' in body,
9691017Szelenkov@nginx.com            True,
9701017Szelenkov@nginx.com            'include request servlet path',
9711017Szelenkov@nginx.com        )
9721017Szelenkov@nginx.com        self.assertEqual(
9731017Szelenkov@nginx.com            'javax.servlet.include.path_info:    null' in body,
9741017Szelenkov@nginx.com            True,
9751017Szelenkov@nginx.com            'include request path info',
9761017Szelenkov@nginx.com        )
9771017Szelenkov@nginx.com        self.assertEqual(
9781017Szelenkov@nginx.com            'javax.servlet.include.query_string: null' in body,
9791017Szelenkov@nginx.com            True,
9801017Szelenkov@nginx.com            'include request query',
9811017Szelenkov@nginx.com        )
982977Smax.romanov@gmail.com
9831017Szelenkov@nginx.com        self.assertEqual(
9841017Szelenkov@nginx.com            'Before include' in body,
9851017Szelenkov@nginx.com            True,
9861017Szelenkov@nginx.com            'preserve data added before include() call',
9871017Szelenkov@nginx.com        )
9881017Szelenkov@nginx.com        self.assertEqual(
9891017Szelenkov@nginx.com            headers['X-After-Include'],
9901017Szelenkov@nginx.com            'you-should-see-this',
9911017Szelenkov@nginx.com            'add headers after include() call',
9921017Szelenkov@nginx.com        )
9931017Szelenkov@nginx.com        self.assertEqual(
9941017Szelenkov@nginx.com            'After include' in body, True, 'add data after include() call'
9951017Szelenkov@nginx.com        )
996977Smax.romanov@gmail.com
997977Smax.romanov@gmail.com    def test_java_application_path_translation(self):
998977Smax.romanov@gmail.com        self.load('path_translation')
999977Smax.romanov@gmail.com
1000977Smax.romanov@gmail.com        headers = self.get(url='/pt/test?path=/')['headers']
1001977Smax.romanov@gmail.com
10021017Szelenkov@nginx.com        self.assertEqual(
10031017Szelenkov@nginx.com            headers['X-Servlet-Path'], '/pt', 'matched servlet path'
10041017Szelenkov@nginx.com        )
10051017Szelenkov@nginx.com        self.assertEqual(
10061017Szelenkov@nginx.com            headers['X-Path-Info'], '/test', 'the rest of the path'
10071017Szelenkov@nginx.com        )
10081017Szelenkov@nginx.com        self.assertEqual(
10091017Szelenkov@nginx.com            headers['X-Path-Translated'],
1010977Smax.romanov@gmail.com            headers['X-Real-Path'] + headers['X-Path-Info'],
10111017Szelenkov@nginx.com            'translated path is the app root + path info',
10121017Szelenkov@nginx.com        )
1013977Smax.romanov@gmail.com        self.assertEqual(
1014977Smax.romanov@gmail.com            headers['X-Resource-Paths'].endswith('/WEB-INF/, /index.html]'),
10151017Szelenkov@nginx.com            True,
10161017Szelenkov@nginx.com            'app root directory content',
10171017Szelenkov@nginx.com        )
10181017Szelenkov@nginx.com        self.assertEqual(
10191017Szelenkov@nginx.com            headers['X-Resource-As-Stream'],
10201017Szelenkov@nginx.com            'null',
10211017Szelenkov@nginx.com            'no resource stream for root path',
10221017Szelenkov@nginx.com        )
1023977Smax.romanov@gmail.com
1024977Smax.romanov@gmail.com        headers = self.get(url='/test?path=/none')['headers']
1025977Smax.romanov@gmail.com
10261017Szelenkov@nginx.com        self.assertEqual(
10271017Szelenkov@nginx.com            headers['X-Servlet-Path'], '/test', 'matched whole path'
10281017Szelenkov@nginx.com        )
10291017Szelenkov@nginx.com        self.assertEqual(
10301017Szelenkov@nginx.com            headers['X-Path-Info'],
10311017Szelenkov@nginx.com            'null',
10321017Szelenkov@nginx.com            'the rest of the path is null, whole path matched',
10331017Szelenkov@nginx.com        )
10341017Szelenkov@nginx.com        self.assertEqual(
10351017Szelenkov@nginx.com            headers['X-Path-Translated'],
10361017Szelenkov@nginx.com            'null',
10371017Szelenkov@nginx.com            'translated path is null because path info is null',
10381017Szelenkov@nginx.com        )
10391017Szelenkov@nginx.com        self.assertEqual(
10401017Szelenkov@nginx.com            headers['X-Real-Path'].endswith('/none'),
10411017Szelenkov@nginx.com            True,
10421017Szelenkov@nginx.com            'read path is not null',
10431017Szelenkov@nginx.com        )
10441017Szelenkov@nginx.com        self.assertEqual(
10451017Szelenkov@nginx.com            headers['X-Resource-Paths'], 'null', 'no resource found'
10461017Szelenkov@nginx.com        )
10471017Szelenkov@nginx.com        self.assertEqual(
10481017Szelenkov@nginx.com            headers['X-Resource-As-Stream'], 'null', 'no resource stream'
10491017Szelenkov@nginx.com        )
1050977Smax.romanov@gmail.com
1051977Smax.romanov@gmail.com    def test_java_application_query_string(self):
1052977Smax.romanov@gmail.com        self.load('query_string')
1053977Smax.romanov@gmail.com
10541017Szelenkov@nginx.com        self.assertEqual(
10551017Szelenkov@nginx.com            self.get(url='/?a=b')['headers']['X-Query-String'],
10561017Szelenkov@nginx.com            'a=b',
10571017Szelenkov@nginx.com            'query string',
10581017Szelenkov@nginx.com        )
1059977Smax.romanov@gmail.com
1060977Smax.romanov@gmail.com    def test_java_application_query_empty(self):
1061977Smax.romanov@gmail.com        self.load('query_string')
1062977Smax.romanov@gmail.com
10631017Szelenkov@nginx.com        self.assertEqual(
10641017Szelenkov@nginx.com            self.get(url='/?')['headers']['X-Query-String'],
10651017Szelenkov@nginx.com            '',
10661017Szelenkov@nginx.com            'query string empty',
10671017Szelenkov@nginx.com        )
1068977Smax.romanov@gmail.com
1069977Smax.romanov@gmail.com    def test_java_application_query_absent(self):
1070977Smax.romanov@gmail.com        self.load('query_string')
1071977Smax.romanov@gmail.com
10721017Szelenkov@nginx.com        self.assertEqual(
10731017Szelenkov@nginx.com            self.get()['headers']['X-Query-String'],
10741017Szelenkov@nginx.com            'null',
10751017Szelenkov@nginx.com            'query string absent',
10761017Szelenkov@nginx.com        )
1077977Smax.romanov@gmail.com
1078977Smax.romanov@gmail.com    def test_java_application_empty(self):
1079977Smax.romanov@gmail.com        self.load('empty')
1080977Smax.romanov@gmail.com
1081977Smax.romanov@gmail.com        self.assertEqual(self.get()['status'], 200, 'empty')
1082977Smax.romanov@gmail.com
1083977Smax.romanov@gmail.com    def test_java_application_keepalive_body(self):
1084977Smax.romanov@gmail.com        self.load('mirror')
1085977Smax.romanov@gmail.com
10861029Szelenkov@nginx.com        self.assertEqual(self.post()['status'], 200, 'init')
10871029Szelenkov@nginx.com
10881453Szelenkov@nginx.com        body = '0123456789' * 500
10891017Szelenkov@nginx.com        (resp, sock) = self.post(
10901017Szelenkov@nginx.com            headers={
10911017Szelenkov@nginx.com                'Connection': 'keep-alive',
10921017Szelenkov@nginx.com                'Content-Type': 'text/html',
10931017Szelenkov@nginx.com                'Host': 'localhost',
10941017Szelenkov@nginx.com            },
10951017Szelenkov@nginx.com            start=True,
10961453Szelenkov@nginx.com            body=body,
10971029Szelenkov@nginx.com            read_timeout=1,
10981017Szelenkov@nginx.com        )
1099977Smax.romanov@gmail.com
11001453Szelenkov@nginx.com        self.assertEqual(resp['body'], body, 'keep-alive 1')
1101977Smax.romanov@gmail.com
11021453Szelenkov@nginx.com        body = '0123456789'
11031017Szelenkov@nginx.com        resp = self.post(
11041017Szelenkov@nginx.com            headers={
11051017Szelenkov@nginx.com                'Connection': 'close',
11061017Szelenkov@nginx.com                'Content-Type': 'text/html',
11071017Szelenkov@nginx.com                'Host': 'localhost',
11081017Szelenkov@nginx.com            },
11091017Szelenkov@nginx.com            sock=sock,
11101453Szelenkov@nginx.com            body=body,
11111017Szelenkov@nginx.com        )
1112977Smax.romanov@gmail.com
11131453Szelenkov@nginx.com        self.assertEqual(resp['body'], body, 'keep-alive 2')
1114977Smax.romanov@gmail.com
1115977Smax.romanov@gmail.com    def test_java_application_http_10(self):
1116977Smax.romanov@gmail.com        self.load('empty')
1117977Smax.romanov@gmail.com
1118977Smax.romanov@gmail.com        self.assertEqual(self.get(http_10=True)['status'], 200, 'HTTP 1.0')
1119977Smax.romanov@gmail.com
1120977Smax.romanov@gmail.com    def test_java_application_no_method(self):
1121977Smax.romanov@gmail.com        self.load('empty')
1122977Smax.romanov@gmail.com
1123977Smax.romanov@gmail.com        self.assertEqual(self.post()['status'], 405, 'no method')
1124977Smax.romanov@gmail.com
1125977Smax.romanov@gmail.com    def test_java_application_get_header(self):
1126977Smax.romanov@gmail.com        self.load('get_header')
1127977Smax.romanov@gmail.com
11281017Szelenkov@nginx.com        self.assertEqual(
11291017Szelenkov@nginx.com            self.get(
11301017Szelenkov@nginx.com                headers={
11311017Szelenkov@nginx.com                    'X-Header': 'blah',
11321017Szelenkov@nginx.com                    'Content-Type': 'text/html',
11331017Szelenkov@nginx.com                    'Host': 'localhost',
11341018Szelenkov@nginx.com                    'Connection': 'close',
11351017Szelenkov@nginx.com                }
11361017Szelenkov@nginx.com            )['headers']['X-Reply'],
11371017Szelenkov@nginx.com            'blah',
11381017Szelenkov@nginx.com            'get header',
11391017Szelenkov@nginx.com        )
1140977Smax.romanov@gmail.com
1141977Smax.romanov@gmail.com    def test_java_application_get_header_empty(self):
1142977Smax.romanov@gmail.com        self.load('get_header')
1143977Smax.romanov@gmail.com
1144977Smax.romanov@gmail.com        self.assertNotIn('X-Reply', self.get()['headers'], 'get header empty')
1145977Smax.romanov@gmail.com
1146977Smax.romanov@gmail.com    def test_java_application_get_headers(self):
1147977Smax.romanov@gmail.com        self.load('get_headers')
1148977Smax.romanov@gmail.com
11491017Szelenkov@nginx.com        headers = self.get(
11501017Szelenkov@nginx.com            headers={
11511017Szelenkov@nginx.com                'X-Header': ['blah', 'blah'],
11521017Szelenkov@nginx.com                'Content-Type': 'text/html',
11531017Szelenkov@nginx.com                'Host': 'localhost',
11541018Szelenkov@nginx.com                'Connection': 'close',
11551017Szelenkov@nginx.com            }
11561017Szelenkov@nginx.com        )['headers']
1157977Smax.romanov@gmail.com
1158977Smax.romanov@gmail.com        self.assertEqual(headers['X-Reply-0'], 'blah', 'get headers')
1159977Smax.romanov@gmail.com        self.assertEqual(headers['X-Reply-1'], 'blah', 'get headers 2')
1160977Smax.romanov@gmail.com
1161977Smax.romanov@gmail.com    def test_java_application_get_headers_empty(self):
1162977Smax.romanov@gmail.com        self.load('get_headers')
1163977Smax.romanov@gmail.com
11641017Szelenkov@nginx.com        self.assertNotIn(
11651017Szelenkov@nginx.com            'X-Reply-0', self.get()['headers'], 'get headers empty'
11661017Szelenkov@nginx.com        )
1167977Smax.romanov@gmail.com
1168977Smax.romanov@gmail.com    def test_java_application_get_header_names(self):
1169977Smax.romanov@gmail.com        self.load('get_header_names')
1170977Smax.romanov@gmail.com
1171977Smax.romanov@gmail.com        headers = self.get()['headers']
1172977Smax.romanov@gmail.com
11731017Szelenkov@nginx.com        self.assertRegex(
11741017Szelenkov@nginx.com            headers['X-Reply-0'], r'(?:Host|Connection)', 'get header names'
11751017Szelenkov@nginx.com        )
11761017Szelenkov@nginx.com        self.assertRegex(
11771017Szelenkov@nginx.com            headers['X-Reply-1'], r'(?:Host|Connection)', 'get header names 2'
11781017Szelenkov@nginx.com        )
11791017Szelenkov@nginx.com        self.assertNotEqual(
11801017Szelenkov@nginx.com            headers['X-Reply-0'],
11811017Szelenkov@nginx.com            headers['X-Reply-1'],
11821017Szelenkov@nginx.com            'get header names not equal',
11831017Szelenkov@nginx.com        )
1184977Smax.romanov@gmail.com
1185977Smax.romanov@gmail.com    def test_java_application_header_int(self):
1186977Smax.romanov@gmail.com        self.load('header_int')
1187977Smax.romanov@gmail.com
11881017Szelenkov@nginx.com        headers = self.get(
11891017Szelenkov@nginx.com            headers={
11901017Szelenkov@nginx.com                'X-Header': '2',
11911017Szelenkov@nginx.com                'Content-Type': 'text/html',
11921017Szelenkov@nginx.com                'Host': 'localhost',
11931018Szelenkov@nginx.com                'Connection': 'close',
11941017Szelenkov@nginx.com            }
11951017Szelenkov@nginx.com        )['headers']
1196977Smax.romanov@gmail.com
1197977Smax.romanov@gmail.com        self.assertEqual(headers['X-Set-Int'], '1', 'set int header')
1198977Smax.romanov@gmail.com        self.assertEqual(headers['X-Get-Int'], '2', 'get int header')
1199977Smax.romanov@gmail.com
1200977Smax.romanov@gmail.com    def test_java_application_header_date(self):
1201977Smax.romanov@gmail.com        self.load('header_date')
1202977Smax.romanov@gmail.com
1203977Smax.romanov@gmail.com        date = 'Fri, 15 Mar 2019 14:45:34 GMT'
1204977Smax.romanov@gmail.com
12051017Szelenkov@nginx.com        headers = self.get(
12061017Szelenkov@nginx.com            headers={
12071017Szelenkov@nginx.com                'X-Header': date,
12081017Szelenkov@nginx.com                'Content-Type': 'text/html',
12091017Szelenkov@nginx.com                'Host': 'localhost',
12101018Szelenkov@nginx.com                'Connection': 'close',
12111017Szelenkov@nginx.com            }
12121017Szelenkov@nginx.com        )['headers']
1213977Smax.romanov@gmail.com
12141017Szelenkov@nginx.com        self.assertEqual(
12151017Szelenkov@nginx.com            headers['X-Set-Date'],
12161017Szelenkov@nginx.com            'Thu, 01 Jan 1970 00:00:01 GMT',
12171017Szelenkov@nginx.com            'set date header',
12181017Szelenkov@nginx.com        )
1219977Smax.romanov@gmail.com        self.assertEqual(headers['X-Get-Date'], date, 'get date header')
1220977Smax.romanov@gmail.com
12211117Szelenkov@nginx.com    def test_java_application_multipart(self):
12221117Szelenkov@nginx.com        self.load('multipart')
12231117Szelenkov@nginx.com
12241293St.nateldemoura@f5.com        reldst = '/uploads'
12251293St.nateldemoura@f5.com        fulldst = self.testdir + reldst
12261293St.nateldemoura@f5.com        os.mkdir(fulldst)
12271293St.nateldemoura@f5.com        self.public_dir(fulldst)
12281293St.nateldemoura@f5.com
12291355St.nateldemoura@f5.com        fields = {
12301355St.nateldemoura@f5.com            'file': {
12311355St.nateldemoura@f5.com                'filename': 'sample.txt',
12321355St.nateldemoura@f5.com                'type': 'text/plain',
12331355St.nateldemoura@f5.com                'data': io.StringIO('Data from sample file'),
12341355St.nateldemoura@f5.com            },
12351355St.nateldemoura@f5.com            'destination': fulldst,
12361355St.nateldemoura@f5.com            'upload': 'Upload',
12371355St.nateldemoura@f5.com        }
12381355St.nateldemoura@f5.com
12391355St.nateldemoura@f5.com        encoded, content_type = self.multipart_encode(fields)
12401355St.nateldemoura@f5.com
12411355St.nateldemoura@f5.com        preamble = 'Preamble. Should be ignored.'
12421355St.nateldemoura@f5.com        epilogue = 'Epilogue. Should be ignored.'
12431355St.nateldemoura@f5.com        body = "%s\r\n%s\r\n%s" % (preamble, encoded.decode(), epilogue)
12441117Szelenkov@nginx.com
12451117Szelenkov@nginx.com        resp = self.post(
12461117Szelenkov@nginx.com            headers={
12471355St.nateldemoura@f5.com                'Content-Type': content_type,
12481117Szelenkov@nginx.com                'Host': 'localhost',
12491117Szelenkov@nginx.com                'Connection': 'close',
12501117Szelenkov@nginx.com            },
12511117Szelenkov@nginx.com            body=body,
12521117Szelenkov@nginx.com        )
12531117Szelenkov@nginx.com
12541117Szelenkov@nginx.com        self.assertEqual(resp['status'], 200, 'multipart status')
12551293St.nateldemoura@f5.com        self.assertRegex(
12561293St.nateldemoura@f5.com            resp['body'], r'sample\.txt created', 'multipart body'
12571293St.nateldemoura@f5.com        )
12581117Szelenkov@nginx.com        self.assertIsNotNone(
12591293St.nateldemoura@f5.com            self.search_in_log(
12601293St.nateldemoura@f5.com                r'^Data from sample file$', name=reldst + '/sample.txt'
12611293St.nateldemoura@f5.com            ),
12621117Szelenkov@nginx.com            'file created',
12631117Szelenkov@nginx.com        )
12641017Szelenkov@nginx.com
1265977Smax.romanov@gmail.comif __name__ == '__main__':
12661019Szelenkov@nginx.com    TestJavaApplication.main()
1267