11355St.nateldemoura@f5.comimport io 21293St.nateldemoura@f5.comimport os 31596Szelenkov@nginx.comimport re 4977Smax.romanov@gmail.comimport time 51477Szelenkov@nginx.com 61019Szelenkov@nginx.comfrom unit.applications.lang.java import TestApplicationJava 71730Szelenkov@nginx.comfrom unit.option import option 81735Szelenkov@nginx.comfrom unit.utils import public_dir 91017Szelenkov@nginx.com 101019Szelenkov@nginx.comclass TestJavaApplication(TestApplicationJava): 111467Szelenkov@nginx.com prerequisites = {'modules': {'java': 'all'}} 12977Smax.romanov@gmail.com 13*1736Szelenkov@nginx.com def test_java_conf_error(self, temp_dir, skip_alert): 141596Szelenkov@nginx.com skip_alert( 151596Szelenkov@nginx.com r'realpath.*failed', 161596Szelenkov@nginx.com r'failed to apply new conf', 171596Szelenkov@nginx.com r'application setup failed', 181106Szelenkov@nginx.com ) 191596Szelenkov@nginx.com assert 'error' in self.conf( 201596Szelenkov@nginx.com { 211596Szelenkov@nginx.com "listeners": {"*:7080": {"pass": "applications/app"}}, 221596Szelenkov@nginx.com "applications": { 231596Szelenkov@nginx.com "app": { 241596Szelenkov@nginx.com "type": "java", 251596Szelenkov@nginx.com "processes": 1, 261596Szelenkov@nginx.com "working_directory": option.test_dir + "/java/empty", 271654Szelenkov@nginx.com "webapp": temp_dir + "/java", 281654Szelenkov@nginx.com "unit_jars": temp_dir + "/no_such_dir", 291596Szelenkov@nginx.com } 301596Szelenkov@nginx.com }, 311596Szelenkov@nginx.com } 321596Szelenkov@nginx.com ), 'conf error' 331106Szelenkov@nginx.com 341654Szelenkov@nginx.com def test_java_war(self, temp_dir): 351106Szelenkov@nginx.com self.load('empty_war') 361106Szelenkov@nginx.com 371596Szelenkov@nginx.com assert 'success' in self.conf( 381654Szelenkov@nginx.com '"' + temp_dir + '/java/empty.war"', 391596Szelenkov@nginx.com '/config/applications/empty_war/webapp', 401596Szelenkov@nginx.com ), 'configure war' 411106Szelenkov@nginx.com 421596Szelenkov@nginx.com assert self.get()['status'] == 200, 'war' 431106Szelenkov@nginx.com 44977Smax.romanov@gmail.com def test_java_application_cookies(self): 45977Smax.romanov@gmail.com self.load('cookies') 46977Smax.romanov@gmail.com 471017Szelenkov@nginx.com headers = self.get( 481017Szelenkov@nginx.com headers={ 491017Szelenkov@nginx.com 'Cookie': 'var1=val1; var2=val2', 501017Szelenkov@nginx.com 'Host': 'localhost', 511017Szelenkov@nginx.com 'Connection': 'close', 521017Szelenkov@nginx.com } 531017Szelenkov@nginx.com )['headers'] 54977Smax.romanov@gmail.com 551596Szelenkov@nginx.com assert headers['X-Cookie-1'] == 'val1', 'cookie 1' 561596Szelenkov@nginx.com assert headers['X-Cookie-2'] == 'val2', 'cookie 2' 57977Smax.romanov@gmail.com 58977Smax.romanov@gmail.com def test_java_application_filter(self): 59977Smax.romanov@gmail.com self.load('filter') 60977Smax.romanov@gmail.com 61977Smax.romanov@gmail.com headers = self.get()['headers'] 62977Smax.romanov@gmail.com 631596Szelenkov@nginx.com assert headers['X-Filter-Before'] == '1', 'filter before' 641596Szelenkov@nginx.com assert headers['X-Filter-After'] == '1', 'filter after' 65977Smax.romanov@gmail.com 661596Szelenkov@nginx.com assert ( 671596Szelenkov@nginx.com self.get(url='/test')['headers']['X-Filter-After'] == '0' 681596Szelenkov@nginx.com ), 'filter after 2' 69977Smax.romanov@gmail.com 70977Smax.romanov@gmail.com def test_java_application_get_variables(self): 71977Smax.romanov@gmail.com self.load('get_params') 72977Smax.romanov@gmail.com 731017Szelenkov@nginx.com headers = self.get(url='/?var1=val1&var2=&var4=val4&var4=foo')[ 741017Szelenkov@nginx.com 'headers' 751017Szelenkov@nginx.com ] 76977Smax.romanov@gmail.com 771596Szelenkov@nginx.com assert headers['X-Var-1'] == 'val1', 'GET variables' 781596Szelenkov@nginx.com assert headers['X-Var-2'] == 'true', 'GET variables 2' 791596Szelenkov@nginx.com assert headers['X-Var-3'] == 'false', 'GET variables 3' 80977Smax.romanov@gmail.com 811596Szelenkov@nginx.com assert ( 821596Szelenkov@nginx.com headers['X-Param-Names'] == 'var4 var2 var1 ' 831596Szelenkov@nginx.com ), 'getParameterNames' 841596Szelenkov@nginx.com assert headers['X-Param-Values'] == 'val4 foo ', 'getParameterValues' 851596Szelenkov@nginx.com assert ( 861596Szelenkov@nginx.com headers['X-Param-Map'] == 'var2= var1=val1 var4=val4,foo ' 871596Szelenkov@nginx.com ), 'getParameterMap' 88977Smax.romanov@gmail.com 89977Smax.romanov@gmail.com def test_java_application_post_variables(self): 90977Smax.romanov@gmail.com self.load('post_params') 91977Smax.romanov@gmail.com 921017Szelenkov@nginx.com headers = self.post( 931017Szelenkov@nginx.com headers={ 941017Szelenkov@nginx.com 'Content-Type': 'application/x-www-form-urlencoded', 951017Szelenkov@nginx.com 'Host': 'localhost', 961017Szelenkov@nginx.com 'Connection': 'close', 971017Szelenkov@nginx.com }, 981017Szelenkov@nginx.com body='var1=val1&var2=', 991017Szelenkov@nginx.com )['headers'] 100977Smax.romanov@gmail.com 1011596Szelenkov@nginx.com assert headers['X-Var-1'] == 'val1', 'POST variables' 1021596Szelenkov@nginx.com assert headers['X-Var-2'] == 'true', 'POST variables 2' 1031596Szelenkov@nginx.com assert headers['X-Var-3'] == 'false', 'POST variables 3' 104977Smax.romanov@gmail.com 105977Smax.romanov@gmail.com def test_java_application_session(self): 106977Smax.romanov@gmail.com self.load('session') 107977Smax.romanov@gmail.com 108977Smax.romanov@gmail.com headers = self.get(url='/?var1=val1')['headers'] 109977Smax.romanov@gmail.com session_id = headers['X-Session-Id'] 110977Smax.romanov@gmail.com 1111596Szelenkov@nginx.com assert headers['X-Var-1'] == 'null', 'variable empty' 1121596Szelenkov@nginx.com assert headers['X-Session-New'] == 'true', 'session create' 113977Smax.romanov@gmail.com 1141017Szelenkov@nginx.com headers = self.get( 1151017Szelenkov@nginx.com headers={ 1161017Szelenkov@nginx.com 'Host': 'localhost', 1171017Szelenkov@nginx.com 'Cookie': 'JSESSIONID=' + session_id, 1181017Szelenkov@nginx.com 'Connection': 'close', 1191017Szelenkov@nginx.com }, 1201017Szelenkov@nginx.com url='/?var1=val2', 1211017Szelenkov@nginx.com )['headers'] 122977Smax.romanov@gmail.com 1231596Szelenkov@nginx.com assert headers['X-Var-1'] == 'val1', 'variable' 1241596Szelenkov@nginx.com assert headers['X-Session-New'] == 'false', 'session resume' 1251596Szelenkov@nginx.com assert session_id == headers['X-Session-Id'], 'session same id' 126977Smax.romanov@gmail.com 127977Smax.romanov@gmail.com def test_java_application_session_active(self): 128977Smax.romanov@gmail.com self.load('session_inactive') 129977Smax.romanov@gmail.com 1301596Szelenkov@nginx.com resp = self.get( 1311596Szelenkov@nginx.com headers={ 1321596Szelenkov@nginx.com 'X-Interval': '4', 1331596Szelenkov@nginx.com 'Host': 'localhost', 1341596Szelenkov@nginx.com 'Connection': 'close', 1351596Szelenkov@nginx.com } 1361596Szelenkov@nginx.com ) 137977Smax.romanov@gmail.com session_id = resp['headers']['X-Session-Id'] 138977Smax.romanov@gmail.com 1391596Szelenkov@nginx.com assert resp['status'] == 200, 'session init' 1401596Szelenkov@nginx.com assert resp['headers']['X-Session-Interval'] == '4', 'session interval' 1411596Szelenkov@nginx.com assert ( 1421017Szelenkov@nginx.com abs( 1431017Szelenkov@nginx.com self.date_to_sec_epoch( 1441017Szelenkov@nginx.com resp['headers']['X-Session-Last-Access-Time'] 1451017Szelenkov@nginx.com ) 1461017Szelenkov@nginx.com - self.sec_epoch() 1471596Szelenkov@nginx.com ) 1481596Szelenkov@nginx.com < 5 1491596Szelenkov@nginx.com ), 'session last access time' 150977Smax.romanov@gmail.com 151977Smax.romanov@gmail.com time.sleep(1) 152977Smax.romanov@gmail.com 1531017Szelenkov@nginx.com resp = self.get( 1541017Szelenkov@nginx.com headers={ 1551017Szelenkov@nginx.com 'Host': 'localhost', 1561017Szelenkov@nginx.com 'Cookie': 'JSESSIONID=' + session_id, 1571017Szelenkov@nginx.com 'Connection': 'close', 1581017Szelenkov@nginx.com } 1591017Szelenkov@nginx.com ) 160977Smax.romanov@gmail.com 1611596Szelenkov@nginx.com assert resp['headers']['X-Session-Id'] == session_id, 'session active' 162977Smax.romanov@gmail.com 163977Smax.romanov@gmail.com session_id = resp['headers']['X-Session-Id'] 164977Smax.romanov@gmail.com 165977Smax.romanov@gmail.com time.sleep(1) 166977Smax.romanov@gmail.com 1671017Szelenkov@nginx.com resp = self.get( 1681017Szelenkov@nginx.com headers={ 1691017Szelenkov@nginx.com 'Host': 'localhost', 1701017Szelenkov@nginx.com 'Cookie': 'JSESSIONID=' + session_id, 1711017Szelenkov@nginx.com 'Connection': 'close', 1721017Szelenkov@nginx.com } 1731017Szelenkov@nginx.com ) 174977Smax.romanov@gmail.com 1751596Szelenkov@nginx.com assert ( 1761596Szelenkov@nginx.com resp['headers']['X-Session-Id'] == session_id 1771596Szelenkov@nginx.com ), 'session active 2' 178977Smax.romanov@gmail.com 1791088Szelenkov@nginx.com time.sleep(2) 180977Smax.romanov@gmail.com 1811017Szelenkov@nginx.com resp = self.get( 1821017Szelenkov@nginx.com headers={ 1831017Szelenkov@nginx.com 'Host': 'localhost', 1841017Szelenkov@nginx.com 'Cookie': 'JSESSIONID=' + session_id, 1851017Szelenkov@nginx.com 'Connection': 'close', 1861017Szelenkov@nginx.com } 1871017Szelenkov@nginx.com ) 188977Smax.romanov@gmail.com 1891596Szelenkov@nginx.com assert ( 1901596Szelenkov@nginx.com resp['headers']['X-Session-Id'] == session_id 1911596Szelenkov@nginx.com ), 'session active 3' 192977Smax.romanov@gmail.com 193977Smax.romanov@gmail.com def test_java_application_session_inactive(self): 194977Smax.romanov@gmail.com self.load('session_inactive') 195977Smax.romanov@gmail.com 1961596Szelenkov@nginx.com resp = self.get( 1971596Szelenkov@nginx.com headers={ 1981596Szelenkov@nginx.com 'X-Interval': '1', 1991596Szelenkov@nginx.com 'Host': 'localhost', 2001596Szelenkov@nginx.com 'Connection': 'close', 2011596Szelenkov@nginx.com } 2021596Szelenkov@nginx.com ) 203977Smax.romanov@gmail.com session_id = resp['headers']['X-Session-Id'] 204977Smax.romanov@gmail.com 205977Smax.romanov@gmail.com time.sleep(3) 206977Smax.romanov@gmail.com 2071017Szelenkov@nginx.com resp = self.get( 2081017Szelenkov@nginx.com headers={ 2091017Szelenkov@nginx.com 'Host': 'localhost', 2101017Szelenkov@nginx.com 'Cookie': 'JSESSIONID=' + session_id, 2111017Szelenkov@nginx.com 'Connection': 'close', 2121017Szelenkov@nginx.com } 2131017Szelenkov@nginx.com ) 214977Smax.romanov@gmail.com 2151596Szelenkov@nginx.com assert ( 2161596Szelenkov@nginx.com resp['headers']['X-Session-Id'] != session_id 2171596Szelenkov@nginx.com ), 'session inactive' 218977Smax.romanov@gmail.com 219977Smax.romanov@gmail.com def test_java_application_session_invalidate(self): 220977Smax.romanov@gmail.com self.load('session_invalidate') 221977Smax.romanov@gmail.com 222977Smax.romanov@gmail.com resp = self.get() 223977Smax.romanov@gmail.com session_id = resp['headers']['X-Session-Id'] 224977Smax.romanov@gmail.com 2251017Szelenkov@nginx.com resp = self.get( 2261017Szelenkov@nginx.com headers={ 2271017Szelenkov@nginx.com 'Host': 'localhost', 2281017Szelenkov@nginx.com 'Cookie': 'JSESSIONID=' + session_id, 2291017Szelenkov@nginx.com 'Connection': 'close', 2301017Szelenkov@nginx.com } 2311017Szelenkov@nginx.com ) 232977Smax.romanov@gmail.com 2331596Szelenkov@nginx.com assert ( 2341596Szelenkov@nginx.com resp['headers']['X-Session-Id'] != session_id 2351596Szelenkov@nginx.com ), 'session invalidate' 236977Smax.romanov@gmail.com 237977Smax.romanov@gmail.com def test_java_application_session_listeners(self): 238977Smax.romanov@gmail.com self.load('session_listeners') 239977Smax.romanov@gmail.com 240977Smax.romanov@gmail.com headers = self.get(url='/test?var1=val1')['headers'] 241977Smax.romanov@gmail.com session_id = headers['X-Session-Id'] 242977Smax.romanov@gmail.com 2431596Szelenkov@nginx.com assert headers['X-Session-Created'] == session_id, 'session create' 2441596Szelenkov@nginx.com assert headers['X-Attr-Added'] == 'var1=val1', 'attribute add' 245977Smax.romanov@gmail.com 2461017Szelenkov@nginx.com headers = self.get( 2471017Szelenkov@nginx.com headers={ 2481017Szelenkov@nginx.com 'Host': 'localhost', 2491017Szelenkov@nginx.com 'Cookie': 'JSESSIONID=' + session_id, 2501017Szelenkov@nginx.com 'Connection': 'close', 2511017Szelenkov@nginx.com }, 2521017Szelenkov@nginx.com url='/?var1=val2', 2531017Szelenkov@nginx.com )['headers'] 254977Smax.romanov@gmail.com 2551596Szelenkov@nginx.com assert session_id == headers['X-Session-Id'], 'session same id' 2561596Szelenkov@nginx.com assert headers['X-Attr-Replaced'] == 'var1=val1', 'attribute replace' 257977Smax.romanov@gmail.com 2581017Szelenkov@nginx.com headers = self.get( 2591017Szelenkov@nginx.com headers={ 2601017Szelenkov@nginx.com 'Host': 'localhost', 2611017Szelenkov@nginx.com 'Cookie': 'JSESSIONID=' + session_id, 2621017Szelenkov@nginx.com 'Connection': 'close', 2631017Szelenkov@nginx.com }, 2641017Szelenkov@nginx.com url='/', 2651017Szelenkov@nginx.com )['headers'] 266977Smax.romanov@gmail.com 2671596Szelenkov@nginx.com assert session_id == headers['X-Session-Id'], 'session same id' 2681596Szelenkov@nginx.com assert headers['X-Attr-Removed'] == 'var1=val2', 'attribute remove' 269977Smax.romanov@gmail.com 270977Smax.romanov@gmail.com def test_java_application_jsp(self): 271977Smax.romanov@gmail.com self.load('jsp') 272977Smax.romanov@gmail.com 273977Smax.romanov@gmail.com headers = self.get(url='/index.jsp')['headers'] 274977Smax.romanov@gmail.com 2751596Szelenkov@nginx.com assert headers['X-Unit-JSP'] == 'ok', 'JSP Ok header' 276977Smax.romanov@gmail.com 277977Smax.romanov@gmail.com def test_java_application_url_pattern(self): 278977Smax.romanov@gmail.com self.load('url_pattern') 279977Smax.romanov@gmail.com 280977Smax.romanov@gmail.com headers = self.get(url='/foo/bar/index.html')['headers'] 281977Smax.romanov@gmail.com 2821596Szelenkov@nginx.com assert headers['X-Id'] == 'servlet1', '#1 Servlet1 request' 2831596Szelenkov@nginx.com assert ( 2841596Szelenkov@nginx.com headers['X-Request-URI'] == '/foo/bar/index.html' 2851596Szelenkov@nginx.com ), '#1 request URI' 2861596Szelenkov@nginx.com assert headers['X-Servlet-Path'] == '/foo/bar', '#1 servlet path' 2871596Szelenkov@nginx.com assert headers['X-Path-Info'] == '/index.html', '#1 path info' 288977Smax.romanov@gmail.com 289977Smax.romanov@gmail.com headers = self.get(url='/foo/bar/index.bop')['headers'] 290977Smax.romanov@gmail.com 2911596Szelenkov@nginx.com assert headers['X-Id'] == 'servlet1', '#2 Servlet1 request' 2921596Szelenkov@nginx.com assert ( 2931596Szelenkov@nginx.com headers['X-Request-URI'] == '/foo/bar/index.bop' 2941596Szelenkov@nginx.com ), '#2 request URI' 2951596Szelenkov@nginx.com assert headers['X-Servlet-Path'] == '/foo/bar', '#2 servlet path' 2961596Szelenkov@nginx.com assert headers['X-Path-Info'] == '/index.bop', '#2 path info' 297977Smax.romanov@gmail.com 298977Smax.romanov@gmail.com headers = self.get(url='/baz')['headers'] 299977Smax.romanov@gmail.com 3001596Szelenkov@nginx.com assert headers['X-Id'] == 'servlet2', '#3 Servlet2 request' 3011596Szelenkov@nginx.com assert headers['X-Request-URI'] == '/baz', '#3 request URI' 3021596Szelenkov@nginx.com assert headers['X-Servlet-Path'] == '/baz', '#3 servlet path' 3031596Szelenkov@nginx.com assert headers['X-Path-Info'] == 'null', '#3 path info' 304977Smax.romanov@gmail.com 305977Smax.romanov@gmail.com headers = self.get(url='/baz/index.html')['headers'] 306977Smax.romanov@gmail.com 3071596Szelenkov@nginx.com assert headers['X-Id'] == 'servlet2', '#4 Servlet2 request' 3081596Szelenkov@nginx.com assert headers['X-Request-URI'] == '/baz/index.html', '#4 request URI' 3091596Szelenkov@nginx.com assert headers['X-Servlet-Path'] == '/baz', '#4 servlet path' 3101596Szelenkov@nginx.com assert headers['X-Path-Info'] == '/index.html', '#4 path info' 311977Smax.romanov@gmail.com 312977Smax.romanov@gmail.com headers = self.get(url='/catalog')['headers'] 313977Smax.romanov@gmail.com 3141596Szelenkov@nginx.com assert headers['X-Id'] == 'servlet3', '#5 Servlet3 request' 3151596Szelenkov@nginx.com assert headers['X-Request-URI'] == '/catalog', '#5 request URI' 3161596Szelenkov@nginx.com assert headers['X-Servlet-Path'] == '/catalog', '#5 servlet path' 3171596Szelenkov@nginx.com assert headers['X-Path-Info'] == 'null', '#5 path info' 318977Smax.romanov@gmail.com 319977Smax.romanov@gmail.com headers = self.get(url='/catalog/index.html')['headers'] 320977Smax.romanov@gmail.com 3211596Szelenkov@nginx.com assert headers['X-Id'] == 'default', '#6 default request' 3221596Szelenkov@nginx.com assert ( 3231596Szelenkov@nginx.com headers['X-Request-URI'] == '/catalog/index.html' 3241596Szelenkov@nginx.com ), '#6 request URI' 3251596Szelenkov@nginx.com assert ( 3261596Szelenkov@nginx.com headers['X-Servlet-Path'] == '/catalog/index.html' 3271596Szelenkov@nginx.com ), '#6 servlet path' 3281596Szelenkov@nginx.com assert headers['X-Path-Info'] == 'null', '#6 path info' 329977Smax.romanov@gmail.com 330977Smax.romanov@gmail.com headers = self.get(url='/catalog/racecar.bop')['headers'] 331977Smax.romanov@gmail.com 3321596Szelenkov@nginx.com assert headers['X-Id'] == 'servlet4', '#7 servlet4 request' 3331596Szelenkov@nginx.com assert ( 3341596Szelenkov@nginx.com headers['X-Request-URI'] == '/catalog/racecar.bop' 3351596Szelenkov@nginx.com ), '#7 request URI' 3361596Szelenkov@nginx.com assert ( 3371596Szelenkov@nginx.com headers['X-Servlet-Path'] == '/catalog/racecar.bop' 3381596Szelenkov@nginx.com ), '#7 servlet path' 3391596Szelenkov@nginx.com assert headers['X-Path-Info'] == 'null', '#7 path info' 340977Smax.romanov@gmail.com 3411017Szelenkov@nginx.com headers = self.get(url='/index.bop')['headers'] 342977Smax.romanov@gmail.com 3431596Szelenkov@nginx.com assert headers['X-Id'] == 'servlet4', '#8 servlet4 request' 3441596Szelenkov@nginx.com assert headers['X-Request-URI'] == '/index.bop', '#8 request URI' 3451596Szelenkov@nginx.com assert headers['X-Servlet-Path'] == '/index.bop', '#8 servlet path' 3461596Szelenkov@nginx.com assert headers['X-Path-Info'] == 'null', '#8 path info' 347977Smax.romanov@gmail.com 348977Smax.romanov@gmail.com headers = self.get(url='/foo/baz')['headers'] 349977Smax.romanov@gmail.com 3501596Szelenkov@nginx.com assert headers['X-Id'] == 'servlet0', '#9 servlet0 request' 3511596Szelenkov@nginx.com assert headers['X-Request-URI'] == '/foo/baz', '#9 request URI' 3521596Szelenkov@nginx.com assert headers['X-Servlet-Path'] == '/foo', '#9 servlet path' 3531596Szelenkov@nginx.com assert headers['X-Path-Info'] == '/baz', '#9 path info' 354977Smax.romanov@gmail.com 355977Smax.romanov@gmail.com headers = self.get()['headers'] 356977Smax.romanov@gmail.com 3571596Szelenkov@nginx.com assert headers['X-Id'] == 'default', '#10 default request' 3581596Szelenkov@nginx.com assert headers['X-Request-URI'] == '/', '#10 request URI' 3591596Szelenkov@nginx.com assert headers['X-Servlet-Path'] == '/', '#10 servlet path' 3601596Szelenkov@nginx.com assert headers['X-Path-Info'] == 'null', '#10 path info' 361977Smax.romanov@gmail.com 362977Smax.romanov@gmail.com headers = self.get(url='/index.bop/')['headers'] 363977Smax.romanov@gmail.com 3641596Szelenkov@nginx.com assert headers['X-Id'] == 'default', '#11 default request' 3651596Szelenkov@nginx.com assert headers['X-Request-URI'] == '/index.bop/', '#11 request URI' 3661596Szelenkov@nginx.com assert headers['X-Servlet-Path'] == '/index.bop/', '#11 servlet path' 3671596Szelenkov@nginx.com assert headers['X-Path-Info'] == 'null', '#11 path info' 368977Smax.romanov@gmail.com 369977Smax.romanov@gmail.com def test_java_application_header(self): 370977Smax.romanov@gmail.com self.load('header') 371977Smax.romanov@gmail.com 372977Smax.romanov@gmail.com headers = self.get()['headers'] 373977Smax.romanov@gmail.com 3741596Szelenkov@nginx.com assert headers['X-Set-Utf8-Value'] == '????', 'set Utf8 header value' 3751596Szelenkov@nginx.com assert headers['X-Set-Utf8-Name-???'] == 'x', 'set Utf8 header name' 3761596Szelenkov@nginx.com assert headers['X-Add-Utf8-Value'] == '????', 'add Utf8 header value' 3771596Szelenkov@nginx.com assert headers['X-Add-Utf8-Name-???'] == 'y', 'add Utf8 header name' 3781596Szelenkov@nginx.com assert headers['X-Add-Test'] == 'v1', 'add null header' 3791596Szelenkov@nginx.com assert ('X-Set-Test1' in headers) == False, 'set null header' 3801596Szelenkov@nginx.com assert headers['X-Set-Test2'] == '', 'set empty header' 381977Smax.romanov@gmail.com 382977Smax.romanov@gmail.com def test_java_application_content_type(self): 383977Smax.romanov@gmail.com self.load('content_type') 384977Smax.romanov@gmail.com 385977Smax.romanov@gmail.com headers = self.get(url='/1')['headers'] 386977Smax.romanov@gmail.com 3871596Szelenkov@nginx.com assert ( 3881596Szelenkov@nginx.com headers['Content-Type'] == 'text/plain;charset=utf-8' 3891596Szelenkov@nginx.com ), '#1 Content-Type header' 3901596Szelenkov@nginx.com assert ( 3911596Szelenkov@nginx.com headers['X-Content-Type'] == 'text/plain;charset=utf-8' 3921596Szelenkov@nginx.com ), '#1 response Content-Type' 3931596Szelenkov@nginx.com assert ( 3941596Szelenkov@nginx.com headers['X-Character-Encoding'] == 'utf-8' 3951596Szelenkov@nginx.com ), '#1 response charset' 396977Smax.romanov@gmail.com 397977Smax.romanov@gmail.com headers = self.get(url='/2')['headers'] 398977Smax.romanov@gmail.com 3991596Szelenkov@nginx.com assert ( 4001596Szelenkov@nginx.com headers['Content-Type'] == 'text/plain;charset=iso-8859-1' 4011596Szelenkov@nginx.com ), '#2 Content-Type header' 4021596Szelenkov@nginx.com assert ( 4031596Szelenkov@nginx.com headers['X-Content-Type'] == 'text/plain;charset=iso-8859-1' 4041596Szelenkov@nginx.com ), '#2 response Content-Type' 4051596Szelenkov@nginx.com assert ( 4061596Szelenkov@nginx.com headers['X-Character-Encoding'] == 'iso-8859-1' 4071596Szelenkov@nginx.com ), '#2 response charset' 408977Smax.romanov@gmail.com 409977Smax.romanov@gmail.com headers = self.get(url='/3')['headers'] 410977Smax.romanov@gmail.com 4111596Szelenkov@nginx.com assert ( 4121596Szelenkov@nginx.com headers['Content-Type'] == 'text/plain;charset=windows-1251' 4131596Szelenkov@nginx.com ), '#3 Content-Type header' 4141596Szelenkov@nginx.com assert ( 4151596Szelenkov@nginx.com headers['X-Content-Type'] == 'text/plain;charset=windows-1251' 4161596Szelenkov@nginx.com ), '#3 response Content-Type' 4171596Szelenkov@nginx.com assert ( 4181596Szelenkov@nginx.com headers['X-Character-Encoding'] == 'windows-1251' 4191596Szelenkov@nginx.com ), '#3 response charset' 420977Smax.romanov@gmail.com 421977Smax.romanov@gmail.com headers = self.get(url='/4')['headers'] 422977Smax.romanov@gmail.com 4231596Szelenkov@nginx.com assert ( 4241596Szelenkov@nginx.com headers['Content-Type'] == 'text/plain;charset=windows-1251' 4251596Szelenkov@nginx.com ), '#4 Content-Type header' 4261596Szelenkov@nginx.com assert ( 4271596Szelenkov@nginx.com headers['X-Content-Type'] == 'text/plain;charset=windows-1251' 4281596Szelenkov@nginx.com ), '#4 response Content-Type' 4291596Szelenkov@nginx.com assert ( 4301596Szelenkov@nginx.com headers['X-Character-Encoding'] == 'windows-1251' 4311596Szelenkov@nginx.com ), '#4 response charset' 432977Smax.romanov@gmail.com 433977Smax.romanov@gmail.com headers = self.get(url='/5')['headers'] 434977Smax.romanov@gmail.com 4351596Szelenkov@nginx.com assert ( 4361596Szelenkov@nginx.com headers['Content-Type'] == 'text/plain;charset=iso-8859-1' 4371596Szelenkov@nginx.com ), '#5 Content-Type header' 4381596Szelenkov@nginx.com assert ( 4391596Szelenkov@nginx.com headers['X-Content-Type'] == 'text/plain;charset=iso-8859-1' 4401596Szelenkov@nginx.com ), '#5 response Content-Type' 4411596Szelenkov@nginx.com assert ( 4421596Szelenkov@nginx.com headers['X-Character-Encoding'] == 'iso-8859-1' 4431596Szelenkov@nginx.com ), '#5 response charset' 444977Smax.romanov@gmail.com 445977Smax.romanov@gmail.com headers = self.get(url='/6')['headers'] 446977Smax.romanov@gmail.com 4471596Szelenkov@nginx.com assert ( 4481596Szelenkov@nginx.com 'Content-Type' in headers 4491596Szelenkov@nginx.com ) == False, '#6 no Content-Type header' 4501596Szelenkov@nginx.com assert ( 4511596Szelenkov@nginx.com 'X-Content-Type' in headers 4521596Szelenkov@nginx.com ) == False, '#6 no response Content-Type' 4531596Szelenkov@nginx.com assert ( 4541596Szelenkov@nginx.com headers['X-Character-Encoding'] == 'utf-8' 4551596Szelenkov@nginx.com ), '#6 response charset' 456977Smax.romanov@gmail.com 457977Smax.romanov@gmail.com headers = self.get(url='/7')['headers'] 458977Smax.romanov@gmail.com 4591596Szelenkov@nginx.com assert ( 4601596Szelenkov@nginx.com headers['Content-Type'] == 'text/plain;charset=utf-8' 4611596Szelenkov@nginx.com ), '#7 Content-Type header' 4621596Szelenkov@nginx.com assert ( 4631596Szelenkov@nginx.com headers['X-Content-Type'] == 'text/plain;charset=utf-8' 4641596Szelenkov@nginx.com ), '#7 response Content-Type' 4651596Szelenkov@nginx.com assert ( 4661596Szelenkov@nginx.com headers['X-Character-Encoding'] == 'utf-8' 4671596Szelenkov@nginx.com ), '#7 response charset' 468977Smax.romanov@gmail.com 469977Smax.romanov@gmail.com headers = self.get(url='/8')['headers'] 470977Smax.romanov@gmail.com 4711596Szelenkov@nginx.com assert ( 4721596Szelenkov@nginx.com headers['Content-Type'] == 'text/html;charset=utf-8' 4731596Szelenkov@nginx.com ), '#8 Content-Type header' 4741596Szelenkov@nginx.com assert ( 4751596Szelenkov@nginx.com headers['X-Content-Type'] == 'text/html;charset=utf-8' 4761596Szelenkov@nginx.com ), '#8 response Content-Type' 4771596Szelenkov@nginx.com assert ( 4781596Szelenkov@nginx.com headers['X-Character-Encoding'] == 'utf-8' 4791596Szelenkov@nginx.com ), '#8 response charset' 480977Smax.romanov@gmail.com 481977Smax.romanov@gmail.com def test_java_application_welcome_files(self): 482977Smax.romanov@gmail.com self.load('welcome_files') 483977Smax.romanov@gmail.com 484977Smax.romanov@gmail.com headers = self.get()['headers'] 485977Smax.romanov@gmail.com 486977Smax.romanov@gmail.com resp = self.get(url='/dir1') 487977Smax.romanov@gmail.com 4881596Szelenkov@nginx.com assert resp['status'] == 302, 'dir redirect expected' 489977Smax.romanov@gmail.com 490977Smax.romanov@gmail.com resp = self.get(url='/dir1/') 491977Smax.romanov@gmail.com 4921596Szelenkov@nginx.com assert ( 4931596Szelenkov@nginx.com 'This is index.txt.' in resp['body'] 4941596Szelenkov@nginx.com ) == True, 'dir1 index body' 4951596Szelenkov@nginx.com assert resp['headers']['X-TXT-Filter'] == '1', 'TXT Filter header' 496977Smax.romanov@gmail.com 497977Smax.romanov@gmail.com headers = self.get(url='/dir2/')['headers'] 498977Smax.romanov@gmail.com 4991596Szelenkov@nginx.com assert headers['X-Unit-JSP'] == 'ok', 'JSP Ok header' 5001596Szelenkov@nginx.com assert headers['X-JSP-Filter'] == '1', 'JSP Filter header' 501977Smax.romanov@gmail.com 502977Smax.romanov@gmail.com headers = self.get(url='/dir3/')['headers'] 503977Smax.romanov@gmail.com 5041596Szelenkov@nginx.com assert ( 5051596Szelenkov@nginx.com headers['X-App-Servlet'] == '1' 5061596Szelenkov@nginx.com ), 'URL pattern overrides welcome file' 507977Smax.romanov@gmail.com 508977Smax.romanov@gmail.com headers = self.get(url='/dir4/')['headers'] 509977Smax.romanov@gmail.com 5101596Szelenkov@nginx.com assert ( 5111596Szelenkov@nginx.com 'X-App-Servlet' in headers 5121596Szelenkov@nginx.com ) == False, 'Static welcome file served first' 513977Smax.romanov@gmail.com 514977Smax.romanov@gmail.com headers = self.get(url='/dir5/')['headers'] 515977Smax.romanov@gmail.com 5161596Szelenkov@nginx.com assert ( 5171596Szelenkov@nginx.com headers['X-App-Servlet'] == '1' 5181596Szelenkov@nginx.com ), 'Servlet for welcome file served when no static file found' 519977Smax.romanov@gmail.com 520977Smax.romanov@gmail.com def test_java_application_request_listeners(self): 521977Smax.romanov@gmail.com self.load('request_listeners') 522977Smax.romanov@gmail.com 523977Smax.romanov@gmail.com headers = self.get(url='/test1')['headers'] 524977Smax.romanov@gmail.com 5251596Szelenkov@nginx.com assert ( 5261596Szelenkov@nginx.com headers['X-Request-Initialized'] == '/test1' 5271596Szelenkov@nginx.com ), 'request initialized event' 5281596Szelenkov@nginx.com assert headers['X-Request-Destroyed'] == '', 'request destroyed event' 5291596Szelenkov@nginx.com assert headers['X-Attr-Added'] == '', 'attribute added event' 5301596Szelenkov@nginx.com assert headers['X-Attr-Removed'] == '', 'attribute removed event' 5311596Szelenkov@nginx.com assert headers['X-Attr-Replaced'] == '', 'attribute replaced event' 532977Smax.romanov@gmail.com 533977Smax.romanov@gmail.com headers = self.get(url='/test2?var1=1')['headers'] 534977Smax.romanov@gmail.com 5351596Szelenkov@nginx.com assert ( 5361596Szelenkov@nginx.com headers['X-Request-Initialized'] == '/test2' 5371596Szelenkov@nginx.com ), 'request initialized event' 5381596Szelenkov@nginx.com assert ( 5391596Szelenkov@nginx.com headers['X-Request-Destroyed'] == '/test1' 5401596Szelenkov@nginx.com ), 'request destroyed event' 5411596Szelenkov@nginx.com assert headers['X-Attr-Added'] == 'var=1;', 'attribute added event' 5421596Szelenkov@nginx.com assert headers['X-Attr-Removed'] == 'var=1;', 'attribute removed event' 5431596Szelenkov@nginx.com assert headers['X-Attr-Replaced'] == '', 'attribute replaced event' 544977Smax.romanov@gmail.com 545977Smax.romanov@gmail.com headers = self.get(url='/test3?var1=1&var2=2')['headers'] 546977Smax.romanov@gmail.com 5471596Szelenkov@nginx.com assert ( 5481596Szelenkov@nginx.com headers['X-Request-Initialized'] == '/test3' 5491596Szelenkov@nginx.com ), 'request initialized event' 5501596Szelenkov@nginx.com assert ( 5511596Szelenkov@nginx.com headers['X-Request-Destroyed'] == '/test2' 5521596Szelenkov@nginx.com ), 'request destroyed event' 5531596Szelenkov@nginx.com assert headers['X-Attr-Added'] == 'var=1;', 'attribute added event' 5541596Szelenkov@nginx.com assert headers['X-Attr-Removed'] == 'var=2;', 'attribute removed event' 5551596Szelenkov@nginx.com assert ( 5561596Szelenkov@nginx.com headers['X-Attr-Replaced'] == 'var=1;' 5571596Szelenkov@nginx.com ), 'attribute replaced event' 558977Smax.romanov@gmail.com 559977Smax.romanov@gmail.com headers = self.get(url='/test4?var1=1&var2=2&var3=3')['headers'] 560977Smax.romanov@gmail.com 5611596Szelenkov@nginx.com assert ( 5621596Szelenkov@nginx.com headers['X-Request-Initialized'] == '/test4' 5631596Szelenkov@nginx.com ), 'request initialized event' 5641596Szelenkov@nginx.com assert ( 5651596Szelenkov@nginx.com headers['X-Request-Destroyed'] == '/test3' 5661596Szelenkov@nginx.com ), 'request destroyed event' 5671596Szelenkov@nginx.com assert headers['X-Attr-Added'] == 'var=1;', 'attribute added event' 5681596Szelenkov@nginx.com assert headers['X-Attr-Removed'] == '', 'attribute removed event' 5691596Szelenkov@nginx.com assert ( 5701596Szelenkov@nginx.com headers['X-Attr-Replaced'] == 'var=1;var=2;' 5711596Szelenkov@nginx.com ), 'attribute replaced event' 572977Smax.romanov@gmail.com 573977Smax.romanov@gmail.com def test_java_application_request_uri_forward(self): 574977Smax.romanov@gmail.com self.load('forward') 575977Smax.romanov@gmail.com 5761017Szelenkov@nginx.com resp = self.get( 5771017Szelenkov@nginx.com url='/fwd?uri=%2Fdata%2Ftest%3Furi%3Dnew_uri%26a%3D2%26b%3D3&a=1&c=4' 5781017Szelenkov@nginx.com ) 579977Smax.romanov@gmail.com headers = resp['headers'] 580977Smax.romanov@gmail.com 5811596Szelenkov@nginx.com assert ( 5821596Szelenkov@nginx.com headers['X-REQUEST-Id'] == 'fwd' 5831596Szelenkov@nginx.com ), 'initial request servlet mapping' 5841596Szelenkov@nginx.com assert ( 5851596Szelenkov@nginx.com headers['X-Forward-To'] == '/data/test?uri=new_uri&a=2&b=3' 5861596Szelenkov@nginx.com ), 'forwarding triggered' 5871596Szelenkov@nginx.com assert ( 5881596Szelenkov@nginx.com headers['X-REQUEST-Param-uri'] == '/data/test?uri=new_uri&a=2&b=3' 5891596Szelenkov@nginx.com ), 'original uri parameter' 5901596Szelenkov@nginx.com assert headers['X-REQUEST-Param-a'] == '1', 'original a parameter' 5911596Szelenkov@nginx.com assert headers['X-REQUEST-Param-c'] == '4', 'original c parameter' 592977Smax.romanov@gmail.com 5931596Szelenkov@nginx.com assert ( 5941596Szelenkov@nginx.com headers['X-FORWARD-Id'] == 'data' 5951596Szelenkov@nginx.com ), 'forward request servlet mapping' 5961596Szelenkov@nginx.com assert ( 5971596Szelenkov@nginx.com headers['X-FORWARD-Request-URI'] == '/data/test' 5981596Szelenkov@nginx.com ), 'forward request uri' 5991596Szelenkov@nginx.com assert ( 6001596Szelenkov@nginx.com headers['X-FORWARD-Servlet-Path'] == '/data' 6011596Szelenkov@nginx.com ), 'forward request servlet path' 6021596Szelenkov@nginx.com assert ( 6031596Szelenkov@nginx.com headers['X-FORWARD-Path-Info'] == '/test' 6041596Szelenkov@nginx.com ), 'forward request path info' 6051596Szelenkov@nginx.com assert ( 6061596Szelenkov@nginx.com headers['X-FORWARD-Query-String'] == 'uri=new_uri&a=2&b=3' 6071596Szelenkov@nginx.com ), 'forward request query string' 6081596Szelenkov@nginx.com assert ( 6091596Szelenkov@nginx.com headers['X-FORWARD-Param-uri'] 6101596Szelenkov@nginx.com == 'new_uri,/data/test?uri=new_uri&a=2&b=3' 6111596Szelenkov@nginx.com ), 'forward uri parameter' 6121596Szelenkov@nginx.com assert headers['X-FORWARD-Param-a'] == '2,1', 'forward a parameter' 6131596Szelenkov@nginx.com assert headers['X-FORWARD-Param-b'] == '3', 'forward b parameter' 6141596Szelenkov@nginx.com assert headers['X-FORWARD-Param-c'] == '4', 'forward c parameter' 615977Smax.romanov@gmail.com 6161596Szelenkov@nginx.com assert ( 6171596Szelenkov@nginx.com headers['X-javax.servlet.forward.request_uri'] == '/fwd' 6181596Szelenkov@nginx.com ), 'original request uri' 6191596Szelenkov@nginx.com assert ( 6201596Szelenkov@nginx.com headers['X-javax.servlet.forward.context_path'] == '' 6211596Szelenkov@nginx.com ), 'original request context path' 6221596Szelenkov@nginx.com assert ( 6231596Szelenkov@nginx.com headers['X-javax.servlet.forward.servlet_path'] == '/fwd' 6241596Szelenkov@nginx.com ), 'original request servlet path' 6251596Szelenkov@nginx.com assert ( 6261596Szelenkov@nginx.com headers['X-javax.servlet.forward.path_info'] == 'null' 6271596Szelenkov@nginx.com ), 'original request path info' 6281596Szelenkov@nginx.com assert ( 6291596Szelenkov@nginx.com headers['X-javax.servlet.forward.query_string'] 6301596Szelenkov@nginx.com == 'uri=%2Fdata%2Ftest%3Furi%3Dnew_uri%26a%3D2%26b%3D3&a=1&c=4' 6311596Szelenkov@nginx.com ), 'original request query' 632977Smax.romanov@gmail.com 6331596Szelenkov@nginx.com assert ( 6341596Szelenkov@nginx.com 'Before forwarding' in resp['body'] 6351596Szelenkov@nginx.com ) == False, 'discarded data added before forward() call' 6361596Szelenkov@nginx.com assert ( 6371596Szelenkov@nginx.com 'X-After-Forwarding' in headers 6381596Szelenkov@nginx.com ) == False, 'cannot add headers after forward() call' 6391596Szelenkov@nginx.com assert ( 6401596Szelenkov@nginx.com 'After forwarding' in resp['body'] 6411596Szelenkov@nginx.com ) == False, 'cannot add data after forward() call' 642977Smax.romanov@gmail.com 643977Smax.romanov@gmail.com def test_java_application_named_dispatcher_forward(self): 644977Smax.romanov@gmail.com self.load('forward') 645977Smax.romanov@gmail.com 646977Smax.romanov@gmail.com resp = self.get(url='/fwd?disp=name&uri=data') 647977Smax.romanov@gmail.com headers = resp['headers'] 648977Smax.romanov@gmail.com 6491596Szelenkov@nginx.com assert ( 6501596Szelenkov@nginx.com headers['X-REQUEST-Id'] == 'fwd' 6511596Szelenkov@nginx.com ), 'initial request servlet mapping' 6521596Szelenkov@nginx.com assert headers['X-Forward-To'] == 'data', 'forwarding triggered' 653977Smax.romanov@gmail.com 6541596Szelenkov@nginx.com assert ( 6551596Szelenkov@nginx.com headers['X-FORWARD-Id'] == 'data' 6561596Szelenkov@nginx.com ), 'forward request servlet mapping' 6571596Szelenkov@nginx.com assert ( 6581596Szelenkov@nginx.com headers['X-FORWARD-Request-URI'] == '/fwd' 6591596Szelenkov@nginx.com ), 'forward request uri' 6601596Szelenkov@nginx.com assert ( 6611596Szelenkov@nginx.com headers['X-FORWARD-Servlet-Path'] == '/fwd' 6621596Szelenkov@nginx.com ), 'forward request servlet path' 6631596Szelenkov@nginx.com assert ( 6641596Szelenkov@nginx.com headers['X-FORWARD-Path-Info'] == 'null' 6651596Szelenkov@nginx.com ), 'forward request path info' 6661596Szelenkov@nginx.com assert ( 6671596Szelenkov@nginx.com headers['X-FORWARD-Query-String'] == 'disp=name&uri=data' 6681596Szelenkov@nginx.com ), 'forward request query string' 669977Smax.romanov@gmail.com 6701596Szelenkov@nginx.com assert ( 6711596Szelenkov@nginx.com headers['X-javax.servlet.forward.request_uri'] == 'null' 6721596Szelenkov@nginx.com ), 'original request uri' 6731596Szelenkov@nginx.com assert ( 6741596Szelenkov@nginx.com headers['X-javax.servlet.forward.context_path'] == 'null' 6751596Szelenkov@nginx.com ), 'original request context path' 6761596Szelenkov@nginx.com assert ( 6771596Szelenkov@nginx.com headers['X-javax.servlet.forward.servlet_path'] == 'null' 6781596Szelenkov@nginx.com ), 'original request servlet path' 6791596Szelenkov@nginx.com assert ( 6801596Szelenkov@nginx.com headers['X-javax.servlet.forward.path_info'] == 'null' 6811596Szelenkov@nginx.com ), 'original request path info' 6821596Szelenkov@nginx.com assert ( 6831596Szelenkov@nginx.com headers['X-javax.servlet.forward.query_string'] == 'null' 6841596Szelenkov@nginx.com ), 'original request query' 685977Smax.romanov@gmail.com 6861596Szelenkov@nginx.com assert ( 6871596Szelenkov@nginx.com 'Before forwarding' in resp['body'] 6881596Szelenkov@nginx.com ) == False, 'discarded data added before forward() call' 6891596Szelenkov@nginx.com assert ( 6901596Szelenkov@nginx.com 'X-After-Forwarding' in headers 6911596Szelenkov@nginx.com ) == False, 'cannot add headers after forward() call' 6921596Szelenkov@nginx.com assert ( 6931596Szelenkov@nginx.com 'After forwarding' in resp['body'] 6941596Szelenkov@nginx.com ) == False, 'cannot add data after forward() call' 695977Smax.romanov@gmail.com 696977Smax.romanov@gmail.com def test_java_application_request_uri_include(self): 697977Smax.romanov@gmail.com self.load('include') 698977Smax.romanov@gmail.com 699977Smax.romanov@gmail.com resp = self.get(url='/inc?uri=/data/test') 700977Smax.romanov@gmail.com headers = resp['headers'] 701977Smax.romanov@gmail.com body = resp['body'] 702977Smax.romanov@gmail.com 7031596Szelenkov@nginx.com assert ( 7041596Szelenkov@nginx.com headers['X-REQUEST-Id'] == 'inc' 7051596Szelenkov@nginx.com ), 'initial request servlet mapping' 7061596Szelenkov@nginx.com assert headers['X-Include'] == '/data/test', 'including triggered' 707977Smax.romanov@gmail.com 7081596Szelenkov@nginx.com assert ( 7091596Szelenkov@nginx.com 'X-INCLUDE-Id' in headers 7101596Szelenkov@nginx.com ) == False, 'unable to add headers in include request' 711977Smax.romanov@gmail.com 7121596Szelenkov@nginx.com assert ( 7131596Szelenkov@nginx.com 'javax.servlet.include.request_uri: /data/test' in body 7141596Szelenkov@nginx.com ) == True, 'include request uri' 7151596Szelenkov@nginx.com #assert ( 7161596Szelenkov@nginx.com # 'javax.servlet.include.context_path: ' in body 7171596Szelenkov@nginx.com #) == True, 'include request context path' 7181596Szelenkov@nginx.com assert ( 7191596Szelenkov@nginx.com 'javax.servlet.include.servlet_path: /data' in body 7201596Szelenkov@nginx.com ) == True, 'include request servlet path' 7211596Szelenkov@nginx.com assert ( 7221596Szelenkov@nginx.com 'javax.servlet.include.path_info: /test' in body 7231596Szelenkov@nginx.com ) == True, 'include request path info' 7241596Szelenkov@nginx.com assert ( 7251596Szelenkov@nginx.com 'javax.servlet.include.query_string: null' in body 7261596Szelenkov@nginx.com ) == True, 'include request query' 727977Smax.romanov@gmail.com 7281596Szelenkov@nginx.com assert ( 7291596Szelenkov@nginx.com 'Before include' in body 7301596Szelenkov@nginx.com ) == True, 'preserve data added before include() call' 7311596Szelenkov@nginx.com assert ( 7321596Szelenkov@nginx.com headers['X-After-Include'] == 'you-should-see-this' 7331596Szelenkov@nginx.com ), 'add headers after include() call' 7341596Szelenkov@nginx.com assert ( 7351596Szelenkov@nginx.com 'After include' in body 7361596Szelenkov@nginx.com ) == True, 'add data after include() call' 737977Smax.romanov@gmail.com 738977Smax.romanov@gmail.com def test_java_application_named_dispatcher_include(self): 739977Smax.romanov@gmail.com self.load('include') 740977Smax.romanov@gmail.com 741977Smax.romanov@gmail.com resp = self.get(url='/inc?disp=name&uri=data') 742977Smax.romanov@gmail.com headers = resp['headers'] 743977Smax.romanov@gmail.com body = resp['body'] 744977Smax.romanov@gmail.com 7451596Szelenkov@nginx.com assert ( 7461596Szelenkov@nginx.com headers['X-REQUEST-Id'] == 'inc' 7471596Szelenkov@nginx.com ), 'initial request servlet mapping' 7481596Szelenkov@nginx.com assert headers['X-Include'] == 'data', 'including triggered' 749977Smax.romanov@gmail.com 7501596Szelenkov@nginx.com assert ( 7511596Szelenkov@nginx.com 'X-INCLUDE-Id' in headers 7521596Szelenkov@nginx.com ) == False, 'unable to add headers in include request' 753977Smax.romanov@gmail.com 7541596Szelenkov@nginx.com assert ( 7551596Szelenkov@nginx.com 'javax.servlet.include.request_uri: null' in body 7561596Szelenkov@nginx.com ) == True, 'include request uri' 7571596Szelenkov@nginx.com #assert ( 7581596Szelenkov@nginx.com # 'javax.servlet.include.context_path: null' in body 7591596Szelenkov@nginx.com #) == True, 'include request context path' 7601596Szelenkov@nginx.com assert ( 7611596Szelenkov@nginx.com 'javax.servlet.include.servlet_path: null' in body 7621596Szelenkov@nginx.com ) == True, 'include request servlet path' 7631596Szelenkov@nginx.com assert ( 7641596Szelenkov@nginx.com 'javax.servlet.include.path_info: null' in body 7651596Szelenkov@nginx.com ) == True, 'include request path info' 7661596Szelenkov@nginx.com assert ( 7671596Szelenkov@nginx.com 'javax.servlet.include.query_string: null' in body 7681596Szelenkov@nginx.com ) == True, 'include request query' 769977Smax.romanov@gmail.com 7701596Szelenkov@nginx.com assert ( 7711596Szelenkov@nginx.com 'Before include' in body 7721596Szelenkov@nginx.com ) == True, 'preserve data added before include() call' 7731596Szelenkov@nginx.com assert ( 7741596Szelenkov@nginx.com headers['X-After-Include'] == 'you-should-see-this' 7751596Szelenkov@nginx.com ), 'add headers after include() call' 7761596Szelenkov@nginx.com assert ( 7771596Szelenkov@nginx.com 'After include' in body 7781596Szelenkov@nginx.com ) == True, 'add data after include() call' 779977Smax.romanov@gmail.com 780977Smax.romanov@gmail.com def test_java_application_path_translation(self): 781977Smax.romanov@gmail.com self.load('path_translation') 782977Smax.romanov@gmail.com 783977Smax.romanov@gmail.com headers = self.get(url='/pt/test?path=/')['headers'] 784977Smax.romanov@gmail.com 7851596Szelenkov@nginx.com assert headers['X-Servlet-Path'] == '/pt', 'matched servlet path' 7861596Szelenkov@nginx.com assert headers['X-Path-Info'] == '/test', 'the rest of the path' 7871596Szelenkov@nginx.com assert ( 7881596Szelenkov@nginx.com headers['X-Path-Translated'] 7891596Szelenkov@nginx.com == headers['X-Real-Path'] + headers['X-Path-Info'] 7901596Szelenkov@nginx.com ), 'translated path is the app root + path info' 7911596Szelenkov@nginx.com assert ( 7921596Szelenkov@nginx.com headers['X-Resource-Paths'].endswith('/WEB-INF/, /index.html]') 7931596Szelenkov@nginx.com == True 7941596Szelenkov@nginx.com ), 'app root directory content' 7951596Szelenkov@nginx.com assert ( 7961596Szelenkov@nginx.com headers['X-Resource-As-Stream'] == 'null' 7971596Szelenkov@nginx.com ), 'no resource stream for root path' 798977Smax.romanov@gmail.com 799977Smax.romanov@gmail.com headers = self.get(url='/test?path=/none')['headers'] 800977Smax.romanov@gmail.com 8011596Szelenkov@nginx.com assert headers['X-Servlet-Path'] == '/test', 'matched whole path' 8021596Szelenkov@nginx.com assert ( 8031596Szelenkov@nginx.com headers['X-Path-Info'] == 'null' 8041596Szelenkov@nginx.com ), 'the rest of the path is null, whole path matched' 8051596Szelenkov@nginx.com assert ( 8061596Szelenkov@nginx.com headers['X-Path-Translated'] == 'null' 8071596Szelenkov@nginx.com ), 'translated path is null because path info is null' 8081596Szelenkov@nginx.com assert ( 8091596Szelenkov@nginx.com headers['X-Real-Path'].endswith('/none') == True 8101596Szelenkov@nginx.com ), 'read path is not null' 8111596Szelenkov@nginx.com assert headers['X-Resource-Paths'] == 'null', 'no resource found' 8121596Szelenkov@nginx.com assert headers['X-Resource-As-Stream'] == 'null', 'no resource stream' 813977Smax.romanov@gmail.com 814977Smax.romanov@gmail.com def test_java_application_query_string(self): 815977Smax.romanov@gmail.com self.load('query_string') 816977Smax.romanov@gmail.com 8171596Szelenkov@nginx.com assert ( 8181596Szelenkov@nginx.com self.get(url='/?a=b')['headers']['X-Query-String'] == 'a=b' 8191596Szelenkov@nginx.com ), 'query string' 820977Smax.romanov@gmail.com 821977Smax.romanov@gmail.com def test_java_application_query_empty(self): 822977Smax.romanov@gmail.com self.load('query_string') 823977Smax.romanov@gmail.com 8241596Szelenkov@nginx.com assert ( 8251596Szelenkov@nginx.com self.get(url='/?')['headers']['X-Query-String'] == '' 8261596Szelenkov@nginx.com ), 'query string empty' 827977Smax.romanov@gmail.com 828977Smax.romanov@gmail.com def test_java_application_query_absent(self): 829977Smax.romanov@gmail.com self.load('query_string') 830977Smax.romanov@gmail.com 8311596Szelenkov@nginx.com assert ( 8321596Szelenkov@nginx.com self.get()['headers']['X-Query-String'] == 'null' 8331596Szelenkov@nginx.com ), 'query string absent' 834977Smax.romanov@gmail.com 835977Smax.romanov@gmail.com def test_java_application_empty(self): 836977Smax.romanov@gmail.com self.load('empty') 837977Smax.romanov@gmail.com 8381596Szelenkov@nginx.com assert self.get()['status'] == 200, 'empty' 839977Smax.romanov@gmail.com 840977Smax.romanov@gmail.com def test_java_application_keepalive_body(self): 841977Smax.romanov@gmail.com self.load('mirror') 842977Smax.romanov@gmail.com 8431596Szelenkov@nginx.com assert self.post()['status'] == 200, 'init' 8441029Szelenkov@nginx.com 8451453Szelenkov@nginx.com body = '0123456789' * 500 8461017Szelenkov@nginx.com (resp, sock) = self.post( 8471017Szelenkov@nginx.com headers={ 8481017Szelenkov@nginx.com 'Connection': 'keep-alive', 8491017Szelenkov@nginx.com 'Content-Type': 'text/html', 8501017Szelenkov@nginx.com 'Host': 'localhost', 8511017Szelenkov@nginx.com }, 8521017Szelenkov@nginx.com start=True, 8531453Szelenkov@nginx.com body=body, 8541029Szelenkov@nginx.com read_timeout=1, 8551017Szelenkov@nginx.com ) 856977Smax.romanov@gmail.com 8571596Szelenkov@nginx.com assert resp['body'] == body, 'keep-alive 1' 858977Smax.romanov@gmail.com 8591453Szelenkov@nginx.com body = '0123456789' 8601017Szelenkov@nginx.com resp = self.post( 8611017Szelenkov@nginx.com headers={ 8621017Szelenkov@nginx.com 'Connection': 'close', 8631017Szelenkov@nginx.com 'Content-Type': 'text/html', 8641017Szelenkov@nginx.com 'Host': 'localhost', 8651017Szelenkov@nginx.com }, 8661017Szelenkov@nginx.com sock=sock, 8671453Szelenkov@nginx.com body=body, 8681017Szelenkov@nginx.com ) 869977Smax.romanov@gmail.com 8701596Szelenkov@nginx.com assert resp['body'] == body, 'keep-alive 2' 871977Smax.romanov@gmail.com 872977Smax.romanov@gmail.com def test_java_application_http_10(self): 873977Smax.romanov@gmail.com self.load('empty') 874977Smax.romanov@gmail.com 8751596Szelenkov@nginx.com assert self.get(http_10=True)['status'] == 200, 'HTTP 1.0' 876977Smax.romanov@gmail.com 877977Smax.romanov@gmail.com def test_java_application_no_method(self): 878977Smax.romanov@gmail.com self.load('empty') 879977Smax.romanov@gmail.com 8801596Szelenkov@nginx.com assert self.post()['status'] == 405, 'no method' 881977Smax.romanov@gmail.com 882977Smax.romanov@gmail.com def test_java_application_get_header(self): 883977Smax.romanov@gmail.com self.load('get_header') 884977Smax.romanov@gmail.com 8851596Szelenkov@nginx.com assert ( 8861017Szelenkov@nginx.com self.get( 8871017Szelenkov@nginx.com headers={ 8881017Szelenkov@nginx.com 'X-Header': 'blah', 8891017Szelenkov@nginx.com 'Content-Type': 'text/html', 8901017Szelenkov@nginx.com 'Host': 'localhost', 8911018Szelenkov@nginx.com 'Connection': 'close', 8921017Szelenkov@nginx.com } 8931596Szelenkov@nginx.com )['headers']['X-Reply'] 8941596Szelenkov@nginx.com == 'blah' 8951596Szelenkov@nginx.com ), 'get header' 896977Smax.romanov@gmail.com 897977Smax.romanov@gmail.com def test_java_application_get_header_empty(self): 898977Smax.romanov@gmail.com self.load('get_header') 899977Smax.romanov@gmail.com 9001596Szelenkov@nginx.com assert 'X-Reply' not in self.get()['headers'], 'get header empty' 901977Smax.romanov@gmail.com 902977Smax.romanov@gmail.com def test_java_application_get_headers(self): 903977Smax.romanov@gmail.com self.load('get_headers') 904977Smax.romanov@gmail.com 9051017Szelenkov@nginx.com headers = self.get( 9061017Szelenkov@nginx.com headers={ 9071017Szelenkov@nginx.com 'X-Header': ['blah', 'blah'], 9081017Szelenkov@nginx.com 'Content-Type': 'text/html', 9091017Szelenkov@nginx.com 'Host': 'localhost', 9101018Szelenkov@nginx.com 'Connection': 'close', 9111017Szelenkov@nginx.com } 9121017Szelenkov@nginx.com )['headers'] 913977Smax.romanov@gmail.com 9141596Szelenkov@nginx.com assert headers['X-Reply-0'] == 'blah', 'get headers' 9151596Szelenkov@nginx.com assert headers['X-Reply-1'] == 'blah', 'get headers 2' 916977Smax.romanov@gmail.com 917977Smax.romanov@gmail.com def test_java_application_get_headers_empty(self): 918977Smax.romanov@gmail.com self.load('get_headers') 919977Smax.romanov@gmail.com 9201596Szelenkov@nginx.com assert 'X-Reply-0' not in self.get()['headers'], 'get headers empty' 921977Smax.romanov@gmail.com 922977Smax.romanov@gmail.com def test_java_application_get_header_names(self): 923977Smax.romanov@gmail.com self.load('get_header_names') 924977Smax.romanov@gmail.com 925977Smax.romanov@gmail.com headers = self.get()['headers'] 926977Smax.romanov@gmail.com 9271596Szelenkov@nginx.com assert re.search( 9281596Szelenkov@nginx.com r'(?:Host|Connection)', headers['X-Reply-0'] 9291596Szelenkov@nginx.com ), 'get header names' 9301596Szelenkov@nginx.com assert re.search( 9311596Szelenkov@nginx.com r'(?:Host|Connection)', headers['X-Reply-1'] 9321596Szelenkov@nginx.com ), 'get header names 2' 9331596Szelenkov@nginx.com assert ( 9341596Szelenkov@nginx.com headers['X-Reply-0'] != headers['X-Reply-1'] 9351596Szelenkov@nginx.com ), 'get header names not equal' 936977Smax.romanov@gmail.com 937977Smax.romanov@gmail.com def test_java_application_header_int(self): 938977Smax.romanov@gmail.com self.load('header_int') 939977Smax.romanov@gmail.com 9401017Szelenkov@nginx.com headers = self.get( 9411017Szelenkov@nginx.com headers={ 9421017Szelenkov@nginx.com 'X-Header': '2', 9431017Szelenkov@nginx.com 'Content-Type': 'text/html', 9441017Szelenkov@nginx.com 'Host': 'localhost', 9451018Szelenkov@nginx.com 'Connection': 'close', 9461017Szelenkov@nginx.com } 9471017Szelenkov@nginx.com )['headers'] 948977Smax.romanov@gmail.com 9491596Szelenkov@nginx.com assert headers['X-Set-Int'] == '1', 'set int header' 9501596Szelenkov@nginx.com assert headers['X-Get-Int'] == '2', 'get int header' 951977Smax.romanov@gmail.com 952977Smax.romanov@gmail.com def test_java_application_header_date(self): 953977Smax.romanov@gmail.com self.load('header_date') 954977Smax.romanov@gmail.com 955977Smax.romanov@gmail.com date = 'Fri, 15 Mar 2019 14:45:34 GMT' 956977Smax.romanov@gmail.com 9571017Szelenkov@nginx.com headers = self.get( 9581017Szelenkov@nginx.com headers={ 9591017Szelenkov@nginx.com 'X-Header': date, 9601017Szelenkov@nginx.com 'Content-Type': 'text/html', 9611017Szelenkov@nginx.com 'Host': 'localhost', 9621018Szelenkov@nginx.com 'Connection': 'close', 9631017Szelenkov@nginx.com } 9641017Szelenkov@nginx.com )['headers'] 965977Smax.romanov@gmail.com 9661596Szelenkov@nginx.com assert ( 9671596Szelenkov@nginx.com headers['X-Set-Date'] == 'Thu, 01 Jan 1970 00:00:01 GMT' 9681596Szelenkov@nginx.com ), 'set date header' 9691596Szelenkov@nginx.com assert headers['X-Get-Date'] == date, 'get date header' 970977Smax.romanov@gmail.com 9711654Szelenkov@nginx.com def test_java_application_multipart(self, temp_dir): 9721117Szelenkov@nginx.com self.load('multipart') 9731117Szelenkov@nginx.com 9741293St.nateldemoura@f5.com reldst = '/uploads' 9751654Szelenkov@nginx.com fulldst = temp_dir + reldst 9761293St.nateldemoura@f5.com os.mkdir(fulldst) 9771596Szelenkov@nginx.com public_dir(fulldst) 9781293St.nateldemoura@f5.com 9791355St.nateldemoura@f5.com fields = { 9801355St.nateldemoura@f5.com 'file': { 9811355St.nateldemoura@f5.com 'filename': 'sample.txt', 9821355St.nateldemoura@f5.com 'type': 'text/plain', 9831355St.nateldemoura@f5.com 'data': io.StringIO('Data from sample file'), 9841355St.nateldemoura@f5.com }, 9851355St.nateldemoura@f5.com 'destination': fulldst, 9861355St.nateldemoura@f5.com 'upload': 'Upload', 9871355St.nateldemoura@f5.com } 9881355St.nateldemoura@f5.com 9891355St.nateldemoura@f5.com encoded, content_type = self.multipart_encode(fields) 9901355St.nateldemoura@f5.com 9911355St.nateldemoura@f5.com preamble = 'Preamble. Should be ignored.' 9921355St.nateldemoura@f5.com epilogue = 'Epilogue. Should be ignored.' 9931355St.nateldemoura@f5.com body = "%s\r\n%s\r\n%s" % (preamble, encoded.decode(), epilogue) 9941117Szelenkov@nginx.com 9951117Szelenkov@nginx.com resp = self.post( 9961117Szelenkov@nginx.com headers={ 9971355St.nateldemoura@f5.com 'Content-Type': content_type, 9981117Szelenkov@nginx.com 'Host': 'localhost', 9991117Szelenkov@nginx.com 'Connection': 'close', 10001117Szelenkov@nginx.com }, 10011117Szelenkov@nginx.com body=body, 10021117Szelenkov@nginx.com ) 10031117Szelenkov@nginx.com 10041596Szelenkov@nginx.com assert resp['status'] == 200, 'multipart status' 10051596Szelenkov@nginx.com assert re.search( 10061596Szelenkov@nginx.com r'sample\.txt created', resp['body'] 10071596Szelenkov@nginx.com ), 'multipart body' 10081596Szelenkov@nginx.com assert ( 10091293St.nateldemoura@f5.com self.search_in_log( 10101293St.nateldemoura@f5.com r'^Data from sample file$', name=reldst + '/sample.txt' 10111596Szelenkov@nginx.com ) 10121596Szelenkov@nginx.com is not None 10131596Szelenkov@nginx.com ), 'file created' 10141685Smax.romanov@nginx.com 10151685Smax.romanov@nginx.com def test_java_application_threads(self): 10161685Smax.romanov@nginx.com self.load('threads') 10171685Smax.romanov@nginx.com 10181685Smax.romanov@nginx.com assert 'success' in self.conf( 10191685Smax.romanov@nginx.com '4', 'applications/threads/threads' 10201685Smax.romanov@nginx.com ), 'configure 4 threads' 10211685Smax.romanov@nginx.com 10221685Smax.romanov@nginx.com socks = [] 10231685Smax.romanov@nginx.com 10241685Smax.romanov@nginx.com for i in range(4): 10251685Smax.romanov@nginx.com (_, sock) = self.get( 10261685Smax.romanov@nginx.com headers={ 10271685Smax.romanov@nginx.com 'Host': 'localhost', 10281685Smax.romanov@nginx.com 'X-Delay': '2', 10291685Smax.romanov@nginx.com 'Connection': 'close', 10301685Smax.romanov@nginx.com }, 10311685Smax.romanov@nginx.com no_recv=True, 10321685Smax.romanov@nginx.com start=True, 10331685Smax.romanov@nginx.com ) 10341685Smax.romanov@nginx.com 10351685Smax.romanov@nginx.com socks.append(sock) 10361685Smax.romanov@nginx.com 10371685Smax.romanov@nginx.com time.sleep(0.25) # required to avoid greedy request reading 10381685Smax.romanov@nginx.com 10391685Smax.romanov@nginx.com threads = set() 10401685Smax.romanov@nginx.com 10411685Smax.romanov@nginx.com for sock in socks: 10421685Smax.romanov@nginx.com resp = self.recvall(sock).decode('utf-8') 10431685Smax.romanov@nginx.com 10441685Smax.romanov@nginx.com self.log_in(resp) 10451685Smax.romanov@nginx.com 10461685Smax.romanov@nginx.com resp = self._resp_to_dict(resp) 10471685Smax.romanov@nginx.com 10481685Smax.romanov@nginx.com assert resp['status'] == 200, 'status' 10491685Smax.romanov@nginx.com 10501685Smax.romanov@nginx.com threads.add(resp['headers']['X-Thread']) 10511685Smax.romanov@nginx.com 10521685Smax.romanov@nginx.com sock.close() 10531685Smax.romanov@nginx.com 10541685Smax.romanov@nginx.com assert len(socks) == len(threads), 'threads differs' 1055