8784: Fix test for latest firefox.
[arvados.git] / services / nodemanager / tests / test_computenode_driver.py
1 #!/usr/bin/env python
2
3 from __future__ import absolute_import, print_function
4
5 import unittest
6
7 import libcloud.common.types as cloud_types
8 import mock
9
10 import arvnodeman.computenode.driver as driver_base
11 from . import testutil
12
13 class ComputeNodeDriverTestCase(unittest.TestCase):
14     def setUp(self):
15         self.driver_mock = mock.MagicMock(name='driver_mock')
16         driver_base.BaseComputeNodeDriver.SEARCH_CACHE = {}
17
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)
24
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)
31
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')
37
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')
44
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)
53
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)