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

Roundup Issue Tracker: http://roundup-tracker.org/