From 32cdbd23d5dee8dbfe22570b61981f3e7000aa68 Mon Sep 17 00:00:00 2001 From: Ivan Halomi Date: Mon, 11 Mar 2024 15:29:17 +0100 Subject: Merge of container_facts modules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge container_facts and container_volume_facts into a single module for retrieving all information about containers and volumes. Change-Id: I5d321b8326edd7f3b7a11dbdc821e534f457f9d7 Signed-off-by: Ivan Halomi Signed-off-by: Roman KrĨek --- tests/test_kolla_container_facts.py | 112 +++++++++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/test_kolla_container_facts.py b/tests/test_kolla_container_facts.py index 81e6a5009..f1fc59f3e 100644 --- a/tests/test_kolla_container_facts.py +++ b/tests/test_kolla_container_facts.py @@ -65,7 +65,23 @@ FAKE_DATA = { 'Volumes': {'/var/lib/kolla/config_files/': {}}}, 'Mounts': {}, 'NetworkSettings': {} - } + }, + 'volumes': [ + {'CreatedAt': '2024-10-10T12:05:46+02:00', + 'Driver': 'local', + 'Labels': None, + 'Mountpoint': '/var/lib/docker/volumes/my_volume/_data', + 'Name': 'my_volume', + 'Options': None, + 'Scope': 'local'}, + {'CreatedAt': '2023-05-01T14:55:36+02:00', + 'Driver': 'local', + 'Labels': None, + 'Mountpoint': '/var/lib/docker/volumes/another_volume/_data', + 'Name': 'another_volume', + 'Options': None, + 'Scope': 'local'} + ] } @@ -77,7 +93,7 @@ def get_DockerFactsWorker(mod_param, mock_client): return dfw -def construct_container(cont_dict): +def construct_container(cont_dict) -> mock.Mock: container = mock.Mock() container.name = cont_dict['Name'] container.attrs = copy.deepcopy(cont_dict) @@ -85,6 +101,14 @@ def construct_container(cont_dict): return container +def contruct_volume(vol_dict: dict) -> mock.Mock: + """Creates volume object that mimics the output of a container client.""" + volume = mock.Mock() + volume.name = vol_dict['Name'] + volume.attrs = copy.deepcopy(vol_dict) + return volume + + def get_containers(override=None): if override: cont_dicts = override @@ -100,6 +124,15 @@ def get_containers(override=None): return containers +def get_volumes(override=None): + if override: + vol_dicts = override + else: + vol_dicts = copy.deepcopy(FAKE_DATA['volumes']) + + return [contruct_volume(v) for v in vol_dicts] + + class TestContainerFacts(base.BaseTestCase): def setUp(self): super(TestContainerFacts, self).setUp() @@ -202,3 +235,78 @@ class TestContainerFacts(base.BaseTestCase): 'fake_container') self.dfw.module.fail_json.assert_called_once_with( msg="No such container: fake_container") + + def test_get_volumes_single(self): + """Test fetching a single volume""" + self.dfw = get_DockerFactsWorker( + {'name': ['my_volume'], 'action': 'get_volumes'}) + full_vol_list = get_volumes(self.fake_data['volumes']) + self.dfw.client.volumes.list.return_value = full_vol_list + + self.dfw.get_volumes() + + self.assertFalse(self.dfw.result['changed']) + self.dfw.client.volumes.list.assert_called_once_with() + self.assertIn('my_volume', self.dfw.result['volumes']) + self.assertNotIn('another_volume', self.dfw.result['volumes']) + self.assertEqual(len(self.dfw.result['volumes']), 1) + self.assertDictEqual( + self.dfw.result['volumes']['my_volume'], + self.fake_data['volumes'][0]) + + def test_get_volumes_multiple(self): + """Test fetching multiple volumes""" + self.dfw = get_DockerFactsWorker({ + 'name': ['my_volume', 'another_volume'], + 'action': 'get_volumes'}) + full_vol_list = get_volumes(self.fake_data['volumes']) + self.dfw.client.volumes.list.return_value = full_vol_list + + self.dfw.get_volumes() + + self.assertFalse(self.dfw.result['changed']) + self.dfw.client.volumes.list.assert_called_once_with() + self.assertIn('my_volume', self.dfw.result['volumes']) + self.assertIn('another_volume', self.dfw.result['volumes']) + self.assertEqual(len(self.dfw.result['volumes']), 2) + self.assertDictEqual( + self.dfw.result['volumes']['my_volume'], + self.fake_data['volumes'][0]) + self.assertDictEqual( + self.dfw.result['volumes']['another_volume'], + self.fake_data['volumes'][1]) + + def test_get_volumes_all(self): + """Test fetching all volumes when no specific names are provided""" + self.dfw = get_DockerFactsWorker({'name': [], + 'action': 'get_volumes'}) + full_vol_list = get_volumes(self.fake_data['volumes']) + self.dfw.client.volumes.list.return_value = full_vol_list + + self.dfw.get_volumes() + + self.assertFalse(self.dfw.result['changed']) + self.dfw.client.volumes.list.assert_called_once_with() + self.assertIn('my_volume', self.dfw.result['volumes']) + self.assertIn('another_volume', self.dfw.result['volumes']) + self.assertDictEqual( + self.dfw.result['volumes']['my_volume'], + self.fake_data['volumes'][0]) + self.assertDictEqual( + self.dfw.result['volumes']['another_volume'], + self.fake_data['volumes'][1]) + + def test_get_volumes_negative(self): + """Test fetching a volume that doesn't exist""" + self.dfw = get_DockerFactsWorker({'name': ['nonexistent_volume'], + 'action': 'get_volumes'}) + full_vol_list = get_volumes(self.fake_data['volumes']) + self.dfw.client.volumes.list.return_value = full_vol_list + + self.dfw.get_volumes() + + self.assertFalse(self.dfw.result['changed']) + self.dfw.client.volumes.list.assert_called_once_with() + self.assertIn('volumes', self.dfw.result) + self.assertEqual(len(self.dfw.result['volumes']), 0) + self.assertNotIn('nonexistent_volume', self.dfw.result['volumes']) -- cgit v1.2.3