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;
+}
