Revert "[ELF] Refine isExported/isPreemptible condition"
[llvm-project.git] / libc / test / src / sys / socket / linux / send_recv_test.cpp
bloba5d4880d934cc7e842d6ee0776a07a6f591310e9
1 //===-- Unittests for send/recv -------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 #include "src/sys/socket/recv.h"
10 #include "src/sys/socket/send.h"
11 #include "src/sys/socket/socketpair.h"
13 #include "src/unistd/close.h"
15 #include "src/errno/libc_errno.h"
16 #include "test/UnitTest/Test.h"
18 #include <sys/socket.h> // For AF_UNIX and SOCK_DGRAM
20 TEST(LlvmLibcSendRecvTest, SucceedsWithSocketPair) {
21 const char TEST_MESSAGE[] = "connection successful";
22 const size_t MESSAGE_LEN = sizeof(TEST_MESSAGE);
24 int sockpair[2] = {0, 0};
26 int result = LIBC_NAMESPACE::socketpair(AF_UNIX, SOCK_STREAM, 0, sockpair);
27 ASSERT_EQ(result, 0);
28 ASSERT_ERRNO_SUCCESS();
30 ssize_t send_result =
31 LIBC_NAMESPACE::send(sockpair[0], TEST_MESSAGE, MESSAGE_LEN, 0);
32 EXPECT_EQ(send_result, static_cast<ssize_t>(MESSAGE_LEN));
33 ASSERT_ERRNO_SUCCESS();
35 char buffer[256];
37 ssize_t recv_result =
38 LIBC_NAMESPACE::recv(sockpair[1], buffer, sizeof(buffer), 0);
39 ASSERT_EQ(recv_result, static_cast<ssize_t>(MESSAGE_LEN));
40 ASSERT_ERRNO_SUCCESS();
42 ASSERT_STREQ(buffer, TEST_MESSAGE);
44 // close both ends of the socket
45 result = LIBC_NAMESPACE::close(sockpair[0]);
46 ASSERT_EQ(result, 0);
47 ASSERT_ERRNO_SUCCESS();
49 result = LIBC_NAMESPACE::close(sockpair[1]);
50 ASSERT_EQ(result, 0);
51 ASSERT_ERRNO_SUCCESS();
54 TEST(LlvmLibcSendRecvTest, SendFails) {
55 const char TEST_MESSAGE[] = "connection terminated";
56 const size_t MESSAGE_LEN = sizeof(TEST_MESSAGE);
58 ssize_t send_result = LIBC_NAMESPACE::send(-1, TEST_MESSAGE, MESSAGE_LEN, 0);
59 EXPECT_EQ(send_result, ssize_t(-1));
60 ASSERT_ERRNO_FAILURE();
62 LIBC_NAMESPACE::libc_errno = 0; // reset errno to avoid test ordering issues.
65 TEST(LlvmLibcSendRecvTest, RecvFails) {
66 char buffer[256];
68 ssize_t recv_result = LIBC_NAMESPACE::recv(-1, buffer, sizeof(buffer), 0);
69 ASSERT_EQ(recv_result, ssize_t(-1));
70 ASSERT_ERRNO_FAILURE();
72 LIBC_NAMESPACE::libc_errno = 0; // reset errno to avoid test ordering issues.