ranger/orm/tests/functional/uuidgen/test_functional.py
Gage Hugo 68a500b3de Pep8 and Ranger Image Build process update
Updated pep8 requirements and fixed resulting
codes to fix broken pep8 job.

Updated docker image build process to use roles
to ensure docker rather than using manual docker
install process to fix broken ranger image job.

Co-Authored-By: Jeremy Houser <jeremyhouser@protonmail.com>
Co-Authored-By: Chi Lo <cl566n@att.com>

Change-Id: I28df0a27e4b354dd53c17fbb1a9468cb7ff5bc16
2020-09-24 15:26:26 +00:00

138 lines
6.4 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)