/* 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; }