{ "config/", config_tests },
{ "config/mgr/", confmgr_tests },
{ "config/parse/", confparse_tests },
+ { "conflux/cell/", conflux_cell_tests },
{ "connection/", connection_tests },
{ "conscache/", conscache_tests },
{ "consdiff/", consdiff_tests },
extern struct testcase_t circuituse_tests[];
extern struct testcase_t compat_libevent_tests[];
extern struct testcase_t config_tests[];
+extern struct testcase_t conflux_cell_tests[];
extern struct testcase_t confmgr_tests[];
extern struct testcase_t confparse_tests[];
extern struct testcase_t connection_tests[];
--- /dev/null
+/* Copyright (c) 2023, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file test_conflux_cell.
+ * \brief Test conflux cells.
+ */
+
+#include "test/test.h"
+#include "test/test_helpers.h"
+#include "test/log_test_helpers.h"
+
+#include "core/or/conflux_cell.h"
+#include "core/or/conflux_st.h"
+#include "trunnel/conflux.h"
+
+#include "lib/crypt_ops/crypto_rand.h"
+
+static void
+test_link(void *arg)
+{
+ cell_t cell;
+ conflux_cell_link_t link;
+ conflux_cell_link_t *decoded_link = NULL;
+
+ (void) arg;
+
+ memset(&link, 0, sizeof(link));
+
+ link.desired_ux = CONFLUX_UX_HIGH_THROUGHPUT;
+ link.last_seqno_recv = 0;
+ link.last_seqno_sent = 0;
+ link.version = 0x01;
+
+ crypto_rand((char *) link.nonce, sizeof(link.nonce));
+
+ ssize_t cell_len = build_link_cell(&link, cell.payload+RELAY_HEADER_SIZE);
+ tt_int_op(cell_len, OP_GT, 0);
+
+ decoded_link = conflux_cell_parse_link(&cell, cell_len);
+ tt_assert(decoded_link);
+
+ uint8_t buf[RELAY_PAYLOAD_SIZE];
+ ssize_t enc_cell_len = build_link_cell(decoded_link, buf);
+ tt_int_op(cell_len, OP_EQ, enc_cell_len);
+
+ /* Validate the original link object with the decoded one. */
+ tt_mem_op(&link, OP_EQ, decoded_link, sizeof(link));
+ tor_free(decoded_link);
+
+ done:
+ tor_free(decoded_link);
+}
+
+struct testcase_t conflux_cell_tests[] = {
+ { "link", test_link, TT_FORK, NULL, NULL },
+
+ END_OF_TESTCASES
+};
+