From 635539cd0da713729ec2852b3691dc9f73734e59 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Tue, 4 Feb 2025 17:32:54 -0700 Subject: libcr_ipc: Fix rpc.h --- libcr_ipc/tests/test_rpc.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 libcr_ipc/tests/test_rpc.c (limited to 'libcr_ipc/tests') diff --git a/libcr_ipc/tests/test_rpc.c b/libcr_ipc/tests/test_rpc.c new file mode 100644 index 0000000..4aff5ca --- /dev/null +++ b/libcr_ipc/tests/test_rpc.c @@ -0,0 +1,59 @@ +/* libcr_ipc/tests/test_rpc.c - Tests for + * + * Copyright (C) 2025 Luke T. Shumaker + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +#include +#include + +#include "test.h" + +CR_RPC_DECLARE(intrpc, int, int) + +/* Test that the RPC is fair, have worker1 start waiting first, and + * ensure that it gets the first request. */ + +COROUTINE cr_caller(void *_ch) { + intrpc_t *ch = _ch; + cr_begin(); + + int resp = intrpc_send_req(ch, 1); + test_assert(resp == 2); + + resp = intrpc_send_req(ch, 3); + test_assert(resp == 4); + + cr_exit(); +} + +COROUTINE cr_worker1(void *_ch) { + intrpc_t *ch = _ch; + cr_begin(); + + intrpc_req_t req = intrpc_recv_req(ch); + test_assert(req.req == 1); + intrpc_send_resp(req, 2); + + cr_exit(); +} + +COROUTINE cr_worker2(void *_ch) { + intrpc_t *ch = _ch; + cr_begin(); + + intrpc_req_t req = intrpc_recv_req(ch); + test_assert(req.req == 3); + intrpc_send_resp(req, 4); + + cr_exit(); +} + +int main() { + intrpc_t ch = {0}; + coroutine_add("worker1", cr_worker1, &ch); + coroutine_add("caller", cr_caller, &ch); + coroutine_add("worker2", cr_worker2, &ch); + coroutine_main(); + return 0; +} -- cgit v1.2.3-2-g168b