On 01.12.2022 12:45, Stefano Garzarella wrote: > On Fri, Nov 25, 2022 at 05:13:06PM +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@xxxxxxxxxxxxxx> >> --- >> tools/testing/vsock/vsock_test.c | 69 ++++++++++++++++++++++++++++++++ >> 1 file changed, 69 insertions(+) >> >> diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c >> index 12ef0cca6f93..a8e43424fb32 100644 >> --- a/tools/testing/vsock/vsock_test.c >> +++ b/tools/testing/vsock/vsock_test.c >> @@ -569,6 +569,70 @@ 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); >> + 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) { >> + fprintf(stderr, "expected 'send(2)' failure, got %zi\n", >> + send_size); >> + exit(EXIT_FAILURE); >> + } >> + >> + if (errno != EMSGSIZE) { >> + fprintf(stderr, "expected EMSGSIZE in 'errno', got %i\n", >> + errno); >> + exit(EXIT_FAILURE); >> + } > > We should make sure that this is true for all transports, but since now only virtio-vsock supports it, we should be okay. Hm, in general: I've tested this test suite for vmci may be several months ago, and found, that some tests didn't work. I'm thinking about reworking this test suite a little bit: each transport must have own set of tests for features that it supports. I had feeling, that all these tests are run only with virtio transport :) Because for example SEQPACKET mode is suported only for virtio. Thanks > >> + >> + 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' >> >> @@ -851,6 +915,11 @@ static struct test_case test_cases[] = { >> .run_client = test_stream_poll_rcvlowat_client, >> .run_server = test_stream_poll_rcvlowat_server, >> }, >> + { >> + .name = "SOCK_SEQPACKET big message", >> + .run_client = test_seqpacket_bigmsg_client, >> + .run_server = test_seqpacket_bigmsg_server, >> + }, >> {}, >> }; >> >> -- >> 2.25.1 > > LGTM! > > Reviewed-by: Stefano Garzarella <sgarzare@xxxxxxxxxx> >