tests: Add EID addressing test
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
diff --git a/Makefile b/Makefile
index bdfe6a0..6a7c46b 100644
--- a/Makefile
+++ b/Makefile
@@ -18,7 +18,7 @@
test_util_objs = tests/test-utils.o
-tests =
+tests = test_eid
test_targets = $(tests:%=tests/%)
diff --git a/tests/test_eid.c b/tests/test_eid.c
new file mode 100644
index 0000000..2123a85
--- /dev/null
+++ b/tests/test_eid.c
@@ -0,0 +1,74 @@
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <libmctp.h>
+
+#include "test-utils.h"
+
+
+struct test_ctx {
+ struct mctp *mctp;
+ struct mctp_binding_test *binding;
+ int rx_count;
+ mctp_eid_t src_eid;
+};
+
+static void test_rx(uint8_t eid, void *data, void *msg, size_t len)
+{
+ struct test_ctx *ctx = data;
+
+ (void)msg;
+ (void)len;
+
+ ctx->rx_count++;
+ ctx->src_eid = eid;
+}
+
+static void create_packet(struct mctp_hdr *pkt,
+ mctp_eid_t src, mctp_eid_t dest)
+{
+ memset(pkt, 0, sizeof(*pkt));
+ pkt->src = src;
+ pkt->dest = dest;
+ pkt->flags_seq_tag = MCTP_HDR_FLAG_SOM | MCTP_HDR_FLAG_EOM;
+}
+
+int main(void)
+{
+ struct test_ctx _ctx, *ctx = &_ctx;
+ const mctp_eid_t local_eid = 8;
+ const mctp_eid_t remote_eid = 9;
+ const mctp_eid_t other_eid = 10;
+ struct {
+ struct mctp_hdr hdr;
+ uint8_t payload[1];
+ } pktbuf;
+
+ mctp_test_stack_init(&ctx->mctp, &ctx->binding, local_eid);
+
+ mctp_set_rx_all(ctx->mctp, test_rx, ctx);
+
+ /* check a message addressed to us is received */
+ ctx->rx_count = 0;
+
+ create_packet(&pktbuf.hdr, remote_eid, local_eid);
+
+ mctp_binding_test_rx_raw(ctx->binding, &pktbuf, sizeof(pktbuf));
+
+ assert(ctx->rx_count == 1);
+ assert(ctx->src_eid == remote_eid);
+
+ /* check a message not addressed to us is not received */
+ ctx->rx_count = 0;
+
+ create_packet(&pktbuf.hdr, remote_eid, other_eid);
+
+ mctp_binding_test_rx_raw(ctx->binding, &pktbuf, sizeof(pktbuf));
+
+ assert(ctx->rx_count == 0);
+
+ return EXIT_SUCCESS;
+}