Stefano Garzarella
2022-Aug-08 11:14 UTC
[RFC PATCH v3 9/9] vsock_test: POLLIN + SO_RCVLOWAT test
On Wed, Aug 03, 2022 at 02:07:58PM +0000, Arseniy Krasnov wrote:>This adds test to check,that when poll() returns POLLIN,POLLRDNORM bits, >next read call won't block. > >Signed-off-by: Arseniy Krasnov <AVKrasnov at sberdevices.ru> >--- > tools/testing/vsock/vsock_test.c | 107 +++++++++++++++++++++++++++++++ > 1 file changed, 107 insertions(+) > >diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c >index dc577461afc2..920dc5d5d979 100644 >--- a/tools/testing/vsock/vsock_test.c >+++ b/tools/testing/vsock/vsock_test.c >@@ -18,6 +18,7 @@ > #include <sys/socket.h> > #include <time.h> > #include <sys/mman.h> >+#include <poll.h> > > #include "timeout.h" > #include "control.h" >@@ -596,6 +597,107 @@ static void test_seqpacket_invalid_rec_buffer_server(const struct test_opts *opt > close(fd); > } > >+static void test_stream_poll_rcvlowat_server(const struct test_opts *opts) >+{ >+#define RCVLOWAT_BUF_SIZE 128 >+ int fd; >+ int i; >+ >+ fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); >+ if (fd < 0) { >+ perror("accept"); >+ exit(EXIT_FAILURE); >+ } >+ >+ /* Send 1 byte. */ >+ send_byte(fd, 1, 0); >+ >+ control_writeln("SRVSENT"); >+ >+ /* Wait until client is ready to receive rest of data. */ >+ control_expectln("CLNSENT"); >+ >+ for (i = 0; i < RCVLOWAT_BUF_SIZE - 1; i++) >+ send_byte(fd, 1, 0); >+ >+ /* Keep socket in active state. */ >+ control_expectln("POLLDONE"); >+ >+ close(fd); >+} >+ >+static void test_stream_poll_rcvlowat_client(const struct test_opts *opts) >+{ >+ unsigned long lowat_val = RCVLOWAT_BUF_SIZE; >+ char buf[RCVLOWAT_BUF_SIZE]; >+ struct pollfd fds; >+ ssize_t read_res; >+ short poll_flags; >+ int fd; >+ >+ fd = vsock_stream_connect(opts->peer_cid, 1234); >+ if (fd < 0) { >+ perror("connect"); >+ exit(EXIT_FAILURE); >+ } >+ >+ if (setsockopt(fd, SOL_SOCKET, SO_RCVLOWAT, >+ &lowat_val, sizeof(lowat_val))) {A small checkpatch warning that you can fix since you have to resend: CHECK: Alignment should match open parenthesis #76: FILE: tools/testing/vsock/vsock_test.c:645: + if (setsockopt(fd, SOL_SOCKET, SO_RCVLOWAT, + &lowat_val, sizeof(lowat_val))) { total: 0 errors, 0 warnings, 1 checks, 125 lines checked Thanks, Stefano