test_routing.py (1467:195fe0a92670) test_routing.py (1475:991a3b589d9d)
1# -*- coding: utf-8 -*-
2
1import unittest
2from unit.applications.proto import TestApplicationProto
3
4
5class TestRouting(TestApplicationProto):
6 prerequisites = {'modules': {'python': 'any'}}
7
8 def setUp(self):

--- 1055 unchanged lines hidden (view full) ---

1064
1065 self.assertEqual(self.get()['status'], 404, 'args')
1066 self.assertEqual(self.get(url='/?foo=bar')['status'], 200, 'args 2')
1067 self.assertEqual(self.get(url='/?foo=bar1')['status'], 404, 'args 3')
1068 self.assertEqual(self.get(url='/?1foo=bar')['status'], 404, 'args 4')
1069 self.assertEqual(self.get(url='/?Foo=bar')['status'], 404, 'case')
1070 self.assertEqual(self.get(url='/?foo=Bar')['status'], 404, 'case 2')
1071
3import unittest
4from unit.applications.proto import TestApplicationProto
5
6
7class TestRouting(TestApplicationProto):
8 prerequisites = {'modules': {'python': 'any'}}
9
10 def setUp(self):

--- 1055 unchanged lines hidden (view full) ---

1066
1067 self.assertEqual(self.get()['status'], 404, 'args')
1068 self.assertEqual(self.get(url='/?foo=bar')['status'], 200, 'args 2')
1069 self.assertEqual(self.get(url='/?foo=bar1')['status'], 404, 'args 3')
1070 self.assertEqual(self.get(url='/?1foo=bar')['status'], 404, 'args 4')
1071 self.assertEqual(self.get(url='/?Foo=bar')['status'], 404, 'case')
1072 self.assertEqual(self.get(url='/?foo=Bar')['status'], 404, 'case 2')
1073
1074 def test_routes_match_arguments_chars(self):
1075 chars = (
1076 " !\"%23$%25%26'()*%2B,-./0123456789:;<%3D>?@"
1077 "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
1078 )
1079
1080 chars_enc = ""
1081 for h1 in ["2", "3", "4", "5", "6", "7"]:
1082 for h2 in ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
1083 "B", "C", "D", "E", "F",
1084 ]:
1085 chars_enc += "%" + h1 + h2
1086 chars_enc = chars_enc[:-3]
1087
1088 def check_args(args, query):
1089 self.route_match({"arguments": args})
1090 self.assertEqual(self.get(url='/?' + query)['status'], 200)
1091
1092 check_args({chars: chars}, chars + '=' + chars)
1093 check_args({chars: chars}, chars + '=' + chars_enc)
1094 check_args({chars: chars}, chars_enc + '=' + chars)
1095 check_args({chars: chars}, chars_enc + '=' + chars_enc)
1096 check_args({chars_enc: chars_enc}, chars + '=' + chars)
1097 check_args({chars_enc: chars_enc}, chars + '=' + chars_enc)
1098 check_args({chars_enc: chars_enc}, chars_enc + '=' + chars)
1099 check_args({chars_enc: chars_enc}, chars_enc + '=' + chars_enc)
1100
1072 def test_routes_match_arguments_empty(self):
1073 self.route_match({"arguments": {}})
1074 self.assertEqual(self.get()['status'], 200, 'arguments empty')
1075
1076 self.route_match({"arguments": []})
1077 self.assertEqual(self.get()['status'], 200, 'arguments empty 2')
1078
1101 def test_routes_match_arguments_empty(self):
1102 self.route_match({"arguments": {}})
1103 self.assertEqual(self.get()['status'], 200, 'arguments empty')
1104
1105 self.route_match({"arguments": []})
1106 self.assertEqual(self.get()['status'], 200, 'arguments empty 2')
1107
1079 def test_routes_match_arguments_invalid(self):
1080 self.route_match_invalid({"arguments": ["var"]})
1081 self.route_match_invalid({"arguments": [{"var1": {}}]})
1082 self.route_match_invalid({"arguments": {"": "bar"}})
1083
1084 @unittest.skip('not yet')
1085 def test_routes_match_arguments_space(self):
1108 def test_routes_match_arguments_space(self):
1086 self.route_match({"arguments": {"foo": "bar "}})
1109 self.route_match({"arguments": {"+fo o%20": "%20b+a r"}})
1110 self.assertEqual(self.get(url='/? fo o = b a r&')['status'], 200)
1111 self.assertEqual(self.get(url='/?+fo+o+=+b+a+r&')['status'], 200)
1112 self.assertEqual(
1113 self.get(url='/?%20fo%20o%20=%20b%20a%20r&')['status'], 200
1114 )
1087
1115
1088 self.assertEqual(self.get(url='/?foo=bar &')['status'], 200, 'sp')
1089 # FAIL
1090 self.assertEqual(self.get(url='/?foo=bar+&')['status'], 200, 'sp 2')
1091 # FAIL
1092 self.assertEqual(self.get(url='/?foo=bar%20&')['status'], 200, 'sp 3')
1116 self.route_match({"arguments": {"%20foo": " bar"}})
1117 self.assertEqual(self.get(url='/? foo= bar')['status'], 200)
1118 self.assertEqual(self.get(url='/?+foo=+bar')['status'], 200)
1119 self.assertEqual(self.get(url='/?%20foo=%20bar')['status'], 200)
1120 self.assertEqual(self.get(url='/?+foo= bar')['status'], 200)
1121 self.assertEqual(self.get(url='/?%20foo=+bar')['status'], 200)
1093
1122
1094 @unittest.skip('not yet')
1095 def test_routes_match_arguments_plus(self):
1096 self.route_match({"arguments": [{"foo": "bar+"}]})
1123 def test_routes_match_arguments_equal(self):
1124 self.route_match({"arguments": {"=": "="}})
1125 self.assertEqual(self.get(url='/?%3D=%3D')['status'], 200)
1126 self.assertEqual(self.get(url='/?%3D==')['status'], 200)
1127 self.assertEqual(self.get(url='/?===')['status'], 404)
1128 self.assertEqual(self.get(url='/?%3D%3D%3D')['status'], 404)
1129 self.assertEqual(self.get(url='/?==%3D')['status'], 404)
1097
1130
1098 self.assertEqual(self.get(url='/?foo=bar+&')['status'], 200, 'plus')
1099 # FAIL
1100 self.assertEqual(
1101 self.get(url='/?foo=bar%2B&')['status'], 200, 'plus 2'
1102 )
1131 def test_routes_match_arguments_enc(self):
1132 self.route_match({"arguments": {"Ю": "н"}})
1133 self.assertEqual(self.get(url='/?%D0%AE=%D0%BD')['status'], 200)
1134 self.assertEqual(self.get(url='/?%d0%ae=%d0%Bd')['status'], 200)
1103
1135
1104 @unittest.skip('not yet')
1105 def test_routes_match_arguments_hex(self):
1106 self.route_match({"arguments": [{"foo": "bar"}]})
1136 def test_routes_match_arguments_hash(self):
1137 self.route_match({"arguments": {"#": "#"}})
1138 self.assertEqual(self.get(url='/?%23=%23')['status'], 200)
1139 self.assertEqual(self.get(url='/?%23=%23#')['status'], 200)
1140 self.assertEqual(self.get(url='/?#=#')['status'], 404)
1141 self.assertEqual(self.get(url='/?%23=#')['status'], 404)
1107
1142
1108 self.assertEqual(
1109 self.get(url='/?%66%6F%6f=%62%61%72&')['status'], 200, 'hex'
1110 )
1143 def test_routes_match_arguments_wildcard(self):
1144 self.route_match({"arguments": {"foo": "*"}})
1145 self.assertEqual(self.get(url='/?foo')['status'], 200)
1146 self.assertEqual(self.get(url='/?foo=')['status'], 200)
1147 self.assertEqual(self.get(url='/?foo=blah')['status'], 200)
1148 self.assertEqual(self.get(url='/?blah=foo')['status'], 404)
1111
1149
1112 def test_routes_match_arguments_chars(self):
1113 self.route_match({"arguments": {"foo": "-._()[],;"}})
1150 self.route_match({"arguments": {"foo": "%25*"}})
1151 self.assertEqual(self.get(url='/?foo=%xx')['status'], 200)
1114
1152
1115 self.assertEqual(self.get(url='/?foo=-._()[],;')['status'], 200, 'chs')
1153 self.route_match({"arguments": {"foo": "%2A*"}})
1154 self.assertEqual(self.get(url='/?foo=*xx')['status'], 200)
1155 self.assertEqual(self.get(url='/?foo=xx')['status'], 404)
1116
1156
1157 self.route_match({"arguments": {"foo": "*%2A"}})
1158 self.assertEqual(self.get(url='/?foo=xx*')['status'], 200)
1159 self.assertEqual(self.get(url='/?foo=xx*x')['status'], 404)
1160
1161 self.route_match({"arguments": {"foo": "1*2"}})
1162 self.assertEqual(self.get(url='/?foo=12')['status'], 200)
1163 self.assertEqual(self.get(url='/?foo=1blah2')['status'], 200)
1164 self.assertEqual(self.get(url='/?foo=1%2A2')['status'], 200)
1165 self.assertEqual(self.get(url='/?foo=x12')['status'], 404)
1166
1167 self.route_match({"arguments": {"foo": "bar*", "%25": "%25"}})
1168 self.assertEqual(self.get(url='/?foo=barxx&%=%')['status'], 200)
1169 self.assertEqual(self.get(url='/?foo=barxx&x%=%')['status'], 404)
1170
1171 def test_routes_match_arguments_negative(self):
1172 self.route_match({"arguments": {"foo": "!%25"}})
1173 self.assertEqual(self.get(url='/?foo=blah')['status'], 200)
1174 self.assertEqual(self.get(url='/?foo=%')['status'], 404)
1175
1176 self.route_match({"arguments": {"foo": "%21blah"}})
1177 self.assertEqual(self.get(url='/?foo=%21blah')['status'], 200)
1178 self.assertEqual(self.get(url='/?foo=!blah')['status'], 200)
1179 self.assertEqual(self.get(url='/?foo=bar')['status'], 404)
1180
1181 self.route_match({"arguments": {"foo": "!!%21*a"}})
1182 self.assertEqual(self.get(url='/?foo=blah')['status'], 200)
1183 self.assertEqual(self.get(url='/?foo=!blah')['status'], 200)
1184 self.assertEqual(self.get(url='/?foo=!!a')['status'], 404)
1185 self.assertEqual(self.get(url='/?foo=!!bla')['status'], 404)
1186
1187 def test_routes_match_arguments_percent(self):
1188 self.route_match({"arguments": {"%25": "%25"}})
1189 self.assertEqual(self.get(url='/?%=%')['status'], 200)
1190 self.assertEqual(self.get(url='/?%25=%25')['status'], 200)
1191 self.assertEqual(self.get(url='/?%25=%')['status'], 200)
1192
1193 self.route_match({"arguments": {"%251": "%252"}})
1194 self.assertEqual(self.get(url='/?%1=%2')['status'], 200)
1195 self.assertEqual(self.get(url='/?%251=%252')['status'], 200)
1196 self.assertEqual(self.get(url='/?%251=%2')['status'], 200)
1197
1198 self.route_match({"arguments": {"%25%21%251": "%25%24%252"}})
1199 self.assertEqual(self.get(url='/?%!%1=%$%2')['status'], 200)
1200 self.assertEqual(self.get(url='/?%25!%251=%25$%252')['status'], 200)
1201 self.assertEqual(self.get(url='/?%25!%1=%$%2')['status'], 200)
1202
1203 def test_routes_match_arguments_ampersand(self):
1204 self.route_match({"arguments": {"foo": "&"}})
1205 self.assertEqual(self.get(url='/?foo=%26')['status'], 200)
1206 self.assertEqual(self.get(url='/?foo=%26&')['status'], 200)
1207 self.assertEqual(self.get(url='/?foo=%26%26')['status'], 404)
1208 self.assertEqual(self.get(url='/?foo=&')['status'], 404)
1209
1210 self.route_match({"arguments": {"&": ""}})
1211 self.assertEqual(self.get(url='/?%26=')['status'], 200)
1212 self.assertEqual(self.get(url='/?%26=&')['status'], 200)
1213 self.assertEqual(self.get(url='/?%26=%26')['status'], 404)
1214 self.assertEqual(self.get(url='/?&=')['status'], 404)
1215
1117 def test_routes_match_arguments_complex(self):
1118 self.route_match({"arguments": {"foo": ""}})
1119
1120 self.assertEqual(self.get(url='/?foo')['status'], 200, 'complex')
1121 self.assertEqual(
1122 self.get(url='/?blah=blah&foo=')['status'], 200, 'complex 2'
1123 )
1124 self.assertEqual(

--- 17 unchanged lines hidden (view full) ---

1142
1143 self.assertEqual(self.get()['status'], 404, 'multiple')
1144 self.assertEqual(
1145 self.get(url='/?foo=bar&blah=test')['status'], 200, 'multiple 2'
1146 )
1147 self.assertEqual(
1148 self.get(url='/?foo=bar&blah')['status'], 404, 'multiple 3'
1149 )
1216 def test_routes_match_arguments_complex(self):
1217 self.route_match({"arguments": {"foo": ""}})
1218
1219 self.assertEqual(self.get(url='/?foo')['status'], 200, 'complex')
1220 self.assertEqual(
1221 self.get(url='/?blah=blah&foo=')['status'], 200, 'complex 2'
1222 )
1223 self.assertEqual(

--- 17 unchanged lines hidden (view full) ---

1241
1242 self.assertEqual(self.get()['status'], 404, 'multiple')
1243 self.assertEqual(
1244 self.get(url='/?foo=bar&blah=test')['status'], 200, 'multiple 2'
1245 )
1246 self.assertEqual(
1247 self.get(url='/?foo=bar&blah')['status'], 404, 'multiple 3'
1248 )
1249 self.assertEqual(
1250 self.get(url='/?foo=bar&blah=tes')['status'], 404, 'multiple 4'
1251 )
1252 self.assertEqual(
1253 self.get(url='/?foo=b%61r&bl%61h=t%65st')['status'],
1254 200,
1255 'multiple 5',
1256 )
1150
1151 def test_routes_match_arguments_multiple_rules(self):
1152 self.route_match({"arguments": {"foo": ["bar", "blah"]}})
1153
1154 self.assertEqual(self.get()['status'], 404, 'rules')
1155 self.assertEqual(self.get(url='/?foo=bar')['status'], 200, 'rules 2')
1156 self.assertEqual(self.get(url='/?foo=blah')['status'], 200, 'rules 3')
1157 self.assertEqual(

--- 30 unchanged lines hidden (view full) ---

1188 'success',
1189 self.conf_delete('routes/0/match/arguments/1'),
1190 'match arguments array configure 2',
1191 )
1192
1193 self.assertEqual(self.get(url='/?var2=val2')['status'], 404, 'arr 7')
1194 self.assertEqual(self.get(url='/?var3=foo')['status'], 200, 'arr 8')
1195
1257
1258 def test_routes_match_arguments_multiple_rules(self):
1259 self.route_match({"arguments": {"foo": ["bar", "blah"]}})
1260
1261 self.assertEqual(self.get()['status'], 404, 'rules')
1262 self.assertEqual(self.get(url='/?foo=bar')['status'], 200, 'rules 2')
1263 self.assertEqual(self.get(url='/?foo=blah')['status'], 200, 'rules 3')
1264 self.assertEqual(

--- 30 unchanged lines hidden (view full) ---

1295 'success',
1296 self.conf_delete('routes/0/match/arguments/1'),
1297 'match arguments array configure 2',
1298 )
1299
1300 self.assertEqual(self.get(url='/?var2=val2')['status'], 404, 'arr 7')
1301 self.assertEqual(self.get(url='/?var3=foo')['status'], 200, 'arr 8')
1302
1303 def test_routes_match_arguments_invalid(self):
1304 # TODO remove it after controller fixed
1305 self.skip_alerts.append(r'failed to apply new conf')
1306
1307 self.route_match_invalid({"arguments": ["var"]})
1308 self.route_match_invalid({"arguments": [{"var1": {}}]})
1309 self.route_match_invalid({"arguments": {"": "bar"}})
1310 self.route_match_invalid({"arguments": {"foo": "*ba*r"}})
1311 self.route_match_invalid({"arguments": {"foo": "%"}})
1312 self.route_match_invalid({"arguments": {"foo": "%1G"}})
1313 self.route_match_invalid({"arguments": {"%": "bar"}})
1314 self.route_match_invalid({"arguments": {"foo": "%0"}})
1315 self.route_match_invalid({"arguments": {"foo": "%%1F"}})
1316 self.route_match_invalid({"arguments": {"%%1F": ""}})
1317 self.route_match_invalid({"arguments": {"%7%F": ""}})
1318
1196 def test_routes_match_cookies(self):
1197 self.route_match({"cookies": {"foO": "bar"}})
1198
1199 self.assertEqual(self.get()['status'], 404, 'cookie')
1200 self.cookie('foO=bar', 200)
1201 self.cookie('foO=bar;1', 200)
1202 self.cookie(['foO=bar', 'blah=blah'], 200)
1203 self.cookie('foO=bar; blah=blah', 200)

--- 549 unchanged lines hidden ---
1319 def test_routes_match_cookies(self):
1320 self.route_match({"cookies": {"foO": "bar"}})
1321
1322 self.assertEqual(self.get()['status'], 404, 'cookie')
1323 self.cookie('foO=bar', 200)
1324 self.cookie('foO=bar;1', 200)
1325 self.cookie(['foO=bar', 'blah=blah'], 200)
1326 self.cookie('foO=bar; blah=blah', 200)

--- 549 unchanged lines hidden ---