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 21:40:39 +0000 |
| |
On 21.11.2022 19:50, Arseniy Krasnov wrote: > 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. Hm, seems current implementation is a little bit broken and returns ENOMEM, because any negative value, returned by transport callback is always replaced to ENOMEM. I think i need this patch from Bobby: https://lore.kernel.org/lkml/d81818b868216c774613dd03641fcfe63cc55a45.1660362668.git.bobby.eshleman@bytedance.com/ May be i can include it to this patchset also fixing review comments(of course keeping Bobby as author). Or more simple way is to check ENOMEM instead of EMSGSIZE in this test(simple, but a little bit dumb i think). >> >>> + 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 >> >
| |