Skip to content

Commit 8e2866f

Browse files
authored
Fix AB#2112423: gRPC default max receive message size of 4 MB is too small for measurement services (#95)
* tests: Add max message length test * ni_measurement_service: Set max send/receive message length to unlimited * Run black * tests: Fix import order
1 parent 9f5f1ba commit 8e2866f

2 files changed

Lines changed: 42 additions & 3 deletions

File tree

ni_measurement_service/_internal/service_manager.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,13 @@ def start(
6868
int: The port number of the server
6969
7070
"""
71-
self.server = grpc.server(logging_pool.pool(max_workers=10))
71+
self.server = grpc.server(
72+
logging_pool.pool(max_workers=10),
73+
options=[
74+
("grpc.max_receive_message_length", -1),
75+
("grpc.max_send_message_length", -1),
76+
],
77+
)
7278
self.servicer = MeasurementServiceServicer(
7379
measurement_info,
7480
configuration_parameter_list,

tests/acceptance/test_measurement_service.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
"""Tests to validate measurement service. Uses the Sample Measurement Example."""
2+
import random
23
from os import path
34

45
import grpc
@@ -16,7 +17,7 @@ def test___measurement_service___get_metadata_rpc_call___returns_metadata():
1617
"""End to End Test to validate GetMetadata RPC call with Sample Measurement."""
1718
measurement_service_port = _host_service()
1819

19-
with grpc.insecure_channel("localhost:" + measurement_service_port) as channel:
20+
with _create_channel(measurement_service_port) as channel:
2021
stub = Measurement_pb2_grpc.MeasurementServiceStub(channel)
2122
get_metadata_response = stub.GetMetadata(Measurement_pb2.GetMetadataRequest())
2223

@@ -32,7 +33,29 @@ def test___measurement_service___measure_rpc_call___returns_output(
3233
"""End to End Test to validate Measure RPC call with Sample Measurement."""
3334
measurement_service_port = _host_service()
3435

35-
with grpc.insecure_channel("localhost:" + measurement_service_port) as channel:
36+
with _create_channel(measurement_service_port) as channel:
37+
stub = Measurement_pb2_grpc.MeasurementServiceStub(channel)
38+
request = _get_sample_measurement_measure_request(
39+
float_in, double_array_in, bool_in, string_in
40+
)
41+
measure_response = stub.Measure(request)
42+
43+
serialized_parameter = _get_serialized_measurement_parameters(
44+
float_in, double_array_in, bool_in, string_in
45+
)
46+
assert measure_response.outputs.value == serialized_parameter
47+
48+
49+
@pytest.mark.parametrize("double_array_len", [10000, 100000, 1000000, 10000000]) # up to 80 MB
50+
def test___measurement_service___measure_with_large_array___returns_output(double_array_len):
51+
"""End to End Test to validate Measure RPC call with Sample Measurement."""
52+
measurement_service_port = _host_service()
53+
float_in = 1.23
54+
double_array_in = [random.random() for i in range(double_array_len)]
55+
bool_in = False
56+
string_in = "InputString"
57+
58+
with _create_channel(measurement_service_port) as channel:
3659
stub = Measurement_pb2_grpc.MeasurementServiceStub(channel)
3760
request = _get_sample_measurement_measure_request(
3861
float_in, double_array_in, bool_in, string_in
@@ -50,6 +73,16 @@ def _host_service() -> int:
5073
return str(measurement.sample_measurement_service.grpc_service.port)
5174

5275

76+
def _create_channel(port):
77+
return grpc.insecure_channel(
78+
"localhost:" + port,
79+
options=[
80+
("grpc.max_receive_message_length", -1),
81+
("grpc.max_send_message_length", -1),
82+
],
83+
)
84+
85+
5386
def _get_sample_measurement_measure_request(float_in, double_array_in, bool_in, string_in):
5487

5588
request = Measurement_pb2.MeasureRequest(

0 commit comments

Comments
 (0)