3 from __future__ import absolute_import, print_function
7 import libcloud.common.types as cloud_types
10 import arvnodeman.computenode.driver as driver_base
11 from . import testutil
13 class ComputeNodeDriverTestCase(unittest.TestCase):
15 self.driver_mock = mock.MagicMock(name='driver_mock')
16 driver_base.BaseComputeNodeDriver.SEARCH_CACHE = {}
18 def test_search_for_now_uses_public_method(self):
19 image = testutil.cloud_object_mock(1)
20 self.driver_mock().list_images.return_value = [image]
21 driver = driver_base.BaseComputeNodeDriver({}, {}, {}, self.driver_mock)
22 self.assertIs(image, driver.search_for_now('id_1', 'list_images'))
23 self.assertEqual(1, self.driver_mock().list_images.call_count)
25 def test_search_for_now_uses_private_method(self):
26 net = testutil.cloud_object_mock(1)
27 self.driver_mock().ex_list_networks.return_value = [net]
28 driver = driver_base.BaseComputeNodeDriver({}, {}, {}, self.driver_mock)
29 self.assertIs(net, driver.search_for_now('id_1', 'ex_list_networks'))
30 self.assertEqual(1, self.driver_mock().ex_list_networks.call_count)
32 def test_search_for_now_raises_ValueError_on_zero_results(self):
33 self.driver_mock().list_images.return_value = []
34 driver = driver_base.BaseComputeNodeDriver({}, {}, {}, self.driver_mock)
35 with self.assertRaises(ValueError) as test:
36 driver.search_for_now('id_1', 'list_images')
38 def test_search_for_now_raises_ValueError_on_extra_results(self):
39 image = testutil.cloud_object_mock(1)
40 self.driver_mock().list_images.return_value = [image, image]
41 driver = driver_base.BaseComputeNodeDriver({}, {}, {}, self.driver_mock)
42 with self.assertRaises(ValueError) as test:
43 driver.search_for_now('id_1', 'list_images')
45 def test_search_for_now_does_not_cache_results(self):
46 image1 = testutil.cloud_object_mock(1)
47 image2 = testutil.cloud_object_mock(1)
48 self.driver_mock().list_images.side_effect = [[image1], [image2]]
49 driver = driver_base.BaseComputeNodeDriver({}, {}, {}, self.driver_mock)
50 self.assertIsNot(driver.search_for_now('id_1', 'list_images'),
51 driver.search_for_now('id_1', 'list_images'))
52 self.assertEqual(2, self.driver_mock().list_images.call_count)
54 def test_search_for_returns_cached_results(self):
55 image1 = testutil.cloud_object_mock(1)
56 image2 = testutil.cloud_object_mock(1)
57 self.driver_mock().list_images.side_effect = [[image1], [image2]]
58 driver = driver_base.BaseComputeNodeDriver({}, {}, {}, self.driver_mock)
59 self.assertIs(driver.search_for('id_1', 'list_images'),
60 driver.search_for('id_1', 'list_images'))
61 self.assertEqual(1, self.driver_mock().list_images.call_count)