From b950e24fefeabe8573213d9b135b976c07621c69 Mon Sep 17 00:00:00 2001 From: VIRTUALGUARD Date: Sat, 12 Jul 2025 01:23:23 +0800 Subject: [PATCH] [Fix] Update test scripts, all test can pass before this commit --- src/manager.py | 3 +++ src/services.py | 11 ++++++----- test/test_manager.py | 3 ++- test/test_services.py | 16 ++++++++++++++++ 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/manager.py b/src/manager.py index 1977c8c..e29806f 100755 --- a/src/manager.py +++ b/src/manager.py @@ -23,6 +23,8 @@ handler.setFormatter(colorlog.ColoredFormatter( logger = colorlog.getLogger(__name__) logger.setLevel(logging.INFO) logger.addHandler(handler) + + class ServiceFactory: """Factory for creating Service instances based on tag. @@ -183,6 +185,7 @@ class Manager: """ services = self.list_services() if index < 0 or index >= len(services): + logger.error(f"Invalid service index: {index}") raise IndexError(f"Invalid service index: {index}") service = services[index] diff --git a/src/services.py b/src/services.py index fd0cdb9..f47b7b2 100644 --- a/src/services.py +++ b/src/services.py @@ -165,20 +165,21 @@ class Service: "path": self.path } - def service_operation(self, operation_getter: Callable[[], Optional[int]] = get_operation) -> None: + def service_operation(self) -> None: """Perform service operation based on user input. - Args: - operation_getter: Function to get operation choice """ - operation = operation_getter() + operation = get_operation() if operation is None: logger.info("Operation cancelled by user") return try: # Generate and execute command - command = self.strategy.generate_command(operation, self.name, self.path) + if self.path is not None: + command = self.strategy.generate_command(operation, self.name, self.path) + else: + command = self.strategy.generate_command(operation, self.name) logger.info(f"Executing: {' '.join(command)}") self.strategy.execute(command) logger.info(f"Service {self.name} operation completed") diff --git a/test/test_manager.py b/test/test_manager.py index 5782114..4d2ff62 100644 --- a/test/test_manager.py +++ b/test/test_manager.py @@ -141,7 +141,8 @@ class TestManager(unittest.TestCase): with self.assertRaises(IndexError): manager.execute_service_operation(0) - mock_logger.error.assert_called() + # 验证错误日志记录 + mock_logger.error.assert_called_with("Invalid service index: 0") if __name__ == "__main__": diff --git a/test/test_services.py b/test/test_services.py index b595ac6..214c484 100644 --- a/test/test_services.py +++ b/test/test_services.py @@ -142,5 +142,21 @@ class TestServiceOperation(unittest.TestCase): mock_info.assert_any_call("Executing: sudo systemctl stop nginx") mock_info.assert_any_call("Service nginx operation completed") + @patch("src.services.DockerServiceStrategy.execute") + @patch("src.services.DockerServiceStrategy.generate_command", return_value=["docker", "compose", "down"]) + @patch("src.services.get_operation", return_value=0) + @patch("src.services.logger.info") + def test_docker_service_operation(self, mock_info, mock_get_operation, mock_generate, mock_execute): + """测试Docker服务操作流程""" + service = Service(tag="docker", name="homepage", path="/path/to/docker") + service.service_operation() + + # 验证调用 + mock_get_operation.assert_called_once() + mock_generate.assert_called_with(0, "homepage", "/path/to/docker") + mock_execute.assert_called_with(["docker", "compose", "down"]) + mock_info.assert_any_call("Executing: docker compose down") + mock_info.assert_any_call("Service homepage operation completed") + if __name__ == "__main__": unittest.main() \ No newline at end of file