Message ID | 20230719192708.1775162-4-AVKrasnov@sberdevices.ru (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | virtio/vsock: some updates for MSG_PEEK flag | expand |
Context | Check | Description |
---|---|---|
netdev/series_format | success | Posting correctly formatted |
netdev/tree_selection | success | Guessed tree name to be net-next |
netdev/fixes_present | success | Fixes tag not required for -next series |
netdev/header_inline | success | No static functions without inline keyword in header files |
netdev/build_32bit | success | Errors and warnings before: 9 this patch: 9 |
netdev/cc_maintainers | success | CCed 3 of 3 maintainers |
netdev/build_clang | success | Errors and warnings before: 9 this patch: 9 |
netdev/verify_signedoff | success | Signed-off-by tag matches author and committer |
netdev/deprecated_api | success | None detected |
netdev/check_selftest | success | No net selftest shell script |
netdev/verify_fixes | success | No Fixes tag |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 9 this patch: 9 |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 104 lines checked |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/source_inline | success | Was 0 now: 0 |
On Wed, Jul 19, 2023 at 10:27:07PM +0300, Arseniy Krasnov wrote: >This new version makes test more complicated by adding empty read, >partial read and data comparisons between MSG_PEEK and normal reads. > >Signed-off-by: Arseniy Krasnov <AVKrasnov@sberdevices.ru> >--- > tools/testing/vsock/vsock_test.c | 78 ++++++++++++++++++++++++++++++-- > 1 file changed, 75 insertions(+), 3 deletions(-) Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> > >diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c >index ac1bd3ac1533..444a3ff0681f 100644 >--- a/tools/testing/vsock/vsock_test.c >+++ b/tools/testing/vsock/vsock_test.c >@@ -255,9 +255,14 @@ static void test_stream_multiconn_server(const struct test_opts *opts) > close(fds[i]); > } > >+#define MSG_PEEK_BUF_LEN 64 >+ > static void test_stream_msg_peek_client(const struct test_opts *opts) > { >+ unsigned char buf[MSG_PEEK_BUF_LEN]; >+ ssize_t send_size; > int fd; >+ int i; > > fd = vsock_stream_connect(opts->peer_cid, 1234); > if (fd < 0) { >@@ -265,12 +270,32 @@ static void test_stream_msg_peek_client(const struct test_opts *opts) > exit(EXIT_FAILURE); > } > >- send_byte(fd, 1, 0); >+ for (i = 0; i < sizeof(buf); i++) >+ buf[i] = rand() & 0xFF; >+ >+ control_expectln("SRVREADY"); >+ >+ send_size = send(fd, buf, sizeof(buf), 0); >+ >+ if (send_size < 0) { >+ perror("send"); >+ exit(EXIT_FAILURE); >+ } >+ >+ if (send_size != sizeof(buf)) { >+ fprintf(stderr, "Invalid send size %zi\n", send_size); >+ exit(EXIT_FAILURE); >+ } >+ > close(fd); > } > > static void test_stream_msg_peek_server(const struct test_opts *opts) > { >+ unsigned char buf_half[MSG_PEEK_BUF_LEN / 2]; >+ unsigned char buf_normal[MSG_PEEK_BUF_LEN]; >+ unsigned char buf_peek[MSG_PEEK_BUF_LEN]; >+ ssize_t res; > int fd; > > fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); >@@ -279,8 +304,55 @@ static void test_stream_msg_peek_server(const struct test_opts *opts) > exit(EXIT_FAILURE); > } > >- recv_byte(fd, 1, MSG_PEEK); >- recv_byte(fd, 1, 0); >+ /* Peek from empty socket. */ >+ res = recv(fd, buf_peek, sizeof(buf_peek), MSG_PEEK | MSG_DONTWAIT); >+ if (res != -1) { >+ fprintf(stderr, "expected recv(2) failure, got %zi\n", res); >+ exit(EXIT_FAILURE); >+ } >+ >+ if (errno != EAGAIN) { >+ perror("EAGAIN expected"); >+ exit(EXIT_FAILURE); >+ } >+ >+ control_writeln("SRVREADY"); >+ >+ /* Peek part of data. */ >+ res = recv(fd, buf_half, sizeof(buf_half), MSG_PEEK); >+ if (res != sizeof(buf_half)) { >+ fprintf(stderr, "recv(2) + MSG_PEEK, expected %zu, got %zi\n", >+ sizeof(buf_half), res); >+ exit(EXIT_FAILURE); >+ } >+ >+ /* Peek whole data. */ >+ res = recv(fd, buf_peek, sizeof(buf_peek), MSG_PEEK); >+ if (res != sizeof(buf_peek)) { >+ fprintf(stderr, "recv(2) + MSG_PEEK, expected %zu, got %zi\n", >+ sizeof(buf_peek), res); >+ exit(EXIT_FAILURE); >+ } >+ >+ /* Compare partial and full peek. */ >+ if (memcmp(buf_half, buf_peek, sizeof(buf_half))) { >+ fprintf(stderr, "Partial peek data mismatch\n"); >+ exit(EXIT_FAILURE); >+ } >+ >+ res = recv(fd, buf_normal, sizeof(buf_normal), 0); >+ if (res != sizeof(buf_normal)) { >+ fprintf(stderr, "recv(2), expected %zu, got %zi\n", >+ sizeof(buf_normal), res); >+ exit(EXIT_FAILURE); >+ } >+ >+ /* Compare full peek and normal read. */ >+ if (memcmp(buf_peek, buf_normal, sizeof(buf_peek))) { >+ fprintf(stderr, "Full peek data mismatch\n"); >+ exit(EXIT_FAILURE); >+ } >+ > close(fd); > } > >-- >2.25.1 >
diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c index ac1bd3ac1533..444a3ff0681f 100644 --- a/tools/testing/vsock/vsock_test.c +++ b/tools/testing/vsock/vsock_test.c @@ -255,9 +255,14 @@ static void test_stream_multiconn_server(const struct test_opts *opts) close(fds[i]); } +#define MSG_PEEK_BUF_LEN 64 + static void test_stream_msg_peek_client(const struct test_opts *opts) { + unsigned char buf[MSG_PEEK_BUF_LEN]; + ssize_t send_size; int fd; + int i; fd = vsock_stream_connect(opts->peer_cid, 1234); if (fd < 0) { @@ -265,12 +270,32 @@ static void test_stream_msg_peek_client(const struct test_opts *opts) exit(EXIT_FAILURE); } - send_byte(fd, 1, 0); + for (i = 0; i < sizeof(buf); i++) + buf[i] = rand() & 0xFF; + + control_expectln("SRVREADY"); + + send_size = send(fd, buf, sizeof(buf), 0); + + if (send_size < 0) { + perror("send"); + exit(EXIT_FAILURE); + } + + if (send_size != sizeof(buf)) { + fprintf(stderr, "Invalid send size %zi\n", send_size); + exit(EXIT_FAILURE); + } + close(fd); } static void test_stream_msg_peek_server(const struct test_opts *opts) { + unsigned char buf_half[MSG_PEEK_BUF_LEN / 2]; + unsigned char buf_normal[MSG_PEEK_BUF_LEN]; + unsigned char buf_peek[MSG_PEEK_BUF_LEN]; + ssize_t res; int fd; fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); @@ -279,8 +304,55 @@ static void test_stream_msg_peek_server(const struct test_opts *opts) exit(EXIT_FAILURE); } - recv_byte(fd, 1, MSG_PEEK); - recv_byte(fd, 1, 0); + /* Peek from empty socket. */ + res = recv(fd, buf_peek, sizeof(buf_peek), MSG_PEEK | MSG_DONTWAIT); + if (res != -1) { + fprintf(stderr, "expected recv(2) failure, got %zi\n", res); + exit(EXIT_FAILURE); + } + + if (errno != EAGAIN) { + perror("EAGAIN expected"); + exit(EXIT_FAILURE); + } + + control_writeln("SRVREADY"); + + /* Peek part of data. */ + res = recv(fd, buf_half, sizeof(buf_half), MSG_PEEK); + if (res != sizeof(buf_half)) { + fprintf(stderr, "recv(2) + MSG_PEEK, expected %zu, got %zi\n", + sizeof(buf_half), res); + exit(EXIT_FAILURE); + } + + /* Peek whole data. */ + res = recv(fd, buf_peek, sizeof(buf_peek), MSG_PEEK); + if (res != sizeof(buf_peek)) { + fprintf(stderr, "recv(2) + MSG_PEEK, expected %zu, got %zi\n", + sizeof(buf_peek), res); + exit(EXIT_FAILURE); + } + + /* Compare partial and full peek. */ + if (memcmp(buf_half, buf_peek, sizeof(buf_half))) { + fprintf(stderr, "Partial peek data mismatch\n"); + exit(EXIT_FAILURE); + } + + res = recv(fd, buf_normal, sizeof(buf_normal), 0); + if (res != sizeof(buf_normal)) { + fprintf(stderr, "recv(2), expected %zu, got %zi\n", + sizeof(buf_normal), res); + exit(EXIT_FAILURE); + } + + /* Compare full peek and normal read. */ + if (memcmp(buf_peek, buf_normal, sizeof(buf_peek))) { + fprintf(stderr, "Full peek data mismatch\n"); + exit(EXIT_FAILURE); + } + close(fd); }
This new version makes test more complicated by adding empty read, partial read and data comparisons between MSG_PEEK and normal reads. Signed-off-by: Arseniy Krasnov <AVKrasnov@sberdevices.ru> --- tools/testing/vsock/vsock_test.c | 78 ++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 3 deletions(-)