dockercloud

This commit is contained in:
tifayuki 2016-01-14 13:12:51 +01:00
commit 2d9586a8a1
41 changed files with 2701 additions and 2 deletions

221
tests/test_utils.py Normal file
View file

@ -0,0 +1,221 @@
import unittest
import unittest.mock as mock
import dockercloud
from dockercloud.api.exceptions import ObjectNotFound, ApiError, NonUniqueIdentifier
class FetchRemoteObjectTestCase(unittest.TestCase):
@mock.patch('dockercloud.Container.list')
@mock.patch('dockercloud.Container.fetch')
def test_fetch_remote_container(self, mock_fetch, mock_list):
# test container exist queried with uuid4
mock_fetch.return_value = 'returned'
self.assertEqual(dockercloud.Utils.fetch_remote_container('7A4CFE51-03BB-42D6-825E-3B533888D8CD', True),
'returned')
self.assertEqual(dockercloud.Utils.fetch_remote_container('7A4CFE51-03BB-42D6-825E-3B533888D8CD', False),
'returned')
# test container doesn't exist queried with uuid4
mock_fetch.side_effect = ObjectNotFound
self.assertRaises(ObjectNotFound, dockercloud.Utils.fetch_remote_container,
'7A4CFE51-03BB-42D6-825E-3B533888D8CD',
True)
self.assertIsInstance(dockercloud.Utils.fetch_remote_container('7A4CFE51-03BB-42D6-825E-3B533888D8CD', False),
ObjectNotFound)
# test unique container found queried with short uuid
container = dockercloud.Container.create()
container.uuid = 'uuid'
mock_list.side_effect = [[container], []]
mock_fetch.side_effect = [container]
self.assertEquals(dockercloud.Utils.fetch_remote_container('shortuuid', True), container)
mock_list.side_effect = [[container], []]
mock_fetch.side_effect = [container]
self.assertEquals(dockercloud.Utils.fetch_remote_container('shortuuid', False), container)
# test unique container found queried with name
mock_list.side_effect = [[], [container]]
mock_fetch.side_effect = [container]
self.assertEquals(dockercloud.Utils.fetch_remote_container('name', True), container)
mock_list.side_effect = [[], [container]]
mock_fetch.side_effect = [container]
self.assertEquals(dockercloud.Utils.fetch_remote_container('name', False), container)
# test no container found
mock_list.side_effect = [[], []]
self.assertRaises(ObjectNotFound, dockercloud.Utils.fetch_remote_container, 'uuid_or_name', True)
mock_list.side_effect = [[], []]
self.assertIsInstance(dockercloud.Utils.fetch_remote_container('uuid_or_name', False), ObjectNotFound)
# test multi-container found
mock_list.side_effect = [['container1', 'container2'], []]
self.assertRaises(NonUniqueIdentifier, dockercloud.Utils.fetch_remote_container, 'uuid_or_name', True)
mock_list.side_effect = [['container1', 'container2'], []]
self.assertIsInstance(dockercloud.Utils.fetch_remote_container('uuid_or_name', False), NonUniqueIdentifier)
mock_list.side_effect = [[], ['container1', 'container2']]
self.assertRaises(NonUniqueIdentifier, dockercloud.Utils.fetch_remote_container, 'uuid_or_name', True)
mock_list.side_effect = [[], ['container1', 'container2']]
self.assertIsInstance(dockercloud.Utils.fetch_remote_container('uuid_or_name', False), NonUniqueIdentifier)
# test api error
mock_list.side_effect = [ApiError, ApiError]
self.assertRaises(ApiError, dockercloud.Utils.fetch_remote_container, 'uuid_or_name', True)
self.assertRaises(ApiError, dockercloud.Utils.fetch_remote_container, 'uuid_or_name', False)
@mock.patch('dockercloud.Service.list')
@mock.patch('dockercloud.Service.fetch')
def test_fetch_remote_service(self, mock_fetch, mock_list):
# test cluster exist queried with uuid4
mock_fetch.return_value = 'returned'
self.assertEqual(dockercloud.Utils.fetch_remote_service('7A4CFE51-03BB-42D6-825E-3B533888D8CD', True),
'returned')
self.assertEqual(dockercloud.Utils.fetch_remote_service('7A4CFE51-03BB-42D6-825E-3B533888D8CD', False),
'returned')
# test cluster doesn't exist queried with uuid4
mock_fetch.side_effect = ObjectNotFound
self.assertRaises(ObjectNotFound, dockercloud.Utils.fetch_remote_service,
'7A4CFE51-03BB-42D6-825E-3B533888D8CD',
True)
self.assertIsInstance(dockercloud.Utils.fetch_remote_service('7A4CFE51-03BB-42D6-825E-3B533888D8CD', False),
ObjectNotFound)
# test unique cluster found queried with short uuid
service = dockercloud.Service.create()
service.uuid = 'uuid'
mock_list.side_effect = [[service], []]
mock_fetch.side_effect = [service]
self.assertEquals(dockercloud.Utils.fetch_remote_service('shortuuid', True), service)
mock_list.side_effect = [[service], []]
mock_fetch.side_effect = [service]
self.assertEquals(dockercloud.Utils.fetch_remote_service('shortuuid', False), service)
# test unique cluster found queried with name
mock_list.side_effect = [[], [service]]
mock_fetch.side_effect = [service]
self.assertEquals(dockercloud.Utils.fetch_remote_service('name', True), service)
mock_list.side_effect = [[], [service]]
mock_fetch.side_effect = [service]
self.assertEquals(dockercloud.Utils.fetch_remote_service('name', False), service)
# test no cluster found
mock_list.side_effect = [[], []]
self.assertRaises(ObjectNotFound, dockercloud.Utils.fetch_remote_service, 'uuid_or_name', True)
mock_list.side_effect = [[], []]
self.assertIsInstance(dockercloud.Utils.fetch_remote_service('uuid_or_name', False), ObjectNotFound)
# test multi-cluster found
mock_list.side_effect = [['cluster1', 'cluster2'], []]
self.assertRaises(NonUniqueIdentifier, dockercloud.Utils.fetch_remote_service, 'uuid_or_name', True)
mock_list.side_effect = [['cluster1', 'cluster2'], []]
self.assertIsInstance(dockercloud.Utils.fetch_remote_service('uuid_or_name', False), NonUniqueIdentifier)
mock_list.side_effect = [[], ['cluster1', 'cluster2']]
self.assertRaises(NonUniqueIdentifier, dockercloud.Utils.fetch_remote_service, 'uuid_or_name', True)
mock_list.side_effect = [[], ['cluster1', 'cluster2']]
self.assertIsInstance(dockercloud.Utils.fetch_remote_service('uuid_or_name', False), NonUniqueIdentifier)
# test api error
mock_list.side_effect = [ApiError, ApiError]
self.assertRaises(ApiError, dockercloud.Utils.fetch_remote_service, 'uuid_or_name', True)
self.assertRaises(ApiError, dockercloud.Utils.fetch_remote_service, 'uuid_or_name', False)
@mock.patch('dockercloud.Node.list')
@mock.patch('dockercloud.Node.fetch')
def test_fetch_remote_node(self, mock_fetch, mock_list):
# test node exist queried with uuid4
mock_fetch.return_value = 'returned'
self.assertEqual(dockercloud.Utils.fetch_remote_node('7A4CFE51-03BB-42D6-825E-3B533888D8CD', True), 'returned')
self.assertEqual(dockercloud.Utils.fetch_remote_node('7A4CFE51-03BB-42D6-825E-3B533888D8CD', False), 'returned')
# test node doesn't exist queried with uuid4
mock_fetch.side_effect = ObjectNotFound
self.assertRaises(ObjectNotFound, dockercloud.Utils.fetch_remote_node, '7A4CFE51-03BB-42D6-825E-3B533888D8CD',
True)
self.assertIsInstance(dockercloud.Utils.fetch_remote_node('7A4CFE51-03BB-42D6-825E-3B533888D8CD', False),
ObjectNotFound)
# test unique node found queried with short uuid
node = dockercloud.Node.create()
node.uuid = 'uuid'
mock_list.side_effect = [[node]]
mock_fetch.side_effect = [node]
self.assertEquals(dockercloud.Utils.fetch_remote_node('uuid', True), node)
mock_list.side_effect = [[node]]
mock_fetch.side_effect = [node]
self.assertEquals(dockercloud.Utils.fetch_remote_node('uuid', False), node)
# test no node found
mock_list.side_effect = [[]]
self.assertRaises(ObjectNotFound, dockercloud.Utils.fetch_remote_node, 'uuid', True)
mock_list.side_effect = [[]]
self.assertIsInstance(dockercloud.Utils.fetch_remote_node('uuid', False), ObjectNotFound)
# test multi-node found
mock_list.side_effect = [['node1', 'node2']]
self.assertRaises(NonUniqueIdentifier, dockercloud.Utils.fetch_remote_node, 'uuid', True)
mock_list.side_effect = [['node1', 'node2']]
self.assertIsInstance(dockercloud.Utils.fetch_remote_node('uuid', False), NonUniqueIdentifier)
# test api error
mock_list.side_effect = [ApiError, ApiError]
self.assertRaises(ApiError, dockercloud.Utils.fetch_remote_node, 'uuid', True)
self.assertRaises(ApiError, dockercloud.Utils.fetch_remote_node, 'uuid', False)
@mock.patch('dockercloud.NodeCluster.list')
@mock.patch('dockercloud.NodeCluster.fetch')
def test_fetch_remote_nodecluster(self, mock_fetch, mock_list):
# test nodecluster exist queried with uuid4
mock_fetch.return_value = 'returned'
self.assertEqual(dockercloud.Utils.fetch_remote_nodecluster('7A4CFE51-03BB-42D6-825E-3B533888D8CD', True),
'returned')
self.assertEqual(dockercloud.Utils.fetch_remote_nodecluster('7A4CFE51-03BB-42D6-825E-3B533888D8CD', False),
'returned')
# test nodecluster doesn't exist queried with uuid4
mock_fetch.side_effect = ObjectNotFound
self.assertRaises(ObjectNotFound, dockercloud.Utils.fetch_remote_nodecluster,
'7A4CFE51-03BB-42D6-825E-3B533888D8CD',
True)
self.assertIsInstance(dockercloud.Utils.fetch_remote_nodecluster('7A4CFE51-03BB-42D6-825E-3B533888D8CD', False),
ObjectNotFound)
# test unique nodecluster found queried with short uuid
nodecluster = dockercloud.NodeCluster.create()
nodecluster.uuid = 'uuid'
mock_list.side_effect = [[nodecluster], []]
mock_fetch.side_effect = [nodecluster]
self.assertEquals(dockercloud.Utils.fetch_remote_nodecluster('shortuuid', True), nodecluster)
mock_list.side_effect = [[nodecluster], []]
mock_fetch.side_effect = [nodecluster]
self.assertEquals(dockercloud.Utils.fetch_remote_nodecluster('shortuuid', False), nodecluster)
# test unique nodecluster found queried with name
mock_list.side_effect = [[], [nodecluster]]
mock_fetch.side_effect = [nodecluster]
self.assertEquals(dockercloud.Utils.fetch_remote_nodecluster('name', True), nodecluster)
mock_list.side_effect = [[], [nodecluster]]
mock_fetch.side_effect = [nodecluster]
self.assertEquals(dockercloud.Utils.fetch_remote_nodecluster('name', False), nodecluster)
# test no nodecluster found
mock_list.side_effect = [[], []]
self.assertRaises(ObjectNotFound, dockercloud.Utils.fetch_remote_nodecluster, 'uuid_or_name', True)
mock_list.side_effect = [[], []]
self.assertIsInstance(dockercloud.Utils.fetch_remote_nodecluster('uuid_or_name', False), ObjectNotFound)
# test multi-nodecluster found
mock_list.side_effect = [['nodecluster1', 'nodecluster2'], []]
self.assertRaises(NonUniqueIdentifier, dockercloud.Utils.fetch_remote_nodecluster, 'uuid_or_name', True)
mock_list.side_effect = [['nodecluster1', 'nodecluster2'], []]
self.assertIsInstance(dockercloud.Utils.fetch_remote_nodecluster('uuid_or_name', False), NonUniqueIdentifier)
mock_list.side_effect = [[], ['nodecluster1', 'nodecluster2']]
self.assertRaises(NonUniqueIdentifier, dockercloud.Utils.fetch_remote_nodecluster, 'uuid_or_name', True)
mock_list.side_effect = [[], ['nodecluster1', 'nodecluster2']]
self.assertIsInstance(dockercloud.Utils.fetch_remote_nodecluster('uuid_or_name', False), NonUniqueIdentifier)
# test api error
mock_list.side_effect = [ApiError, ApiError]
self.assertRaises(ApiError, dockercloud.Utils.fetch_remote_nodecluster, 'uuid_or_name', True)
self.assertRaises(ApiError, dockercloud.Utils.fetch_remote_nodecluster, 'uuid_or_name', False)