19762338dSopenharmony_ci/* 29762338dSopenharmony_ci * Copyright (C) 2024 HiHope Open Source Organization. 39762338dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 49762338dSopenharmony_ci * you may not use this file except in compliance with the License. 59762338dSopenharmony_ci * You may obtain a copy of the License at 69762338dSopenharmony_ci * 79762338dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 89762338dSopenharmony_ci * 99762338dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 109762338dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 119762338dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 129762338dSopenharmony_ci * See the License for the specific language governing permissions and 139762338dSopenharmony_ci * limitations under the License. 149762338dSopenharmony_ci */ 159762338dSopenharmony_ci 169762338dSopenharmony_ci#include <cerrno> 179762338dSopenharmony_ci#include <cstdio> 189762338dSopenharmony_ci#include <cstdlib> 199762338dSopenharmony_ci#include <string> 209762338dSopenharmony_ci#include <vector> 219762338dSopenharmony_ci#include <fcntl.h> 229762338dSopenharmony_ci#include <unistd.h> 239762338dSopenharmony_ci#include <arpa/inet.h> 249762338dSopenharmony_ci#include <gtest/gtest.h> 259762338dSopenharmony_ci#include <linux/netlink.h> 269762338dSopenharmony_ci#include <netinet/in.h> 279762338dSopenharmony_ci#include <sys/stat.h> 289762338dSopenharmony_ci#include <sys/socket.h> 299762338dSopenharmony_ci#include <sys/types.h> 309762338dSopenharmony_ci#include "securec.h" 319762338dSopenharmony_ci 329762338dSopenharmony_ciusing namespace testing::ext; 339762338dSopenharmony_ci 349762338dSopenharmony_cistatic const int MAX_SIZE = 128; 359762338dSopenharmony_ci 369762338dSopenharmony_ciclass HatsSocketTest : public testing::Test { 379762338dSopenharmony_cipublic: 389762338dSopenharmony_ci static void SetUpTestCase(); 399762338dSopenharmony_ci static void TearDownTestCase(); 409762338dSopenharmony_ci void SetUp(); 419762338dSopenharmony_ci void TearDown(); 429762338dSopenharmony_ciprivate: 439762338dSopenharmony_ci}; 449762338dSopenharmony_civoid HatsSocketTest::SetUp() 459762338dSopenharmony_ci{ 469762338dSopenharmony_ci} 479762338dSopenharmony_civoid HatsSocketTest::TearDown() 489762338dSopenharmony_ci{ 499762338dSopenharmony_ci} 509762338dSopenharmony_civoid HatsSocketTest::SetUpTestCase() 519762338dSopenharmony_ci{ 529762338dSopenharmony_ci} 539762338dSopenharmony_civoid HatsSocketTest::TearDownTestCase() 549762338dSopenharmony_ci{ 559762338dSopenharmony_ci} 569762338dSopenharmony_ci 579762338dSopenharmony_cistruct SetOptionSupportTest { 589762338dSopenharmony_ci int id; 599762338dSopenharmony_ci int domain; 609762338dSopenharmony_ci int type; 619762338dSopenharmony_ci int protocol; 629762338dSopenharmony_ci} g_socketOpt[] = { 639762338dSopenharmony_ci {0, AF_UNIX, SOCK_STREAM, NETLINK_ROUTE}, 649762338dSopenharmony_ci {1, AF_UNIX, SOCK_STREAM, IPPROTO_IP}, 659762338dSopenharmony_ci {2, AF_UNIX, SOCK_STREAM, IPPROTO_ICMP}, 669762338dSopenharmony_ci {3, AF_UNIX, SOCK_DGRAM, NETLINK_ROUTE}, 679762338dSopenharmony_ci {4, AF_UNIX, SOCK_DGRAM, IPPROTO_IP}, 689762338dSopenharmony_ci {5, AF_UNIX, SOCK_DGRAM, IPPROTO_ICMP}, 699762338dSopenharmony_ci {6, AF_UNIX, SOCK_SEQPACKET, NETLINK_ROUTE}, 709762338dSopenharmony_ci {7, AF_UNIX, SOCK_SEQPACKET, IPPROTO_IP}, 719762338dSopenharmony_ci {8, AF_UNIX, SOCK_SEQPACKET, IPPROTO_ICMP}, 729762338dSopenharmony_ci {10, AF_LOCAL, SOCK_STREAM, NETLINK_ROUTE}, 739762338dSopenharmony_ci {11, AF_LOCAL, SOCK_STREAM, IPPROTO_IP}, 749762338dSopenharmony_ci {12, AF_LOCAL, SOCK_STREAM, IPPROTO_ICMP}, 759762338dSopenharmony_ci {13, AF_LOCAL, SOCK_DGRAM, NETLINK_ROUTE}, 769762338dSopenharmony_ci {14, AF_LOCAL, SOCK_DGRAM, IPPROTO_IP}, 779762338dSopenharmony_ci {15, AF_LOCAL, SOCK_DGRAM, IPPROTO_ICMP}, 789762338dSopenharmony_ci {16, AF_LOCAL, SOCK_SEQPACKET, NETLINK_ROUTE}, 799762338dSopenharmony_ci {17, AF_LOCAL, SOCK_SEQPACKET, IPPROTO_IP}, 809762338dSopenharmony_ci {20, AF_LOCAL, SOCK_SEQPACKET, IPPROTO_ICMP}, 819762338dSopenharmony_ci {24, AF_INET, SOCK_STREAM, NETLINK_ROUTE}, 829762338dSopenharmony_ci {25, AF_INET, SOCK_STREAM, IPPROTO_IP}, 839762338dSopenharmony_ci {26, AF_INET, SOCK_STREAM, IPPROTO_TCP}, 849762338dSopenharmony_ci {27, AF_INET, SOCK_DGRAM, NETLINK_ROUTE}, 859762338dSopenharmony_ci {28, AF_INET, SOCK_DGRAM, IPPROTO_IP}, 869762338dSopenharmony_ci {29, AF_INET, SOCK_DGRAM, IPPROTO_ICMP}, 879762338dSopenharmony_ci {30, AF_INET, SOCK_DGRAM, IPPROTO_UDP}, 889762338dSopenharmony_ci {31, AF_INET, SOCK_RAW, NETLINK_FIREWALL}, 899762338dSopenharmony_ci {32, AF_INET, SOCK_RAW, NETLINK_SOCK_DIAG}, 909762338dSopenharmony_ci {33, AF_INET, SOCK_RAW, NETLINK_NFLOG}, 919762338dSopenharmony_ci {34, AF_INET, SOCK_RAW, NETLINK_AUDIT}, 929762338dSopenharmony_ci {35, AF_INET, SOCK_RAW, NETLINK_FIB_LOOKUP}, 939762338dSopenharmony_ci {36, AF_INET, SOCK_RAW, NETLINK_CONNECTOR}, 949762338dSopenharmony_ci {37, AF_INET, SOCK_RAW, NETLINK_NETFILTER}, 959762338dSopenharmony_ci {38, AF_INET, SOCK_RAW, NETLINK_KOBJECT_UEVENT}, 969762338dSopenharmony_ci {39, AF_INET, SOCK_RAW, NETLINK_GENERIC}, 979762338dSopenharmony_ci {40, AF_INET, SOCK_RAW, IPPROTO_ICMPV6}, 989762338dSopenharmony_ci {41, AF_INET, SOCK_RAW, IPPROTO_ICMP}, 999762338dSopenharmony_ci {42, AF_INET, SOCK_RAW, IPPROTO_TCP}, 1009762338dSopenharmony_ci {43, AF_INET, SOCK_RAW, IPPROTO_UDP}, 1019762338dSopenharmony_ci {44, AF_INET, SOCK_PACKET, NETLINK_ROUTE}, 1029762338dSopenharmony_ci {45, AF_INET, SOCK_PACKET, NETLINK_FIREWALL}, 1039762338dSopenharmony_ci {46, AF_INET, SOCK_PACKET, NETLINK_SOCK_DIAG}, 1049762338dSopenharmony_ci {47, AF_INET, SOCK_PACKET, NETLINK_NFLOG}, 1059762338dSopenharmony_ci {48, AF_INET, SOCK_PACKET, NETLINK_AUDIT}, 1069762338dSopenharmony_ci {49, AF_INET, SOCK_PACKET, NETLINK_FIB_LOOKUP}, 1079762338dSopenharmony_ci {50, AF_INET, SOCK_PACKET, NETLINK_CONNECTOR}, 1089762338dSopenharmony_ci {51, AF_INET, SOCK_PACKET, NETLINK_NETFILTER}, 1099762338dSopenharmony_ci {52, AF_INET, SOCK_PACKET, NETLINK_KOBJECT_UEVENT}, 1109762338dSopenharmony_ci {53, AF_INET, SOCK_PACKET, NETLINK_GENERIC}, 1119762338dSopenharmony_ci {54, AF_INET, SOCK_PACKET, IPPROTO_ICMPV6}, 1129762338dSopenharmony_ci {55, AF_INET, SOCK_PACKET, IPPROTO_IP}, 1139762338dSopenharmony_ci {56, AF_INET, SOCK_PACKET, IPPROTO_ICMP}, 1149762338dSopenharmony_ci {57, AF_INET, SOCK_PACKET, IPPROTO_TCP}, 1159762338dSopenharmony_ci {58, AF_INET, SOCK_PACKET, IPPROTO_UDP}, 1169762338dSopenharmony_ci {59, AF_INET6, SOCK_STREAM, NETLINK_ROUTE}, 1179762338dSopenharmony_ci {60, AF_INET6, SOCK_STREAM, IPPROTO_IP}, 1189762338dSopenharmony_ci {61, AF_INET6, SOCK_STREAM, IPPROTO_TCP}, 1199762338dSopenharmony_ci {62, AF_INET6, SOCK_DGRAM, NETLINK_ROUTE}, 1209762338dSopenharmony_ci {63, AF_INET6, SOCK_DGRAM, IPPROTO_ICMPV6}, 1219762338dSopenharmony_ci {64, AF_INET6, SOCK_DGRAM, IPPROTO_IP}, 1229762338dSopenharmony_ci {65, AF_INET6, SOCK_DGRAM, IPPROTO_UDP}, 1239762338dSopenharmony_ci {66, AF_INET6, SOCK_RAW, NETLINK_FIREWALL}, 1249762338dSopenharmony_ci {67, AF_INET6, SOCK_RAW, NETLINK_SOCK_DIAG}, 1259762338dSopenharmony_ci {68, AF_INET6, SOCK_RAW, NETLINK_NFLOG}, 1269762338dSopenharmony_ci {69, AF_INET6, SOCK_RAW, NETLINK_AUDIT}, 1279762338dSopenharmony_ci {70, AF_INET6, SOCK_RAW, NETLINK_FIB_LOOKUP}, 1289762338dSopenharmony_ci {71, AF_INET6, SOCK_RAW, NETLINK_CONNECTOR}, 1299762338dSopenharmony_ci {72, AF_INET6, SOCK_RAW, NETLINK_NETFILTER}, 1309762338dSopenharmony_ci {73, AF_INET6, SOCK_RAW, NETLINK_KOBJECT_UEVENT}, 1319762338dSopenharmony_ci {74, AF_INET6, SOCK_RAW, NETLINK_GENERIC}, 1329762338dSopenharmony_ci {75, AF_INET6, SOCK_RAW, IPPROTO_ICMPV6}, 1339762338dSopenharmony_ci {76, AF_INET6, SOCK_RAW, IPPROTO_ICMP}, 1349762338dSopenharmony_ci {77, AF_INET6, SOCK_RAW, IPPROTO_TCP}, 1359762338dSopenharmony_ci {78, AF_INET6, SOCK_RAW, IPPROTO_UDP}, 1369762338dSopenharmony_ci {79, AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE}, 1379762338dSopenharmony_ci {80, AF_NETLINK, SOCK_DGRAM, NETLINK_SOCK_DIAG}, 1389762338dSopenharmony_ci {81, AF_NETLINK, SOCK_DGRAM, NETLINK_AUDIT}, 1399762338dSopenharmony_ci {82, AF_NETLINK, SOCK_DGRAM, NETLINK_FIB_LOOKUP}, 1409762338dSopenharmony_ci {84, AF_NETLINK, SOCK_DGRAM, NETLINK_NETFILTER}, 1419762338dSopenharmony_ci {85, AF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT}, 1429762338dSopenharmony_ci {86, AF_NETLINK, SOCK_DGRAM, NETLINK_GENERIC}, 1439762338dSopenharmony_ci {87, AF_NETLINK, SOCK_DGRAM, IPPROTO_IP}, 1449762338dSopenharmony_ci {88, AF_NETLINK, SOCK_DGRAM, IPPROTO_TCP}, 1459762338dSopenharmony_ci {89, AF_NETLINK, SOCK_RAW, NETLINK_ROUTE}, 1469762338dSopenharmony_ci {90, AF_NETLINK, SOCK_RAW, NETLINK_SOCK_DIAG}, 1479762338dSopenharmony_ci {91, AF_NETLINK, SOCK_RAW, NETLINK_AUDIT}, 1489762338dSopenharmony_ci {92, AF_NETLINK, SOCK_RAW, NETLINK_FIB_LOOKUP}, 1499762338dSopenharmony_ci {94, AF_NETLINK, SOCK_RAW, NETLINK_NETFILTER}, 1509762338dSopenharmony_ci {95, AF_NETLINK, SOCK_RAW, NETLINK_KOBJECT_UEVENT}, 1519762338dSopenharmony_ci {96, AF_NETLINK, SOCK_RAW, NETLINK_GENERIC}, 1529762338dSopenharmony_ci {97, AF_NETLINK, SOCK_RAW, IPPROTO_IP}, 1539762338dSopenharmony_ci {98, AF_NETLINK, SOCK_RAW, IPPROTO_TCP}, 1549762338dSopenharmony_ci {99, AF_PACKET, SOCK_DGRAM, NETLINK_ROUTE}, 1559762338dSopenharmony_ci {110, AF_PACKET, SOCK_DGRAM, NETLINK_FIREWALL}, 1569762338dSopenharmony_ci {111, AF_PACKET, SOCK_DGRAM, NETLINK_SOCK_DIAG}, 1579762338dSopenharmony_ci {112, AF_PACKET, SOCK_DGRAM, NETLINK_NFLOG}, 1589762338dSopenharmony_ci {113, AF_PACKET, SOCK_DGRAM, NETLINK_AUDIT}, 1599762338dSopenharmony_ci {114, AF_PACKET, SOCK_DGRAM, NETLINK_FIB_LOOKUP}, 1609762338dSopenharmony_ci {115, AF_PACKET, SOCK_DGRAM, NETLINK_CONNECTOR}, 1619762338dSopenharmony_ci {116, AF_PACKET, SOCK_DGRAM, NETLINK_NETFILTER}, 1629762338dSopenharmony_ci {117, AF_PACKET, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT}, 1639762338dSopenharmony_ci {118, AF_PACKET, SOCK_DGRAM, NETLINK_GENERIC}, 1649762338dSopenharmony_ci {119, AF_PACKET, SOCK_DGRAM, IPPROTO_ICMPV6}, 1659762338dSopenharmony_ci {120, AF_PACKET, SOCK_DGRAM, IPPROTO_IP}, 1669762338dSopenharmony_ci {121, AF_PACKET, SOCK_DGRAM, IPPROTO_ICMP}, 1679762338dSopenharmony_ci {122, AF_PACKET, SOCK_DGRAM, IPPROTO_TCP}, 1689762338dSopenharmony_ci {123, AF_PACKET, SOCK_DGRAM, IPPROTO_UDP}, 1699762338dSopenharmony_ci {124, AF_PACKET, SOCK_RAW, NETLINK_ROUTE}, 1709762338dSopenharmony_ci {125, AF_PACKET, SOCK_RAW, NETLINK_FIREWALL}, 1719762338dSopenharmony_ci {126, AF_PACKET, SOCK_RAW, NETLINK_SOCK_DIAG}, 1729762338dSopenharmony_ci {127, AF_PACKET, SOCK_RAW, NETLINK_NFLOG}, 1739762338dSopenharmony_ci {128, AF_PACKET, SOCK_RAW, NETLINK_AUDIT}, 1749762338dSopenharmony_ci {129, AF_PACKET, SOCK_RAW, NETLINK_FIB_LOOKUP}, 1759762338dSopenharmony_ci {130, AF_PACKET, SOCK_RAW, NETLINK_CONNECTOR}, 1769762338dSopenharmony_ci {131, AF_PACKET, SOCK_RAW, NETLINK_NETFILTER}, 1779762338dSopenharmony_ci {132, AF_PACKET, SOCK_RAW, NETLINK_KOBJECT_UEVENT}, 1789762338dSopenharmony_ci {133, AF_PACKET, SOCK_RAW, NETLINK_GENERIC}, 1799762338dSopenharmony_ci {134, AF_PACKET, SOCK_RAW, IPPROTO_ICMPV6}, 1809762338dSopenharmony_ci {135, AF_PACKET, SOCK_RAW, IPPROTO_IP}, 1819762338dSopenharmony_ci {136, AF_PACKET, SOCK_RAW, IPPROTO_ICMP}, 1829762338dSopenharmony_ci {137, AF_PACKET, SOCK_RAW, IPPROTO_TCP}, 1839762338dSopenharmony_ci {138, AF_PACKET, SOCK_RAW, IPPROTO_UDP}, 1849762338dSopenharmony_ci {139, AF_PACKET, SOCK_PACKET, NETLINK_ROUTE}, 1859762338dSopenharmony_ci {140, AF_PACKET, SOCK_PACKET, NETLINK_FIREWALL}, 1869762338dSopenharmony_ci {141, AF_PACKET, SOCK_PACKET, NETLINK_SOCK_DIAG}, 1879762338dSopenharmony_ci {142, AF_PACKET, SOCK_PACKET, NETLINK_NFLOG}, 1889762338dSopenharmony_ci {143, AF_PACKET, SOCK_PACKET, NETLINK_AUDIT}, 1899762338dSopenharmony_ci {144, AF_PACKET, SOCK_PACKET, NETLINK_FIB_LOOKUP}, 1909762338dSopenharmony_ci {145, AF_PACKET, SOCK_PACKET, NETLINK_CONNECTOR}, 1919762338dSopenharmony_ci {146, AF_PACKET, SOCK_PACKET, NETLINK_NETFILTER}, 1929762338dSopenharmony_ci {147, AF_PACKET, SOCK_PACKET, NETLINK_KOBJECT_UEVENT}, 1939762338dSopenharmony_ci {148, AF_PACKET, SOCK_PACKET, NETLINK_GENERIC}, 1949762338dSopenharmony_ci {149, AF_PACKET, SOCK_PACKET, IPPROTO_ICMPV6}, 1959762338dSopenharmony_ci {150, AF_PACKET, SOCK_PACKET, IPPROTO_IP}, 1969762338dSopenharmony_ci {151, AF_PACKET, SOCK_PACKET, IPPROTO_ICMP}, 1979762338dSopenharmony_ci {152, AF_PACKET, SOCK_PACKET, IPPROTO_TCP}, 1989762338dSopenharmony_ci {153, AF_PACKET, SOCK_PACKET, IPPROTO_UDP}, 1999762338dSopenharmony_ci {154, AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, NETLINK_ROUTE}, 2009762338dSopenharmony_ci}; 2019762338dSopenharmony_ci 2029762338dSopenharmony_cistruct SocketPairOptionSupportTest { 2039762338dSopenharmony_ci int id; 2049762338dSopenharmony_ci int domain; 2059762338dSopenharmony_ci int type; 2069762338dSopenharmony_ci} g_socketPairOpt[] = { 2079762338dSopenharmony_ci {1, AF_UNIX, SOCK_STREAM}, 2089762338dSopenharmony_ci {2, AF_UNIX, SOCK_DGRAM}, 2099762338dSopenharmony_ci {3, AF_UNIX, SOCK_SEQPACKET}, 2109762338dSopenharmony_ci {4, AF_UNIX, SOCK_STREAM | SOCK_NONBLOCK}, 2119762338dSopenharmony_ci {5, AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC}, 2129762338dSopenharmony_ci {6, AF_LOCAL, SOCK_STREAM}, 2139762338dSopenharmony_ci {7, AF_LOCAL, SOCK_DGRAM}, 2149762338dSopenharmony_ci {8, AF_LOCAL, SOCK_SEQPACKET}, 2159762338dSopenharmony_ci {9, AF_LOCAL, SOCK_STREAM | SOCK_NONBLOCK}, 2169762338dSopenharmony_ci {10, AF_LOCAL, SOCK_STREAM | SOCK_CLOEXEC}, 2179762338dSopenharmony_ci}; 2189762338dSopenharmony_ci 2199762338dSopenharmony_ci/* 2209762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_SOCKET_0100 2219762338dSopenharmony_ci * @tc.name : SocketCreateFdSuccess_0001 2229762338dSopenharmony_ci * @tc.desc : socket create fd success. 2239762338dSopenharmony_ci * @tc.size : MediumTest 2249762338dSopenharmony_ci * @tc.type : Function 2259762338dSopenharmony_ci * @tc.level : Level 1 2269762338dSopenharmony_ci */ 2279762338dSopenharmony_ciHWTEST_F(HatsSocketTest, SocketCreateFdSuccess_0001, Function | MediumTest | Level1) 2289762338dSopenharmony_ci{ 2299762338dSopenharmony_ci int i; 2309762338dSopenharmony_ci int socketFd = -1; 2319762338dSopenharmony_ci for (i = 0; i < sizeof(g_socketOpt) / sizeof(g_socketOpt[0]); i++) { 2329762338dSopenharmony_ci socketFd = socket(g_socketOpt[i].domain, g_socketOpt[i].type, g_socketOpt[i].protocol); 2339762338dSopenharmony_ci if (socketFd <= 0) { 2349762338dSopenharmony_ci printf("id = %d\n", g_socketOpt[i].id); 2359762338dSopenharmony_ci } 2369762338dSopenharmony_ci EXPECT_TRUE(socketFd > 0); 2379762338dSopenharmony_ci close(socketFd); 2389762338dSopenharmony_ci } 2399762338dSopenharmony_ci} 2409762338dSopenharmony_ci 2419762338dSopenharmony_ci/* 2429762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_SOCKETPAIR_0200 2439762338dSopenharmony_ci * @tc.name : SocketpairCreateSuccess_0002 2449762338dSopenharmony_ci * @tc.desc : socketpair create success. 2459762338dSopenharmony_ci * @tc.size : MediumTest 2469762338dSopenharmony_ci * @tc.type : Function 2479762338dSopenharmony_ci * @tc.level : Level 1 2489762338dSopenharmony_ci */ 2499762338dSopenharmony_ciHWTEST_F(HatsSocketTest, SocketpairCreateSuccess_0002, Function | MediumTest | Level1) 2509762338dSopenharmony_ci{ 2519762338dSopenharmony_ci int i; 2529762338dSopenharmony_ci int ret; 2539762338dSopenharmony_ci ssize_t size; 2549762338dSopenharmony_ci char buf[MAX_SIZE] = {0}; 2559762338dSopenharmony_ci int socketPair[2]; 2569762338dSopenharmony_ci const char *content = "Hello, world!"; 2579762338dSopenharmony_ci 2589762338dSopenharmony_ci for (i = 0; i < sizeof(g_socketPairOpt) / sizeof(g_socketPairOpt[0]); i++) { 2599762338dSopenharmony_ci ret = socketpair(g_socketPairOpt[i].domain, g_socketPairOpt[i].type, 0, socketPair); 2609762338dSopenharmony_ci if (ret < 0) { 2619762338dSopenharmony_ci printf("id = %d, ret = %d\n", g_socketPairOpt[i].id, ret); 2629762338dSopenharmony_ci } 2639762338dSopenharmony_ci EXPECT_EQ(ret, 0); 2649762338dSopenharmony_ci 2659762338dSopenharmony_ci size = write(socketPair[0], content, strlen(content)); 2669762338dSopenharmony_ci EXPECT_EQ(size, strlen(content)); 2679762338dSopenharmony_ci 2689762338dSopenharmony_ci read(socketPair[1], buf, MAX_SIZE); 2699762338dSopenharmony_ci EXPECT_EQ(size, strlen(content)); 2709762338dSopenharmony_ci EXPECT_STREQ(buf, content); 2719762338dSopenharmony_ci 2729762338dSopenharmony_ci close(socketPair[0]); 2739762338dSopenharmony_ci close(socketPair[1]); 2749762338dSopenharmony_ci } 2759762338dSopenharmony_ci}