Messages in this thread | | | From | Arseniy Krasnov <> | Subject | Re: [RFC PATCH v1 2/3] test/vsock: add big message test | Date | Mon, 21 Nov 2022 16:50:07 +0000 |
| |
On 21.11.2022 17:52, Stefano Garzarella wrote: > On Tue, Nov 15, 2022 at 08:52:35PM +0000, Arseniy Krasnov wrote: >> This adds test for sending message, bigger than peer's buffer size. >> For SOCK_SEQPACKET socket it must fail, as this type of socket has >> message size limit. >> >> Signed-off-by: Arseniy Krasnov <AVKrasnov@sberdevices.ru> >> --- >> tools/testing/vsock/vsock_test.c | 62 ++++++++++++++++++++++++++++++++ >> 1 file changed, 62 insertions(+) >> >> diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c >> index 107c11165887..bb4e8657f1d6 100644 >> --- a/tools/testing/vsock/vsock_test.c >> +++ b/tools/testing/vsock/vsock_test.c >> @@ -560,6 +560,63 @@ static void test_seqpacket_timeout_server(const struct test_opts *opts) >> close(fd); >> } >> >> +static void test_seqpacket_bigmsg_client(const struct test_opts *opts) >> +{ >> + unsigned long sock_buf_size; >> + ssize_t send_size; >> + socklen_t len; >> + void *data; >> + int fd; >> + >> + len = sizeof(sock_buf_size); >> + >> + fd = vsock_seqpacket_connect(opts->peer_cid, 1234); > > Not for this patch, but someday we should add a macro for this port and maybe even make it configurable :-) > >> + if (fd < 0) { >> + perror("connect"); >> + exit(EXIT_FAILURE); >> + } >> + >> + if (getsockopt(fd, AF_VSOCK, SO_VM_SOCKETS_BUFFER_SIZE, >> + &sock_buf_size, &len)) { >> + perror("getsockopt"); >> + exit(EXIT_FAILURE); >> + } >> + >> + sock_buf_size++; >> + >> + data = malloc(sock_buf_size); >> + if (!data) { >> + perror("malloc"); >> + exit(EXIT_FAILURE); >> + } >> + >> + send_size = send(fd, data, sock_buf_size, 0); >> + if (send_size != -1) { > > Can we check also `errno`? > IIUC it should contains EMSGSIZE. > >> + fprintf(stderr, "expected 'send(2)' failure, got %zi\n", >> + send_size); >> + } >> + >> + control_writeln("CLISENT"); >> + >> + free(data); >> + close(fd); >> +} >> + >> +static void test_seqpacket_bigmsg_server(const struct test_opts *opts) >> +{ >> + int fd; >> + >> + fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL); >> + if (fd < 0) { >> + perror("accept"); >> + exit(EXIT_FAILURE); >> + } >> + >> + control_expectln("CLISENT"); >> + >> + close(fd); >> +} >> + >> #define BUF_PATTERN_1 'a' >> #define BUF_PATTERN_2 'b' >> >> @@ -832,6 +889,11 @@ static struct test_case test_cases[] = { >> .run_client = test_seqpacket_timeout_client, >> .run_server = test_seqpacket_timeout_server, >> }, >> + { >> + .name = "SOCK_SEQPACKET big message", >> + .run_client = test_seqpacket_bigmsg_client, >> + .run_server = test_seqpacket_bigmsg_server, >> + }, > > I would add new tests always at the end, so if some CI uses --skip, we don't have to update the scripts to skip some tests. Ack this and all above > >> { >> .name = "SOCK_SEQPACKET invalid receive buffer", >> .run_client = test_seqpacket_invalid_rec_buffer_client, >> -- >> 2.25.1 >
| |