2 # Copyright (C) The Arvados Authors. All rights reserved.
4 # SPDX-License-Identifier: AGPL-3.0
6 from __future__ import absolute_import, print_function
10 import libcloud.common.types as cloud_types
13 import arvnodeman.computenode.driver as driver_base
14 from . import testutil
16 class ComputeNodeDriverTestCase(unittest.TestCase):
18 self.driver_mock = mock.MagicMock(name='driver_mock')
19 driver_base.BaseComputeNodeDriver.SEARCH_CACHE = {}
21 def test_search_for_now_uses_public_method(self):
22 image = testutil.cloud_object_mock(1)
23 self.driver_mock().list_images.return_value = [image]
24 driver = driver_base.BaseComputeNodeDriver({}, {}, {}, self.driver_mock)
25 self.assertIs(image, driver.search_for_now('id_1', 'list_images'))
26 self.assertEqual(1, self.driver_mock().list_images.call_count)
28 def test_search_for_now_uses_private_method(self):
29 net = testutil.cloud_object_mock(1)
30 self.driver_mock().ex_list_networks.return_value = [net]
31 driver = driver_base.BaseComputeNodeDriver({}, {}, {}, self.driver_mock)
32 self.assertIs(net, driver.search_for_now('id_1', 'ex_list_networks'))
33 self.assertEqual(1, self.driver_mock().ex_list_networks.call_count)
35 def test_search_for_now_raises_ValueError_on_zero_results(self):
36 self.driver_mock().list_images.return_value = []
37 driver = driver_base.BaseComputeNodeDriver({}, {}, {}, self.driver_mock)
38 with self.assertRaises(ValueError) as test:
39 driver.search_for_now('id_1', 'list_images')
41 def test_search_for_now_raises_ValueError_on_extra_results(self):
42 image = testutil.cloud_object_mock(1)
43 self.driver_mock().list_images.return_value = [image, image]
44 driver = driver_base.BaseComputeNodeDriver({}, {}, {}, self.driver_mock)
45 with self.assertRaises(ValueError) as test:
46 driver.search_for_now('id_1', 'list_images')
48 def test_search_for_now_does_not_cache_results(self):
49 image1 = testutil.cloud_object_mock(1)
50 image2 = testutil.cloud_object_mock(1)
51 self.driver_mock().list_images.side_effect = [[image1], [image2]]
52 driver = driver_base.BaseComputeNodeDriver({}, {}, {}, self.driver_mock)
53 self.assertIsNot(driver.search_for_now('id_1', 'list_images'),
54 driver.search_for_now('id_1', 'list_images'))
55 self.assertEqual(2, self.driver_mock().list_images.call_count)
57 def test_search_for_returns_cached_results(self):
58 image1 = testutil.cloud_object_mock(1)
59 image2 = testutil.cloud_object_mock(1)
60 self.driver_mock().list_images.side_effect = [[image1], [image2]]
61 driver = driver_base.BaseComputeNodeDriver({}, {}, {}, self.driver_mock)
62 self.assertIs(driver.search_for('id_1', 'list_images'),
63 driver.search_for('id_1', 'list_images'))
64 self.assertEqual(1, self.driver_mock().list_images.call_count)