diff --git a/tests/mctp-in.c b/tests/mctp-in.c
new file mode 100644
index 0000000..8444d59
--- /dev/null
+++ b/tests/mctp-in.c
@@ -0,0 +1,46 @@
+
+#include <assert.h>
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/poll.h>
+#include <sys/socket.h>
+
+#include "libmctp.h"
+#include "libmctp-serial.h"
+
+static void rx_message(uint8_t eid, void *data, void *msg, size_t len)
+{
+	(void)eid;
+	(void)data;
+	write(STDOUT_FILENO, msg, len);
+}
+
+int main(void)
+{
+	struct mctp_binding_serial *serial;
+	struct mctp *mctp;
+	int rc;
+
+	mctp = mctp_init();
+	assert(mctp);
+
+	serial = mctp_serial_init();
+	assert(serial);
+
+	mctp_serial_open_fd(serial, STDIN_FILENO);
+
+	mctp_serial_register_bus(serial, mctp, 8);
+
+	mctp_set_rx_all(mctp, rx_message, NULL);
+
+	for (;;) {
+		rc = mctp_serial_read(serial);
+		if (rc)
+			break;
+	}
+
+	return EXIT_SUCCESS;
+
+}
diff --git a/tests/mctp-pipe.c b/tests/mctp-pipe.c
new file mode 100644
index 0000000..9c37578
--- /dev/null
+++ b/tests/mctp-pipe.c
@@ -0,0 +1,80 @@
+
+#include <assert.h>
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/poll.h>
+#include <sys/socket.h>
+
+#include "libmctp.h"
+#include "libmctp-serial.h"
+
+static void rx_message(uint8_t eid, void *data, void *msg, size_t len)
+{
+	(void)eid;
+	(void)data;
+	write(STDOUT_FILENO, msg, len);
+}
+
+int main(void)
+{
+	struct mctp_binding_serial *serial[2];
+	mctp_eid_t eids[] = {8, 9};
+	struct pollfd pollfds[3];
+	struct mctp *mctp[2];
+	int rc, mctp_fds[2];
+
+	mctp[0] = mctp_init();
+	mctp[1] = mctp_init();
+
+	assert(mctp[0] && mctp[1]);
+
+	serial[0] = mctp_serial_init();
+	serial[1] = mctp_serial_init();
+
+	assert(serial[0] && serial[1]);
+
+	rc = socketpair(AF_UNIX, SOCK_DGRAM, 0, mctp_fds);
+	if (rc)
+		err(EXIT_FAILURE, "Can't create sockets");
+
+	mctp_serial_open_fd(serial[0], mctp_fds[0]);
+	mctp_serial_open_fd(serial[1], mctp_fds[1]);
+
+	mctp_serial_register_bus(serial[0], mctp[0], eids[0]);
+	mctp_serial_register_bus(serial[1], mctp[1], eids[1]);
+
+	mctp_set_rx_all(mctp[1], rx_message, NULL);
+
+	pollfds[0].fd = mctp_fds[0];
+	pollfds[0].events = POLLIN;
+	pollfds[1].fd = mctp_fds[1];
+	pollfds[1].events = POLLIN;
+	pollfds[2].fd = STDIN_FILENO;
+	pollfds[2].events = POLLIN;
+
+	for (;;) {
+		uint8_t buf[1024];
+
+		rc = poll(pollfds, 3, 0);
+		if (rc < 0)
+			return EXIT_FAILURE;
+
+		if (pollfds[0].revents)
+			mctp_serial_read(serial[0]);
+		if (pollfds[1].revents)
+			mctp_serial_read(serial[1]);
+		if (pollfds[2].revents) {
+			rc = read(STDIN_FILENO, buf, sizeof(buf));
+			if (rc == 0)
+				break;
+			else if (rc < 0)
+				err(EXIT_FAILURE, "read");
+			mctp_message_tx(mctp[0], eids[1], buf, rc);
+		}
+	}
+
+	return EXIT_SUCCESS;
+
+}
