// SPDX-License-Identifier: GPL-2.0
/* Copyright Amazon.com Inc. or its affiliates. */

#include <fcntl.h>
#include <string.h>
#include <unistd.h>

#include <netinet/in.h>
#include <sys/epoll.h>
#include <sys/ioctl.h>
#include <sys/signalfd.h>
#include <sys/socket.h>

#include "kselftest_harness.h"

#define BUF_SZ	32

FIXTURE(msg_oob)
{
	int fd[4];		/* 0: AF_UNIX sender
				 * 1: AF_UNIX receiver
				 * 2: TCP sender
				 * 3: TCP receiver
				 */
	int signal_fd;
	int epoll_fd[2];	/* 0: AF_UNIX receiver
				 * 1: TCP receiver
				 */
	bool tcp_compliant;
};

FIXTURE_VARIANT(msg_oob)
{
	bool peek;
};

FIXTURE_VARIANT_ADD(msg_oob, no_peek)
{
	.peek = false,
};

FIXTURE_VARIANT_ADD(msg_oob, peek)
{
	.peek = true
};

static void create_unix_socketpair(struct __test_metadata *_metadata,
				   FIXTURE_DATA(msg_oob) *self)
{
	int ret;

	ret = socketpair(AF_UNIX, SOCK_STREAM | SOCK_NONBLOCK, 0, self->fd);
	ASSERT_EQ(ret, 0);
}

static void create_tcp_socketpair(struct __test_metadata *_metadata,
				  FIXTURE_DATA(msg_oob) *self)
{
	struct sockaddr_in addr;
	socklen_t addrlen;
	int listen_fd;
	int ret;

	listen_fd = socket(AF_INET, SOCK_STREAM, 0);
	ASSERT_GE(listen_fd, 0);

	ret = listen(listen_fd, -1);
	ASSERT_EQ(ret, 0);

	addrlen = sizeof(addr);
	ret = getsockname(listen_fd, (struct sockaddr *)&addr, &addrlen);
	ASSERT_EQ(ret, 0);

	self->fd[2] = socket(AF_INET, SOCK_STREAM, 0);
	ASSERT_GE(self->fd[2], 0);

	ret = connect(self->fd[2], (struct sockaddr *)&addr, addrlen);
	ASSERT_EQ(ret, 0);

	self->fd[3] = accept(listen_fd, (struct sockaddr *)&addr, &addrlen);
	ASSERT_GE(self->fd[3], 0);

	ret = fcntl(self->fd[3], F_SETFL, O_NONBLOCK);
	ASSERT_EQ(ret, 0);
}

static void setup_sigurg(struct __test_metadata *_metadata,
			 FIXTURE_DATA(msg_oob) *self)
{
	struct signalfd_siginfo siginfo;
	int pid = getpid();
	sigset_t mask;
	int i, ret;

	for (i = 0; i < 2; i++) {
		ret = ioctl(self->fd[i * 2 + 1], FIOSETOWN, &pid);
		ASSERT_EQ(ret, 0);
	}

	ret = sigemptyset(&mask);
	ASSERT_EQ(ret, 0);

	ret = sigaddset(&mask, SIGURG);
	ASSERT_EQ(ret, 0);

	ret = sigprocmask(SIG_BLOCK, &mask, NULL);
	ASSERT_EQ(ret, 0);

	self->signal_fd = signalfd(-1, &mask, SFD_NONBLOCK);
	ASSERT_GE(self->signal_fd, 0);

	ret = read(self->signal_fd, &siginfo, sizeof(siginfo));
	ASSERT_EQ(ret, -1);
}

static void setup_epollpri(struct __test_metadata *_metadata,
			   FIXTURE_DATA(msg_oob) *self)
{
	struct epoll_event event = {
		.events = EPOLLPRI,
	};
	int i;

	for (i = 0; i < 2; i++) {
		int ret;

		self->epoll_fd[i] = epoll_create1(0);
		ASSERT_GE(self->epoll_fd[i], 0);

		ret = epoll_ctl(self->epoll_fd[i], EPOLL_CTL_ADD, self->fd[i * 2 + 1], &event);
		ASSERT_EQ(ret, 0);
	}
}

static void close_sockets(FIXTURE_DATA(msg_oob) *self)
{
	int i;

	for (i = 0; i < 4; i++)
		close(self->fd[i]);
}

FIXTURE_SETUP(msg_oob)
{
	create_unix_socketpair(_metadata, self);
	create_tcp_socketpair(_metadata, self);

	setup_sigurg(_metadata, self);
	setup_epollpri(_metadata, self);

	self->tcp_compliant = true;
}

FIXTURE_TEARDOWN(msg_oob)
{
	close_sockets(self);
}

static void __epollpair(struct __test_metadata *_metadata,
			FIXTURE_DATA(msg_oob) *self,
			bool oob_remaining)
{
	struct epoll_event event[2] = {};
	int i, ret[2];

	for (i = 0; i < 2; i++)
		ret[i] = epoll_wait(self->epoll_fd[i], &event[i], 1, 0);

	ASSERT_EQ(ret[0], oob_remaining);

	if (self->tcp_compliant)
		ASSERT_EQ(ret[0], ret[1]);

	if (oob_remaining) {
		ASSERT_EQ(event[0].events, EPOLLPRI);

		if (self->tcp_compliant)
			ASSERT_EQ(event[0].events, event[1].events);
	}
}

static void __sendpair(struct __test_metadata *_metadata,
		       FIXTURE_DATA(msg_oob) *self,
		       const void *buf, size_t len, int flags)
{
	int i, ret[2];

	for (i = 0; i < 2; i++) {
		struct signalfd_siginfo siginfo = {};
		int bytes;

		ret[i] = send(self->fd[i * 2], buf, len, flags);

		bytes = read(self->signal_fd, &siginfo, sizeof(siginfo));

		if (flags & MSG_OOB) {
			ASSERT_EQ(bytes, sizeof(siginfo));
			ASSERT_EQ(siginfo.ssi_signo, SIGURG);

			bytes = read(self->signal_fd, &siginfo, sizeof(siginfo));
		}

		ASSERT_EQ(bytes, -1);
	}

	ASSERT_EQ(ret[0], len);
	ASSERT_EQ(ret[0], ret[1]);
}

static void __recvpair(struct __test_metadata *_metadata,
		       FIXTURE_DATA(msg_oob) *self,
		       const char *expected_buf, int expected_len,
		       int buf_len, int flags, bool is_sender)
{
	int i, ret[2], recv_errno[2], expected_errno = 0;
	char recv_buf[2][BUF_SZ] = {};
	bool printed = false;

	ASSERT_GE(BUF_SZ, buf_len);

	errno = 0;

	for (i = 0; i < 2; i++) {
		int index = is_sender ? i * 2 : i * 2 + 1;

		ret[i] = recv(self->fd[index], recv_buf[i], buf_len, flags);
		recv_errno[i] = errno;
	}

	if (expected_len < 0) {
		expected_errno = -expected_len;
		expected_len = -1;
	}

	if (ret[0] != expected_len || recv_errno[0] != expected_errno) {
		TH_LOG("AF_UNIX :%s", ret[0] < 0 ? strerror(recv_errno[0]) : recv_buf[0]);
		TH_LOG("Expected:%s", expected_errno ? strerror(expected_errno) : expected_buf);

		ASSERT_EQ(ret[0], expected_len);
		ASSERT_EQ(recv_errno[0], expected_errno);
	}

	if (ret[0] != ret[1] || recv_errno[0] != recv_errno[1]) {
		TH_LOG("AF_UNIX :%s", ret[0] < 0 ? strerror(recv_errno[0]) : recv_buf[0]);
		TH_LOG("TCP     :%s", ret[1] < 0 ? strerror(recv_errno[1]) : recv_buf[1]);

		printed = true;

		if (self->tcp_compliant) {
			ASSERT_EQ(ret[0], ret[1]);
			ASSERT_EQ(recv_errno[0], recv_errno[1]);
		}
	}

	if (expected_len >= 0) {
		int cmp;

		cmp = strncmp(expected_buf, recv_buf[0], expected_len);
		if (cmp) {
			TH_LOG("AF_UNIX :%s", ret[0] < 0 ? strerror(recv_errno[0]) : recv_buf[0]);
			TH_LOG("Expected:%s", expected_errno ? strerror(expected_errno) : expected_buf);

			ASSERT_EQ(cmp, 0);
		}

		cmp = strncmp(recv_buf[0], recv_buf[1], expected_len);
		if (cmp) {
			if (!printed) {
				TH_LOG("AF_UNIX :%s", ret[0] < 0 ? strerror(recv_errno[0]) : recv_buf[0]);
				TH_LOG("TCP     :%s", ret[1] < 0 ? strerror(recv_errno[1]) : recv_buf[1]);
			}

			if (self->tcp_compliant)
				ASSERT_EQ(cmp, 0);
		}
	}
}

static void __setinlinepair(struct __test_metadata *_metadata,
			    FIXTURE_DATA(msg_oob) *self)
{
	int i, oob_inline = 1;

	for (i = 0; i < 2; i++) {
		int ret;

		ret = setsockopt(self->fd[i * 2 + 1], SOL_SOCKET, SO_OOBINLINE,
				 &oob_inline, sizeof(oob_inline));
		ASSERT_EQ(ret, 0);
	}
}

static void __setblockingpair(struct __test_metadata *_metadata,
			      FIXTURE_DATA(msg_oob) *self)
{
	int i;

	for (i = 0; i < 2; i++) {
		int ret, old_flags, flags;

		old_flags = fcntl(self->fd[i * 2 + 1], F_GETFL, 0);
		ASSERT_NE(-1, old_flags);

		ret = fcntl(self->fd[i * 2 + 1], F_SETFL, old_flags & ~O_NONBLOCK);
		ASSERT_EQ(0, ret);

		flags = fcntl(self->fd[i * 2 + 1], F_GETFL, 0);
		ASSERT_EQ(old_flags & ~O_NONBLOCK, flags);
	}
}

static void __siocatmarkpair(struct __test_metadata *_metadata,
			     FIXTURE_DATA(msg_oob) *self,
			     bool oob_head)
{
	int answ[2] = {};
	int i;

	for (i = 0; i < 2; i++) {
		int ret;

		ret = ioctl(self->fd[i * 2 + 1], SIOCATMARK, &answ[i]);
		ASSERT_EQ(ret, 0);
	}

	ASSERT_EQ(answ[0], oob_head);

	if (self->tcp_compliant)
		ASSERT_EQ(answ[0], answ[1]);
}

static void __resetpair(struct __test_metadata *_metadata,
			FIXTURE_DATA(msg_oob) *self,
			const FIXTURE_VARIANT(msg_oob) *variant,
			bool reset)
{
	int i;

	for (i = 0; i < 2; i++)
		close(self->fd[i * 2 + 1]);

	__recvpair(_metadata, self, "", reset ? -ECONNRESET : 0, 1,
		   variant->peek ? MSG_PEEK : 0, true);
}

#define sendpair(buf, len, flags)					\
	__sendpair(_metadata, self, buf, len, flags)

#define recvpair(expected_buf, expected_len, buf_len, flags)		\
	do {								\
		if (variant->peek)					\
			__recvpair(_metadata, self,			\
				   expected_buf, expected_len,		\
				   buf_len, (flags) | MSG_PEEK, false);	\
		__recvpair(_metadata, self,				\
			   expected_buf, expected_len,			\
			   buf_len, flags, false);			\
	} while (0)

#define epollpair(oob_remaining)					\
	__epollpair(_metadata, self, oob_remaining)

#define siocatmarkpair(oob_head)					\
	__siocatmarkpair(_metadata, self, oob_head)

#define setinlinepair()							\
	__setinlinepair(_metadata, self)

#define setblockingpair()						\
	__setblockingpair(_metadata, self)

#define resetpair(reset)						\
	__resetpair(_metadata, self, variant, reset)

#define tcp_incompliant							\
	for (self->tcp_compliant = false;				\
	     self->tcp_compliant == false;				\
	     self->tcp_compliant = true)

TEST_F(msg_oob, non_oob)
{
	sendpair("x", 1, 0);
	epollpair(false);
	siocatmarkpair(false);

	recvpair("", -EINVAL, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(false);

	resetpair(true);
}

TEST_F(msg_oob, non_oob_no_reset)
{
	sendpair("x", 1, 0);
	epollpair(false);
	siocatmarkpair(false);

	recvpair("x", 1, 1, 0);
	epollpair(false);
	siocatmarkpair(false);

	resetpair(false);
}

TEST_F(msg_oob, oob)
{
	sendpair("x", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	recvpair("x", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(true);

	tcp_incompliant {
		resetpair(false);		/* TCP sets -ECONNRESET for ex-OOB. */
	}
}

TEST_F(msg_oob, oob_reset)
{
	sendpair("x", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	resetpair(true);
}

TEST_F(msg_oob, oob_drop)
{
	sendpair("x", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	recvpair("", -EAGAIN, 1, 0);		/* Drop OOB. */
	epollpair(false);
	siocatmarkpair(false);

	recvpair("", -EINVAL, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(false);

	resetpair(false);
}

TEST_F(msg_oob, oob_ahead)
{
	sendpair("hello", 5, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	recvpair("o", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(false);

	recvpair("hell", 4, 4, 0);
	epollpair(false);
	siocatmarkpair(true);

	tcp_incompliant {
		resetpair(false);		/* TCP sets -ECONNRESET for ex-OOB. */
	}
}

TEST_F(msg_oob, oob_break)
{
	sendpair("hello", 5, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	recvpair("hell", 4, 5, 0);		/* Break at OOB even with enough buffer. */
	epollpair(true);
	siocatmarkpair(true);

	recvpair("o", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(true);

	recvpair("", -EAGAIN, 1, 0);
	siocatmarkpair(false);

	resetpair(false);
}

TEST_F(msg_oob, oob_ahead_break)
{
	sendpair("hello", 5, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	sendpair("world", 5, 0);
	epollpair(true);
	siocatmarkpair(false);

	recvpair("o", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(false);

	recvpair("hell", 4, 9, 0);		/* Break at OOB even after it's recv()ed. */
	epollpair(false);
	siocatmarkpair(true);

	recvpair("world", 5, 5, 0);
	epollpair(false);
	siocatmarkpair(false);

	resetpair(false);
}

TEST_F(msg_oob, oob_break_drop)
{
	sendpair("hello", 5, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	sendpair("world", 5, 0);
	epollpair(true);
	siocatmarkpair(false);

	recvpair("hell", 4, 10, 0);		/* Break at OOB even with enough buffer. */
	epollpair(true);
	siocatmarkpair(true);

	recvpair("world", 5, 10, 0);		/* Drop OOB and recv() the next skb. */
	epollpair(false);
	siocatmarkpair(false);

	recvpair("", -EINVAL, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(false);

	resetpair(false);
}

TEST_F(msg_oob, ex_oob_break)
{
	sendpair("hello", 5, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	sendpair("wor", 3, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	sendpair("ld", 2, 0);
	epollpair(true);
	siocatmarkpair(false);

	recvpair("hellowo", 7, 10, 0);		/* Break at OOB but not at ex-OOB. */
	epollpair(true);
	siocatmarkpair(true);

	recvpair("r", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(true);

	recvpair("ld", 2, 2, 0);
	epollpair(false);
	siocatmarkpair(false);

	resetpair(false);
}

TEST_F(msg_oob, ex_oob_drop)
{
	sendpair("x", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	sendpair("y", 1, MSG_OOB);		/* TCP drops "x" at this moment. */
	epollpair(true);

	tcp_incompliant {
		siocatmarkpair(false);

		recvpair("x", 1, 1, 0);		/* TCP drops "y" by passing through it. */
		epollpair(true);
		siocatmarkpair(true);

		recvpair("y", 1, 1, MSG_OOB);	/* TCP returns -EINVAL. */
		epollpair(false);
		siocatmarkpair(true);
	}

	resetpair(false);
}

TEST_F(msg_oob, ex_oob_drop_2)
{
	sendpair("x", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	sendpair("y", 1, MSG_OOB);		/* TCP drops "x" at this moment. */
	epollpair(true);

	tcp_incompliant {
		siocatmarkpair(false);
	}

	recvpair("y", 1, 1, MSG_OOB);
	epollpair(false);

	tcp_incompliant {
		siocatmarkpair(false);

		recvpair("x", 1, 1, 0);		/* TCP returns -EAGAIN. */
		epollpair(false);
		siocatmarkpair(true);
	}

	resetpair(false);
}

TEST_F(msg_oob, ex_oob_oob)
{
	sendpair("x", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	recvpair("x", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(true);

	sendpair("y", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	recvpair("", -EAGAIN, 1, 0);
	epollpair(false);
	siocatmarkpair(false);

	recvpair("", -EINVAL, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(false);

	resetpair(false);
}

TEST_F(msg_oob, ex_oob_ex_oob)
{
	sendpair("x", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	recvpair("x", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(true);

	sendpair("y", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	recvpair("y", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(true);

	tcp_incompliant {
		resetpair(false);		/* TCP sets -ECONNRESET for ex-OOB. */
	}
}

TEST_F(msg_oob, ex_oob_ex_oob_oob)
{
	sendpair("x", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	recvpair("x", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(true);

	sendpair("y", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	recvpair("y", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(true);

	sendpair("z", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);
}

TEST_F(msg_oob, ex_oob_ahead_break)
{
	sendpair("hello", 5, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	sendpair("wor", 3, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	recvpair("r", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(false);

	sendpair("ld", 2, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	tcp_incompliant {
		recvpair("hellowol", 8, 10, 0);	/* TCP recv()s "helloworl", why "r" ?? */
	}

	epollpair(true);
	siocatmarkpair(true);

	recvpair("d", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(true);

	tcp_incompliant {
		resetpair(false);		/* TCP sets -ECONNRESET for ex-OOB. */
	}
}

TEST_F(msg_oob, ex_oob_siocatmark)
{
	sendpair("hello", 5, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	recvpair("o", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(false);

	sendpair("world", 5, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	recvpair("hell", 4, 4, 0);		/* Intentionally stop at ex-OOB. */
	epollpair(true);
	siocatmarkpair(false);

	resetpair(true);
}

TEST_F(msg_oob, inline_oob)
{
	setinlinepair();

	sendpair("x", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	recvpair("", -EINVAL, 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	recvpair("x", 1, 1, 0);
	epollpair(false);
	siocatmarkpair(false);

	resetpair(false);
}

TEST_F(msg_oob, inline_oob_break)
{
	setinlinepair();

	sendpair("hello", 5, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	recvpair("", -EINVAL, 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	recvpair("hell", 4, 5, 0);		/* Break at OOB but not at ex-OOB. */
	epollpair(true);
	siocatmarkpair(true);

	recvpair("o", 1, 1, 0);
	epollpair(false);
	siocatmarkpair(false);

	resetpair(false);
}

TEST_F(msg_oob, inline_oob_ahead_break)
{
	sendpair("hello", 5, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	sendpair("world", 5, 0);
	epollpair(true);
	siocatmarkpair(false);

	recvpair("o", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(false);

	setinlinepair();

	recvpair("hell", 4, 9, 0);		/* Break at OOB even with enough buffer. */
	epollpair(false);
	siocatmarkpair(true);

	tcp_incompliant {
		recvpair("world", 5, 6, 0);	/* TCP recv()s "oworld", ... "o" ??? */
	}

	epollpair(false);
	siocatmarkpair(false);

	resetpair(false);
}

TEST_F(msg_oob, inline_ex_oob_break)
{
	sendpair("hello", 5, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	sendpair("wor", 3, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	sendpair("ld", 2, 0);
	epollpair(true);
	siocatmarkpair(false);

	setinlinepair();

	recvpair("hellowo", 7, 10, 0);		/* Break at OOB but not at ex-OOB. */
	epollpair(true);
	siocatmarkpair(true);

	recvpair("rld", 3, 3, 0);
	epollpair(false);
	siocatmarkpair(false);

	resetpair(false);
}

TEST_F(msg_oob, inline_ex_oob_no_drop)
{
	sendpair("x", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	setinlinepair();

	sendpair("y", 1, MSG_OOB);		/* TCP does NOT drops "x" at this moment. */
	epollpair(true);
	siocatmarkpair(false);

	recvpair("x", 1, 1, 0);
	epollpair(true);
	siocatmarkpair(true);

	recvpair("y", 1, 1, 0);
	epollpair(false);
	siocatmarkpair(false);

	resetpair(false);
}

TEST_F(msg_oob, inline_ex_oob_drop)
{
	sendpair("x", 1, MSG_OOB);
	epollpair(true);
	siocatmarkpair(true);

	sendpair("y", 1, MSG_OOB);		/* TCP drops "x" at this moment. */
	epollpair(true);

	setinlinepair();

	tcp_incompliant {
		siocatmarkpair(false);

		recvpair("x", 1, 1, 0);		/* TCP recv()s "y". */
		epollpair(true);
		siocatmarkpair(true);

		recvpair("y", 1, 1, 0);		/* TCP returns -EAGAIN. */
		epollpair(false);
		siocatmarkpair(false);
	}

	resetpair(false);
}

TEST_F(msg_oob, inline_ex_oob_siocatmark)
{
	sendpair("hello", 5, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	recvpair("o", 1, 1, MSG_OOB);
	epollpair(false);
	siocatmarkpair(false);

	setinlinepair();

	sendpair("world", 5, MSG_OOB);
	epollpair(true);
	siocatmarkpair(false);

	recvpair("hell", 4, 4, 0);		/* Intentionally stop at ex-OOB. */
	epollpair(true);
	siocatmarkpair(false);

	resetpair(true);
}

TEST_F(msg_oob, zero_buf_oob)
{
	sendpair("a", 1, MSG_OOB);
	recvpair("", 0, 0, 0);
}

TEST_F(msg_oob, zero_buf_oob_blocking)
{
	sendpair("a", 1, MSG_OOB);
	setblockingpair();
	recvpair("", 0, 0, 0);
}

TEST_F(msg_oob, zero_buf_non_oob_oob)
{
	sendpair("ab", 2, MSG_OOB);
	recvpair("", 0, 0, 0);
}

TEST_F(msg_oob, zero_buf_non_oob_oob_blocking)
{
	sendpair("ab", 2, MSG_OOB);
	setblockingpair();
	recvpair("", 0, 0, 0);
}

TEST_F(msg_oob, zero_buf_ex_oob_oob)
{
	sendpair("a", 1, MSG_OOB);
	recvpair("a", 1, 1, MSG_OOB);

	sendpair("b", 1, MSG_OOB);
	recvpair("", 0, 0, 0);
}

TEST_F(msg_oob, zero_buf_ex_oob_oob_blocking)
{
	sendpair("a", 1, MSG_OOB);
	recvpair("a", 1, 1, MSG_OOB);

	sendpair("b", 1, MSG_OOB);
	setblockingpair();
	recvpair("", 0, 0, 0);
}

TEST_HARNESS_MAIN
