Skip to content

Commit 2fdadc0

Browse files
committed
Unit tests of "raw rpc client" service
1 parent f83daa9 commit 2fdadc0

File tree

5 files changed

+510
-13
lines changed

5 files changed

+510
-13
lines changed

docs/svc_design.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -381,8 +381,7 @@ RawRpcClientSend.0.1 send
381381
@union
382382
uavcan.primitive.Empty.1.0 empty
383383
RawRpcClientReceive.0.1 receive
384-
ocvsmd.common.Error.0.1 send_error
385-
ocvsmd.common.Error.0.1 receive_error
384+
ocvsmd.common.Error.0.1 error
386385
@sealed
387386
```
388387
- `RawRpcClientCreate.0.1.dsdl`

src/common/dsdl/ocvsmd/common/svc/relay/RawRpcClient.0.1.dsdl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ RawRpcClientSend.0.1 send
1313

1414
uavcan.primitive.Empty.1.0 empty
1515
RawRpcClientReceive.0.1 receive
16-
ocvsmd.common.Error.0.1 send_error
17-
ocvsmd.common.Error.0.1 receive_error
16+
ocvsmd.common.Error.0.1 error
1817

1918
@sealed

src/daemon/engine/svc/relay/raw_rpc_client_service.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -198,25 +198,28 @@ class RawRpcClientServiceImpl final
198198
return;
199199
}
200200

201-
const auto now = service_.context_.executor.now();
202-
const auto request_timeout = std::chrono::duration_cast<libcyphal::Duration>( //
203-
std::chrono::microseconds{send.request_timeout_us});
204-
const auto request_deadline = now + request_timeout;
201+
const auto now = service_.context_.executor.now();
202+
const auto request_deadline = now + std::chrono::duration_cast<libcyphal::Duration>( //
203+
std::chrono::microseconds{send.request_timeout_us});
204+
const auto response_deadline = now + std::chrono::duration_cast<libcyphal::Duration>(
205+
std::chrono::microseconds{send.response_timeout_us});
205206

206207
// The tail of the payload is the raw message data.
207208
//
208209
const auto raw_msg_payload = payload.subspan(payload.size() - send.payload_size);
209210
std::array<CyPayloadFragment, 1> fragments{{{raw_msg_payload.data(), raw_msg_payload.size()}}};
210211

211-
auto cy_req_result = cy_raw_svc_client_->request(request_deadline, fragments);
212+
auto cy_req_result = cy_raw_svc_client_->request(request_deadline,
213+
fragments,
214+
cetl::optional<libcyphal::TimePoint>{response_deadline});
212215
if (auto* const cy_failure = cetl::get_if<CyRawSvcClient::Failure>(&cy_req_result))
213216
{
214217
const auto opt_error = cyFailureToOptError(*cy_failure);
215218
logger().warn("RawRpcClientSvc: failed to send raw request (err={}, fsm_id={})", opt_error, id_);
216219

217220
Spec::Response ipc_response{&memory()};
218-
auto& send_error = ipc_response.set_send_error();
219-
optErrorToDsdlError(opt_error, send_error);
221+
auto& error = ipc_response.set__error();
222+
optErrorToDsdlError(opt_error, error);
220223
reply(ipc_response);
221224
return;
222225
}
@@ -274,8 +277,8 @@ class RawRpcClientServiceImpl final
274277
logger().warn("RawRpcClientSvc: RPC promise failure (err={}, fsm_id={}).", opt_error, id_);
275278

276279
Spec::Response ipc_response{&memory()};
277-
auto& receive_error = ipc_response.set_receive_error();
278-
optErrorToDsdlError(opt_error, receive_error);
280+
auto& error = ipc_response.set__error();
281+
optErrorToDsdlError(opt_error, error);
279282
reply(ipc_response);
280283
}
281284
}

test/daemon/engine/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ add_executable(engine_tests
99
main.cpp
1010
svc/node/test_exec_cmd_service.cpp
1111
svc/relay/test_raw_publisher_service.cpp
12+
svc/relay/test_raw_rpc_client_service.cpp
1213
svc/relay/test_raw_subscriber_service.cpp
1314
)
1415
target_link_libraries(engine_tests

0 commit comments

Comments
 (0)