ranger/orm/tests/functional/uuidgen/test_functional.py
Nicholas Jones ccfeedf967 Move uuidgen tests to top level directory
Move uuidgen unit tests to orm/tests/ directory

Change-Id: I61bb2b44a73e9c211a3b8f50e9f3dfa4287b151c
2017-09-19 11:28:30 -05:00

138 lines
6.3 KiB
Python
Executable File

import json
import re
import orm.services.id_generator.uuidgen as uuidgen
import orm.services.id_generator.uuidgen.controllers.v1.uuid_controller as uuid_controller
from orm.tests.unit.uuidgen import FunctionalTest
import mock
class MyException(Exception):
def __init__(self, args=None):
self.orig = mock.MagicMock()
if args is not None:
self.orig.args = args
class TestRootController(FunctionalTest):
def test_get_not_found(self):
resp = self.app.get('/a/bogus/url', expect_errors=True)
self.assertEqual(resp.status_int, 404)
def test_get(self):
resp = self.app.get('/')
self.assertEqual(resp.status_int, 200)
self.assertIn('versions', resp.body)
def test_bad_request(self):
resp = self.app.post('/v1/uuids', params={'user_type': 'milkshake'}, expect_errors=True)
self.assertEqual(resp.status_int, 400)
self.assertIn('badRequest', resp.body)
self.assertIn('"code": 400', resp.body)
self.assertIn('Unknown parameter(s):user_type', resp.body)
@mock.patch.object(uuidgen.db.db_manager.DBManager, 'create_uuid')
def test_uuid(self, db_manager_mock):
resp = self.app.post('/v1/uuids')
self.assertEqual(resp.status_int, 200)
body = json.loads(resp.body)
self.assertTrue(re.search('^[\dTZ.:-]+$', body['issued_at']))
self.assertEqual('', body['uuid_type'])
self.assertTrue(re.search('^[0-9a-f]+$', body['uuid']))
@mock.patch.object(uuidgen.db.db_manager.DBManager, 'create_uuid')
def test_uuid_with_param(self, db_manager_mock):
resp = self.app.post('/v1/uuids',
params={'uuid_type': 'milkshake'})
self.assertEqual(resp.status_int, 200)
body = json.loads(resp.body)
self.assertTrue(re.search('^[\dTZ.:-]+$', body['issued_at']))
self.assertEqual('milkshake', body['uuid_type'])
# Same format as with no parameter
self.assertTrue(re.search('^[0-9a-f-]+$', body['uuid']))
resp = self.app.post('/v1/uuids',
params={'uuid': 1337, 'uuid_type': 'milkshake'})
self.assertEqual(resp.status_int, 200)
body = json.loads(resp.body)
self.assertTrue(re.search('^[\dTZ.:-]+$', body['issued_at']))
self.assertEqual('custId', body['uuid_type'])
# Same format as with no parameter
self.assertTrue(re.search('^[0-9a-f-]+$', body['uuid']))
@mock.patch.object(uuidgen.db.db_manager.DBManager, 'create_uuid', side_effect=Exception('boom'))
def test_uuid_no_connection(self, db_manager_mock):
resp = self.app.post('/v1/uuids', expect_errors=True)
self.assertEqual(resp.status_int, 500)
self.assertIn('badRequest', resp.body)
self.assertIn('"code": 500', resp.body)
@mock.patch.object(uuidgen.db.db_manager.DBManager, 'create_uuid',
side_effect=MyException())
def test_uuid_with_param_db_error(self, db_manager_mock):
resp = self.app.post('/v1/uuids', params={'uuid': '1337'},
expect_errors=True)
self.assertEqual(resp.status_int, 500)
self.assertIn('badRequest', resp.body)
self.assertIn('"code": 500', resp.body)
# @mock.patch.object(uuidgen.db.db_manager.DBManager, 'create_uuid',
# side_effect=MyException([1062]))
# def test_uuid_with_param_duplicate_key(self, db_manager_mock):
# resp = self.app.post('/v1/uuids', params={'uuid': '1337'},
# expect_errors=True)
# self.assertEqual(resp.status_int, 400)
# self.assertIn('badRequest', resp.body)
# self.assertIn('"code": 400', resp.body)
@mock.patch.object(uuid_controller, 'DBManager')
def test_uuid_already_exists(self, db_manager_mock):
my_create_uuid = mock.MagicMock(side_effect=MyException([1062]))
create_uuid_wrapper = mock.MagicMock()
create_uuid_wrapper.create_uuid = my_create_uuid
db_manager_mock.return_value = create_uuid_wrapper
resp = self.app.post('/v1/uuids',
params={'uuid': 1337, 'uuid_type': 'milkshake'},
expect_errors=True)
self.assertEqual(resp.status_int, 200)
body = json.loads(resp.body)
self.assertTrue(re.search('^[\dTZ.:-]+$', body['issued_at']))
self.assertEqual('custId', body['uuid_type'])
# Same format as with no parameter
self.assertTrue(re.search('^[0-9a-f-]+$', body['uuid']))
@mock.patch.object(uuidgen.db.db_manager, 'sessionmaker')
def test_uuid_commit_error(self, mock_sessionmaker):
mock_session = mock.MagicMock()
mock_session.commit = mock.MagicMock(side_effect=SystemError('test'))
mock_sessionmaker.return_value = mock.MagicMock(
return_value=mock_session)
resp = self.app.post('/v1/uuids', params={'uuid': '1337'},
expect_errors=True)
self.assertEqual(resp.status_int, 500)
self.assertIn('1337', resp.body)
# TODO: apply the following 2 tests when we understand mocking better: now we don't get the 'inner' exceptions
# @mock.patch.object('uuidgen.controllers.v1.uuid_controller.Uuid', 'insert', autospec=True)
# @mock.patch('uuidgen.controllers.v1.uuid_controller.Uuid')
# def test_uuid_insert_database_error(self, mock_insert, mock_Uuid):
# mock_insert.side_effect = sqlalchemy.exc.IntegrityError('boom', 'boom', 'boom')
# resp = self.app.post('/v1/uuids', expect_errors=True)
# self.assertEqual(resp.status_int, 500)
# self.assertIn('badRequest', resp.body)
# self.assertIn('"code": 500', resp.body)
# self.assertIn('Database error', resp.body)
# @mock.patch.object('uuidgen.controllers.v1.uuid_controller.Uuid', 'insert', autospec=True)
# @mock.patch('uuidgen.controllers.v1.uuid_controller.Uuid')
# def test_uuid_duplicate_uuid(self, mock_insert, mock_Uuid):
# mock_insert.side_effect = sqlalchemy.exc.IntegrityError('boom', 'boom', 'boom')
# resp = self.app.post('/v1/uuids', expect_errors=True)
# self.assertEqual(resp.status_int, 500)
# self.assertIn('badRequest', resp.body)
# self.assertIn('"code": 500', resp.body)
# self.assertIn('Duplicate key error', resp.body)