#include "naut/event.h" #include "naut/rpc.h" #include "test.h" #include #include #include static json_t *echo(void *context, const json_t *params, naut_err *error) { (void)context; *error = NAUT_OK; return json_deep_copy(params); } int main(void) { naut_rpc_registry *registry = naut_rpc_registry_create(); CHECK(registry != NULL); CHECK(naut_rpc_register(registry, "echo", echo, NULL) == NAUT_OK); CHECK(naut_rpc_register(registry, "echo", echo, NULL) == NAUT_ERR_INVAL); json_t *params = json_pack("{s:i}", "value", 42); naut_err error; json_t *response = naut_rpc_dispatch(registry, "echo", params, &error); CHECK(error == NAUT_OK && response != NULL); CHECK(json_integer_value(json_object_get(response, "value")) == 42); json_decref(response); CHECK(naut_rpc_dispatch(registry, "missing", params, &error) == NULL); CHECK(error == NAUT_ERR_INVAL); json_decref(params); int sockets[2]; CHECK(socketpair(AF_UNIX, SOCK_STREAM, 0, sockets) == 0); naut_event event = { .type = NAUT_EVENT_TORRENT_FINISHED, .torrent_id = 7, }; json_t *event_json = naut_rpc_event_json(&event); CHECK(event_json != NULL); naut_err send_error = naut_rpc_send_json(sockets[0], NAUT_RPC_EVENT, event_json); CHECK_EQ(send_error, NAUT_OK); json_decref(event_json); if (send_error != NAUT_OK) { close(sockets[0]); close(sockets[1]); naut_rpc_registry_destroy(registry); TEST_MAIN_END(); } naut_rpc_frame_type frame_type; json_t *payload = NULL; CHECK(naut_rpc_recv_json(sockets[1], &frame_type, &payload) == NAUT_OK); CHECK(frame_type == NAUT_RPC_EVENT); CHECK(json_integer_value(json_object_get(payload, "torrent_id")) == 7); CHECK(strcmp(json_string_value(json_object_get(payload, "event")), "torrent_finished") == 0); json_decref(payload); close(sockets[0]); close(sockets[1]); naut_event_type type; CHECK(naut_event_type_parse("file_complete", &type)); CHECK(type == NAUT_EVENT_FILE_COMPLETE); CHECK(!naut_event_type_parse("bad", &type)); naut_rpc_registry_destroy(registry); TEST_MAIN_END(); }