From 9bcc052bfe62eb339e157af345b13a313be32877 Mon Sep 17 00:00:00 2001 From: Evgeniy Kochetov Date: Tue, 28 Jan 2020 13:42:52 +0000 Subject: [PATCH] ut/sock: Add get/set_opts unit tests for posix sockets Signed-off-by: Evgeniy Kochetov Change-Id: If53c1da8501c0c2abf8443643cfc8198c3254811 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/611 Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto --- test/unit/lib/sock/sock.c/sock_ut.c | 82 +++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/test/unit/lib/sock/sock.c/sock_ut.c b/test/unit/lib/sock/sock.c/sock_ut.c index 7009bcbfa..bbe4822d7 100644 --- a/test/unit/lib/sock/sock.c/sock_ut.c +++ b/test/unit/lib/sock/sock.c/sock_ut.c @@ -869,6 +869,87 @@ ut_sock_impl_get_set_opts(void) CU_ASSERT(errno == ENOTSUP); } +static void +posix_sock_impl_get_set_opts(void) +{ + int rc; + size_t len = 0; + struct spdk_sock_impl_opts opts = {}; + struct spdk_sock_impl_opts long_opts[2]; + + rc = spdk_sock_impl_get_opts("posix", NULL, &len); + CU_ASSERT(rc == -1); + CU_ASSERT(errno == EINVAL); + rc = spdk_sock_impl_get_opts("posix", &opts, NULL); + CU_ASSERT(rc == -1); + CU_ASSERT(errno == EINVAL); + + /* Check default opts */ + len = sizeof(opts); + rc = spdk_sock_impl_get_opts("posix", &opts, &len); + CU_ASSERT(rc == 0); + CU_ASSERT(len == sizeof(opts)); + CU_ASSERT(opts.recv_buf_size == MIN_SO_RCVBUF_SIZE); + CU_ASSERT(opts.send_buf_size == MIN_SO_SNDBUF_SIZE); + + /* Try to request more opts */ + len = sizeof(long_opts); + rc = spdk_sock_impl_get_opts("posix", long_opts, &len); + CU_ASSERT(rc == 0); + CU_ASSERT(len == sizeof(opts)); + + /* Try to request zero opts */ + len = 0; + rc = spdk_sock_impl_get_opts("posix", &opts, &len); + CU_ASSERT(rc == 0); + CU_ASSERT(len == 0); + + rc = spdk_sock_impl_set_opts("posix", NULL, len); + CU_ASSERT(rc == -1); + CU_ASSERT(errno == EINVAL); + + opts.recv_buf_size = 16; + opts.send_buf_size = 4; + rc = spdk_sock_impl_set_opts("posix", &opts, sizeof(opts)); + CU_ASSERT(rc == 0); + len = sizeof(opts); + memset(&opts, 0, sizeof(opts)); + rc = spdk_sock_impl_get_opts("posix", &opts, &len); + CU_ASSERT(rc == 0); + CU_ASSERT(opts.recv_buf_size == 16); + CU_ASSERT(opts.send_buf_size == 4); + + /* Try to set more opts */ + long_opts[0].recv_buf_size = 4; + long_opts[0].send_buf_size = 6; + long_opts[1].recv_buf_size = 0; + long_opts[1].send_buf_size = 0; + rc = spdk_sock_impl_set_opts("posix", long_opts, sizeof(long_opts)); + CU_ASSERT(rc == 0); + + /* Try to set less opts. Opts in the end should be untouched */ + opts.recv_buf_size = 5; + opts.send_buf_size = 10; + rc = spdk_sock_impl_set_opts("posix", &opts, sizeof(opts.recv_buf_size)); + CU_ASSERT(rc == 0); + len = sizeof(opts); + memset(&opts, 0, sizeof(opts)); + rc = spdk_sock_impl_get_opts("posix", &opts, &len); + CU_ASSERT(rc == 0); + CU_ASSERT(opts.recv_buf_size == 5); + CU_ASSERT(opts.send_buf_size == 6); + + /* Try to set partial option. It should not be changed */ + opts.recv_buf_size = 1000; + rc = spdk_sock_impl_set_opts("posix", &opts, 1); + CU_ASSERT(rc == 0); + len = sizeof(opts); + memset(&opts, 0, sizeof(opts)); + rc = spdk_sock_impl_get_opts("posix", &opts, &len); + CU_ASSERT(rc == 0); + CU_ASSERT(opts.recv_buf_size == 5); +} + int main(int argc, char **argv) { @@ -888,6 +969,7 @@ main(int argc, char **argv) CU_ADD_TEST(suite, _posix_sock_close); CU_ADD_TEST(suite, sock_get_default_opts); CU_ADD_TEST(suite, ut_sock_impl_get_set_opts); + CU_ADD_TEST(suite, posix_sock_impl_get_set_opts); CU_basic_set_mode(CU_BRM_VERBOSE);