import os import sys from mock.mock import patch, MagicMock import pytest sys.path.append("./library") import radosgw_caps # noqa: E402 fake_binary = "radosgw-admin" fake_cluster = "ceph" fake_container_binary = "podman" fake_container_image = "docker.io/ceph/daemon:latest" fake_container_cmd = [ fake_container_binary, "run", "--rm", "--net=host", "-v", "/etc/ceph:/etc/ceph:z", "-v", "/var/lib/ceph/:/var/lib/ceph/:z", "-v", "/var/log/ceph/:/var/log/ceph/:z", "--entrypoint=" + fake_binary, fake_container_image, ] fake_user = "foo" fake_caps = ["users=write", "zone=*", "metadata=read,write"] fake_params = { "cluster": fake_cluster, "name": fake_user, "caps": fake_caps, } class TestRadosgwCapsModule(object): @patch.dict(os.environ, {"CEPH_CONTAINER_BINARY": fake_container_binary}) def test_container_exec(self): cmd = radosgw_caps.container_exec(fake_binary, fake_container_image) assert cmd == fake_container_cmd def test_not_is_containerized(self): assert radosgw_caps.is_containerized() is None @patch.dict(os.environ, {"CEPH_CONTAINER_IMAGE": fake_container_image}) def test_is_containerized(self): assert radosgw_caps.is_containerized() == fake_container_image @pytest.mark.parametrize("image", [None, fake_container_image]) @patch.dict(os.environ, {"CEPH_CONTAINER_BINARY": fake_container_binary}) def test_pre_generate_radosgw_cmd(self, image): if image: expected_cmd = fake_container_cmd else: expected_cmd = [fake_binary] assert radosgw_caps.pre_generate_radosgw_cmd(image) == expected_cmd @pytest.mark.parametrize("image", [None, fake_container_image]) @patch.dict(os.environ, {"CEPH_CONTAINER_BINARY": fake_container_binary}) def test_generate_radosgw_cmd(self, image): if image: expected_cmd = fake_container_cmd else: expected_cmd = [fake_binary] expected_cmd.extend(["--cluster", fake_cluster, "caps"]) assert ( radosgw_caps.generate_radosgw_cmd(fake_cluster, [], image) == expected_cmd ) def test_add_caps(self): fake_module = MagicMock() fake_module.params = fake_params expected_cmd = [ fake_binary, "--cluster", fake_cluster, "caps", "add", "--uid=" + fake_user, "--caps=" + ";".join(fake_caps), ] assert radosgw_caps.add_caps(fake_module) == expected_cmd def test_remove_caps(self): fake_module = MagicMock() fake_module.params = fake_params expected_cmd = [ fake_binary, "--cluster", fake_cluster, "caps", "rm", "--uid=" + fake_user, "--caps=" + ";".join(fake_caps), ] assert radosgw_caps.remove_caps(fake_module) == expected_cmd