diff --git a/selfprivacy_api/services/service.py b/selfprivacy_api/services/service.py index e2c7c01..c1cc5be 100644 --- a/selfprivacy_api/services/service.py +++ b/selfprivacy_api/services/service.py @@ -12,6 +12,8 @@ from selfprivacy_api.services.generic_size_counter import get_storage_usage from selfprivacy_api.services.owned_path import OwnedPath from selfprivacy_api.utils.waitloop import wait_until_true +DEFAULT_START_STOP_TIMEOUT = 10 * 60 + class ServiceStatus(Enum): """Enum for service status""" @@ -250,16 +252,17 @@ class Service(ABC): class StoppedService: """ - A context manager that stops the service if needed and reactivates it - after you are done if it was active + A context manager that stops the service if needed and reactivates it + after you are done if it was active - Example: - ``` - assert service.get_status() == ServiceStatus.ACTIVE - with StoppedService(service) [as stopped_service]: - assert service.get_status() == ServiceStatus.INACTIVE - ``` + Example: + ``` + assert service.get_status() == ServiceStatus.ACTIVE + with StoppedService(service) [as stopped_service]: + assert service.get_status() == ServiceStatus.INACTIVE + ``` """ + def __init__(self, service: Service): self.service = service self.original_status = service.get_status() @@ -268,10 +271,16 @@ class StoppedService: self.original_status = self.service.get_status() if self.original_status != ServiceStatus.INACTIVE: self.service.stop() - wait_until_true(lambda: self.service.get_status() == ServiceStatus.INACTIVE) + wait_until_true( + lambda: self.service.get_status() == ServiceStatus.INACTIVE, + timeout_sec=DEFAULT_START_STOP_TIMEOUT, + ) return self.service def __exit__(self, type, value, traceback): if self.original_status in [ServiceStatus.ACTIVATING, ServiceStatus.ACTIVE]: self.service.start() - wait_until_true(lambda: self.service.get_status() == ServiceStatus.ACTIVE) + wait_until_true( + lambda: self.service.get_status() == ServiceStatus.ACTIVE, + timeout_sec=DEFAULT_START_STOP_TIMEOUT, + )