11567Szelenkov@nginx.comfrom unit.applications.proto import TestApplicationProto 21567Szelenkov@nginx.com 31567Szelenkov@nginx.com 41567Szelenkov@nginx.comclass TestVariables(TestApplicationProto): 51567Szelenkov@nginx.com prerequisites = {} 61567Szelenkov@nginx.com 71596Szelenkov@nginx.com def setup_method(self): 81596Szelenkov@nginx.com assert 'success' in self.conf( 91596Szelenkov@nginx.com { 101596Szelenkov@nginx.com "listeners": {"*:7080": {"pass": "routes/$method"}}, 111596Szelenkov@nginx.com "routes": { 121596Szelenkov@nginx.com "GET": [{"action": {"return": 201}}], 131596Szelenkov@nginx.com "POST": [{"action": {"return": 202}}], 141596Szelenkov@nginx.com "3": [{"action": {"return": 203}}], 151596Szelenkov@nginx.com "4*": [{"action": {"return": 204}}], 161596Szelenkov@nginx.com "blahGET}": [{"action": {"return": 205}}], 171596Szelenkov@nginx.com "5GET": [{"action": {"return": 206}}], 181596Szelenkov@nginx.com "GETGET": [{"action": {"return": 207}}], 191596Szelenkov@nginx.com "localhost": [{"action": {"return": 208}}], 201567Szelenkov@nginx.com }, 211596Szelenkov@nginx.com }, 221596Szelenkov@nginx.com ), 'configure routes' 231567Szelenkov@nginx.com 241567Szelenkov@nginx.com def conf_routes(self, routes): 251596Szelenkov@nginx.com assert 'success' in self.conf(routes, 'listeners/*:7080/pass') 261567Szelenkov@nginx.com 271567Szelenkov@nginx.com def test_variables_method(self): 281596Szelenkov@nginx.com assert self.get()['status'] == 201, 'method GET' 291596Szelenkov@nginx.com assert self.post()['status'] == 202, 'method POST' 301567Szelenkov@nginx.com 311567Szelenkov@nginx.com def test_variables_uri(self): 321567Szelenkov@nginx.com self.conf_routes("\"routes$uri\"") 331567Szelenkov@nginx.com 341596Szelenkov@nginx.com assert self.get(url='/3')['status'] == 203, 'uri' 351596Szelenkov@nginx.com assert self.get(url='/4*')['status'] == 204, 'uri 2' 361596Szelenkov@nginx.com assert self.get(url='/4%2A')['status'] == 204, 'uri 3' 371588Szelenkov@nginx.com 381588Szelenkov@nginx.com def test_variables_host(self): 391588Szelenkov@nginx.com self.conf_routes("\"routes/$host\"") 401588Szelenkov@nginx.com 411588Szelenkov@nginx.com def check_host(host, status=208): 421596Szelenkov@nginx.com assert ( 431588Szelenkov@nginx.com self.get(headers={'Host': host, 'Connection': 'close'})[ 441588Szelenkov@nginx.com 'status' 451596Szelenkov@nginx.com ] 461596Szelenkov@nginx.com == status 471588Szelenkov@nginx.com ) 481588Szelenkov@nginx.com 491588Szelenkov@nginx.com check_host('localhost') 501588Szelenkov@nginx.com check_host('localhost.') 511588Szelenkov@nginx.com check_host('localhost:7080') 521588Szelenkov@nginx.com check_host('.localhost', 404) 531588Szelenkov@nginx.com check_host('www.localhost', 404) 541588Szelenkov@nginx.com check_host('localhost1', 404) 551567Szelenkov@nginx.com 561567Szelenkov@nginx.com def test_variables_many(self): 571567Szelenkov@nginx.com self.conf_routes("\"routes$uri$method\"") 581596Szelenkov@nginx.com assert self.get(url='/5')['status'] == 206, 'many' 591567Szelenkov@nginx.com 601567Szelenkov@nginx.com self.conf_routes("\"routes${uri}${method}\"") 611596Szelenkov@nginx.com assert self.get(url='/5')['status'] == 206, 'many 2' 621567Szelenkov@nginx.com 631567Szelenkov@nginx.com self.conf_routes("\"routes${uri}$method\"") 641596Szelenkov@nginx.com assert self.get(url='/5')['status'] == 206, 'many 3' 651567Szelenkov@nginx.com 661567Szelenkov@nginx.com self.conf_routes("\"routes/$method$method\"") 671596Szelenkov@nginx.com assert self.get()['status'] == 207, 'many 4' 681567Szelenkov@nginx.com 691567Szelenkov@nginx.com self.conf_routes("\"routes/$method$uri\"") 701596Szelenkov@nginx.com assert self.get()['status'] == 404, 'no route' 711596Szelenkov@nginx.com assert self.get(url='/blah')['status'] == 404, 'no route 2' 721567Szelenkov@nginx.com 731567Szelenkov@nginx.com def test_variables_replace(self): 741596Szelenkov@nginx.com assert self.get()['status'] == 201 751567Szelenkov@nginx.com 761567Szelenkov@nginx.com self.conf_routes("\"routes$uri\"") 771596Szelenkov@nginx.com assert self.get(url='/3')['status'] == 203 781567Szelenkov@nginx.com 791567Szelenkov@nginx.com self.conf_routes("\"routes/${method}\"") 801596Szelenkov@nginx.com assert self.post()['status'] == 202 811567Szelenkov@nginx.com 821567Szelenkov@nginx.com self.conf_routes("\"routes${uri}\"") 831596Szelenkov@nginx.com assert self.get(url='/4*')['status'] == 204 841567Szelenkov@nginx.com 851567Szelenkov@nginx.com self.conf_routes("\"routes/blah$method}\"") 861596Szelenkov@nginx.com assert self.get()['status'] == 205 871567Szelenkov@nginx.com 881607Szelenkov@nginx.com def test_variables_upstream(self): 891607Szelenkov@nginx.com assert 'success' in self.conf( 901607Szelenkov@nginx.com { 911607Szelenkov@nginx.com "listeners": { 921607Szelenkov@nginx.com "*:7080": {"pass": "upstreams$uri"}, 931607Szelenkov@nginx.com "*:7081": {"pass": "routes/one"}, 941607Szelenkov@nginx.com }, 951848Szelenkov@nginx.com "upstreams": {"1": {"servers": {"127.0.0.1:7081": {}}}}, 961848Szelenkov@nginx.com "routes": {"one": [{"action": {"return": 200}}]}, 971607Szelenkov@nginx.com }, 981607Szelenkov@nginx.com ), 'upstreams initial configuration' 991607Szelenkov@nginx.com 1001607Szelenkov@nginx.com assert self.get(url='/1')['status'] == 200 1011607Szelenkov@nginx.com assert self.get(url='/2')['status'] == 404 1021607Szelenkov@nginx.com 103*1928Sz.hong@f5.com def test_variables_empty(self): 104*1928Sz.hong@f5.com def update_pass(prefix): 105*1928Sz.hong@f5.com assert 'success' in self.conf( 106*1928Sz.hong@f5.com { 107*1928Sz.hong@f5.com "listeners": { 108*1928Sz.hong@f5.com "*:7080": {"pass": prefix + "/$method"}, 109*1928Sz.hong@f5.com }, 110*1928Sz.hong@f5.com }, 111*1928Sz.hong@f5.com ), 'variables empty' 112*1928Sz.hong@f5.com 113*1928Sz.hong@f5.com update_pass("routes"); 114*1928Sz.hong@f5.com assert self.get(url='/1')['status'] == 404 115*1928Sz.hong@f5.com 116*1928Sz.hong@f5.com update_pass("upstreams"); 117*1928Sz.hong@f5.com assert self.get(url='/2')['status'] == 404 118*1928Sz.hong@f5.com 119*1928Sz.hong@f5.com update_pass("applications"); 120*1928Sz.hong@f5.com assert self.get(url='/3')['status'] == 404 121*1928Sz.hong@f5.com 1221567Szelenkov@nginx.com def test_variables_invalid(self): 1231567Szelenkov@nginx.com def check_variables(routes): 1241596Szelenkov@nginx.com assert 'error' in self.conf( 1251596Szelenkov@nginx.com routes, 'listeners/*:7080/pass' 1261596Szelenkov@nginx.com ), 'invalid variables' 1271567Szelenkov@nginx.com 1281567Szelenkov@nginx.com check_variables("\"routes$\"") 1291567Szelenkov@nginx.com check_variables("\"routes${\"") 1301567Szelenkov@nginx.com check_variables("\"routes${}\"") 1311567Szelenkov@nginx.com check_variables("\"routes$ur\"") 1321567Szelenkov@nginx.com check_variables("\"routes$uriblah\"") 1331567Szelenkov@nginx.com check_variables("\"routes${uri\"") 1341567Szelenkov@nginx.com check_variables("\"routes${{uri}\"") 135