diff --git a/.github/workflows/update_protos.yml b/.github/workflows/update_protos.yml index 0530aed83..a045e38ea 100644 --- a/.github/workflows/update_protos.yml +++ b/.github/workflows/update_protos.yml @@ -226,7 +226,7 @@ jobs: client = ServiceStub(channel) await client.Method(request, timeout=1.82) cast(AsyncMock, .method_name).assert_called_once_with( - value1, timeout=loose_approx(1.82), extra={"a": "b"}, metadata={} + value1, timeout=expected_grpc_timeout(1.82), extra={"a": "b"}, metadata={} ) class TestClient: diff --git a/tests/__init__.py b/tests/__init__.py index 00ed3b03f..541cad695 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,5 +1,12 @@ import pytest -def loose_approx(val): - return pytest.approx(val, rel=1e-2) +def expected_grpc_timeout(val): + """Approximate comparison accounting for grpclib timeout encoding precision loss and time_remaining jitter. + + grpclib.encode_timeout truncates to integer seconds (>10s) or integer milliseconds (<=10s). + time_remaining introduces up to ~10ms of jitter from async processing. + """ + if val > 10: + return pytest.approx(val, abs=1.01) + return pytest.approx(val, abs=0.011) diff --git a/tests/test_arm.py b/tests/test_arm.py index ac57357ec..d219a7a74 100644 --- a/tests/test_arm.py +++ b/tests/test_arm.py @@ -27,7 +27,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockArm @@ -130,7 +130,7 @@ async def test_stop(self): request = StopRequest(name=self.name) await client.Stop(request, timeout=4.4) assert self.arm.is_stopped is True - assert self.arm.timeout == loose_approx(4.4) + assert self.arm.timeout == expected_grpc_timeout(4.4) async def test_is_moving(self): async with ChannelFor([self.service]) as channel: @@ -215,7 +215,7 @@ async def test_stop(self): client = ArmClient(self.name, channel) await client.stop(timeout=1.82) assert self.arm.is_stopped is True - assert self.arm.timeout == loose_approx(1.82) + assert self.arm.timeout == expected_grpc_timeout(1.82) async def test_is_moving(self): async with ChannelFor([self.service]) as channel: diff --git a/tests/test_audio_in.py b/tests/test_audio_in.py index af9684e6b..736347643 100644 --- a/tests/test_audio_in.py +++ b/tests/test_audio_in.py @@ -15,7 +15,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockAudioIn # Test properties for the mock AudioIn @@ -116,7 +116,7 @@ async def test_get_properties(self, audio_in: MockAudioIn, service: AudioInRPCSe assert response.supported_codecs == PROPERTIES.supported_codecs assert response.sample_rate_hz == PROPERTIES.sample_rate_hz assert response.num_channels == PROPERTIES.num_channels - assert audio_in.timeout == loose_approx(1.82) + assert audio_in.timeout == expected_grpc_timeout(1.82) async def test_do_command(self, audio_in: MockAudioIn, service: AudioInRPCService): async with ChannelFor([service]) as channel: @@ -165,7 +165,7 @@ async def test_get_properties(self, audio_in: MockAudioIn, service: AudioInRPCSe assert properties.supported_codecs == PROPERTIES.supported_codecs assert properties.sample_rate_hz == PROPERTIES.sample_rate_hz assert properties.num_channels == PROPERTIES.num_channels - assert audio_in.timeout == loose_approx(4.4) + assert audio_in.timeout == expected_grpc_timeout(4.4) async def test_do_command(self, audio_in: AudioIn, service: AudioInRPCService): async with ChannelFor([service]) as channel: diff --git a/tests/test_audio_out.py b/tests/test_audio_out.py index 201972e4e..b053d95e8 100644 --- a/tests/test_audio_out.py +++ b/tests/test_audio_out.py @@ -13,7 +13,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockAudioOut # Test properties for the mock AudioIn @@ -121,7 +121,7 @@ async def test_get_properties(self, audio_out: MockAudioOut, service: AudioOutRP assert response.supported_codecs == PROPERTIES.supported_codecs assert response.sample_rate_hz == PROPERTIES.sample_rate_hz assert response.num_channels == PROPERTIES.num_channels - assert audio_out.timeout == loose_approx(1.82) + assert audio_out.timeout == expected_grpc_timeout(1.82) @pytest.mark.asyncio async def test_do_command(self, audio_out: MockAudioOut, service: AudioOutRPCService): @@ -183,7 +183,7 @@ async def test_get_properties(self, audio_out: MockAudioOut, service: AudioOutRP assert properties.supported_codecs == PROPERTIES.supported_codecs assert properties.sample_rate_hz == PROPERTIES.sample_rate_hz assert properties.num_channels == PROPERTIES.num_channels - assert audio_out.timeout == loose_approx(4.4) + assert audio_out.timeout == expected_grpc_timeout(4.4) @pytest.mark.asyncio async def test_do_command(self, audio_out: MockAudioOut, service: AudioOutRPCService): diff --git a/tests/test_base.py b/tests/test_base.py index 21a0db622..f9e2d121e 100644 --- a/tests/test_base.py +++ b/tests/test_base.py @@ -20,7 +20,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockBase @@ -194,7 +194,7 @@ async def test_stop(self, base: MockBase, service: BaseRPCService): assert base.stopped is False await client.Stop(StopRequest(name=base.name), timeout=1.82) assert base.stopped is True - assert base.timeout == loose_approx(1.82) + assert base.timeout == expected_grpc_timeout(1.82) request = MoveStraightRequest( name=base.name, @@ -315,7 +315,7 @@ async def test_stop(self, base: MockBase, service: BaseRPCService): assert base.stopped is False await client.stop(timeout=4.4) assert base.stopped is True - assert base.timeout == loose_approx(4.4) + assert base.timeout == expected_grpc_timeout(4.4) await client.move_straight(1, 1) assert base.stopped is False diff --git a/tests/test_board.py b/tests/test_board.py index 7f8a9046b..1b56d7608 100644 --- a/tests/test_board.py +++ b/tests/test_board.py @@ -36,7 +36,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockAnalog, MockBoard, MockDigitalInterrupt, MockGPIOPin @@ -122,7 +122,7 @@ async def test_set_power_mode(self, board: MockBoard): pm_mode = PowerMode.POWER_MODE_OFFLINE_DEEP pm_duration = timedelta(minutes=1) await board.set_power_mode(mode=pm_mode, duration=pm_duration, timeout=1.11) - assert board.timeout == loose_approx(1.11) + assert board.timeout == expected_grpc_timeout(1.11) assert board.power_mode == pm_mode assert board.power_mode_duration == pm_duration @@ -157,7 +157,7 @@ async def test_read_analog(self, board: MockBoard, service: BoardRPCService): reader = cast(MockAnalog, board.analogs["analog1"]) assert reader.extra == extra - assert reader.timeout == loose_approx(4.4) + assert reader.timeout == expected_grpc_timeout(4.4) async def test_get_digital_interrupt_value(self, board: MockBoard, service: BoardRPCService, interrupt: MockDigitalInterrupt): async with ChannelFor([service]) as channel: @@ -182,7 +182,7 @@ async def test_set_gpio(self, board: MockBoard, service: BoardRPCService): pin = cast(MockGPIOPin, board.gpios["pin1"]) assert pin.high is True assert pin.extra == extra - assert pin.timeout == loose_approx(4.1) + assert pin.timeout == expected_grpc_timeout(4.1) async def test_get_gpio(self, board: MockBoard, service: BoardRPCService): async with ChannelFor([service]) as channel: @@ -199,7 +199,7 @@ async def test_get_gpio(self, board: MockBoard, service: BoardRPCService): pin = cast(MockGPIOPin, board.gpios["pin1"]) assert pin.extra == extra - assert pin.timeout == loose_approx(1.82) + assert pin.timeout == expected_grpc_timeout(1.82) async def test_pwm(self, board: MockBoard, service: BoardRPCService): async with ChannelFor([service]) as channel: @@ -212,7 +212,7 @@ async def test_pwm(self, board: MockBoard, service: BoardRPCService): pin = cast(MockGPIOPin, board.gpios["pin1"]) assert pin.extra == extra - assert pin.timeout == loose_approx(7.86) + assert pin.timeout == expected_grpc_timeout(7.86) async def test_set_pwm(self, board: MockBoard, service: BoardRPCService): async with ChannelFor([service]) as channel: @@ -225,7 +225,7 @@ async def test_set_pwm(self, board: MockBoard, service: BoardRPCService): pin = cast(MockGPIOPin, board.gpios["pin1"]) assert pin.pwm == 12.3 assert pin.extra == extra - assert pin.timeout == loose_approx(1.213) + assert pin.timeout == expected_grpc_timeout(1.213) async def test_pwm_frequency(self, board: MockBoard, service: BoardRPCService): async with ChannelFor([service]) as channel: @@ -238,7 +238,7 @@ async def test_pwm_frequency(self, board: MockBoard, service: BoardRPCService): pin = cast(MockGPIOPin, board.gpios["pin1"]) assert pin.extra == extra - assert pin.timeout == loose_approx(182) + assert pin.timeout == expected_grpc_timeout(182) async def test_set_pwm_freq(self, board: MockBoard, service: BoardRPCService): async with ChannelFor([service]) as channel: @@ -279,7 +279,7 @@ async def test_set_power_mode(self, board: MockBoard, service: BoardRPCService): request = SetPowerModeRequest(name=board.name, power_mode=pm_mode, duration=pm_duration, extra=dict_to_struct(extra)) response: SetPowerModeResponse = await client.SetPowerMode(request, timeout=6.66) assert response == SetPowerModeResponse() - assert board.timeout == loose_approx(6.66) + assert board.timeout == expected_grpc_timeout(6.66) assert board.power_mode == PowerMode.POWER_MODE_OFFLINE_DEEP assert board.power_mode_duration == pm_duration.ToTimedelta() assert board.extra == extra @@ -293,7 +293,7 @@ async def test_write_analog(self, board: MockBoard, service: BoardRPCService): response: WriteAnalogResponse = await client.WriteAnalog(request, timeout=6.66) assert response == WriteAnalogResponse() mock_analog = cast(MockAnalog, board.analogs["analog1"]) - assert mock_analog.timeout == loose_approx(6.66) + assert mock_analog.timeout == expected_grpc_timeout(6.66) assert mock_analog.value.value == value assert mock_analog.name == pin @@ -364,8 +364,7 @@ async def test_set_power_mode(self, board: MockBoard, service: BoardRPCService): pm_mode = PowerMode.POWER_MODE_OFFLINE_DEEP pm_timedelta = timedelta(minutes=1) await client.set_power_mode(mode=pm_mode, duration=pm_timedelta, timeout=9.83) - print("timeout is", board.timeout) - assert board.timeout == loose_approx(9.83) + assert board.timeout == expected_grpc_timeout(9.83) assert board.power_mode == pm_mode pm_duration = Duration() pm_duration.FromTimedelta(pm_timedelta) @@ -426,7 +425,7 @@ async def test_set(self, board: MockBoard, service: BoardRPCService): mock_pin = cast(MockGPIOPin, board.gpios["pin1"]) assert mock_pin.high is True assert mock_pin.extra == extra - assert mock_pin.timeout == loose_approx(1.82) + assert mock_pin.timeout == expected_grpc_timeout(1.82) async def test_get(self, board: MockBoard, service: BoardRPCService): async with ChannelFor([service]) as channel: @@ -448,7 +447,7 @@ async def test_set_pwm(self, board: MockBoard, service: BoardRPCService): mock_pin = cast(MockGPIOPin, board.gpios["pin1"]) assert mock_pin.pwm == 12.3 assert mock_pin.extra == extra - assert mock_pin.timeout == loose_approx(3.23) + assert mock_pin.timeout == expected_grpc_timeout(3.23) async def test_get_pwm(self, board: MockBoard, service: BoardRPCService): async with ChannelFor([service]) as channel: @@ -459,7 +458,7 @@ async def test_get_pwm(self, board: MockBoard, service: BoardRPCService): assert pwm == 0.0 mock_pin = cast(MockGPIOPin, board.gpios["pin1"]) assert mock_pin.extra == extra - assert mock_pin.timeout == loose_approx(1.2345) + assert mock_pin.timeout == expected_grpc_timeout(1.2345) async def test_set_pwm_frequency(self, board: MockBoard, service: BoardRPCService): async with ChannelFor([service]) as channel: @@ -470,7 +469,7 @@ async def test_set_pwm_frequency(self, board: MockBoard, service: BoardRPCServic mock_pin = cast(MockGPIOPin, board.gpios["pin1"]) assert mock_pin.pwm_freq == 123 assert mock_pin.extra == extra - assert mock_pin.timeout == loose_approx(4.341) + assert mock_pin.timeout == expected_grpc_timeout(4.341) async def test_get_pwm_freq(self, board: MockBoard, service: BoardRPCService): async with ChannelFor([service]) as channel: diff --git a/tests/test_button.py b/tests/test_button.py index 146303c7c..787c9385f 100644 --- a/tests/test_button.py +++ b/tests/test_button.py @@ -12,7 +12,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import MockButton EXTRA_PARAMS = {"foo": "bar", "baz": [1, 2, 3]} @@ -27,7 +27,7 @@ class TestButton: async def test_push(self, button): await button.push(timeout=1.23, extra=EXTRA_PARAMS) assert button.pushed is True - assert button.timeout == loose_approx(1.23) + assert button.timeout == expected_grpc_timeout(1.23) assert button.extra == EXTRA_PARAMS async def test_do(self, button): @@ -55,7 +55,7 @@ async def test_push(self, button, service): await client.Push(request, timeout=1.23) assert button.pushed is True assert button.extra == EXTRA_PARAMS - assert button.timeout == loose_approx(1.23) + assert button.timeout == expected_grpc_timeout(1.23) async def test_do(self, button: MockButton, service: ButtonRPCService): async with ChannelFor([service]) as channel: @@ -75,7 +75,7 @@ async def test_push(self, button, service): await client.push(timeout=3.45, extra=EXTRA_PARAMS) assert button.pushed is True assert button.extra == EXTRA_PARAMS - assert button.timeout == loose_approx(3.45) + assert button.timeout == expected_grpc_timeout(3.45) async def test_do(self, button, manager, service): async with ChannelFor([service]) as channel: diff --git a/tests/test_camera.py b/tests/test_camera.py index f65120d4f..3ff0f733d 100644 --- a/tests/test_camera.py +++ b/tests/test_camera.py @@ -24,7 +24,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockCamera # ################################ NB ################################# # @@ -107,10 +107,10 @@ async def test_timeout(self, camera: MockCamera): assert camera.timeout is None await camera.get_point_cloud(timeout=4.4) - assert camera.timeout == loose_approx(4.4) + assert camera.timeout == expected_grpc_timeout(4.4) await camera.get_properties(timeout=7.86) - assert camera.timeout == loose_approx(7.86) + assert camera.timeout == expected_grpc_timeout(7.86) async def test_get_geometries(self, camera: MockCamera): geometries = await camera.get_geometries() @@ -129,7 +129,7 @@ async def test_get_images(self, camera: MockCamera, service: CameraRPCService, m assert raw_img.mime_type == CameraMimeType.PNG assert raw_img.source_name == camera.name assert response.response_metadata == metadata - assert camera.timeout == loose_approx(18.1) + assert camera.timeout == expected_grpc_timeout(18.1) async def test_get_images_uses_source_name_not_resource_name(self): class MockCameraWithCustomSource(MockCamera): @@ -158,7 +158,7 @@ async def test_get_point_cloud(self, camera: MockCamera, service: CameraRPCServi request = GetPointCloudRequest(name="camera", mime_type=CameraMimeType.PCD) response: GetPointCloudResponse = await client.GetPointCloud(request, timeout=7.86) assert response.point_cloud == point_cloud - assert camera.timeout == loose_approx(7.86) + assert camera.timeout == expected_grpc_timeout(7.86) async def test_get_properties(self, camera: MockCamera, service: CameraRPCService, properties: Camera.Properties): assert camera.timeout is None @@ -170,7 +170,7 @@ async def test_get_properties(self, camera: MockCamera, service: CameraRPCServic assert response.intrinsic_parameters == properties.intrinsic_parameters assert response.mime_types == properties.mime_types assert response.frame_rate == properties.frame_rate - assert camera.timeout == loose_approx(5.43) + assert camera.timeout == expected_grpc_timeout(5.43) async def test_do(self, camera: MockCamera, service: CameraRPCService): async with ChannelFor([service]) as channel: @@ -200,7 +200,7 @@ async def test_get_images(self, camera: MockCamera, service: CameraRPCService, i assert imgs[0].name == camera.name assert imgs[0].data == image.data assert md == metadata - assert camera.timeout == loose_approx(1.82) + assert camera.timeout == expected_grpc_timeout(1.82) async def test_get_point_cloud(self, camera: MockCamera, service: CameraRPCService, point_cloud: bytes): assert camera.timeout is None @@ -208,7 +208,7 @@ async def test_get_point_cloud(self, camera: MockCamera, service: CameraRPCServi client = CameraClient("camera", channel) pc, _ = await client.get_point_cloud(timeout=4.4) assert pc == point_cloud - assert camera.timeout == loose_approx(4.4) + assert camera.timeout == expected_grpc_timeout(4.4) async def test_get_properties(self, camera: MockCamera, service: CameraRPCService, properties: Camera.Properties): assert camera.timeout is None @@ -216,7 +216,7 @@ async def test_get_properties(self, camera: MockCamera, service: CameraRPCServic client = CameraClient("camera", channel) props = await client.get_properties(timeout=7.86) assert props == properties - assert camera.timeout == loose_approx(7.86) + assert camera.timeout == expected_grpc_timeout(7.86) async def test_do(self, service: CameraRPCService): async with ChannelFor([service]) as channel: diff --git a/tests/test_encoder.py b/tests/test_encoder.py index f8f010b54..c796b2755 100644 --- a/tests/test_encoder.py +++ b/tests/test_encoder.py @@ -17,7 +17,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockEncoder @@ -43,18 +43,18 @@ async def test_get_position(self, encoder: MockEncoder): pos, pos_type = await encoder.get_position(timeout=2.34) assert pos == 0 assert pos_type == PositionType.POSITION_TYPE_TICKS_COUNT - assert encoder.timeout == loose_approx(2.34) + assert encoder.timeout == expected_grpc_timeout(2.34) async def test_reset_position(self, encoder: MockEncoder): await encoder.reset_position(timeout=5.67) assert encoder.position == 0 - assert encoder.timeout == loose_approx(5.67) + assert encoder.timeout == expected_grpc_timeout(5.67) async def test_get_properties(self, encoder: MockEncoder): properties = await encoder.get_properties(timeout=6.78) assert properties.ticks_count_supported is True assert properties.angle_degrees_supported is False - assert encoder.timeout == loose_approx(6.78) + assert encoder.timeout == expected_grpc_timeout(6.78) async def test_do(self, encoder: MockEncoder): command = {"command": "args"} @@ -74,7 +74,7 @@ async def test_get_position(self, encoder: MockEncoder, service: EncoderRPCServi response: GetPositionResponse = await client.GetPosition(request, timeout=2.34) assert response.value == 0 assert response.position_type == PositionType.POSITION_TYPE_TICKS_COUNT - assert encoder.timeout == loose_approx(2.34) + assert encoder.timeout == expected_grpc_timeout(2.34) async def test_reset_position(self, encoder: MockEncoder, service: EncoderRPCService): async with ChannelFor([service]) as channel: @@ -82,7 +82,7 @@ async def test_reset_position(self, encoder: MockEncoder, service: EncoderRPCSer request = ResetPositionRequest(name=encoder.name) await client.ResetPosition(request, timeout=5.67) assert encoder.position == 0 - assert encoder.timeout == loose_approx(5.67) + assert encoder.timeout == expected_grpc_timeout(5.67) async def test_get_properties(self, encoder: MockEncoder, service: EncoderRPCService): async with ChannelFor([service]) as channel: @@ -91,7 +91,7 @@ async def test_get_properties(self, encoder: MockEncoder, service: EncoderRPCSer response: GetPropertiesResponse = await client.GetProperties(request, timeout=6.78) assert response.ticks_count_supported is True assert response.angle_degrees_supported is False - assert encoder.timeout == loose_approx(6.78) + assert encoder.timeout == expected_grpc_timeout(6.78) async def test_do(self, encoder: MockEncoder, service: EncoderRPCService): async with ChannelFor([service]) as channel: @@ -117,13 +117,13 @@ async def test_get_position(self, encoder: MockEncoder, service: EncoderRPCServi position, pos_type = await client.get_position(timeout=2.34) assert position == 0 assert pos_type == PositionType.POSITION_TYPE_TICKS_COUNT - assert encoder.timeout == loose_approx(2.34) + assert encoder.timeout == expected_grpc_timeout(2.34) async def test_reset_position(self, encoder: MockEncoder, service: EncoderRPCService): async with ChannelFor([service]) as channel: client = EncoderClient(encoder.name, channel) await client.reset_position(timeout=5.67) - assert encoder.timeout == loose_approx(5.67) + assert encoder.timeout == expected_grpc_timeout(5.67) assert encoder.position == 0 async def test_get_properties(self, encoder: MockEncoder, service: EncoderRPCService): @@ -132,7 +132,7 @@ async def test_get_properties(self, encoder: MockEncoder, service: EncoderRPCSer properties = await client.get_properties(timeout=6.78) assert properties.ticks_count_supported is True assert properties.angle_degrees_supported is False - assert encoder.timeout == loose_approx(6.78) + assert encoder.timeout == expected_grpc_timeout(6.78) async def test_do(self, encoder: MockEncoder, service: EncoderRPCService): async with ChannelFor([service]) as channel: diff --git a/tests/test_gantry.py b/tests/test_gantry.py index e22501df1..bf7266c36 100644 --- a/tests/test_gantry.py +++ b/tests/test_gantry.py @@ -26,7 +26,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockGantry @@ -81,16 +81,16 @@ async def test_timeout(self): assert self.gantry.timeout is None await self.gantry.get_position(timeout=5.5) - assert self.gantry.timeout == loose_approx(5.5) + assert self.gantry.timeout == expected_grpc_timeout(5.5) await self.gantry.move_to_position([1, 2, 3], [4, 5, 6], timeout=1.82) - assert self.gantry.timeout == loose_approx(1.82) + assert self.gantry.timeout == expected_grpc_timeout(1.82) await self.gantry.get_lengths(timeout=7.86) - assert self.gantry.timeout == loose_approx(7.86) + assert self.gantry.timeout == expected_grpc_timeout(7.86) await self.gantry.stop(timeout=4.4) - assert self.gantry.timeout == loose_approx(4.4) + assert self.gantry.timeout == expected_grpc_timeout(4.4) async def test_get_geometries(self): geometries = await self.gantry.get_geometries() @@ -110,7 +110,7 @@ async def test_get_position(self): request = GetPositionRequest(name=self.gantry.name) response: GetPositionResponse = await client.GetPosition(request, timeout=9.87) assert list(response.positions_mm) == [1, 2, 3] - assert self.gantry.timeout == loose_approx(9.87) + assert self.gantry.timeout == expected_grpc_timeout(9.87) async def test_move_to_position(self): async with ChannelFor([self.service]) as channel: @@ -119,7 +119,7 @@ async def test_move_to_position(self): await client.MoveToPosition(request, timeout=18.1) assert self.gantry.position == [1, 8, 2] assert self.gantry.speeds == [3, 9, 12] - assert self.gantry.timeout == loose_approx(18.1) + assert self.gantry.timeout == expected_grpc_timeout(18.1) async def test_home(self): async with ChannelFor([self.service]) as channel: @@ -127,7 +127,7 @@ async def test_home(self): request = HomeRequest(name=self.gantry.name) response: HomeResponse = await client.Home(request, timeout=18.1) assert response.homed is True - assert self.gantry.timeout == loose_approx(18.1) + assert self.gantry.timeout == expected_grpc_timeout(18.1) async def test_get_lengths(self): async with ChannelFor([self.service]) as channel: @@ -135,7 +135,7 @@ async def test_get_lengths(self): request = GetLengthsRequest(name=self.gantry.name) response: GetLengthsResponse = await client.GetLengths(request, timeout=3.3) assert list(response.lengths_mm) == [4, 5, 6] - assert self.gantry.timeout == loose_approx(3.3) + assert self.gantry.timeout == expected_grpc_timeout(3.3) async def test_stop(self): async with ChannelFor([self.service]) as channel: @@ -144,7 +144,7 @@ async def test_stop(self): request = StopRequest(name=self.gantry.name) await client.Stop(request, timeout=1.1) assert self.gantry.is_stopped is True - assert self.gantry.timeout == loose_approx(1.1) + assert self.gantry.timeout == expected_grpc_timeout(1.1) async def test_is_moving(self): async with ChannelFor([self.service]) as channel: @@ -180,7 +180,7 @@ async def test_get_kinematics(self): response: GetKinematicsResponse = await client.GetKinematics(request, timeout=1.1) assert response.format == self.gantry.kinematics[0] assert response.kinematics_data == self.gantry.kinematics[1] - assert self.gantry.timeout == loose_approx(1.1) + assert self.gantry.timeout == expected_grpc_timeout(1.1) async def test_get_geometries(self): async with ChannelFor([self.service]) as channel: @@ -202,7 +202,7 @@ async def test_get_position(self): client = GantryClient(self.gantry.name, channel) pos = await client.get_position(timeout=1.82) assert pos == [1, 2, 3] - assert self.gantry.timeout == loose_approx(1.82) + assert self.gantry.timeout == expected_grpc_timeout(1.82) async def test_move_to_position(self): async with ChannelFor([self.service]) as channel: @@ -210,21 +210,21 @@ async def test_move_to_position(self): await client.move_to_position([1, 8, 2], [3, 9, 12], timeout=4.4) assert self.gantry.position == [1, 8, 2] assert self.gantry.speeds == [3, 9, 12] - assert self.gantry.timeout == loose_approx(4.4) + assert self.gantry.timeout == expected_grpc_timeout(4.4) async def test_home(self): async with ChannelFor([self.service]) as channel: client = GantryClient(self.gantry.name, channel) homed = await client.home(timeout=5.5) assert homed is True - assert self.gantry.timeout == loose_approx(5.5) + assert self.gantry.timeout == expected_grpc_timeout(5.5) async def test_get_lengths(self): async with ChannelFor([self.service]) as channel: client = GantryClient(self.gantry.name, channel) lengths = await client.get_lengths(timeout=5.5) assert lengths == [4, 5, 6] - assert self.gantry.timeout == loose_approx(5.5) + assert self.gantry.timeout == expected_grpc_timeout(5.5) async def test_do(self): async with ChannelFor([self.service]) as channel: @@ -263,7 +263,7 @@ async def test_get_kinematics(self): assert format == self.gantry.kinematics[0] assert data == self.gantry.kinematics[1] assert meshes == self.gantry.kinematics[2] - assert self.gantry.timeout == loose_approx(1.1) + assert self.gantry.timeout == expected_grpc_timeout(1.1) async def test_get_geometries(self): async with ChannelFor([self.service]) as channel: diff --git a/tests/test_generic_component.py b/tests/test_generic_component.py index 1f52922c9..ce24802ca 100644 --- a/tests/test_generic_component.py +++ b/tests/test_generic_component.py @@ -6,7 +6,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockGenericComponent @@ -16,7 +16,7 @@ class TestGenericComponent: async def test_do(self): result = await self.generic.do_command({"command": "args"}, timeout=1.82) assert result == {"command": True} - assert self.generic.timeout == loose_approx(1.82) + assert self.generic.timeout == expected_grpc_timeout(1.82) async def test_get_geometries(self): geometries = await self.generic.get_geometries() @@ -38,7 +38,7 @@ async def test_do(self): response: DoCommandResponse = await client.DoCommand(request, timeout=4.4) result = struct_to_dict(response.result) assert result == {"command": True} - assert self.generic.timeout == loose_approx(4.4) + assert self.generic.timeout == expected_grpc_timeout(4.4) async def test_get_geometries(self): async with ChannelFor([self.service]) as channel: @@ -61,7 +61,7 @@ async def test_do(self): client = GenericClient(self.name, channel) result = await client.do_command({"command": "args"}, timeout=7.86) assert result == {"command": True} - assert self.generic.timeout == loose_approx(7.86) + assert self.generic.timeout == expected_grpc_timeout(7.86) async def test_get_geometries(self): async with ChannelFor([self.service]) as channel: diff --git a/tests/test_generic_service.py b/tests/test_generic_service.py index f22fe715b..385312bb4 100644 --- a/tests/test_generic_service.py +++ b/tests/test_generic_service.py @@ -6,7 +6,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.services import MockGenericService @@ -16,7 +16,7 @@ class TestGenericService: async def test_do(self): result = await self.generic.do_command({"command": "args"}, timeout=1.82) assert result == {"command": True} - assert self.generic.timeout == loose_approx(1.82) + assert self.generic.timeout == expected_grpc_timeout(1.82) class TestService: @@ -34,7 +34,7 @@ async def test_do(self): response: DoCommandResponse = await client.DoCommand(request, timeout=4.4) result = struct_to_dict(response.result) assert result == {"command": True} - assert self.generic.timeout == loose_approx(4.4) + assert self.generic.timeout == expected_grpc_timeout(4.4) class TestClient: @@ -50,4 +50,4 @@ async def test_do(self): client = GenericClient(self.name, channel) result = await client.do_command({"command": "args"}, timeout=7.86) assert result == {"command": True} - assert self.generic.timeout == loose_approx(7.86) + assert self.generic.timeout == expected_grpc_timeout(7.86) diff --git a/tests/test_gripper.py b/tests/test_gripper.py index 22b88ea2e..1f22f68c7 100644 --- a/tests/test_gripper.py +++ b/tests/test_gripper.py @@ -24,7 +24,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockGripper @@ -49,7 +49,7 @@ class TestGripper: async def test_open(self, gripper: MockGripper): await gripper.open(timeout=1.82) assert gripper.opened is True - assert gripper.timeout == loose_approx(1.82) + assert gripper.timeout == expected_grpc_timeout(1.82) async def test_grab(self, gripper: MockGripper): grabbed = await gripper.grab() @@ -63,7 +63,7 @@ async def test_stop(self, gripper: MockGripper): assert gripper.is_stopped is False await gripper.stop(timeout=7.86) assert gripper.is_stopped is True - assert gripper.timeout == loose_approx(7.86) + assert gripper.timeout == expected_grpc_timeout(7.86) async def test_is_moving(self, gripper: MockGripper): await gripper.open() @@ -100,7 +100,7 @@ async def test_open(self, gripper: MockGripper, service: GripperRPCService): request = OpenRequest(name=gripper.name) await client.Open(request, timeout=1.23) assert gripper.opened is True - assert gripper.timeout == loose_approx(1.23) + assert gripper.timeout == expected_grpc_timeout(1.23) async def test_grab(self, gripper: MockGripper, service: GripperRPCService): async with ChannelFor([service]) as channel: @@ -109,7 +109,7 @@ async def test_grab(self, gripper: MockGripper, service: GripperRPCService): response: GrabResponse = await client.Grab(request, timeout=4.56) assert gripper.opened is False assert isinstance(response.success, bool) - assert gripper.timeout == loose_approx(4.56) + assert gripper.timeout == expected_grpc_timeout(4.56) async def test_stop(self, gripper: MockGripper, service: GripperRPCService): async with ChannelFor([service]) as channel: @@ -123,7 +123,7 @@ async def test_stop(self, gripper: MockGripper, service: GripperRPCService): request = StopRequest(name=gripper.name) await client.Stop(request, timeout=7.89) assert gripper.is_stopped is True - assert gripper.timeout == loose_approx(7.89) + assert gripper.timeout == expected_grpc_timeout(7.89) async def test_is_moving(self, gripper: MockGripper, service: GripperRPCService): async with ChannelFor([service]) as channel: @@ -174,7 +174,7 @@ async def test_open(self, gripper: MockGripper, service: GripperRPCService): client = GripperClient(gripper.name, channel) await client.open(timeout=1.23) assert gripper.opened is True - assert gripper.timeout == loose_approx(1.23) + assert gripper.timeout == expected_grpc_timeout(1.23) async def test_grab(self, gripper: MockGripper, service: GripperRPCService): async with ChannelFor([service]) as channel: @@ -182,7 +182,7 @@ async def test_grab(self, gripper: MockGripper, service: GripperRPCService): grabbed = await client.grab(timeout=2.34) assert gripper.opened is False assert isinstance(grabbed, bool) - assert gripper.timeout == loose_approx(2.34) + assert gripper.timeout == expected_grpc_timeout(2.34) async def test_stop(self, gripper: MockGripper, service: GripperRPCService): async with ChannelFor([service]) as channel: @@ -193,7 +193,7 @@ async def test_stop(self, gripper: MockGripper, service: GripperRPCService): assert gripper.is_stopped is False await client.stop(timeout=3.45) assert gripper.is_stopped is True - assert gripper.timeout == loose_approx(3.45) + assert gripper.timeout == expected_grpc_timeout(3.45) async def test_is_moving(self, gripper: MockGripper, service: GripperRPCService): async with ChannelFor([service]) as channel: diff --git a/tests/test_input.py b/tests/test_input.py index f60243bb2..484e4670d 100644 --- a/tests/test_input.py +++ b/tests/test_input.py @@ -23,7 +23,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockInputController @@ -72,20 +72,20 @@ async def test_get_controls(self, controller: MockInputController): Control.BUTTON_E_STOP, ] assert controller.extra == extra - assert controller.timeout == loose_approx(4.4) + assert controller.timeout == expected_grpc_timeout(4.4) async def test_get_events(self, controller: MockInputController): extra = {"foo": "get_events"} events = await controller.get_events(extra=extra, timeout=1.82) assert len(events) == 0 assert controller.extra == extra - assert controller.timeout == loose_approx(1.82) + assert controller.timeout == expected_grpc_timeout(1.82) async def test_trigger_event(self, controller: MockInputController): assert len(controller.events) == 0 event = Event(time(), EventType.CONNECT, Control.ABSOLUTE_X, 0) await controller.trigger_event(event, timeout=7.86) - assert controller.timeout == loose_approx(7.86) + assert controller.timeout == expected_grpc_timeout(7.86) events = await controller.get_events() assert events[Control.ABSOLUTE_X] == event assert controller.extra is None @@ -143,7 +143,7 @@ async def test_get_controls(self, controller: MockInputController, service: Inpu Control.BUTTON_E_STOP, ] assert controller.extra == extra - assert controller.timeout == loose_approx(2.23) + assert controller.timeout == expected_grpc_timeout(2.23) async def test_get_events(self, controller: MockInputController, service: InputControllerRPCService): async with ChannelFor([service]) as channel: @@ -154,7 +154,7 @@ async def test_get_events(self, controller: MockInputController, service: InputC events = list(response.events) assert events == list(controller.events.values()) assert controller.extra == extra - assert controller.timeout == loose_approx(2.34) + assert controller.timeout == expected_grpc_timeout(2.34) async def test_trigger_event(self, controller: MockInputController, service: InputControllerRPCService): event = Event(time(), EventType.CONNECT, Control.ABSOLUTE_X, 0) @@ -168,7 +168,7 @@ async def test_trigger_event(self, controller: MockInputController, service: Inp # timestamp nanos conversion can result in differences in the 1e-7 scale assert abs(controller.events[Control.ABSOLUTE_X].time - event.time) < 0.000001 assert controller.extra == {} - assert controller.timeout == loose_approx(3.45) + assert controller.timeout == expected_grpc_timeout(3.45) async def test_stream_events(selc, controller: MockInputController, service: InputControllerRPCService): async with ChannelFor([service]) as channel: @@ -249,7 +249,7 @@ async def test_get_controls(self, controller: MockInputController, service: Inpu Control.BUTTON_E_STOP, ] assert controller.extra == extra - assert controller.timeout == loose_approx(4.56) + assert controller.timeout == expected_grpc_timeout(4.56) async def test_get_events(self, controller: MockInputController, service: InputControllerRPCService): async with ChannelFor([service]) as channel: @@ -258,7 +258,7 @@ async def test_get_events(self, controller: MockInputController, service: InputC events = await client.get_events(extra=extra, timeout=5.67) assert events == controller.events assert controller.extra == extra - assert controller.timeout == loose_approx(5.67) + assert controller.timeout == expected_grpc_timeout(5.67) async def test_trigger_event(self, controller: MockInputController, service: InputControllerRPCService): event = Event(time(), EventType.CONNECT, Control.ABSOLUTE_X, 0) @@ -270,7 +270,7 @@ async def test_trigger_event(self, controller: MockInputController, service: Inp assert controller.events[Control.ABSOLUTE_X].value == event.value # timestamp nanos conversion can result in differences in the 1e-7 scale assert abs(controller.events[Control.ABSOLUTE_X].time - event.time) < 0.000001 - assert controller.timeout == loose_approx(6.78) + assert controller.timeout == expected_grpc_timeout(6.78) assert controller.extra == {} async def test_register_control_callback(self, controller: MockInputController, service: InputControllerRPCService): diff --git a/tests/test_motion_service.py b/tests/test_motion_service.py index f7ea2f11f..aef77a848 100644 --- a/tests/test_motion_service.py +++ b/tests/test_motion_service.py @@ -25,7 +25,7 @@ from viam.services.motion.service import MotionRPCService from viam.utils import ValueTypes -from . import loose_approx +from . import expected_grpc_timeout MOTION_SERVICE_NAME = "motion1" @@ -140,7 +140,7 @@ async def test_move(self, motion: Motion, service: MotionRPCService): assert patched_method.call_args.args[2] == world_state assert patched_method.call_args.args[3] == constraints assert patched_method.call_args.kwargs["extra"] == extra - assert patched_method.call_args.kwargs["timeout"] == loose_approx(timeout) + assert patched_method.call_args.kwargs["timeout"] == expected_grpc_timeout(timeout) async def test_get_pose(self, motion: Motion, service: MotionRPCService): with patch.object(motion, "get_pose") as patched_method: @@ -160,7 +160,7 @@ async def test_get_pose(self, motion: Motion, service: MotionRPCService): assert patched_method.call_args.args[1] == destination_frame assert patched_method.call_args.args[2] == transforms assert patched_method.call_args.kwargs["extra"] == extra - assert patched_method.call_args.kwargs["timeout"] == loose_approx(timeout) + assert patched_method.call_args.kwargs["timeout"] == expected_grpc_timeout(timeout) async def test_move_on_map(self, motion: Motion, service: MotionRPCService): with patch.object(motion, "move_on_map") as patched_method: @@ -192,7 +192,7 @@ async def test_move_on_map(self, motion: Motion, service: MotionRPCService): assert patched_method.call_args.args[3] == configuration assert patched_method.call_args.args[4] == obstacles assert patched_method.call_args.kwargs["extra"] == extra - assert patched_method.call_args.kwargs["timeout"] == loose_approx(timeout) + assert patched_method.call_args.kwargs["timeout"] == expected_grpc_timeout(timeout) async def test_move_on_globe(self, motion: Motion, service: MotionRPCService): with patch.object(motion, "move_on_globe") as patched_method: @@ -230,7 +230,7 @@ async def test_move_on_globe(self, motion: Motion, service: MotionRPCService): assert patched_method.call_args.args[5] == configuration assert patched_method.call_args.kwargs["bounding_regions"] == bounding_regions assert patched_method.call_args.kwargs["extra"] == extra - assert patched_method.call_args.kwargs["timeout"] == loose_approx(timeout) + assert patched_method.call_args.kwargs["timeout"] == expected_grpc_timeout(timeout) async def test_stop_plan(self, motion: Motion, service: MotionRPCService): with patch.object(motion, "stop_plan") as patched_method: @@ -243,7 +243,7 @@ async def test_stop_plan(self, motion: Motion, service: MotionRPCService): patched_method.assert_called_once() assert patched_method.call_args.args[0] == component_rn assert patched_method.call_args.kwargs["extra"] == extra - assert patched_method.call_args.kwargs["timeout"] == loose_approx(timeout) + assert patched_method.call_args.kwargs["timeout"] == expected_grpc_timeout(timeout) async def test_get_plan(self, motion: Motion, service: MotionRPCService): with patch.object(motion, "get_plan") as patched_method: @@ -294,7 +294,7 @@ async def test_get_plan(self, motion: Motion, service: MotionRPCService): assert patched_method.call_args.args[1] == last_plan_only assert patched_method.call_args.args[2] == execution_id assert patched_method.call_args.kwargs["extra"] == extra - assert patched_method.call_args.kwargs["timeout"] == loose_approx(timeout) + assert patched_method.call_args.kwargs["timeout"] == expected_grpc_timeout(timeout) async def test_list_plan_statuses(self, motion: Motion, service: MotionRPCService): with patch.object(motion, "list_plan_statuses") as patched_method: @@ -313,7 +313,7 @@ async def test_list_plan_statuses(self, motion: Motion, service: MotionRPCServic patched_method.assert_called_once() assert patched_method.call_args.args[0] == only_active_plans assert patched_method.call_args.kwargs["extra"] == extra - assert patched_method.call_args.kwargs["timeout"] == loose_approx(timeout) + assert patched_method.call_args.kwargs["timeout"] == expected_grpc_timeout(timeout) async def test_do(self, motion: Motion, service: MotionRPCService): with patch.object(motion, "do_command") as patched_method: @@ -327,4 +327,4 @@ async def test_do(self, motion: Motion, service: MotionRPCService): assert dc_response == response patched_method.assert_called_once() assert patched_method.call_args.args[0] == command - assert patched_method.call_args.kwargs["timeout"] == loose_approx(timeout) + assert patched_method.call_args.kwargs["timeout"] == expected_grpc_timeout(timeout) diff --git a/tests/test_motor.py b/tests/test_motor.py index 0252fc60a..339d38e7b 100644 --- a/tests/test_motor.py +++ b/tests/test_motor.py @@ -25,7 +25,7 @@ from viam.resource.rpc_client_base import ResourceRPCClientBase from viam.utils import dict_to_struct -from . import loose_approx +from . import expected_grpc_timeout from .mocks import create_mock_subclass @@ -50,7 +50,7 @@ def generic_service(motor) -> GenericRPCService: DEFAULT_EXTRA = {"a": "b"} DEFAULT_EXTRA_STRUCT = dict_to_struct(DEFAULT_EXTRA) DEFAULT_TIMEOUT = 1.82 -DEFAULT_TIMEOUT_APPROX = loose_approx(DEFAULT_TIMEOUT) +DEFAULT_TIMEOUT_APPROX = expected_grpc_timeout(DEFAULT_TIMEOUT) DEFAULT_METADATA = ResourceRPCClientBase.Metadata() DEFAULT_METADATA.enable_debug_logging diff --git a/tests/test_movement_sensor.py b/tests/test_movement_sensor.py index 1048f02fb..6df849ee9 100644 --- a/tests/test_movement_sensor.py +++ b/tests/test_movement_sensor.py @@ -36,7 +36,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, sensor_readings_value_to_native, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockMovementSensor COORDINATE = GeoPoint(latitude=40.664679865782624, longitude=-73.97668056188789) @@ -158,31 +158,31 @@ async def test_timeout(self, movement_sensor: MockMovementSensor): assert movement_sensor.timeout is None await movement_sensor.get_position(timeout=1.23) - assert movement_sensor.timeout == loose_approx(1.23) + assert movement_sensor.timeout == expected_grpc_timeout(1.23) await movement_sensor.get_linear_velocity(timeout=2.34) - assert movement_sensor.timeout == loose_approx(2.34) + assert movement_sensor.timeout == expected_grpc_timeout(2.34) await movement_sensor.get_angular_velocity(timeout=3.45) - assert movement_sensor.timeout == loose_approx(3.45) + assert movement_sensor.timeout == expected_grpc_timeout(3.45) await movement_sensor.get_linear_acceleration(timeout=9.01) - assert movement_sensor.timeout == loose_approx(9.01) + assert movement_sensor.timeout == expected_grpc_timeout(9.01) await movement_sensor.get_compass_heading(timeout=4.56) - assert movement_sensor.timeout == loose_approx(4.56) + assert movement_sensor.timeout == expected_grpc_timeout(4.56) await movement_sensor.get_orientation(timeout=5.67) - assert movement_sensor.timeout == loose_approx(5.67) + assert movement_sensor.timeout == expected_grpc_timeout(5.67) await movement_sensor.get_properties(timeout=6.78) - assert movement_sensor.timeout == loose_approx(6.78) + assert movement_sensor.timeout == expected_grpc_timeout(6.78) await movement_sensor.get_accuracy(timeout=7.89) - assert movement_sensor.timeout == loose_approx(7.89) + assert movement_sensor.timeout == expected_grpc_timeout(7.89) await movement_sensor.get_readings(timeout=8.90) - assert movement_sensor.timeout == loose_approx(8.90) + assert movement_sensor.timeout == expected_grpc_timeout(8.90) async def test_do(self, movement_sensor: MovementSensor): command = {"command": "args"} @@ -204,7 +204,7 @@ async def test_get_position(self, movement_sensor: MockMovementSensor, service: assert response.coordinate == COORDINATE assert response.altitude_m == ALTITUDE assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(1.23) + assert movement_sensor.timeout == expected_grpc_timeout(1.23) async def test_get_linear_velocity(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -214,7 +214,7 @@ async def test_get_linear_velocity(self, movement_sensor: MockMovementSensor, se response: GetLinearVelocityResponse = await client.GetLinearVelocity(request, timeout=2.34) assert response.linear_velocity == LINEAR_VELOCITY assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(2.34) + assert movement_sensor.timeout == expected_grpc_timeout(2.34) async def test_get_angular_velocity(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -224,7 +224,7 @@ async def test_get_angular_velocity(self, movement_sensor: MockMovementSensor, s response: GetAngularVelocityResponse = await client.GetAngularVelocity(request, timeout=3.45) assert response.angular_velocity == ANGULAR_VELOCITY assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(3.45) + assert movement_sensor.timeout == expected_grpc_timeout(3.45) async def test_get_linear_acceleration(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -234,7 +234,7 @@ async def test_get_linear_acceleration(self, movement_sensor: MockMovementSensor response: GetLinearAccelerationResponse = await client.GetLinearAcceleration(request, timeout=2.34) assert response.linear_acceleration == LINEAR_ACCELERATION assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(2.34) + assert movement_sensor.timeout == expected_grpc_timeout(2.34) async def test_get_compass_heading(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -243,7 +243,7 @@ async def test_get_compass_heading(self, movement_sensor: MockMovementSensor, se response: GetCompassHeadingResponse = await client.GetCompassHeading(request, timeout=4.56) assert response.value == HEADING assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(4.56) + assert movement_sensor.timeout == expected_grpc_timeout(4.56) async def test_get_orientation(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -253,7 +253,7 @@ async def test_get_orientation(self, movement_sensor: MockMovementSensor, servic response: GetOrientationResponse = await client.GetOrientation(request, timeout=5.67) assert response.orientation == ORIENTATION assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(5.67) + assert movement_sensor.timeout == expected_grpc_timeout(5.67) async def test_get_properties(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -262,7 +262,7 @@ async def test_get_properties(self, movement_sensor: MockMovementSensor, service response: GetPropertiesResponse = await client.GetProperties(request, timeout=6.78) assert MovementSensor.Properties.from_proto(response) == PROPERTIES assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(6.78) + assert movement_sensor.timeout == expected_grpc_timeout(6.78) async def test_get_accuracy(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -275,7 +275,7 @@ async def test_get_accuracy(self, movement_sensor: MockMovementSensor, service: assert response.position_vdop == pytest.approx(ACCURACY.position_vdop) assert response.position_nmea_gga_fix == pytest.approx(ACCURACY.position_nmea_gga_fix) assert response.compass_degrees_error == pytest.approx(ACCURACY.compass_degrees_error) - assert movement_sensor.timeout == loose_approx(7.89) + assert movement_sensor.timeout == expected_grpc_timeout(7.89) async def test_get_readings(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -285,7 +285,7 @@ async def test_get_readings(self, movement_sensor: MockMovementSensor, service: response: GetReadingsResponse = await client.GetReadings(request, timeout=8.90) assert sensor_readings_value_to_native(response.readings) == READINGS assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(8.90) + assert movement_sensor.timeout == expected_grpc_timeout(8.90) async def test_do(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -313,7 +313,7 @@ async def test_get_position(self, movement_sensor: MockMovementSensor, service: assert coord == COORDINATE assert alt == ALTITUDE assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(1.45) + assert movement_sensor.timeout == expected_grpc_timeout(1.45) async def test_get_linear_velocity(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -322,7 +322,7 @@ async def test_get_linear_velocity(self, movement_sensor: MockMovementSensor, se value = await client.get_linear_velocity(extra=EXTRA_PARAMS, timeout=2.34) assert value == LINEAR_VELOCITY assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(2.34) + assert movement_sensor.timeout == expected_grpc_timeout(2.34) async def test_get_angular_velocity(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -331,7 +331,7 @@ async def test_get_angular_velocity(self, movement_sensor: MockMovementSensor, s value = await client.get_angular_velocity(extra=EXTRA_PARAMS, timeout=3.45) assert value == ANGULAR_VELOCITY assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(3.45) + assert movement_sensor.timeout == expected_grpc_timeout(3.45) async def test_get_linear_acceleration(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -340,7 +340,7 @@ async def test_get_linear_acceleration(self, movement_sensor: MockMovementSensor value = await client.get_linear_acceleration(extra=EXTRA_PARAMS, timeout=2.34) assert value == LINEAR_ACCELERATION assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(2.34) + assert movement_sensor.timeout == expected_grpc_timeout(2.34) async def test_get_compass_heading(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -349,7 +349,7 @@ async def test_get_compass_heading(self, movement_sensor: MockMovementSensor, se value = await client.get_compass_heading(extra=EXTRA_PARAMS, timeout=4.56) assert value == HEADING assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(4.56) + assert movement_sensor.timeout == expected_grpc_timeout(4.56) async def test_get_orientation(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -358,7 +358,7 @@ async def test_get_orientation(self, movement_sensor: MockMovementSensor, servic value = await client.get_orientation(extra=EXTRA_PARAMS, timeout=5.67) assert value == ORIENTATION assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(5.67) + assert movement_sensor.timeout == expected_grpc_timeout(5.67) async def test_get_properties(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -367,7 +367,7 @@ async def test_get_properties(self, movement_sensor: MockMovementSensor, service value = await client.get_properties(extra=EXTRA_PARAMS, timeout=6.78) assert value == PROPERTIES assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(6.78) + assert movement_sensor.timeout == expected_grpc_timeout(6.78) async def test_get_accuracy(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -379,7 +379,7 @@ async def test_get_accuracy(self, movement_sensor: MockMovementSensor, service: assert value.position_vdop == pytest.approx(ACCURACY.position_vdop) assert value.position_nmea_gga_fix == pytest.approx(ACCURACY.position_nmea_gga_fix) assert value.compass_degrees_error == pytest.approx(ACCURACY.compass_degrees_error) - assert movement_sensor.timeout == loose_approx(7.89) + assert movement_sensor.timeout == expected_grpc_timeout(7.89) async def test_get_readings(self, movement_sensor: MockMovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: @@ -388,7 +388,7 @@ async def test_get_readings(self, movement_sensor: MockMovementSensor, service: value = await client.get_readings(extra=EXTRA_PARAMS, timeout=2.34) assert value == READINGS assert movement_sensor.extra == EXTRA_PARAMS - assert movement_sensor.timeout == loose_approx(2.34) + assert movement_sensor.timeout == expected_grpc_timeout(2.34) async def test_do(self, movement_sensor: MovementSensor, service: MovementSensorRPCService): async with ChannelFor([service]) as channel: diff --git a/tests/test_pose_tracker.py b/tests/test_pose_tracker.py index b7de24d2c..8f9f8a187 100644 --- a/tests/test_pose_tracker.py +++ b/tests/test_pose_tracker.py @@ -7,7 +7,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockPose, MockPoseTracker POSES = [ @@ -24,7 +24,7 @@ async def test_get_poses(self): received_poses = await self.mock_pose_tracker.get_poses([], extra={"foo": "get_poses"}, timeout=1.23) assert received_poses["0"] == PoseInFrame(reference_frame="0", pose=Pose(x=1, y=2, z=3, o_x=2, o_y=3, o_z=4, theta=20)) assert received_poses["1"] == PoseInFrame(reference_frame="1", pose=Pose(x=5, y=5, z=5, o_x=5, o_y=3, o_z=4, theta=30)) - assert self.mock_pose_tracker.timeout == loose_approx(1.23) + assert self.mock_pose_tracker.timeout == expected_grpc_timeout(1.23) assert self.mock_pose_tracker.extra == {"foo": "get_poses"} async def test_do(self): @@ -54,7 +54,7 @@ async def test_get_poses(self): received_poses = response.body_poses assert received_poses["0"] == PoseInFrame(reference_frame="0", pose=Pose(x=1, y=2, z=3, o_x=2, o_y=3, o_z=4, theta=20)) assert received_poses["1"] == PoseInFrame(reference_frame="1", pose=Pose(x=5, y=5, z=5, o_x=5, o_y=3, o_z=4, theta=30)) - assert self.pose_tracker.timeout == loose_approx(2.34) + assert self.pose_tracker.timeout == expected_grpc_timeout(2.34) assert self.pose_tracker.extra == {"foo": "get_poses"} async def test_do(self): @@ -89,7 +89,7 @@ async def test_get_poses(self): received_poses = await client.get_poses([], extra={"foo": "get_poses"}, timeout=3.45) assert received_poses["0"] == PoseInFrame(reference_frame="0", pose=Pose(x=1, y=2, z=3, o_x=2, o_y=3, o_z=4, theta=20)) assert received_poses["1"] == PoseInFrame(reference_frame="1", pose=Pose(x=5, y=5, z=5, o_x=5, o_y=3, o_z=4, theta=30)) - assert self.pose_tracker.timeout == loose_approx(3.45) + assert self.pose_tracker.timeout == expected_grpc_timeout(3.45) assert self.pose_tracker.extra == {"foo": "get_poses"} async def test_do(self): diff --git a/tests/test_power_sensor.py b/tests/test_power_sensor.py index b52688ef3..7861b37de 100644 --- a/tests/test_power_sensor.py +++ b/tests/test_power_sensor.py @@ -16,7 +16,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, sensor_readings_value_to_native, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import MockPowerSensor VOLTS = 3.2 @@ -75,16 +75,16 @@ async def test_timeout(self, power_sensor: MockPowerSensor): assert power_sensor.timeout is None await power_sensor.get_voltage(timeout=8.90) - assert power_sensor.timeout == loose_approx(8.90) + assert power_sensor.timeout == expected_grpc_timeout(8.90) await power_sensor.get_current(timeout=2.34) - assert power_sensor.timeout == loose_approx(2.34) + assert power_sensor.timeout == expected_grpc_timeout(2.34) await power_sensor.get_power(timeout=3.45) - assert power_sensor.timeout == loose_approx(3.45) + assert power_sensor.timeout == expected_grpc_timeout(3.45) await power_sensor.get_readings(timeout=8.90) - assert power_sensor.timeout == loose_approx(8.90) + assert power_sensor.timeout == expected_grpc_timeout(8.90) async def test_do(self, power_sensor: PowerSensor): command = {"command": "args"} @@ -102,7 +102,7 @@ async def test_get_voltage(self, power_sensor: MockPowerSensor, service: PowerSe assert response.volts == VOLTS assert response.is_ac == IS_AC assert power_sensor.extra == EXTRA_PARAMS - assert power_sensor.timeout == loose_approx(8.90) + assert power_sensor.timeout == expected_grpc_timeout(8.90) async def test_get_current(self, power_sensor: MockPowerSensor, service: PowerSensorRPCService): async with ChannelFor([service]) as channel: @@ -113,7 +113,7 @@ async def test_get_current(self, power_sensor: MockPowerSensor, service: PowerSe assert response.amperes == AMPERES assert response.is_ac == IS_AC assert power_sensor.extra == EXTRA_PARAMS - assert power_sensor.timeout == loose_approx(8.90) + assert power_sensor.timeout == expected_grpc_timeout(8.90) async def test_get_power(self, power_sensor: MockPowerSensor, service: PowerSensorRPCService): async with ChannelFor([service]) as channel: @@ -123,7 +123,7 @@ async def test_get_power(self, power_sensor: MockPowerSensor, service: PowerSens response: GetPowerResponse = await client.GetPower(request, timeout=8.90) assert response.watts == WATTS assert power_sensor.extra == EXTRA_PARAMS - assert power_sensor.timeout == loose_approx(8.90) + assert power_sensor.timeout == expected_grpc_timeout(8.90) async def test_get_readings(self, power_sensor: MockPowerSensor, service: PowerSensorRPCService): async with ChannelFor([service]) as channel: @@ -133,7 +133,7 @@ async def test_get_readings(self, power_sensor: MockPowerSensor, service: PowerS response: GetReadingsResponse = await client.GetReadings(request, timeout=8.90) assert sensor_readings_value_to_native(response.readings) == READINGS assert power_sensor.extra == EXTRA_PARAMS - assert power_sensor.timeout == loose_approx(8.90) + assert power_sensor.timeout == expected_grpc_timeout(8.90) async def test_do(self, power_sensor: MockPowerSensor, service: PowerSensorRPCService): async with ChannelFor([service]) as channel: @@ -154,7 +154,7 @@ async def test_get_voltage(self, power_sensor: MockPowerSensor, service: PowerSe assert vol == VOLTS assert is_ac == IS_AC assert power_sensor.extra == EXTRA_PARAMS - assert power_sensor.timeout == loose_approx(1.45) + assert power_sensor.timeout == expected_grpc_timeout(1.45) async def test_get_current(self, power_sensor: MockPowerSensor, service: PowerSensorRPCService): async with ChannelFor([service]) as channel: @@ -164,7 +164,7 @@ async def test_get_current(self, power_sensor: MockPowerSensor, service: PowerSe assert vol == VOLTS assert is_ac == IS_AC assert power_sensor.extra == EXTRA_PARAMS - assert power_sensor.timeout == loose_approx(1.45) + assert power_sensor.timeout == expected_grpc_timeout(1.45) async def test_get_power(self, power_sensor: MockPowerSensor, service: PowerSensorRPCService): async with ChannelFor([service]) as channel: @@ -173,7 +173,7 @@ async def test_get_power(self, power_sensor: MockPowerSensor, service: PowerSens watts = await client.get_power(extra=EXTRA_PARAMS, timeout=1.45) assert watts == WATTS assert power_sensor.extra == EXTRA_PARAMS - assert power_sensor.timeout == loose_approx(1.45) + assert power_sensor.timeout == expected_grpc_timeout(1.45) async def test_get_readings(self, power_sensor: MockPowerSensor, service: PowerSensorRPCService): async with ChannelFor([service]) as channel: @@ -182,7 +182,7 @@ async def test_get_readings(self, power_sensor: MockPowerSensor, service: PowerS value = await client.get_readings(extra=EXTRA_PARAMS, timeout=2.34) assert value == READINGS assert power_sensor.extra == EXTRA_PARAMS - assert power_sensor.timeout == loose_approx(2.34) + assert power_sensor.timeout == expected_grpc_timeout(2.34) async def test_do(self, power_sensor: PowerSensor, service: PowerSensorRPCService): async with ChannelFor([service]) as channel: diff --git a/tests/test_sensor.py b/tests/test_sensor.py index d9751fc1c..b45693f97 100644 --- a/tests/test_sensor.py +++ b/tests/test_sensor.py @@ -15,7 +15,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, sensor_readings_value_to_native, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockSensor READINGS = {"a": 1, "b": 2, "c": 3} @@ -33,7 +33,7 @@ async def test_get_readings(self, sensor): readings = await sensor.get_readings(extra=EXTRA_PARAMS, timeout=1.23) assert readings == READINGS assert sensor.extra == EXTRA_PARAMS - assert sensor.timeout == loose_approx(1.23) + assert sensor.timeout == expected_grpc_timeout(1.23) async def test_do(self, sensor): command = {"command": "args"} @@ -64,7 +64,7 @@ async def test_get_readings(self, sensor, service): result: GetReadingsResponse = await client.GetReadings(request, timeout=2.34) assert sensor_readings_value_to_native(result.readings) == READINGS assert sensor.extra == EXTRA_PARAMS - assert sensor.timeout == loose_approx(2.34) + assert sensor.timeout == expected_grpc_timeout(2.34) async def test_do(self, sensor: MockSensor, service: SensorRPCService): async with ChannelFor([service]) as channel: @@ -91,7 +91,7 @@ async def test_get_readings(self, sensor, service): value_readings = await client.get_readings(timeout=3.45, extra=EXTRA_PARAMS) assert READINGS == value_readings assert sensor.extra == EXTRA_PARAMS - assert sensor.timeout == loose_approx(3.45) + assert sensor.timeout == expected_grpc_timeout(3.45) async def test_do(self, sensor, manager, service): async with ChannelFor([service]) as channel: diff --git a/tests/test_servo.py b/tests/test_servo.py index 48ef34821..4f8d93bb1 100644 --- a/tests/test_servo.py +++ b/tests/test_servo.py @@ -15,7 +15,7 @@ from viam.resource.manager import ResourceManager from viam.utils import dict_to_struct, struct_to_dict -from . import loose_approx +from . import expected_grpc_timeout from .mocks.components import GEOMETRIES, MockServo @@ -26,20 +26,20 @@ class TestServo: async def test_move(self): await self.servo.move(self.pos, timeout=1.23, extra={"foo": "move"}) assert self.servo.angle == self.pos - assert self.servo.timeout == loose_approx(1.23) + assert self.servo.timeout == expected_grpc_timeout(1.23) assert self.servo.extra == {"foo": "move"} async def test_get_position(self): new_pos = await self.servo.get_position(timeout=2.34, extra={"foo": "get_position"}) assert new_pos == self.pos - assert self.servo.timeout == loose_approx(2.34) + assert self.servo.timeout == expected_grpc_timeout(2.34) assert self.servo.extra == {"foo": "get_position"} async def test_stop(self): assert self.servo.is_stopped is False await self.servo.stop(timeout=3.45, extra={"foo": "stop"}) assert self.servo.is_stopped is True - assert self.servo.timeout == loose_approx(3.45) + assert self.servo.timeout == expected_grpc_timeout(3.45) assert self.servo.extra == {"foo": "stop"} async def test_is_moving(self): @@ -73,7 +73,7 @@ async def test_move(self): request = MoveRequest(name=self.name, angle_deg=self.pos, extra=dict_to_struct({"foo": "move"})) await client.Move(request, timeout=1.23) assert self.servo.angle == self.pos - assert self.servo.timeout == loose_approx(1.23) + assert self.servo.timeout == expected_grpc_timeout(1.23) assert self.servo.extra == {"foo": "move"} async def test_get_position(self): @@ -82,7 +82,7 @@ async def test_get_position(self): request = GetPositionRequest(name=self.name, extra=dict_to_struct({"foo": "get_position"})) response: GetPositionResponse = await client.GetPosition(request, timeout=2.34) assert response.position_deg == self.pos - assert self.servo.timeout == loose_approx(2.34) + assert self.servo.timeout == expected_grpc_timeout(2.34) assert self.servo.extra == {"foo": "get_position"} async def test_stop(self): @@ -92,7 +92,7 @@ async def test_stop(self): request = StopRequest(name=self.name, extra=dict_to_struct({"foo": "stop"})) await client.Stop(request, timeout=3.45) assert self.servo.is_stopped is True - assert self.servo.timeout == loose_approx(3.45) + assert self.servo.timeout == expected_grpc_timeout(3.45) assert self.servo.extra == {"foo": "stop"} async def test_is_moving(self): @@ -135,7 +135,7 @@ async def test_move(self): client = ServoClient(self.servo.name, channel) await client.move(self.pos, timeout=1.23, extra={"foo": "move"}) assert self.servo.angle == self.pos - assert self.servo.timeout == loose_approx(1.23) + assert self.servo.timeout == expected_grpc_timeout(1.23) assert self.servo.extra == {"foo": "move"} async def test_get_position(self): @@ -143,7 +143,7 @@ async def test_get_position(self): client = ServoClient(self.servo.name, channel) new_pos = await client.get_position(timeout=2.34, extra={"foo": "get_position"}) assert new_pos == self.pos - assert self.servo.timeout == loose_approx(2.34) + assert self.servo.timeout == expected_grpc_timeout(2.34) assert self.servo.extra == {"foo": "get_position"} async def test_stop(self): @@ -152,7 +152,7 @@ async def test_stop(self): client = ServoClient(self.name, channel) await client.stop(timeout=3.45, extra={"foo": "stop"}) assert self.servo.is_stopped is True - assert self.servo.timeout == loose_approx(3.45) + assert self.servo.timeout == expected_grpc_timeout(3.45) assert self.servo.extra == {"foo": "stop"} async def test_is_moving(self): diff --git a/tests/test_switch.py b/tests/test_switch.py index f83502bb9..4650e37e5 100644 --- a/tests/test_switch.py +++ b/tests/test_switch.py @@ -19,7 +19,7 @@ from viam.resource.rpc_client_base import ResourceRPCClientBase from viam.utils import dict_to_struct -from . import loose_approx +from . import expected_grpc_timeout from .mocks import create_mock_subclass DEFAULT_POSITION = 0 @@ -28,7 +28,7 @@ DEFAULT_EXTRA = {"foo": "bar", "baz": [1, 2, 3]} EXTRA_PARAMS_STRUCT = dict_to_struct(DEFAULT_EXTRA) DEFAULT_TIMEOUT = 1.82 -DEFAULT_TIMEOUT_APPROX = loose_approx(DEFAULT_TIMEOUT) +DEFAULT_TIMEOUT_APPROX = expected_grpc_timeout(DEFAULT_TIMEOUT) DEFAULT_METADATA = ResourceRPCClientBase.Metadata() DEFAULT_METADATA.enable_debug_logging