Fix a bug preventing usage of multiple ServiceSwitchers in a pipeline
This commit is contained in:
@@ -61,20 +61,21 @@ class ServiceSwitcherStrategyManual(ServiceSwitcherStrategy):
|
|||||||
direction: The direction of the frame (upstream or downstream).
|
direction: The direction of the frame (upstream or downstream).
|
||||||
"""
|
"""
|
||||||
if isinstance(frame, ManuallySwitchServiceFrame):
|
if isinstance(frame, ManuallySwitchServiceFrame):
|
||||||
self._set_active(frame.service)
|
self._set_active_if_available(frame.service)
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Unsupported frame type: {type(frame)}")
|
raise ValueError(f"Unsupported frame type: {type(frame)}")
|
||||||
|
|
||||||
def _set_active(self, service: FrameProcessor):
|
def _set_active_if_available(self, service: FrameProcessor):
|
||||||
"""Set the active service to the given one.
|
"""Set the active service to the given one, if it is in the list of available services.
|
||||||
|
|
||||||
|
If it's not in the list, the request is ignored, as it may have been
|
||||||
|
intended for another ServiceSwitcher in the pipeline.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
service: The service to set as active.
|
service: The service to set as active.
|
||||||
"""
|
"""
|
||||||
if service in self.services:
|
if service in self.services:
|
||||||
self.active_service = service
|
self.active_service = service
|
||||||
else:
|
|
||||||
raise ValueError(f"Service {service} is not in the list of available services.")
|
|
||||||
|
|
||||||
|
|
||||||
StrategyType = TypeVar("StrategyType", bound=ServiceSwitcherStrategy)
|
StrategyType = TypeVar("StrategyType", bound=ServiceSwitcherStrategy)
|
||||||
|
|||||||
@@ -100,19 +100,6 @@ class TestServiceSwitcherStrategyManual(unittest.IsolatedAsyncioTestCase):
|
|||||||
self.assertNotEqual(strategy.active_service, self.service2)
|
self.assertNotEqual(strategy.active_service, self.service2)
|
||||||
self.assertEqual(strategy.active_service, self.service3)
|
self.assertEqual(strategy.active_service, self.service3)
|
||||||
|
|
||||||
def test_handle_frame_invalid_service(self):
|
|
||||||
"""Test that switching to an invalid service raises an error."""
|
|
||||||
strategy = ServiceSwitcherStrategyManual(self.services)
|
|
||||||
invalid_service = MockFrameProcessor("invalid")
|
|
||||||
|
|
||||||
switch_frame = ManuallySwitchServiceFrame(service=invalid_service)
|
|
||||||
|
|
||||||
with self.assertRaises(ValueError) as context:
|
|
||||||
strategy.handle_frame(switch_frame, FrameDirection.DOWNSTREAM)
|
|
||||||
|
|
||||||
self.assertIn("Service", str(context.exception))
|
|
||||||
self.assertIn("is not in the list of available services", str(context.exception))
|
|
||||||
|
|
||||||
def test_handle_frame_unsupported_frame_type(self):
|
def test_handle_frame_unsupported_frame_type(self):
|
||||||
"""Test that unsupported frame types raise an error."""
|
"""Test that unsupported frame types raise an error."""
|
||||||
strategy = ServiceSwitcherStrategyManual(self.services)
|
strategy = ServiceSwitcherStrategyManual(self.services)
|
||||||
|
|||||||
Reference in New Issue
Block a user