import unittest from unittest.mock import patch, MagicMock from docker_config import DockerConfig, REGISTRY_URL, REGISTRY_LOGIN, REGISTRY_PASSWORD, DOCKER_COMPOSE_FILE_PATH class TestDockerConfig(unittest.TestCase): def setUp(self): self.docker_config = DockerConfig() @patch("subprocess.run") def test_check_installed_true(self, mock_run): mock_run.return_value.returncode = 0 self.assertTrue(self.docker_config.check_installed("docker")) @patch("subprocess.run") def test_check_installed_false(self, mock_run): mock_run.return_value.returncode = 1 self.assertFalse(self.docker_config.check_installed("docker")) @patch("subprocess.run") def test_install_docker(self, mock_run): self.docker_config.install_docker() mock_run.assert_any_call(["apt-get", "update"], check=True) mock_run.assert_any_call(["apt-get", "install", "-y", "docker.io"], check=True) mock_run.assert_any_call( ["apt-get", "install", "-y", "docker-compose"], check=True ) @patch("subprocess.run") def test_check_docker_login_success(self, mock_run): mock_run.return_value.stdout = "Login Succeeded" self.assertTrue(self.docker_config.check_docker_login("registry_url")) @patch("subprocess.run") def test_check_docker_login_failure(self, mock_run): mock_run.return_value.stdout = "Login Failed" self.assertFalse(self.docker_config.check_docker_login("registry_url")) @patch("subprocess.run") @patch("docker_config.DockerConfig.check_docker_login") def test_login_to_registry(self, mock_check_login, mock_run): mock_check_login.return_value = False self.docker_config.login_to_registry() mock_run.assert_called_once() @patch("subprocess.run") @patch("docker_config.DockerConfig.check_docker_login") @patch("docker_config.DockerConfig.login_to_registry") @patch("builtins.open", new_callable=unittest.mock.mock_open) def test_install_portainer(self, mock_open, mock_login, mock_check_login, mock_run): mock_check_login.return_value = True self.docker_config.install_portainer("9000", "admin", "password", "127.0.0.1") mock_open.assert_called() mock_run.assert_called() def test_validate_input_success(self): self.assertTrue( self.docker_config.validate_input("admin", r"^[a-zA-Z0-9_-]+$", "Error") ) def test_validate_input_failure(self): self.assertFalse( self.docker_config.validate_input("admin@", r"^[a-zA-Z0-9_-]+$", "Error") ) if __name__ == "__main__": unittest.main()