Mercurial > p > roundup > code
comparison test/rest_common.py @ 5743:60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Wed, 29 May 2019 20:22:42 -0400 |
| parents | 97d7faebef0a |
| children | d4de45cde106 |
comparison
equal
deleted
inserted
replaced
| 5742:97d7faebef0a | 5743:60299cd36670 |
|---|---|
| 1239 form) | 1239 form) |
| 1240 self.assertEqual(self.server.client.response_code, 200) | 1240 self.assertEqual(self.server.client.response_code, 200) |
| 1241 json_dict = json.loads(b2s(results)) | 1241 json_dict = json.loads(b2s(results)) |
| 1242 print(results) | 1242 print(results) |
| 1243 status=json_dict['data']['status'] | 1243 status=json_dict['data']['status'] |
| 1244 status=json_dict['data']['status'] | |
| 1245 self.assertEqual(status, 'ok') | 1244 self.assertEqual(status, 'ok') |
| 1246 | 1245 |
| 1247 # TEST #9 | 1246 # TEST #9 |
| 1248 # GET: test that version can be set with accept: | 1247 # GET: test that version can be set with accept: |
| 1249 # ... ; version=z | 1248 # ... ; version=z |
| 1367 "/rest/notthere/", self.empty_form) | 1366 "/rest/notthere/", self.empty_form) |
| 1368 self.assertEqual(self.server.client.response_code, 404) | 1367 self.assertEqual(self.server.client.response_code, 404) |
| 1369 | 1368 |
| 1370 del(self.headers) | 1369 del(self.headers) |
| 1371 | 1370 |
| 1371 def testMethodOverride(self): | |
| 1372 # TEST #1 | |
| 1373 # Use GET, PUT, PATCH to tunnel DELETE expect error | |
| 1374 | |
| 1375 body=b'{ "order": 5 }' | |
| 1376 env = { "CONTENT_TYPE": "application/json", | |
| 1377 "CONTENT_LENGTH": len(body), | |
| 1378 "REQUEST_METHOD": "POST" | |
| 1379 } | |
| 1380 body_file=BytesIO(body) # FieldStorage needs a file | |
| 1381 self.server.client.request.headers.get=self.get_header | |
| 1382 for method in ( "GET", "PUT", "PATCH" ): | |
| 1383 headers={"accept": "application/json; version=1", | |
| 1384 "content-type": env['CONTENT_TYPE'], | |
| 1385 "content-length": len(body), | |
| 1386 "x-http-method-override": "DElETE", | |
| 1387 } | |
| 1388 self.headers=headers | |
| 1389 form = client.BinaryFieldStorage(body_file, | |
| 1390 headers=headers, | |
| 1391 environ=env) | |
| 1392 self.db.setCurrentUser('admin') # must be admin to create status | |
| 1393 results = self.server.dispatch(method, | |
| 1394 "/rest/data/status", | |
| 1395 form) | |
| 1396 | |
| 1397 self.assertEqual(self.server.client.response_code, 400) | |
| 1398 json_dict = json.loads(b2s(results)) | |
| 1399 status=json_dict['error']['status'] | |
| 1400 msg=json_dict['error']['msg'] | |
| 1401 self.assertEqual(status, 400) | |
| 1402 self.assertEqual(msg, "X-HTTP-Method-Override: DElETE must be " | |
| 1403 "used with POST method not %s."%method) | |
| 1404 | |
| 1405 # TEST #2 | |
| 1406 # DELETE: delete issue 1 via post tunnel | |
| 1407 self.assertFalse(self.db.status.is_retired("1")) | |
| 1408 etag = calculate_etag(self.db.status.getnode("1"), | |
| 1409 self.db.config['WEB_SECRET_KEY']) | |
| 1410 etagb = etag.strip ('"') | |
| 1411 headers={"accept": "application/json; q=0.75, application/xml; q=1", | |
| 1412 "if-match": '"%s"'%etagb, | |
| 1413 "content-length": 0, | |
| 1414 "x-http-method-override": "DElETE" | |
| 1415 } | |
| 1416 self.headers=headers | |
| 1417 body_file=BytesIO(b'') # FieldStorage needs a file | |
| 1418 form = client.BinaryFieldStorage(body_file, | |
| 1419 headers=headers, | |
| 1420 environ=env) | |
| 1421 self.server.client.request.headers.get=self.get_header | |
| 1422 self.db.setCurrentUser('admin') # must be admin to delete issue | |
| 1423 results = self.server.dispatch('POST', | |
| 1424 "/rest/data/status/1", | |
| 1425 form) | |
| 1426 print(results) | |
| 1427 self.assertEqual(self.server.client.response_code, 200) | |
| 1428 json_dict = json.loads(b2s(results)) | |
| 1429 status=json_dict['data']['status'] | |
| 1430 self.assertEqual(status, 'ok') | |
| 1431 self.assertTrue(self.db.status.is_retired("1")) | |
| 1432 | |
| 1433 | |
| 1372 def testPostPOE(self): | 1434 def testPostPOE(self): |
| 1373 ''' test post once exactly: get POE url, create issue | 1435 ''' test post once exactly: get POE url, create issue |
| 1374 using POE url. Use dispatch entry point. | 1436 using POE url. Use dispatch entry point. |
| 1375 ''' | 1437 ''' |
| 1376 import time | 1438 import time |
