1f6603c60Sopenharmony_ci/** 2f6603c60Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License. 5f6603c60Sopenharmony_ci * You may obtain a copy of the License at 6f6603c60Sopenharmony_ci * 7f6603c60Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8f6603c60Sopenharmony_ci * 9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10f6603c60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and 13f6603c60Sopenharmony_ci * limitations under the License. 14f6603c60Sopenharmony_ci */ 15f6603c60Sopenharmony_ci 16f6603c60Sopenharmony_ci#include "securec.h" 17f6603c60Sopenharmony_ci#include "gtest/gtest.h" 18f6603c60Sopenharmony_ci#include "log.h" 19f6603c60Sopenharmony_ci#include "utils.h" 20f6603c60Sopenharmony_ci#include <errno.h> 21f6603c60Sopenharmony_ci#include <sys/ioctl.h> 22f6603c60Sopenharmony_ci#include <sys/socket.h> 23f6603c60Sopenharmony_ci#include <bits/ioctl.h> 24f6603c60Sopenharmony_ci#include <arpa/inet.h> 25f6603c60Sopenharmony_ci#include <netinet/tcp.h> 26f6603c60Sopenharmony_ci#include <netinet/in.h> 27f6603c60Sopenharmony_ci#include <netinet/ether.h> 28f6603c60Sopenharmony_ci#include <net/if.h> 29f6603c60Sopenharmony_ci#include <netdb.h> 30f6603c60Sopenharmony_ci#include <resolv.h> 31f6603c60Sopenharmony_ci#include <arpa/nameser.h> 32f6603c60Sopenharmony_ci#include <poll.h> 33f6603c60Sopenharmony_ci#include <string.h> 34f6603c60Sopenharmony_ci#include <stdlib.h> 35f6603c60Sopenharmony_ci#include <stdio.h> 36f6603c60Sopenharmony_ci 37f6603c60Sopenharmony_ciusing namespace std; 38f6603c60Sopenharmony_ciusing namespace testing::ext; 39f6603c60Sopenharmony_ci 40f6603c60Sopenharmony_ci#define PROTOCOL_COUNT 36 41f6603c60Sopenharmony_ci#define TEST_FD_COUNT 10 42f6603c60Sopenharmony_ci#define STACK_PORT 2288 43f6603c60Sopenharmony_ci#define PEER_PORT 2288 44f6603c60Sopenharmony_ci#define BUF_SIZE (100) 45f6603c60Sopenharmony_cistatic const char* g_udpMsg = "Hi, this is UDP"; 46f6603c60Sopenharmony_cistatic const char* g_srvMsg = "Hi, this is TCP server"; 47f6603c60Sopenharmony_cistatic const char* g_cliMsg = "Hello, this is TCP client"; 48f6603c60Sopenharmony_cistatic const char* g_localHost = "127.0.0.1"; 49f6603c60Sopenharmony_cistatic char g_protocolList[PROTOCOL_COUNT][11] = { 50f6603c60Sopenharmony_ci "ip", "icmp", "igmp", "ggp", "ipencap", "st", "tcp", 51f6603c60Sopenharmony_ci "egp", "pup", "udp", "hmp", "xns-idp", "rdp", "iso-tp4", "xtp", "ddp", "idpr-cmtp", "ipv6", 52f6603c60Sopenharmony_ci "ipv6-route", "ipv6-frag", "idrp", "rsvp", "gre", "esp", "ah", "skip", "ipv6-icmp", "ipv6-nonxt", 53f6603c60Sopenharmony_ci "ipv6-opts", "rspf", "vmtp", "ospf", "ipip", "encap", "pim", "raw" 54f6603c60Sopenharmony_ci}; 55f6603c60Sopenharmony_cistatic int g_protocolNumber[PROTOCOL_COUNT] = { 56f6603c60Sopenharmony_ci 0, 1, 2, 3, 4, 5, 6, 8, 12, 17, 20, 22, 27, 29, 36, 37, 57f6603c60Sopenharmony_ci 38, 41, 43, 44, 45, 46, 47, 50, 51, 57, 58, 59, 60, 73, 81, 89, 94, 98, 103, 255 58f6603c60Sopenharmony_ci}; 59f6603c60Sopenharmony_ci 60f6603c60Sopenharmony_cistatic pthread_barrier_t g_barrier; 61f6603c60Sopenharmony_ci#define WAIT() pthread_barrier_wait(&g_barrier) 62f6603c60Sopenharmony_ci 63f6603c60Sopenharmony_ciclass ActsNetTest : public testing::Test { 64f6603c60Sopenharmony_ciprotected: 65f6603c60Sopenharmony_ci // SetUpTestCase: Testsuit setup, run before 1st testcase 66f6603c60Sopenharmony_ci static void SetUpTestCase(void) {} 67f6603c60Sopenharmony_ci // TearDownTestCase: Testsuit teardown, run after last testcase 68f6603c60Sopenharmony_ci static void TearDownTestCase(void) {} 69f6603c60Sopenharmony_ci // Testcase setup 70f6603c60Sopenharmony_ci virtual void SetUp() {} 71f6603c60Sopenharmony_ci // Testcase teardown 72f6603c60Sopenharmony_ci virtual void TearDown() {} 73f6603c60Sopenharmony_ci}; 74f6603c60Sopenharmony_ci 75f6603c60Sopenharmony_ci/* return fd */ 76f6603c60Sopenharmony_cistatic int CommInitTcpServer(int port) 77f6603c60Sopenharmony_ci{ 78f6603c60Sopenharmony_ci int srvFd = socket(AF_INET, SOCK_STREAM, 0); 79f6603c60Sopenharmony_ci if (srvFd == -1) { 80f6603c60Sopenharmony_ci printf("[###]CommInitTcpServer]socket fail!\n"); 81f6603c60Sopenharmony_ci return -1; 82f6603c60Sopenharmony_ci } 83f6603c60Sopenharmony_ci int flag = 1; 84f6603c60Sopenharmony_ci int ret = setsockopt(srvFd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(int)); 85f6603c60Sopenharmony_ci if (ret != 0) { 86f6603c60Sopenharmony_ci printf("[###][CommInitTcpServer]setsockopt fail, ret[%d]!\n", ret); 87f6603c60Sopenharmony_ci } 88f6603c60Sopenharmony_ci struct sockaddr_in srvAddr = {0}; 89f6603c60Sopenharmony_ci srvAddr.sin_family = AF_INET; 90f6603c60Sopenharmony_ci srvAddr.sin_addr.s_addr = inet_addr(g_localHost); 91f6603c60Sopenharmony_ci srvAddr.sin_port = htons(port); 92f6603c60Sopenharmony_ci ret = ::bind(srvFd, (struct sockaddr*)&srvAddr, sizeof(srvAddr)); 93f6603c60Sopenharmony_ci if (ret != 0) { 94f6603c60Sopenharmony_ci printf("[###][CommInitTcpServer]::bind fail!\n"); 95f6603c60Sopenharmony_ci close(srvFd); 96f6603c60Sopenharmony_ci return -1; 97f6603c60Sopenharmony_ci } 98f6603c60Sopenharmony_ci ret = listen(srvFd, 5); 99f6603c60Sopenharmony_ci if (ret != 0) { 100f6603c60Sopenharmony_ci printf("[###][CommInitTcpServer]listen fail!\n"); 101f6603c60Sopenharmony_ci close(srvFd); 102f6603c60Sopenharmony_ci return -1; 103f6603c60Sopenharmony_ci } 104f6603c60Sopenharmony_ci printf("[###][CommInitTcpServer]success,Fd[%d]\n", srvFd); 105f6603c60Sopenharmony_ci return srvFd; 106f6603c60Sopenharmony_ci} 107f6603c60Sopenharmony_ci 108f6603c60Sopenharmony_cistatic void* CommTcpClientTask(void *param) 109f6603c60Sopenharmony_ci{ 110f6603c60Sopenharmony_ci int* ret = (int *)malloc(sizeof(int)); 111f6603c60Sopenharmony_ci int memRet = -1; 112f6603c60Sopenharmony_ci if (ret == nullptr) { 113f6603c60Sopenharmony_ci printf("[---][comm client]malloc fail\n"); 114f6603c60Sopenharmony_ci return nullptr; 115f6603c60Sopenharmony_ci } 116f6603c60Sopenharmony_ci *ret = 0; 117f6603c60Sopenharmony_ci int clnFd = socket(AF_INET, SOCK_STREAM, 0); 118f6603c60Sopenharmony_ci if (clnFd == -1) { 119f6603c60Sopenharmony_ci printf("[@@@][comm client]socket fail\n"); 120f6603c60Sopenharmony_ci *ret = -1; 121f6603c60Sopenharmony_ci return ret; 122f6603c60Sopenharmony_ci } 123f6603c60Sopenharmony_ci struct sockaddr_in srvAddr = {0}; 124f6603c60Sopenharmony_ci srvAddr.sin_family = AF_INET; 125f6603c60Sopenharmony_ci srvAddr.sin_addr.s_addr = inet_addr(g_localHost); 126f6603c60Sopenharmony_ci srvAddr.sin_port = htons(PEER_PORT + 1); 127f6603c60Sopenharmony_ci int rst = connect(clnFd, (struct sockaddr*)&srvAddr, sizeof(srvAddr)); 128f6603c60Sopenharmony_ci if (rst != 0) { 129f6603c60Sopenharmony_ci printf("[@@@][comm client]connect fail\n"); 130f6603c60Sopenharmony_ci close(clnFd); 131f6603c60Sopenharmony_ci *ret = -1; 132f6603c60Sopenharmony_ci return ret; 133f6603c60Sopenharmony_ci } 134f6603c60Sopenharmony_ci int sleepSecond = *((int *)param); 135f6603c60Sopenharmony_ci char dataBuf[50] = {0}; 136f6603c60Sopenharmony_ci char sendMsgList[5][50] = { 137f6603c60Sopenharmony_ci "Hi, I'm client,FD:[%d]", "client:123456789abcdefg,FD:[%d]", 138f6603c60Sopenharmony_ci "client:!!@@##$$%%^^&&**(()),FD:[%d]", "client:(((112233445566778899))),FD:[%d]", "bye" 139f6603c60Sopenharmony_ci }; 140f6603c60Sopenharmony_ci for (int i = 0; i < 4; i++) { 141f6603c60Sopenharmony_ci sleep(sleepSecond); 142f6603c60Sopenharmony_ci memRet = memset_s(dataBuf, sizeof(dataBuf), 0, sizeof(dataBuf)); 143f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 144f6603c60Sopenharmony_ci rst = sprintf_s(dataBuf, sizeof(dataBuf), sendMsgList[i], clnFd); 145f6603c60Sopenharmony_ci if (rst < 0) { 146f6603c60Sopenharmony_ci printf("[@@@][comm client]sprintf_s error!\n"); 147f6603c60Sopenharmony_ci continue; 148f6603c60Sopenharmony_ci } 149f6603c60Sopenharmony_ci rst = send(clnFd, dataBuf, strlen(dataBuf), 0); 150f6603c60Sopenharmony_ci if (rst <= 0) { 151f6603c60Sopenharmony_ci *ret = -1; 152f6603c60Sopenharmony_ci printf("[@@@][comm client][%d]send fail\n", clnFd); 153f6603c60Sopenharmony_ci } 154f6603c60Sopenharmony_ci memRet = memset_s(dataBuf, sizeof(dataBuf), 0, sizeof(dataBuf)); 155f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 156f6603c60Sopenharmony_ci rst = recv(clnFd, dataBuf, sizeof(dataBuf), 0); 157f6603c60Sopenharmony_ci if (rst > 0) { 158f6603c60Sopenharmony_ci printf("[@@@][comm client][%d]recv msg[%s]\n", clnFd, dataBuf); 159f6603c60Sopenharmony_ci } else { 160f6603c60Sopenharmony_ci printf("[@@@][comm client][%d]recv no data\n", clnFd); 161f6603c60Sopenharmony_ci } 162f6603c60Sopenharmony_ci } 163f6603c60Sopenharmony_ci // send 'bye', finish 164f6603c60Sopenharmony_ci rst = send(clnFd, sendMsgList[4], strlen(sendMsgList[4]), 0); 165f6603c60Sopenharmony_ci if (rst <= 0) { 166f6603c60Sopenharmony_ci *ret = -1; 167f6603c60Sopenharmony_ci printf("[@@@][comm client][%d]send fail\n", clnFd); 168f6603c60Sopenharmony_ci } 169f6603c60Sopenharmony_ci rst = close(clnFd); 170f6603c60Sopenharmony_ci if (rst != 0) { 171f6603c60Sopenharmony_ci *ret = -1; 172f6603c60Sopenharmony_ci printf("[@@@][comm client][%d]close fd fail\n", clnFd); 173f6603c60Sopenharmony_ci } 174f6603c60Sopenharmony_ci return ret; 175f6603c60Sopenharmony_ci} 176f6603c60Sopenharmony_ci 177f6603c60Sopenharmony_cistatic void* SampleTcpServerTask(void *p) 178f6603c60Sopenharmony_ci{ 179f6603c60Sopenharmony_ci int memRet = -1; 180f6603c60Sopenharmony_ci int srvFd = CommInitTcpServer(STACK_PORT); 181f6603c60Sopenharmony_ci EXPECT_NE(-1, srvFd); 182f6603c60Sopenharmony_ci 183f6603c60Sopenharmony_ci WAIT(); 184f6603c60Sopenharmony_ci struct sockaddr_in clnAddr = {0}; 185f6603c60Sopenharmony_ci socklen_t clnAddrLen = sizeof(clnAddr); 186f6603c60Sopenharmony_ci int clnFd = accept(srvFd, (struct sockaddr*)&clnAddr, &clnAddrLen); 187f6603c60Sopenharmony_ci printf("[tcp server]accept <%s:%d>\n", inet_ntoa(clnAddr.sin_addr), ntohs(clnAddr.sin_port)); 188f6603c60Sopenharmony_ci EXPECT_NE(-1, clnFd); 189f6603c60Sopenharmony_ci printf("[tcp server]lsfd[%d], sfd[%d]\n", srvFd, clnFd); 190f6603c60Sopenharmony_ci 191f6603c60Sopenharmony_ci struct sockaddr addr = {0}; 192f6603c60Sopenharmony_ci socklen_t addrLen = sizeof(addr); 193f6603c60Sopenharmony_ci int ret = getsockname(clnFd, &addr, &addrLen); 194f6603c60Sopenharmony_ci printf("[tcp server]getsockname %s:%d\n", inet_ntoa(((struct sockaddr_in*)&addr)->sin_addr), 195f6603c60Sopenharmony_ci ntohs(((struct sockaddr_in*)&addr)->sin_port)); 196f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 197f6603c60Sopenharmony_ci EXPECT_EQ(inet_addr(g_localHost), ((struct sockaddr_in*)&addr)->sin_addr.s_addr); 198f6603c60Sopenharmony_ci 199f6603c60Sopenharmony_ci ret = getpeername(clnFd, &addr, &addrLen); 200f6603c60Sopenharmony_ci printf("[tcp server]getpeername %s:%d\n", inet_ntoa(((struct sockaddr_in*)&addr)->sin_addr), 201f6603c60Sopenharmony_ci ntohs(((struct sockaddr_in*)&addr)->sin_port)); 202f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 203f6603c60Sopenharmony_ci EXPECT_EQ(inet_addr(g_localHost), ((struct sockaddr_in*)&addr)->sin_addr.s_addr); 204f6603c60Sopenharmony_ci 205f6603c60Sopenharmony_ci static char buf[BUF_SIZE + 1] = {0}; 206f6603c60Sopenharmony_ci unsigned int srvMsgLen = strlen(g_srvMsg); 207f6603c60Sopenharmony_ci memRet = memset_s(buf, BUF_SIZE, 0, BUF_SIZE); 208f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 209f6603c60Sopenharmony_ci ret = strcpy_s(buf, BUF_SIZE, g_srvMsg); 210f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 211f6603c60Sopenharmony_ci ret = send(clnFd, buf, srvMsgLen, 0); 212f6603c60Sopenharmony_ci printf("[tcp server]send, ret=%d\n", ret); 213f6603c60Sopenharmony_ci EXPECT_EQ(srvMsgLen, (unsigned int)ret); 214f6603c60Sopenharmony_ci 215f6603c60Sopenharmony_ci memRet =memset_s(buf, BUF_SIZE, 0, BUF_SIZE); 216f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 217f6603c60Sopenharmony_ci ret = recv(clnFd, buf, sizeof(buf), 0); 218f6603c60Sopenharmony_ci printf("[tcp server]recv, ret=%d, msg[%s]\n", ret, buf); 219f6603c60Sopenharmony_ci EXPECT_EQ(strlen(g_cliMsg), (unsigned int)ret); 220f6603c60Sopenharmony_ci 221f6603c60Sopenharmony_ci WAIT(); 222f6603c60Sopenharmony_ci int len = 2; 223f6603c60Sopenharmony_ci struct msghdr msg = {nullptr}; 224f6603c60Sopenharmony_ci struct iovec iov[2] = {nullptr}; 225f6603c60Sopenharmony_ci clnAddr.sin_family = AF_INET; 226f6603c60Sopenharmony_ci clnAddr.sin_addr.s_addr = inet_addr(g_localHost); 227f6603c60Sopenharmony_ci clnAddr.sin_port = htons(PEER_PORT); 228f6603c60Sopenharmony_ci memRet = memset_s(buf, BUF_SIZE, 0, BUF_SIZE); 229f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 230f6603c60Sopenharmony_ci ret = strcpy_s(buf, BUF_SIZE, g_srvMsg); 231f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 232f6603c60Sopenharmony_ci msg.msg_name = &clnAddr; 233f6603c60Sopenharmony_ci msg.msg_namelen = sizeof(clnAddr); 234f6603c60Sopenharmony_ci msg.msg_iov = iov; 235f6603c60Sopenharmony_ci msg.msg_iovlen = len; 236f6603c60Sopenharmony_ci iov[0].iov_base = buf; 237f6603c60Sopenharmony_ci iov[0].iov_len = srvMsgLen; 238f6603c60Sopenharmony_ci iov[1].iov_base = buf; 239f6603c60Sopenharmony_ci iov[1].iov_len = srvMsgLen; 240f6603c60Sopenharmony_ci ret = sendmsg(clnFd, &msg, 0); 241f6603c60Sopenharmony_ci printf("[tcp server]sendmsg, ret=%d\n", ret); 242f6603c60Sopenharmony_ci EXPECT_EQ(len * srvMsgLen, (unsigned int)ret); 243f6603c60Sopenharmony_ci 244f6603c60Sopenharmony_ci WAIT(); 245f6603c60Sopenharmony_ci static char bufrec[BUF_SIZE + 1] = {0}; 246f6603c60Sopenharmony_ci memRet = memset_s(bufrec, sizeof(bufrec), 0, BUF_SIZE); 247f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 248f6603c60Sopenharmony_ci memRet = memset_s(&msg, sizeof(msg), 0, sizeof(msg)); 249f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 250f6603c60Sopenharmony_ci msg.msg_name = &clnAddr; 251f6603c60Sopenharmony_ci msg.msg_namelen = sizeof(clnAddr); 252f6603c60Sopenharmony_ci msg.msg_iov = iov; 253f6603c60Sopenharmony_ci msg.msg_iovlen = 1; 254f6603c60Sopenharmony_ci iov[0].iov_base = bufrec; 255f6603c60Sopenharmony_ci iov[0].iov_len = sizeof(bufrec); 256f6603c60Sopenharmony_ci ret = recvmsg(clnFd, &msg, 0); 257f6603c60Sopenharmony_ci if (len * strlen(g_cliMsg) == (unsigned int)ret && ret >= 0) { 258f6603c60Sopenharmony_ci bufrec[ret] = 0; 259f6603c60Sopenharmony_ci printf("[tcp server]recvmsg on socket %d:%d, msg[%s]\n", clnFd, ret, buf); 260f6603c60Sopenharmony_ci } else { 261f6603c60Sopenharmony_ci EXPECT_TRUE(false); 262f6603c60Sopenharmony_ci printf("[tcp server] recvmsg on socket %d: %d\n", clnFd, ret); 263f6603c60Sopenharmony_ci } 264f6603c60Sopenharmony_ci 265f6603c60Sopenharmony_ci ret = shutdown(clnFd, SHUT_RDWR); 266f6603c60Sopenharmony_ci printf("[tcp server]shutdown\n"); 267f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 268f6603c60Sopenharmony_ci ret = close(clnFd); 269f6603c60Sopenharmony_ci EXPECT_NE(-1, ret); 270f6603c60Sopenharmony_ci ret = close(srvFd); 271f6603c60Sopenharmony_ci EXPECT_NE(-1, ret); 272f6603c60Sopenharmony_ci return nullptr; 273f6603c60Sopenharmony_ci} 274f6603c60Sopenharmony_ci 275f6603c60Sopenharmony_cistatic void* SampleTcpClientTask(void *p) 276f6603c60Sopenharmony_ci{ 277f6603c60Sopenharmony_ci int memRet = -1; 278f6603c60Sopenharmony_ci int clnFd = socket(AF_INET, SOCK_STREAM, 0); 279f6603c60Sopenharmony_ci printf("[tcp client]create socket\n"); 280f6603c60Sopenharmony_ci EXPECT_NE(-1, clnFd); 281f6603c60Sopenharmony_ci 282f6603c60Sopenharmony_ci WAIT(); 283f6603c60Sopenharmony_ci struct sockaddr_in srvAddr = {0}; 284f6603c60Sopenharmony_ci srvAddr.sin_family = AF_INET; 285f6603c60Sopenharmony_ci srvAddr.sin_addr.s_addr = inet_addr(g_localHost); 286f6603c60Sopenharmony_ci srvAddr.sin_port = htons(PEER_PORT); 287f6603c60Sopenharmony_ci int ret = connect(clnFd, (struct sockaddr*)&srvAddr, sizeof(srvAddr)); 288f6603c60Sopenharmony_ci printf("[tcp client]connect %s:%d, fd[%d]\n", inet_ntoa(srvAddr.sin_addr), ntohs(srvAddr.sin_port), clnFd); 289f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 290f6603c60Sopenharmony_ci 291f6603c60Sopenharmony_ci struct sockaddr addr = {0}; 292f6603c60Sopenharmony_ci socklen_t addrLen = sizeof(addr); 293f6603c60Sopenharmony_ci ret = getpeername(clnFd, &addr, &addrLen); 294f6603c60Sopenharmony_ci printf("[tcp client]getpeername %s:%d\n", inet_ntoa(((struct sockaddr_in*)&addr)->sin_addr), 295f6603c60Sopenharmony_ci ntohs(((struct sockaddr_in*)&addr)->sin_port)); 296f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 297f6603c60Sopenharmony_ci EXPECT_EQ(inet_addr(g_localHost), ((struct sockaddr_in*)&addr)->sin_addr.s_addr); 298f6603c60Sopenharmony_ci 299f6603c60Sopenharmony_ci ret = getsockname(clnFd, &addr, &addrLen); 300f6603c60Sopenharmony_ci printf("[tcp client]getsockname %s:%d\n", inet_ntoa(((struct sockaddr_in*)&addr)->sin_addr), 301f6603c60Sopenharmony_ci ntohs(((struct sockaddr_in*)&addr)->sin_port)); 302f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 303f6603c60Sopenharmony_ci EXPECT_EQ(inet_addr(g_localHost), ((struct sockaddr_in*)&addr)->sin_addr.s_addr); 304f6603c60Sopenharmony_ci 305f6603c60Sopenharmony_ci static char buf[BUF_SIZE + 1] = {0}; 306f6603c60Sopenharmony_ci unsigned int cliMsgLen = strlen(g_cliMsg); 307f6603c60Sopenharmony_ci memRet = memset_s(buf, BUF_SIZE, 0, BUF_SIZE); 308f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 309f6603c60Sopenharmony_ci ret = strcpy_s(buf, BUF_SIZE, g_cliMsg); 310f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 311f6603c60Sopenharmony_ci ret = send(clnFd, buf, cliMsgLen, 0); 312f6603c60Sopenharmony_ci printf("[tcp client]send, ret=%d\n", ret); 313f6603c60Sopenharmony_ci EXPECT_EQ(cliMsgLen, (unsigned int)ret); 314f6603c60Sopenharmony_ci 315f6603c60Sopenharmony_ci memRet = memset_s(buf, BUF_SIZE, 0, BUF_SIZE); 316f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 317f6603c60Sopenharmony_ci ret = recv(clnFd, buf, sizeof(buf), 0); 318f6603c60Sopenharmony_ci printf("[tcp client]recv, ret=%d, msg[%s]\n", ret, buf); 319f6603c60Sopenharmony_ci EXPECT_EQ(strlen(g_srvMsg), (unsigned int)ret); 320f6603c60Sopenharmony_ci 321f6603c60Sopenharmony_ci WAIT(); 322f6603c60Sopenharmony_ci int len = 2; 323f6603c60Sopenharmony_ci struct msghdr msg = {nullptr}; 324f6603c60Sopenharmony_ci struct iovec iov[2] = {nullptr}; 325f6603c60Sopenharmony_ci struct sockaddr_in clnAddr = {0}; 326f6603c60Sopenharmony_ci clnAddr.sin_family = AF_INET; 327f6603c60Sopenharmony_ci clnAddr.sin_addr.s_addr = inet_addr(g_localHost); 328f6603c60Sopenharmony_ci clnAddr.sin_port = htons(PEER_PORT); 329f6603c60Sopenharmony_ci memRet = memset_s(buf, BUF_SIZE, 0, BUF_SIZE); 330f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 331f6603c60Sopenharmony_ci ret = strcpy_s(buf, BUF_SIZE, g_cliMsg); 332f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 333f6603c60Sopenharmony_ci msg.msg_name = &clnAddr; 334f6603c60Sopenharmony_ci msg.msg_namelen = sizeof(clnAddr); 335f6603c60Sopenharmony_ci msg.msg_iov = iov; 336f6603c60Sopenharmony_ci msg.msg_iovlen = len; 337f6603c60Sopenharmony_ci iov[0].iov_base = buf; 338f6603c60Sopenharmony_ci iov[0].iov_len = cliMsgLen; 339f6603c60Sopenharmony_ci iov[1].iov_base = buf; 340f6603c60Sopenharmony_ci iov[1].iov_len = cliMsgLen; 341f6603c60Sopenharmony_ci ret = sendmsg(clnFd, &msg, 0); 342f6603c60Sopenharmony_ci printf("[tcp client]sendmsg, ret=%d\n", ret); 343f6603c60Sopenharmony_ci EXPECT_EQ(len * cliMsgLen, (unsigned int)ret); 344f6603c60Sopenharmony_ci 345f6603c60Sopenharmony_ci WAIT(); 346f6603c60Sopenharmony_ci static char bufrec[BUF_SIZE + 1] = {0}; 347f6603c60Sopenharmony_ci memRet = memset_s(bufrec, sizeof(bufrec), 0, BUF_SIZE); 348f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 349f6603c60Sopenharmony_ci memRet = memset_s(&msg, sizeof(msg), 0, sizeof(msg)); 350f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 351f6603c60Sopenharmony_ci msg.msg_name = &clnAddr; 352f6603c60Sopenharmony_ci msg.msg_namelen = sizeof(clnAddr); 353f6603c60Sopenharmony_ci msg.msg_iov = iov; 354f6603c60Sopenharmony_ci msg.msg_iovlen = 1; 355f6603c60Sopenharmony_ci iov[0].iov_base = bufrec; 356f6603c60Sopenharmony_ci iov[0].iov_len = sizeof(bufrec); 357f6603c60Sopenharmony_ci ret = recvmsg(clnFd, &msg, 0); 358f6603c60Sopenharmony_ci if (len * strlen(g_srvMsg) == (unsigned int)ret && ret >= 0) { 359f6603c60Sopenharmony_ci bufrec[ret] = 0; 360f6603c60Sopenharmony_ci printf("[tcp client]recvmsg, ret=%d, msg[%s]\n", ret, bufrec); 361f6603c60Sopenharmony_ci } else { 362f6603c60Sopenharmony_ci EXPECT_TRUE(false); 363f6603c60Sopenharmony_ci printf("[tcp clien]recvmsg, ret=%d\n", ret); 364f6603c60Sopenharmony_ci } 365f6603c60Sopenharmony_ci 366f6603c60Sopenharmony_ci ret = shutdown(clnFd, SHUT_RDWR); 367f6603c60Sopenharmony_ci printf("[tcp client]shutdown\n"); 368f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 369f6603c60Sopenharmony_ci ret = close(clnFd); 370f6603c60Sopenharmony_ci EXPECT_NE(-1, ret); 371f6603c60Sopenharmony_ci return nullptr; 372f6603c60Sopenharmony_ci} 373f6603c60Sopenharmony_ci 374f6603c60Sopenharmony_cistatic void *TcpServerLoopTask(void *p) 375f6603c60Sopenharmony_ci{ 376f6603c60Sopenharmony_ci int srvFd = CommInitTcpServer(STACK_PORT); 377f6603c60Sopenharmony_ci EXPECT_NE(-1, srvFd); 378f6603c60Sopenharmony_ci if (srvFd == -1) 379f6603c60Sopenharmony_ci { 380f6603c60Sopenharmony_ci LOG("CommInitTcpServer errno = %d\n", errno); 381f6603c60Sopenharmony_ci ADD_FAILURE(); 382f6603c60Sopenharmony_ci } 383f6603c60Sopenharmony_ci int i = 0; 384f6603c60Sopenharmony_ci int clientFds[36]; 385f6603c60Sopenharmony_ci struct sockaddr_in clnAddr = {0}; 386f6603c60Sopenharmony_ci socklen_t clnAddrLen = sizeof(clnAddr); 387f6603c60Sopenharmony_ci while (i < 30) 388f6603c60Sopenharmony_ci { 389f6603c60Sopenharmony_ci clientFds[i] = accept(srvFd, (struct sockaddr *)&clnAddr, &clnAddrLen); 390f6603c60Sopenharmony_ci printf("[***---][tcp server loop]accept <%s:%d>, fd[%d]i[%d]\n", inet_ntoa(clnAddr.sin_addr), 391f6603c60Sopenharmony_ci ntohs(clnAddr.sin_port), clientFds[i], i); 392f6603c60Sopenharmony_ci EXPECT_NE(-1, clientFds[i]); 393f6603c60Sopenharmony_ci i++; 394f6603c60Sopenharmony_ci } 395f6603c60Sopenharmony_ci 396f6603c60Sopenharmony_ci i--; 397f6603c60Sopenharmony_ci int ret; 398f6603c60Sopenharmony_ci while (i >= 0) { 399f6603c60Sopenharmony_ci ret = shutdown(clientFds[i], SHUT_RDWR); 400f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 401f6603c60Sopenharmony_ci ret = close(clientFds[i]); 402f6603c60Sopenharmony_ci EXPECT_NE(-1, ret) << "[***---][tcp server loop] close fd index[" << i << "]"; 403f6603c60Sopenharmony_ci i--; 404f6603c60Sopenharmony_ci } 405f6603c60Sopenharmony_ci ret = close(srvFd); 406f6603c60Sopenharmony_ci EXPECT_NE(-1, ret); 407f6603c60Sopenharmony_ci return nullptr; 408f6603c60Sopenharmony_ci} 409f6603c60Sopenharmony_ci 410f6603c60Sopenharmony_cistatic void* TcpClientOnlyConnectTask(void *p) 411f6603c60Sopenharmony_ci{ 412f6603c60Sopenharmony_ci int tId = *((int *)p); 413f6603c60Sopenharmony_ci struct sockaddr addr = {0}; 414f6603c60Sopenharmony_ci socklen_t addrLen = sizeof(addr); 415f6603c60Sopenharmony_ci struct sockaddr_in srvAddr = {0}; 416f6603c60Sopenharmony_ci srvAddr.sin_family = AF_INET; 417f6603c60Sopenharmony_ci srvAddr.sin_addr.s_addr = inet_addr(g_localHost); 418f6603c60Sopenharmony_ci srvAddr.sin_port = htons(PEER_PORT); 419f6603c60Sopenharmony_ci 420f6603c60Sopenharmony_ci int ret; 421f6603c60Sopenharmony_ci int index; 422f6603c60Sopenharmony_ci int clientFds[10]; 423f6603c60Sopenharmony_ci for (index = 0; index < 10; index++) { 424f6603c60Sopenharmony_ci clientFds[index] = socket(AF_INET, SOCK_STREAM, 0); 425f6603c60Sopenharmony_ci printf("[------][tcp client[%d]]create socket fd[%d],index[%d]\n", tId, clientFds[index], index); 426f6603c60Sopenharmony_ci EXPECT_NE(-1, clientFds[index]); 427f6603c60Sopenharmony_ci ret = connect(clientFds[index], (struct sockaddr*)&srvAddr, sizeof(srvAddr)); 428f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 429f6603c60Sopenharmony_ci if (ret != 0) { 430f6603c60Sopenharmony_ci break; 431f6603c60Sopenharmony_ci } 432f6603c60Sopenharmony_ci 433f6603c60Sopenharmony_ci ret = getsockname(clientFds[index], &addr, &addrLen); 434f6603c60Sopenharmony_ci printf("[------][tcp client[%d]]getsockname %s:%d\n", tId, inet_ntoa(((struct sockaddr_in*)&addr)->sin_addr), 435f6603c60Sopenharmony_ci ntohs(((struct sockaddr_in*)&addr)->sin_port)); 436f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 437f6603c60Sopenharmony_ci EXPECT_EQ(inet_addr(g_localHost), ((struct sockaddr_in*)&addr)->sin_addr.s_addr); 438f6603c60Sopenharmony_ci ret = getpeername(clientFds[index], &addr, &addrLen); 439f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 440f6603c60Sopenharmony_ci EXPECT_EQ(inet_addr(g_localHost), ((struct sockaddr_in*)&addr)->sin_addr.s_addr); 441f6603c60Sopenharmony_ci sleep(1); 442f6603c60Sopenharmony_ci } 443f6603c60Sopenharmony_ci 444f6603c60Sopenharmony_ci index--; 445f6603c60Sopenharmony_ci for (int i = index; i >= 0; i--) { 446f6603c60Sopenharmony_ci ret = shutdown(clientFds[i], SHUT_RDWR); 447f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 448f6603c60Sopenharmony_ci ret = close(clientFds[i]); 449f6603c60Sopenharmony_ci EXPECT_NE(-1, ret) << "[------][tcp client] close fd index[" << i << "]"; 450f6603c60Sopenharmony_ci } 451f6603c60Sopenharmony_ci return nullptr; 452f6603c60Sopenharmony_ci} 453f6603c60Sopenharmony_ci 454f6603c60Sopenharmony_cistatic int TcpServerForFork() 455f6603c60Sopenharmony_ci{ 456f6603c60Sopenharmony_ci int memRet = -1; 457f6603c60Sopenharmony_ci int timeout = 10; 458f6603c60Sopenharmony_ci char dataBuf[50] = {0}; 459f6603c60Sopenharmony_ci int srvFd = CommInitTcpServer(STACK_PORT + 1); 460f6603c60Sopenharmony_ci if (srvFd == -1) { 461f6603c60Sopenharmony_ci return -1; 462f6603c60Sopenharmony_ci } 463f6603c60Sopenharmony_ci printf("[---][server process]wait client...\n"); 464f6603c60Sopenharmony_ci int ret = -1; 465f6603c60Sopenharmony_ci struct sockaddr_in clnAddr = {0}; 466f6603c60Sopenharmony_ci socklen_t clnAddrLen = sizeof(clnAddr); 467f6603c60Sopenharmony_ci int cliFd = accept(srvFd, (struct sockaddr*)&clnAddr, &clnAddrLen); 468f6603c60Sopenharmony_ci if (cliFd == -1) { 469f6603c60Sopenharmony_ci printf("[---][server process]accept fail!\n"); 470f6603c60Sopenharmony_ci goto FINALLY; 471f6603c60Sopenharmony_ci } 472f6603c60Sopenharmony_ci while (timeout > 0) { 473f6603c60Sopenharmony_ci memRet = memset_s(dataBuf, sizeof(dataBuf), 0, sizeof(dataBuf)); 474f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 475f6603c60Sopenharmony_ci ret = recv(cliFd, dataBuf, sizeof(dataBuf), 0); 476f6603c60Sopenharmony_ci if (ret > 0) { 477f6603c60Sopenharmony_ci printf("[---][server process]recv msg[%s]\n", dataBuf); 478f6603c60Sopenharmony_ci if (strcmp(dataBuf, "bye") == 0) { 479f6603c60Sopenharmony_ci printf("[---][server process]break\n"); 480f6603c60Sopenharmony_ci break; 481f6603c60Sopenharmony_ci } 482f6603c60Sopenharmony_ci } else { 483f6603c60Sopenharmony_ci printf("[---][server process]recv no data\n"); 484f6603c60Sopenharmony_ci } 485f6603c60Sopenharmony_ci memRet = memset_s(dataBuf, sizeof(dataBuf), 0, sizeof(dataBuf)); 486f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 487f6603c60Sopenharmony_ci sprintf_s(dataBuf, sizeof(dataBuf), "server timeout:%d", timeout); 488f6603c60Sopenharmony_ci ret = send(cliFd, dataBuf, strlen(dataBuf), 0); 489f6603c60Sopenharmony_ci if (ret > 0) { 490f6603c60Sopenharmony_ci printf("[---][server process]send success, msg[%s]\n", dataBuf); 491f6603c60Sopenharmony_ci } else { 492f6603c60Sopenharmony_ci printf("[---][server process]send fail!\n"); 493f6603c60Sopenharmony_ci } 494f6603c60Sopenharmony_ci timeout--; 495f6603c60Sopenharmony_ci } 496f6603c60Sopenharmony_ci close(cliFd); 497f6603c60Sopenharmony_ci printf("[---][server process]over\n"); 498f6603c60Sopenharmony_ci 499f6603c60Sopenharmony_ciFINALLY: 500f6603c60Sopenharmony_ci close(srvFd); 501f6603c60Sopenharmony_ci return ret; 502f6603c60Sopenharmony_ci} 503f6603c60Sopenharmony_ci 504f6603c60Sopenharmony_cistatic int SelectServerForFork(unsigned int timeoutSec) 505f6603c60Sopenharmony_ci{ 506f6603c60Sopenharmony_ci int memRet = -1; 507f6603c60Sopenharmony_ci int srvFd = CommInitTcpServer(STACK_PORT + 1); 508f6603c60Sopenharmony_ci if (srvFd == -1) { 509f6603c60Sopenharmony_ci return -1; 510f6603c60Sopenharmony_ci } 511f6603c60Sopenharmony_ci int ret; 512f6603c60Sopenharmony_ci int cliCount = 0; 513f6603c60Sopenharmony_ci int maxFd = srvFd; 514f6603c60Sopenharmony_ci fd_set readSet; 515f6603c60Sopenharmony_ci char dataBuf[50] = {0}; 516f6603c60Sopenharmony_ci int fds[TEST_FD_COUNT] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; 517f6603c60Sopenharmony_ci fds[0] = srvFd; 518f6603c60Sopenharmony_ci struct timeval timev = {.tv_sec = timeoutSec, .tv_usec = 0}; 519f6603c60Sopenharmony_ci struct sockaddr_in clnAddr = {0}; 520f6603c60Sopenharmony_ci socklen_t clnAddrLen = sizeof(clnAddr); 521f6603c60Sopenharmony_ci while (1) { 522f6603c60Sopenharmony_ci FD_ZERO(&readSet); 523f6603c60Sopenharmony_ci for (int i = 0; i < TEST_FD_COUNT; i++) { 524f6603c60Sopenharmony_ci if (fds[i] != -1) { 525f6603c60Sopenharmony_ci FD_SET(fds[i], &readSet); 526f6603c60Sopenharmony_ci if (maxFd < fds[i]) { 527f6603c60Sopenharmony_ci maxFd = fds[i]; 528f6603c60Sopenharmony_ci } 529f6603c60Sopenharmony_ci printf("[&&&][select process]fd info[%d:%d]\n", i, fds[i]); 530f6603c60Sopenharmony_ci } 531f6603c60Sopenharmony_ci } 532f6603c60Sopenharmony_ci ret = select(maxFd + 1, &readSet, nullptr, nullptr, &timev); 533f6603c60Sopenharmony_ci if (ret == 0) { 534f6603c60Sopenharmony_ci printf("[---][select process]select timeout!\n"); 535f6603c60Sopenharmony_ci ret = -2; 536f6603c60Sopenharmony_ci break; 537f6603c60Sopenharmony_ci } 538f6603c60Sopenharmony_ci if (ret == -1) { 539f6603c60Sopenharmony_ci fprintf(stderr, "[---][select process]select fail[%s]\n", strerror(errno)); 540f6603c60Sopenharmony_ci break; 541f6603c60Sopenharmony_ci } 542f6603c60Sopenharmony_ci if (FD_ISSET(srvFd, &readSet)) { 543f6603c60Sopenharmony_ci int cliFd = accept(srvFd, (struct sockaddr*)&clnAddr, &clnAddrLen); 544f6603c60Sopenharmony_ci if (cliFd == -1) { 545f6603c60Sopenharmony_ci printf("[---][select process]accept fail!\n"); 546f6603c60Sopenharmony_ci ret = -1; 547f6603c60Sopenharmony_ci break; 548f6603c60Sopenharmony_ci } else { 549f6603c60Sopenharmony_ci for (int i = 0; i < TEST_FD_COUNT; i++) { 550f6603c60Sopenharmony_ci if (fds[i] == -1) { 551f6603c60Sopenharmony_ci fds[i] = cliFd; 552f6603c60Sopenharmony_ci break; 553f6603c60Sopenharmony_ci } 554f6603c60Sopenharmony_ci } 555f6603c60Sopenharmony_ci cliCount++; 556f6603c60Sopenharmony_ci printf("[***][select process]accept success, cliCount[%d]\n", cliCount); 557f6603c60Sopenharmony_ci } 558f6603c60Sopenharmony_ci continue; 559f6603c60Sopenharmony_ci } 560f6603c60Sopenharmony_ci for (int i = 0; i < TEST_FD_COUNT; i++) { 561f6603c60Sopenharmony_ci if (fds[i] == -1) { 562f6603c60Sopenharmony_ci continue; 563f6603c60Sopenharmony_ci } 564f6603c60Sopenharmony_ci if (FD_ISSET(fds[i], &readSet)) { 565f6603c60Sopenharmony_ci memRet = memset_s(dataBuf, sizeof(dataBuf), 0, sizeof(dataBuf)); 566f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 567f6603c60Sopenharmony_ci int len = recv(fds[i], dataBuf, sizeof(dataBuf), 0); 568f6603c60Sopenharmony_ci if (len > 0) { 569f6603c60Sopenharmony_ci printf("[***][select process][%d]recv msg[%s]\n", fds[i], dataBuf); 570f6603c60Sopenharmony_ci if (strcmp(dataBuf, "bye") == 0) { 571f6603c60Sopenharmony_ci printf("[###][select process][%d]client bye,cliCount[%d]\n", fds[i], cliCount); 572f6603c60Sopenharmony_ci FD_CLR(fds[i], &readSet); 573f6603c60Sopenharmony_ci close(fds[i]); 574f6603c60Sopenharmony_ci fds[i] = -1; 575f6603c60Sopenharmony_ci cliCount--; 576f6603c60Sopenharmony_ci continue; 577f6603c60Sopenharmony_ci } 578f6603c60Sopenharmony_ci len = send(fds[i], dataBuf, strlen(dataBuf), 0); 579f6603c60Sopenharmony_ci if (len > 0) { 580f6603c60Sopenharmony_ci printf("[***][select process][%d]send success\n", fds[i]); 581f6603c60Sopenharmony_ci } else { 582f6603c60Sopenharmony_ci printf("[---][select process][%d]send fail\n", fds[i]); 583f6603c60Sopenharmony_ci } 584f6603c60Sopenharmony_ci } 585f6603c60Sopenharmony_ci } 586f6603c60Sopenharmony_ci } 587f6603c60Sopenharmony_ci if (cliCount == 0) { 588f6603c60Sopenharmony_ci ret = 0; 589f6603c60Sopenharmony_ci printf("[###][select process]cliCount=0, over!\n"); 590f6603c60Sopenharmony_ci break; 591f6603c60Sopenharmony_ci } 592f6603c60Sopenharmony_ci } 593f6603c60Sopenharmony_ci close(srvFd); 594f6603c60Sopenharmony_ci return ret; 595f6603c60Sopenharmony_ci} 596f6603c60Sopenharmony_ci 597f6603c60Sopenharmony_cistatic int PollServerForFork(int timeoutSec) 598f6603c60Sopenharmony_ci{ 599f6603c60Sopenharmony_ci int srvFd = CommInitTcpServer(STACK_PORT + 1); 600f6603c60Sopenharmony_ci if (srvFd == -1) { 601f6603c60Sopenharmony_ci return -1; 602f6603c60Sopenharmony_ci } 603f6603c60Sopenharmony_ci int ret; 604f6603c60Sopenharmony_ci int cliCount = 0; 605f6603c60Sopenharmony_ci int fdCount = 1; 606f6603c60Sopenharmony_ci char dataBuf[50] = {0}; 607f6603c60Sopenharmony_ci struct pollfd fds[TEST_FD_COUNT]; 608f6603c60Sopenharmony_ci int memRet = -1; 609f6603c60Sopenharmony_ci fds[0].events = POLLIN | POLLPRI; 610f6603c60Sopenharmony_ci fds[0].fd = srvFd; 611f6603c60Sopenharmony_ci for (int i = 1; i < TEST_FD_COUNT; i++) { 612f6603c60Sopenharmony_ci fds[i].fd = -1; 613f6603c60Sopenharmony_ci } 614f6603c60Sopenharmony_ci struct sockaddr_in clnAddr = {0}; 615f6603c60Sopenharmony_ci socklen_t clnAddrLen = sizeof(clnAddr); 616f6603c60Sopenharmony_ci while (1) { 617f6603c60Sopenharmony_ci ret = poll(fds, fdCount, timeoutSec); 618f6603c60Sopenharmony_ci if (ret == 0) { 619f6603c60Sopenharmony_ci printf("[---][poll process]poll timeout!\n"); 620f6603c60Sopenharmony_ci ret = -2; 621f6603c60Sopenharmony_ci break; 622f6603c60Sopenharmony_ci } 623f6603c60Sopenharmony_ci if (ret == -1) { 624f6603c60Sopenharmony_ci fprintf(stderr, "[---][poll process]poll fail[%s]\n", strerror(errno)); 625f6603c60Sopenharmony_ci break; 626f6603c60Sopenharmony_ci } 627f6603c60Sopenharmony_ci if (fds[0].revents & POLLIN) { 628f6603c60Sopenharmony_ci int cliFd = accept(srvFd, (struct sockaddr*)&clnAddr, &clnAddrLen); 629f6603c60Sopenharmony_ci if (cliFd == -1) { 630f6603c60Sopenharmony_ci printf("[---][poll process]accept fail!\n"); 631f6603c60Sopenharmony_ci ret = -1; 632f6603c60Sopenharmony_ci break; 633f6603c60Sopenharmony_ci } else { 634f6603c60Sopenharmony_ci for (int i = 1; i < TEST_FD_COUNT; i++) { 635f6603c60Sopenharmony_ci if (fds[i].fd == -1) { 636f6603c60Sopenharmony_ci fds[i].fd = cliFd; 637f6603c60Sopenharmony_ci fds[i].events = POLLIN | POLLPRI; 638f6603c60Sopenharmony_ci break; 639f6603c60Sopenharmony_ci } 640f6603c60Sopenharmony_ci } 641f6603c60Sopenharmony_ci cliCount++; 642f6603c60Sopenharmony_ci fdCount++; 643f6603c60Sopenharmony_ci printf("[***][poll process]accept success, cliCount[%d]\n", cliCount); 644f6603c60Sopenharmony_ci } 645f6603c60Sopenharmony_ci continue; 646f6603c60Sopenharmony_ci } 647f6603c60Sopenharmony_ci for (int i = 0; i < TEST_FD_COUNT; i++) { 648f6603c60Sopenharmony_ci if (fds[i].fd == -1) { 649f6603c60Sopenharmony_ci continue; 650f6603c60Sopenharmony_ci } 651f6603c60Sopenharmony_ci if (fds[i].revents & POLLIN) { 652f6603c60Sopenharmony_ci memRet = memset_s(dataBuf, sizeof(dataBuf), 0, sizeof(dataBuf)); 653f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 654f6603c60Sopenharmony_ci int len = recv(fds[i].fd, dataBuf, sizeof(dataBuf), 0); 655f6603c60Sopenharmony_ci if (len > 0) { 656f6603c60Sopenharmony_ci printf("[***][poll process][%d]recv msg[%s]\n", fds[i].fd, dataBuf); 657f6603c60Sopenharmony_ci if (strcmp(dataBuf, "bye") == 0) { 658f6603c60Sopenharmony_ci printf("[###][select process][%d]client bye,cliCount[%d]\n", fds[i].fd, cliCount); 659f6603c60Sopenharmony_ci cliCount--; 660f6603c60Sopenharmony_ci continue; 661f6603c60Sopenharmony_ci } 662f6603c60Sopenharmony_ci len = send(fds[i].fd, dataBuf, strlen(dataBuf), 0); 663f6603c60Sopenharmony_ci if (len > 0) { 664f6603c60Sopenharmony_ci printf("[***][poll process][%d]send success\n", fds[i].fd); 665f6603c60Sopenharmony_ci } else { 666f6603c60Sopenharmony_ci printf("[---][poll process][%d]send fail\n", fds[i].fd); 667f6603c60Sopenharmony_ci } 668f6603c60Sopenharmony_ci } 669f6603c60Sopenharmony_ci } 670f6603c60Sopenharmony_ci } 671f6603c60Sopenharmony_ci if (cliCount == 0) { 672f6603c60Sopenharmony_ci ret = 0; 673f6603c60Sopenharmony_ci printf("[###][poll process]cliCount=0, over!\n"); 674f6603c60Sopenharmony_ci break; 675f6603c60Sopenharmony_ci } 676f6603c60Sopenharmony_ci } 677f6603c60Sopenharmony_ci for (int i = 0; i < TEST_FD_COUNT; i++) { 678f6603c60Sopenharmony_ci if (fds[i].fd != -1) { 679f6603c60Sopenharmony_ci close(fds[i].fd); 680f6603c60Sopenharmony_ci } 681f6603c60Sopenharmony_ci } 682f6603c60Sopenharmony_ci close(srvFd); 683f6603c60Sopenharmony_ci return ret; 684f6603c60Sopenharmony_ci} 685f6603c60Sopenharmony_ci 686f6603c60Sopenharmony_ci/** 687f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0100 688f6603c60Sopenharmony_ci * @tc.name : sample test tcp 689f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 690f6603c60Sopenharmony_ci */ 691f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testTcpSample, Function | MediumTest | Level2) 692f6603c60Sopenharmony_ci{ 693f6603c60Sopenharmony_ci pthread_t srv; 694f6603c60Sopenharmony_ci pthread_t cli; 695f6603c60Sopenharmony_ci 696f6603c60Sopenharmony_ci int ret = pthread_barrier_init(&g_barrier, 0, 2); 697f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 698f6603c60Sopenharmony_ci 699f6603c60Sopenharmony_ci ret = pthread_create(&srv, nullptr, SampleTcpServerTask, nullptr); 700f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 701f6603c60Sopenharmony_ci ret = pthread_create(&cli, nullptr, SampleTcpClientTask, nullptr); 702f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 703f6603c60Sopenharmony_ci 704f6603c60Sopenharmony_ci ret = pthread_join(cli, nullptr); 705f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 706f6603c60Sopenharmony_ci ret = pthread_join(srv, nullptr); 707f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 708f6603c60Sopenharmony_ci 709f6603c60Sopenharmony_ci ret = pthread_barrier_destroy(&g_barrier); 710f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 711f6603c60Sopenharmony_ci} 712f6603c60Sopenharmony_ci 713f6603c60Sopenharmony_ci/** 714f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0200 715f6603c60Sopenharmony_ci * @tc.name : test tcp concurrent connect 716f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 717f6603c60Sopenharmony_ci */ 718f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testTcpConcurrentConnect, Function | MediumTest | Level2) 719f6603c60Sopenharmony_ci{ 720f6603c60Sopenharmony_ci pthread_t srv; 721f6603c60Sopenharmony_ci int ret = pthread_create(&srv, nullptr, TcpServerLoopTask, nullptr); 722f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 723f6603c60Sopenharmony_ci 724f6603c60Sopenharmony_ci sleep(2); 725f6603c60Sopenharmony_ci pthread_t cliOne; 726f6603c60Sopenharmony_ci int tIdOne = 1; 727f6603c60Sopenharmony_ci ret = pthread_create(&cliOne, nullptr, TcpClientOnlyConnectTask, &tIdOne); 728f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 729f6603c60Sopenharmony_ci pthread_t cliTwo; 730f6603c60Sopenharmony_ci int tIdTwo = 2; 731f6603c60Sopenharmony_ci ret = pthread_create(&cliTwo, nullptr, TcpClientOnlyConnectTask, &tIdTwo); 732f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 733f6603c60Sopenharmony_ci pthread_t cliThree; 734f6603c60Sopenharmony_ci int tIdThree = 3; 735f6603c60Sopenharmony_ci ret = pthread_create(&cliThree, nullptr, TcpClientOnlyConnectTask, &tIdThree); 736f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 737f6603c60Sopenharmony_ci 738f6603c60Sopenharmony_ci ret = pthread_join(srv, nullptr); 739f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 740f6603c60Sopenharmony_ci ret = pthread_join(cliOne, nullptr); 741f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 742f6603c60Sopenharmony_ci printf("[******]testTcpConnect thread[1] finish!\n"); 743f6603c60Sopenharmony_ci ret = pthread_join(cliTwo, nullptr); 744f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 745f6603c60Sopenharmony_ci printf("[******]testTcpConnect thread[2] finish!\n"); 746f6603c60Sopenharmony_ci ret = pthread_join(cliThree, nullptr); 747f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 748f6603c60Sopenharmony_ci printf("[******]testTcpConnect thread[3] finish!\n"); 749f6603c60Sopenharmony_ci} 750f6603c60Sopenharmony_ci 751f6603c60Sopenharmony_ci/** 752f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0300 753f6603c60Sopenharmony_ci * @tc.name : sample test upd 754f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 755f6603c60Sopenharmony_ci */ 756f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testUdpSample, Function | MediumTest | Level2) 757f6603c60Sopenharmony_ci{ 758f6603c60Sopenharmony_ci int len = 2; 759f6603c60Sopenharmony_ci char buf[BUF_SIZE + 1]; 760f6603c60Sopenharmony_ci int memRet = -1; 761f6603c60Sopenharmony_ci struct msghdr msg = {nullptr}; 762f6603c60Sopenharmony_ci struct iovec iov[2] = {nullptr}; 763f6603c60Sopenharmony_ci struct sockaddr_in srvAddr = {0}; 764f6603c60Sopenharmony_ci struct sockaddr_in clnAddr = {0}; 765f6603c60Sopenharmony_ci socklen_t clnAddrLen = sizeof(clnAddr); 766f6603c60Sopenharmony_ci 767f6603c60Sopenharmony_ci int sfd = socket(AF_INET, SOCK_DGRAM, 0); 768f6603c60Sopenharmony_ci ASSERT_NE(-1, sfd); 769f6603c60Sopenharmony_ci srvAddr.sin_family = AF_INET; 770f6603c60Sopenharmony_ci srvAddr.sin_addr.s_addr = inet_addr(g_localHost); 771f6603c60Sopenharmony_ci srvAddr.sin_port = htons(STACK_PORT); 772f6603c60Sopenharmony_ci int ret = ::bind(sfd, (struct sockaddr*)&srvAddr, sizeof(srvAddr)); 773f6603c60Sopenharmony_ci ASSERT_EQ(0, ret); 774f6603c60Sopenharmony_ci 775f6603c60Sopenharmony_ci clnAddr.sin_family = AF_INET; 776f6603c60Sopenharmony_ci clnAddr.sin_addr.s_addr = inet_addr(g_localHost); 777f6603c60Sopenharmony_ci clnAddr.sin_port = htons(PEER_PORT); 778f6603c60Sopenharmony_ci memRet = memset_s(buf, BUF_SIZE, 0, BUF_SIZE); 779f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 780f6603c60Sopenharmony_ci ret = strcpy_s(buf, BUF_SIZE, g_udpMsg); 781f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 782f6603c60Sopenharmony_ci ret = sendto(sfd, buf, strlen(g_udpMsg), 0, (struct sockaddr*)&clnAddr, (socklen_t)sizeof(clnAddr)); 783f6603c60Sopenharmony_ci EXPECT_NE(-1, ret); 784f6603c60Sopenharmony_ci 785f6603c60Sopenharmony_ci memRet = memset_s(buf, BUF_SIZE, 0, BUF_SIZE); 786f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 787f6603c60Sopenharmony_ci ret = recvfrom(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&clnAddr, &clnAddrLen); 788f6603c60Sopenharmony_ci EXPECT_EQ(strlen(g_udpMsg), (unsigned int)ret); 789f6603c60Sopenharmony_ci 790f6603c60Sopenharmony_ci clnAddr.sin_family = AF_INET; 791f6603c60Sopenharmony_ci clnAddr.sin_addr.s_addr = inet_addr(g_localHost); 792f6603c60Sopenharmony_ci clnAddr.sin_port = htons(PEER_PORT); 793f6603c60Sopenharmony_ci memRet = memset_s(buf, BUF_SIZE, 0, BUF_SIZE); 794f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 795f6603c60Sopenharmony_ci ret = strcpy_s(buf, BUF_SIZE, g_udpMsg); 796f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 797f6603c60Sopenharmony_ci msg.msg_name = &clnAddr; 798f6603c60Sopenharmony_ci msg.msg_namelen = sizeof(clnAddr); 799f6603c60Sopenharmony_ci msg.msg_iov = iov; 800f6603c60Sopenharmony_ci msg.msg_iovlen = len; 801f6603c60Sopenharmony_ci iov[0].iov_base = buf; 802f6603c60Sopenharmony_ci iov[0].iov_len = strlen(g_udpMsg); 803f6603c60Sopenharmony_ci iov[1].iov_base = buf; 804f6603c60Sopenharmony_ci iov[1].iov_len = strlen(g_udpMsg); 805f6603c60Sopenharmony_ci ret = sendmsg(sfd, &msg, 0); 806f6603c60Sopenharmony_ci EXPECT_EQ(len*strlen(g_udpMsg), (unsigned int)ret); 807f6603c60Sopenharmony_ci 808f6603c60Sopenharmony_ci ret = close(sfd); 809f6603c60Sopenharmony_ci EXPECT_NE(-1, ret); 810f6603c60Sopenharmony_ci} 811f6603c60Sopenharmony_ci 812f6603c60Sopenharmony_ci/** 813f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0400 814f6603c60Sopenharmony_ci * @tc.name : test inter-process network communication 815f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 816f6603c60Sopenharmony_ci */ 817f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInterProcessComm, Function | MediumTest | Level2) 818f6603c60Sopenharmony_ci{ 819f6603c60Sopenharmony_ci pid_t pid = fork(); 820f6603c60Sopenharmony_ci ASSERT_TRUE(pid >= 0) << "======== Fork Error! ========="; 821f6603c60Sopenharmony_ci if (pid == 0) { 822f6603c60Sopenharmony_ci // child:tcp server 823f6603c60Sopenharmony_ci int exitCode = 0; 824f6603c60Sopenharmony_ci int ret = TcpServerForFork(); 825f6603c60Sopenharmony_ci if (ret == -1) { 826f6603c60Sopenharmony_ci printf("[tcp server]run fail\n"); 827f6603c60Sopenharmony_ci exitCode = 1; 828f6603c60Sopenharmony_ci } 829f6603c60Sopenharmony_ci exit(exitCode); 830f6603c60Sopenharmony_ci } else { 831f6603c60Sopenharmony_ci // parent:tcp client 832f6603c60Sopenharmony_ci sleep(2); 833f6603c60Sopenharmony_ci int second = 1; 834f6603c60Sopenharmony_ci void *ret = CommTcpClientTask(&second); 835f6603c60Sopenharmony_ci if (ret == nullptr) { 836f6603c60Sopenharmony_ci printf("[test select]CommClientTask ret is null\n"); 837f6603c60Sopenharmony_ci EXPECT_TRUE(0); 838f6603c60Sopenharmony_ci } else { 839f6603c60Sopenharmony_ci printf("[test select]CommClientTask ret...\n"); 840f6603c60Sopenharmony_ci int rst = *((int *)ret); 841f6603c60Sopenharmony_ci printf("[test select]CommClientTask ret [%d]\n", rst); 842f6603c60Sopenharmony_ci EXPECT_EQ(0, rst); 843f6603c60Sopenharmony_ci free(ret); 844f6603c60Sopenharmony_ci } 845f6603c60Sopenharmony_ci WaitProcExitedOK(pid); 846f6603c60Sopenharmony_ci } 847f6603c60Sopenharmony_ci} 848f6603c60Sopenharmony_ci 849f6603c60Sopenharmony_ci/** 850f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0500 851f6603c60Sopenharmony_ci * @tc.name : test select timeout 852f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 853f6603c60Sopenharmony_ci */ 854f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testSelectTimeout, Function | MediumTest | Level2) 855f6603c60Sopenharmony_ci{ 856f6603c60Sopenharmony_ci pid_t pid = fork(); 857f6603c60Sopenharmony_ci ASSERT_TRUE(pid >= 0) << "======== Fork Error! ========="; 858f6603c60Sopenharmony_ci if (pid == 0) { 859f6603c60Sopenharmony_ci // child: server 860f6603c60Sopenharmony_ci int ret = SelectServerForFork(2); 861f6603c60Sopenharmony_ci if (ret == -2) { 862f6603c60Sopenharmony_ci exit(0); 863f6603c60Sopenharmony_ci } else { 864f6603c60Sopenharmony_ci printf("[select server]fail, ret is[%d]\n", ret); 865f6603c60Sopenharmony_ci exit(1); 866f6603c60Sopenharmony_ci } 867f6603c60Sopenharmony_ci } else { 868f6603c60Sopenharmony_ci WaitProcExitedOK(pid); 869f6603c60Sopenharmony_ci } 870f6603c60Sopenharmony_ci} 871f6603c60Sopenharmony_ci 872f6603c60Sopenharmony_ci/** 873f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0510 874f6603c60Sopenharmony_ci * @tc.name : test select with one client 875f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 876f6603c60Sopenharmony_ci */ 877f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testSelectOneClient, Function | MediumTest | Level2) 878f6603c60Sopenharmony_ci{ 879f6603c60Sopenharmony_ci pid_t pid = fork(); 880f6603c60Sopenharmony_ci ASSERT_TRUE(pid >= 0) << "======== Fork Error! ========="; 881f6603c60Sopenharmony_ci if (pid == 0) { 882f6603c60Sopenharmony_ci // child: server 883f6603c60Sopenharmony_ci int exitCode = 0; 884f6603c60Sopenharmony_ci int ret = SelectServerForFork(5); 885f6603c60Sopenharmony_ci if (ret != 0) { 886f6603c60Sopenharmony_ci printf("[###][select server]run fail\n"); 887f6603c60Sopenharmony_ci exitCode = 1; 888f6603c60Sopenharmony_ci } 889f6603c60Sopenharmony_ci printf("[###][select server]ret[%d]\n", ret); 890f6603c60Sopenharmony_ci exit(exitCode); 891f6603c60Sopenharmony_ci } else { 892f6603c60Sopenharmony_ci // parent: client 893f6603c60Sopenharmony_ci sleep(2); 894f6603c60Sopenharmony_ci int second = 1; 895f6603c60Sopenharmony_ci void* ret = CommTcpClientTask(&second); 896f6603c60Sopenharmony_ci if (ret == nullptr) { 897f6603c60Sopenharmony_ci printf("[###][test select]CommClientTask ret is null\n"); 898f6603c60Sopenharmony_ci EXPECT_TRUE(0); 899f6603c60Sopenharmony_ci } else { 900f6603c60Sopenharmony_ci int rst = *((int *)ret); 901f6603c60Sopenharmony_ci printf("[###][test select]CommClientTask ret [%d]\n", rst); 902f6603c60Sopenharmony_ci EXPECT_EQ(0, rst); 903f6603c60Sopenharmony_ci free(ret); 904f6603c60Sopenharmony_ci } 905f6603c60Sopenharmony_ci WaitProcExitedOK(pid); 906f6603c60Sopenharmony_ci } 907f6603c60Sopenharmony_ci} 908f6603c60Sopenharmony_ci 909f6603c60Sopenharmony_ci/** 910f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0520 911f6603c60Sopenharmony_ci * @tc.name : test select with multi clients 912f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 913f6603c60Sopenharmony_ci */ 914f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testSelectMultiClients, Function | MediumTest | Level2) 915f6603c60Sopenharmony_ci{ 916f6603c60Sopenharmony_ci pid_t pid = fork(); 917f6603c60Sopenharmony_ci ASSERT_TRUE(pid >= 0) << "======== Fork Error! ========="; 918f6603c60Sopenharmony_ci if (pid == 0) { 919f6603c60Sopenharmony_ci // child: server 920f6603c60Sopenharmony_ci int exitCode = 0; 921f6603c60Sopenharmony_ci int ret = SelectServerForFork(5); 922f6603c60Sopenharmony_ci if (ret != 0) { 923f6603c60Sopenharmony_ci printf("[###][select server]run fail\n"); 924f6603c60Sopenharmony_ci exitCode = 1; 925f6603c60Sopenharmony_ci } 926f6603c60Sopenharmony_ci printf("[###][select server]ret[%d]\n", ret); 927f6603c60Sopenharmony_ci exit(exitCode); 928f6603c60Sopenharmony_ci } else { 929f6603c60Sopenharmony_ci // parent: client 930f6603c60Sopenharmony_ci sleep(2); 931f6603c60Sopenharmony_ci int ret; 932f6603c60Sopenharmony_ci pthread_t pCli[4]; 933f6603c60Sopenharmony_ci int pEroId[4] = {0}; 934f6603c60Sopenharmony_ci int interval[4] = {2, 1, 3, 1}; 935f6603c60Sopenharmony_ci for (int i = 0; i < 4; i++) { 936f6603c60Sopenharmony_ci ret = pthread_create(&pCli[i], nullptr, CommTcpClientTask, &interval[i]); 937f6603c60Sopenharmony_ci if (ret == -1) { 938f6603c60Sopenharmony_ci pEroId[i] = -1; 939f6603c60Sopenharmony_ci } else { 940f6603c60Sopenharmony_ci EXPECT_EQ(0, ret) << "Errinfo:pthread_create index is [" << i << "]"; 941f6603c60Sopenharmony_ci } 942f6603c60Sopenharmony_ci } 943f6603c60Sopenharmony_ci 944f6603c60Sopenharmony_ci void* rst = nullptr; 945f6603c60Sopenharmony_ci for (int i = 0; i < 4; i++) 946f6603c60Sopenharmony_ci { 947f6603c60Sopenharmony_ci if (pEroId[i] == 0) 948f6603c60Sopenharmony_ci { 949f6603c60Sopenharmony_ci ret = pthread_join(pCli[i], &rst); 950f6603c60Sopenharmony_ci EXPECT_EQ(0, ret) << "Errinfo:pthread_join index is [" << i << "]"; 951f6603c60Sopenharmony_ci if (rst != nullptr) 952f6603c60Sopenharmony_ci { 953f6603c60Sopenharmony_ci printf("[###][test select]client thread[%d] return[%d]\n", i, *((int *)rst)); 954f6603c60Sopenharmony_ci EXPECT_EQ(0, *((int *)rst)); 955f6603c60Sopenharmony_ci free(rst); 956f6603c60Sopenharmony_ci } 957f6603c60Sopenharmony_ci } 958f6603c60Sopenharmony_ci } 959f6603c60Sopenharmony_ci WaitProcExitedOK(pid); 960f6603c60Sopenharmony_ci } 961f6603c60Sopenharmony_ci} 962f6603c60Sopenharmony_ci 963f6603c60Sopenharmony_ci/** 964f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0600 965f6603c60Sopenharmony_ci * @tc.name : test poll timeout 966f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 967f6603c60Sopenharmony_ci */ 968f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testPollTimeout, Function | MediumTest | Level2) 969f6603c60Sopenharmony_ci{ 970f6603c60Sopenharmony_ci pid_t pid = fork(); 971f6603c60Sopenharmony_ci ASSERT_TRUE(pid >= 0) << "======== Fork Error! ========="; 972f6603c60Sopenharmony_ci if (pid == 0) { 973f6603c60Sopenharmony_ci // child: server 974f6603c60Sopenharmony_ci int ret = PollServerForFork(2000); 975f6603c60Sopenharmony_ci if (ret == -2) { 976f6603c60Sopenharmony_ci exit(0); 977f6603c60Sopenharmony_ci } else { 978f6603c60Sopenharmony_ci printf("[###][poll server]fail, ret is[%d]\n", ret); 979f6603c60Sopenharmony_ci exit(1); 980f6603c60Sopenharmony_ci } 981f6603c60Sopenharmony_ci } else { 982f6603c60Sopenharmony_ci WaitProcExitedOK(pid); 983f6603c60Sopenharmony_ci } 984f6603c60Sopenharmony_ci} 985f6603c60Sopenharmony_ci 986f6603c60Sopenharmony_ci/** 987f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0610 988f6603c60Sopenharmony_ci * @tc.name : test poll with one client 989f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 990f6603c60Sopenharmony_ci */ 991f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testPollOneClient, Function | MediumTest | Level2) 992f6603c60Sopenharmony_ci{ 993f6603c60Sopenharmony_ci pid_t pid = fork(); 994f6603c60Sopenharmony_ci ASSERT_TRUE(pid >= 0) << "======== Fork Error! ========="; 995f6603c60Sopenharmony_ci if (pid == 0) { 996f6603c60Sopenharmony_ci // child: server 997f6603c60Sopenharmony_ci int exitCode = 0; 998f6603c60Sopenharmony_ci int ret = PollServerForFork(5000); 999f6603c60Sopenharmony_ci if (ret != 0) { 1000f6603c60Sopenharmony_ci printf("[###][poll server]run fail\n"); 1001f6603c60Sopenharmony_ci exitCode = 1; 1002f6603c60Sopenharmony_ci } 1003f6603c60Sopenharmony_ci printf("[###][poll server]ret[%d]\n", ret); 1004f6603c60Sopenharmony_ci exit(exitCode); 1005f6603c60Sopenharmony_ci } else { 1006f6603c60Sopenharmony_ci // parent: client 1007f6603c60Sopenharmony_ci sleep(2); 1008f6603c60Sopenharmony_ci int second = 1; 1009f6603c60Sopenharmony_ci void* ret = CommTcpClientTask(&second); 1010f6603c60Sopenharmony_ci if (ret == nullptr) { 1011f6603c60Sopenharmony_ci printf("[###][test poll]CommClientTask ret is null\n"); 1012f6603c60Sopenharmony_ci EXPECT_TRUE(0); 1013f6603c60Sopenharmony_ci } else { 1014f6603c60Sopenharmony_ci int rst = *((int *)ret); 1015f6603c60Sopenharmony_ci printf("[###][test poll]CommClientTask ret [%d]\n", rst); 1016f6603c60Sopenharmony_ci EXPECT_EQ(0, rst); 1017f6603c60Sopenharmony_ci free(ret); 1018f6603c60Sopenharmony_ci } 1019f6603c60Sopenharmony_ci WaitProcExitedOK(pid); 1020f6603c60Sopenharmony_ci } 1021f6603c60Sopenharmony_ci} 1022f6603c60Sopenharmony_ci 1023f6603c60Sopenharmony_ci/** 1024f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0620 1025f6603c60Sopenharmony_ci * @tc.name : test poll with multi clients 1026f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1027f6603c60Sopenharmony_ci */ 1028f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testPollMultiClients, Function | MediumTest | Level2) 1029f6603c60Sopenharmony_ci{ 1030f6603c60Sopenharmony_ci pid_t pid = fork(); 1031f6603c60Sopenharmony_ci ASSERT_TRUE(pid >= 0) << "======== Fork Error! ========="; 1032f6603c60Sopenharmony_ci if (pid == 0) { 1033f6603c60Sopenharmony_ci // child: server 1034f6603c60Sopenharmony_ci int exitCode = 0; 1035f6603c60Sopenharmony_ci int ret = PollServerForFork(5000); 1036f6603c60Sopenharmony_ci if (ret != 0) { 1037f6603c60Sopenharmony_ci printf("[###][poll server]run fail\n"); 1038f6603c60Sopenharmony_ci exitCode = 1; 1039f6603c60Sopenharmony_ci } 1040f6603c60Sopenharmony_ci printf("[###][poll server]ret[%d]\n", ret); 1041f6603c60Sopenharmony_ci exit(exitCode); 1042f6603c60Sopenharmony_ci } else { 1043f6603c60Sopenharmony_ci // parent: client 1044f6603c60Sopenharmony_ci sleep(2); 1045f6603c60Sopenharmony_ci int ret; 1046f6603c60Sopenharmony_ci pthread_t pCli[6]; 1047f6603c60Sopenharmony_ci int pEroId[6] = {0}; 1048f6603c60Sopenharmony_ci int interval[6] = {2, 1, 3, 1, 2, 1}; 1049f6603c60Sopenharmony_ci for (int i = 0; i < 6; i++) 1050f6603c60Sopenharmony_ci { 1051f6603c60Sopenharmony_ci ret = pthread_create(&pCli[i], nullptr, CommTcpClientTask, &interval[i]); 1052f6603c60Sopenharmony_ci if (ret == -1) 1053f6603c60Sopenharmony_ci { 1054f6603c60Sopenharmony_ci pEroId[i] = -1; 1055f6603c60Sopenharmony_ci } 1056f6603c60Sopenharmony_ci else 1057f6603c60Sopenharmony_ci { 1058f6603c60Sopenharmony_ci EXPECT_EQ(0, ret) << "Errinfo:pthread_create index is [" << i << "]"; 1059f6603c60Sopenharmony_ci } 1060f6603c60Sopenharmony_ci } 1061f6603c60Sopenharmony_ci 1062f6603c60Sopenharmony_ci void* rst = nullptr; 1063f6603c60Sopenharmony_ci for (int i = 0; i < 6; i++) 1064f6603c60Sopenharmony_ci { 1065f6603c60Sopenharmony_ci if (pEroId[i] == 0) 1066f6603c60Sopenharmony_ci { 1067f6603c60Sopenharmony_ci ret = pthread_join(pCli[i], &rst); 1068f6603c60Sopenharmony_ci EXPECT_EQ(0, ret) << "Errinfo:pthread_join index is [" << i << "]"; 1069f6603c60Sopenharmony_ci if (rst != nullptr) 1070f6603c60Sopenharmony_ci { 1071f6603c60Sopenharmony_ci printf("[###][test poll]client thread[%d] return[%d]\n", i, *((int *)rst)); 1072f6603c60Sopenharmony_ci EXPECT_EQ(0, *((int *)rst)); 1073f6603c60Sopenharmony_ci free(rst); 1074f6603c60Sopenharmony_ci } 1075f6603c60Sopenharmony_ci } 1076f6603c60Sopenharmony_ci } 1077f6603c60Sopenharmony_ci WaitProcExitedOK(pid); 1078f6603c60Sopenharmony_ci } 1079f6603c60Sopenharmony_ci} 1080f6603c60Sopenharmony_ci 1081f6603c60Sopenharmony_ci/** 1082f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0700 1083f6603c60Sopenharmony_ci * @tc.name : test ioctl SIOCGIFCONF 1084f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1085f6603c60Sopenharmony_ci */ 1086f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testIoctlIfconf, Function | MediumTest | Level2) 1087f6603c60Sopenharmony_ci{ 1088f6603c60Sopenharmony_ci int memRet = -1; 1089f6603c60Sopenharmony_ci int udpFd = socket(AF_INET, SOCK_DGRAM, 0); 1090f6603c60Sopenharmony_ci ASSERT_NE(-1, udpFd); 1091f6603c60Sopenharmony_ci 1092f6603c60Sopenharmony_ci struct ifreq ifr[5]; 1093f6603c60Sopenharmony_ci struct ifconf ifc = {0}; 1094f6603c60Sopenharmony_ci memRet = memset_s(&ifc, sizeof(struct ifconf), 0, sizeof(struct ifconf)); 1095f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 1096f6603c60Sopenharmony_ci ifc.ifc_len = 5 * sizeof(struct ifreq); 1097f6603c60Sopenharmony_ci ifc.ifc_buf = (char *)ifr; 1098f6603c60Sopenharmony_ci int ret = ioctl(udpFd, SIOCGIFCONF, (char *)&ifc); 1099f6603c60Sopenharmony_ci ASSERT_EQ(0, ret) << "ioctl fail[SIOCGIFCONF], errinfo[" << strerror(errno) << "]"; 1100f6603c60Sopenharmony_ci int ifrCount = ifc.ifc_len / sizeof(struct ifreq); 1101f6603c60Sopenharmony_ci EXPECT_TRUE(ifrCount >= 2); 1102f6603c60Sopenharmony_ci for (int i = 0; i < ifrCount; i++) { 1103f6603c60Sopenharmony_ci printf("[###]interface name is %s\n", ifr[i].ifr_name); 1104f6603c60Sopenharmony_ci } 1105f6603c60Sopenharmony_ci ret = close(udpFd); 1106f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1107f6603c60Sopenharmony_ci} 1108f6603c60Sopenharmony_ci 1109f6603c60Sopenharmony_ci/** 1110f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0710 1111f6603c60Sopenharmony_ci * @tc.name : test ioctl get set delete IFADDR,FIONREAD, localhost 1112f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1113f6603c60Sopenharmony_ci */ 1114f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testIoctlIfnetAddrLocal, Function | MediumTest | Level2) 1115f6603c60Sopenharmony_ci{ 1116f6603c60Sopenharmony_ci int udpFd = socket(AF_INET, SOCK_DGRAM, 0); 1117f6603c60Sopenharmony_ci ASSERT_NE(-1, udpFd); 1118f6603c60Sopenharmony_ci 1119f6603c60Sopenharmony_ci // get ifnet address 1120f6603c60Sopenharmony_ci struct ifreq ifr = {0}; 1121f6603c60Sopenharmony_ci const char *deviceLo = "lo"; 1122f6603c60Sopenharmony_ci int ret = strcpy_s(ifr.ifr_name, sizeof(ifr.ifr_name), deviceLo); 1123f6603c60Sopenharmony_ci EXPECT_EQ(0, ret) << "strcpy_s fail!"; 1124f6603c60Sopenharmony_ci ret = ioctl(udpFd, SIOCGIFADDR, &ifr); 1125f6603c60Sopenharmony_ci ASSERT_EQ(0, ret) << "ioctl fail[SIOCGIFADDR], errinfo[" << strerror(errno) << "]"; 1126f6603c60Sopenharmony_ci struct sockaddr_in *srvAddr = (struct sockaddr_in *)&ifr.ifr_addr; 1127f6603c60Sopenharmony_ci EXPECT_STREQ(g_localHost, inet_ntoa(srvAddr->sin_addr)); 1128f6603c60Sopenharmony_ci srvAddr->sin_family = AF_INET; 1129f6603c60Sopenharmony_ci srvAddr->sin_port = htons(STACK_PORT); 1130f6603c60Sopenharmony_ci 1131f6603c60Sopenharmony_ci // get read buffer bytes 1132f6603c60Sopenharmony_ci ret = ::bind(udpFd, (struct sockaddr*)srvAddr, sizeof(sockaddr_in)); 1133f6603c60Sopenharmony_ci struct sockaddr_in clnAddr = {0}; 1134f6603c60Sopenharmony_ci clnAddr.sin_family = AF_INET; 1135f6603c60Sopenharmony_ci clnAddr.sin_port = htons(PEER_PORT); 1136f6603c60Sopenharmony_ci clnAddr.sin_addr.s_addr = inet_addr(g_localHost); 1137f6603c60Sopenharmony_ci const char *msg = "Hi, test ioctl..."; 1138f6603c60Sopenharmony_ci unsigned int msgLen = strlen(msg); 1139f6603c60Sopenharmony_ci ret = sendto(udpFd, msg, msgLen, 0, (struct sockaddr*)&clnAddr, (socklen_t)sizeof(clnAddr)); 1140f6603c60Sopenharmony_ci EXPECT_NE(-1, ret); 1141f6603c60Sopenharmony_ci EXPECT_EQ(msgLen, (unsigned int)ret); 1142f6603c60Sopenharmony_ci int bytes; 1143f6603c60Sopenharmony_ci ret = ioctl(udpFd, FIONREAD, &bytes); 1144f6603c60Sopenharmony_ci EXPECT_EQ(0, ret) << "ioctl fail[FIONREAD], errinfo[" << strerror(errno) << "]"; 1145f6603c60Sopenharmony_ci EXPECT_EQ(msgLen, (unsigned int)bytes); 1146f6603c60Sopenharmony_ci 1147f6603c60Sopenharmony_ci // delete lo address, will fail 1148f6603c60Sopenharmony_ci ret = ioctl(udpFd, SIOCDIFADDR, &ifr); 1149f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1150f6603c60Sopenharmony_ci EXPECT_STREQ("Operation not permitted", strerror(errno)); 1151f6603c60Sopenharmony_ci // set lo address, will fail 1152f6603c60Sopenharmony_ci srvAddr->sin_addr.s_addr = inet_addr(g_localHost); 1153f6603c60Sopenharmony_ci ret = ioctl(udpFd, SIOCSIFADDR, &ifr); 1154f6603c60Sopenharmony_ci EXPECT_STREQ("Operation not permitted", strerror(errno)); 1155f6603c60Sopenharmony_ci 1156f6603c60Sopenharmony_ci ret = close(udpFd); 1157f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1158f6603c60Sopenharmony_ci} 1159f6603c60Sopenharmony_ci 1160f6603c60Sopenharmony_ci/** 1161f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0720 1162f6603c60Sopenharmony_ci * @tc.name : test ioctl get and set IFADDR others 1163f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1164f6603c60Sopenharmony_ci */ 1165f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testIoctlIfnetAddrOthers, Function | MediumTest | Level2) 1166f6603c60Sopenharmony_ci{ 1167f6603c60Sopenharmony_ci int udpFd = socket(AF_INET, SOCK_DGRAM, 0); 1168f6603c60Sopenharmony_ci ASSERT_NE(-1, udpFd); 1169f6603c60Sopenharmony_ci int memRet = -1; 1170f6603c60Sopenharmony_ci 1171f6603c60Sopenharmony_ci struct ifreq ifr[5]; 1172f6603c60Sopenharmony_ci struct ifconf ifc = {0}; 1173f6603c60Sopenharmony_ci memRet = memset_s(&ifc, sizeof(struct ifconf), 0, sizeof(struct ifconf)); 1174f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 1175f6603c60Sopenharmony_ci ifc.ifc_len = 5 * sizeof(struct ifreq); 1176f6603c60Sopenharmony_ci ifc.ifc_buf = (char *)ifr; 1177f6603c60Sopenharmony_ci int ret = ioctl(udpFd, SIOCGIFCONF, (char *)&ifc); 1178f6603c60Sopenharmony_ci ASSERT_EQ(0, ret) << "ioctl fail[SIOCGIFCONF], errinfo[" << strerror(errno) << "]"; 1179f6603c60Sopenharmony_ci 1180f6603c60Sopenharmony_ci struct ifreq ifrTmp = {0}; 1181f6603c60Sopenharmony_ci struct sockaddr_in *addr1 = nullptr; 1182f6603c60Sopenharmony_ci struct sockaddr_in *addr2 = nullptr; 1183f6603c60Sopenharmony_ci int ifrCount = ifc.ifc_len / sizeof(struct ifreq); 1184f6603c60Sopenharmony_ci EXPECT_TRUE(ifrCount >= 2); 1185f6603c60Sopenharmony_ci for (int i = 0; i < ifrCount; i++) { 1186f6603c60Sopenharmony_ci addr1 = (struct sockaddr_in *)&ifr[i].ifr_addr; 1187f6603c60Sopenharmony_ci if (strcmp("lo", ifr[i].ifr_name) != 0) { 1188f6603c60Sopenharmony_ci // get inet addr 1189f6603c60Sopenharmony_ci memRet = memset_s(&ifrTmp, sizeof(struct ifreq), 0, sizeof(struct ifreq)); 1190f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 1191f6603c60Sopenharmony_ci ret = strcpy_s(ifrTmp.ifr_name, sizeof(ifrTmp.ifr_name), ifr[i].ifr_name); 1192f6603c60Sopenharmony_ci ret = ioctl(udpFd, SIOCGIFADDR, &ifrTmp); 1193f6603c60Sopenharmony_ci ASSERT_EQ(0, ret) << "ioctl fail[SIOCGIFADDR], errinfo[" << strerror(errno) << "]"; 1194f6603c60Sopenharmony_ci addr2 = (struct sockaddr_in *)&ifrTmp.ifr_addr; 1195f6603c60Sopenharmony_ci EXPECT_EQ(addr1->sin_addr.s_addr, addr2->sin_addr.s_addr); 1196f6603c60Sopenharmony_ci printf("[###]get %s\n", ifr[i].ifr_name); 1197f6603c60Sopenharmony_ci 1198f6603c60Sopenharmony_ci // set inet addr 1199f6603c60Sopenharmony_ci addr2->sin_addr.s_addr = addr1->sin_addr.s_addr; 1200f6603c60Sopenharmony_ci ret = ioctl(udpFd, SIOCSIFADDR, &ifrTmp); 1201f6603c60Sopenharmony_ci if (strcmp("0.0.0.0", inet_ntoa(addr1->sin_addr)) == 0) { 1202f6603c60Sopenharmony_ci // can't set 0.0.0.0 1203f6603c60Sopenharmony_ci EXPECT_NE(0, ret) << "ioctl[0.0.0.0] fail[SIOCSIFADDR], errinfo[" << strerror(errno) << "]"; 1204f6603c60Sopenharmony_ci } else { 1205f6603c60Sopenharmony_ci EXPECT_EQ(0, ret) << "ioctl fail[SIOCSIFADDR], errinfo[" << strerror(errno) << "]"; 1206f6603c60Sopenharmony_ci } 1207f6603c60Sopenharmony_ci // get again 1208f6603c60Sopenharmony_ci ret = ioctl(udpFd, SIOCGIFADDR, &ifrTmp); 1209f6603c60Sopenharmony_ci EXPECT_EQ(0, ret) << "ioctl fail[SIOCGIFADDR], errinfo[" << strerror(errno) << "]"; 1210f6603c60Sopenharmony_ci EXPECT_EQ(addr1->sin_addr.s_addr, addr2->sin_addr.s_addr); 1211f6603c60Sopenharmony_ci } 1212f6603c60Sopenharmony_ci } 1213f6603c60Sopenharmony_ci ret = close(udpFd); 1214f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1215f6603c60Sopenharmony_ci} 1216f6603c60Sopenharmony_ci 1217f6603c60Sopenharmony_ci/** 1218f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_0730 1219f6603c60Sopenharmony_ci * @tc.name : test ioctl get and set IFHWADDR 1220f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1221f6603c60Sopenharmony_ci */ 1222f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testIoctlIfhwAddr, Function | MediumTest | Level2) 1223f6603c60Sopenharmony_ci{ 1224f6603c60Sopenharmony_ci int udpFd = socket(AF_INET, SOCK_DGRAM, 0); 1225f6603c60Sopenharmony_ci ASSERT_NE(-1, udpFd); 1226f6603c60Sopenharmony_ci int memRet = -1; 1227f6603c60Sopenharmony_ci 1228f6603c60Sopenharmony_ci struct ifreq ifr[5]; 1229f6603c60Sopenharmony_ci struct ifconf ifc = {0}; 1230f6603c60Sopenharmony_ci memRet = memset_s(&ifc, sizeof(struct ifconf), 0, sizeof(struct ifconf)); 1231f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 1232f6603c60Sopenharmony_ci ifc.ifc_len = 5 * sizeof(struct ifreq); 1233f6603c60Sopenharmony_ci ifc.ifc_buf = (char *)ifr; 1234f6603c60Sopenharmony_ci int ret = ioctl(udpFd, SIOCGIFCONF, (char *)&ifc); 1235f6603c60Sopenharmony_ci ASSERT_EQ(0, ret) << "ioctl fail[SIOCGIFCONF], errinfo[" << strerror(errno) << "]"; 1236f6603c60Sopenharmony_ci 1237f6603c60Sopenharmony_ci char rst1[18]; 1238f6603c60Sopenharmony_ci 1239f6603c60Sopenharmony_ci char* macPtr = nullptr; 1240f6603c60Sopenharmony_ci struct ifreq ifrTmp = {0}; 1241f6603c60Sopenharmony_ci struct sockaddr_in *addr = nullptr; 1242f6603c60Sopenharmony_ci int ifrCount = ifc.ifc_len / sizeof(struct ifreq); 1243f6603c60Sopenharmony_ci EXPECT_TRUE(ifrCount >= 2); 1244f6603c60Sopenharmony_ci for (int i = 0; i < ifrCount; i++) { 1245f6603c60Sopenharmony_ci addr = (struct sockaddr_in *)&ifr[i].ifr_addr; 1246f6603c60Sopenharmony_ci if (strcmp("lo", ifr[i].ifr_name) != 0) { 1247f6603c60Sopenharmony_ci // get ifhwaddr 1248f6603c60Sopenharmony_ci memRet = memset_s(&ifrTmp, sizeof(struct ifreq), 0, sizeof(struct ifreq)); 1249f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 1250f6603c60Sopenharmony_ci ret = strcpy_s(ifrTmp.ifr_name, sizeof(ifrTmp.ifr_name), ifr[i].ifr_name); 1251f6603c60Sopenharmony_ci EXPECT_EQ(0, ret) << "strcpy_s error"; 1252f6603c60Sopenharmony_ci ret = ioctl(udpFd, SIOCGIFHWADDR, &ifrTmp); 1253f6603c60Sopenharmony_ci ASSERT_EQ(0, ret) << "ioctl fail[SIOCGIFHWADDR], errinfo[" << strerror(errno) << "]"; 1254f6603c60Sopenharmony_ci macPtr = ifrTmp.ifr_hwaddr.sa_data; 1255f6603c60Sopenharmony_ci ret = sprintf_s(rst1, sizeof(rst1), "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x", *macPtr, *(macPtr+1), 1256f6603c60Sopenharmony_ci *(macPtr+2), *(macPtr+3), *(macPtr+4), *(macPtr+5)); 1257f6603c60Sopenharmony_ci EXPECT_EQ(strlen(rst1), (unsigned int)ret) << "sprintf_s error"; 1258f6603c60Sopenharmony_ci printf("[###]get %s \n", ifrTmp.ifr_name); 1259f6603c60Sopenharmony_ci } 1260f6603c60Sopenharmony_ci } 1261f6603c60Sopenharmony_ci ret = close(udpFd); 1262f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1263f6603c60Sopenharmony_ci} 1264f6603c60Sopenharmony_ci 1265f6603c60Sopenharmony_ci/** 1266f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_1000 1267f6603c60Sopenharmony_ci * @tc.name : test socket operation 1268f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1269f6603c60Sopenharmony_ci */ 1270f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testSocketOpt, Function | MediumTest | Level2) 1271f6603c60Sopenharmony_ci{ 1272f6603c60Sopenharmony_ci socklen_t len; 1273f6603c60Sopenharmony_ci int memRet = -1; 1274f6603c60Sopenharmony_ci struct timeval timeout = {0}; 1275f6603c60Sopenharmony_ci int fd = socket(AF_INET, SOCK_STREAM, 0); 1276f6603c60Sopenharmony_ci EXPECT_NE(-1, fd); 1277f6603c60Sopenharmony_ci 1278f6603c60Sopenharmony_ci int error = -1; 1279f6603c60Sopenharmony_ci len = sizeof(error); 1280f6603c60Sopenharmony_ci int ret = getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len); 1281f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1282f6603c60Sopenharmony_ci EXPECT_EQ(0, error); 1283f6603c60Sopenharmony_ci 1284f6603c60Sopenharmony_ci len = sizeof(timeout); 1285f6603c60Sopenharmony_ci ret = getsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &timeout, &len); 1286f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1287f6603c60Sopenharmony_ci 1288f6603c60Sopenharmony_ci timeout.tv_sec = 1000; 1289f6603c60Sopenharmony_ci len = sizeof(timeout); 1290f6603c60Sopenharmony_ci ret = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &timeout, len); 1291f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1292f6603c60Sopenharmony_ci 1293f6603c60Sopenharmony_ci memRet = memset_s(&timeout, len, 0, len); 1294f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 1295f6603c60Sopenharmony_ci ret = getsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &timeout, &len); 1296f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1297f6603c60Sopenharmony_ci EXPECT_EQ(1000, timeout.tv_sec); 1298f6603c60Sopenharmony_ci 1299f6603c60Sopenharmony_ci int flag = 1; 1300f6603c60Sopenharmony_ci ret = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(flag)); 1301f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1302f6603c60Sopenharmony_ci 1303f6603c60Sopenharmony_ci flag = 0; 1304f6603c60Sopenharmony_ci len = sizeof(flag); 1305f6603c60Sopenharmony_ci ret = getsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &flag, &len); 1306f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1307f6603c60Sopenharmony_ci EXPECT_EQ(1, flag); 1308f6603c60Sopenharmony_ci 1309f6603c60Sopenharmony_ci error = -1; 1310f6603c60Sopenharmony_ci len = sizeof(error); 1311f6603c60Sopenharmony_ci ret = getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len); 1312f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1313f6603c60Sopenharmony_ci EXPECT_EQ(0, error); 1314f6603c60Sopenharmony_ci 1315f6603c60Sopenharmony_ci ret = close(fd); 1316f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1317f6603c60Sopenharmony_ci} 1318f6603c60Sopenharmony_ci 1319f6603c60Sopenharmony_ci/** 1320f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_1100 1321f6603c60Sopenharmony_ci * @tc.name : test getsockname and getpeername invalid input 1322f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1323f6603c60Sopenharmony_ci */ 1324f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testGetSocketNameInvalidInput, Function | MediumTest | Level3) 1325f6603c60Sopenharmony_ci{ 1326f6603c60Sopenharmony_ci struct sockaddr addr = {0}; 1327f6603c60Sopenharmony_ci socklen_t addrLen = sizeof(addr); 1328f6603c60Sopenharmony_ci int ret = getsockname(-1, &addr, &addrLen); 1329f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1330f6603c60Sopenharmony_ci ret = getpeername(-1, &addr, &addrLen); 1331f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1332f6603c60Sopenharmony_ci ret = getsockname(0, &addr, &addrLen); 1333f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1334f6603c60Sopenharmony_ci ret = getpeername(0, &addr, &addrLen); 1335f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1336f6603c60Sopenharmony_ci ret = getsockname(1, &addr, &addrLen); 1337f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1338f6603c60Sopenharmony_ci ret = getpeername(1, &addr, &addrLen); 1339f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1340f6603c60Sopenharmony_ci ret = getsockname(130, &addr, &addrLen); 1341f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1342f6603c60Sopenharmony_ci ret = getpeername(130, &addr, &addrLen); 1343f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1344f6603c60Sopenharmony_ci ret = getsockname(10, nullptr, &addrLen); 1345f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1346f6603c60Sopenharmony_ci ret = getpeername(10, nullptr, &addrLen); 1347f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1348f6603c60Sopenharmony_ci ret = getsockname(10, &addr, nullptr); 1349f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1350f6603c60Sopenharmony_ci ret = getpeername(10, &addr, nullptr); 1351f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1352f6603c60Sopenharmony_ci} 1353f6603c60Sopenharmony_ci 1354f6603c60Sopenharmony_ci/** 1355f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_1200 1356f6603c60Sopenharmony_ci * @tc.name : test domain name compress and expand normally 1357f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1358f6603c60Sopenharmony_ci */ 1359f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testDnCompExpandNormal, Function | MediumTest | Level2) 1360f6603c60Sopenharmony_ci{ 1361f6603c60Sopenharmony_ci const char* domain1 = "www.testohos.com"; 1362f6603c60Sopenharmony_ci unsigned char buf[MAXDNAME] = {0}; 1363f6603c60Sopenharmony_ci unsigned char* bufPtr = buf; 1364f6603c60Sopenharmony_ci int ret = dn_comp(domain1, bufPtr, MAXDNAME, nullptr, nullptr); 1365f6603c60Sopenharmony_ci EXPECT_NE(-1, ret) << "dn_comp fail, buf is '" << buf << "'"; 1366f6603c60Sopenharmony_ci int len = ret + 4; 1367f6603c60Sopenharmony_ci 1368f6603c60Sopenharmony_ci char expandDn[MAXDNAME]; 1369f6603c60Sopenharmony_ci unsigned char* eomorig = buf + MAXDNAME; 1370f6603c60Sopenharmony_ci ret = dn_expand(buf, eomorig, buf, expandDn, MAXDNAME); 1371f6603c60Sopenharmony_ci EXPECT_NE(-1, ret); 1372f6603c60Sopenharmony_ci EXPECT_STREQ(domain1, expandDn); 1373f6603c60Sopenharmony_ci printf("dn_expand ret=%d, expandDn is '%s'\n", ret, expandDn); 1374f6603c60Sopenharmony_ci 1375f6603c60Sopenharmony_ci const char* domain2 = "www.baidu.com"; 1376f6603c60Sopenharmony_ci unsigned char* dnptrs[5] = {bufPtr, nullptr}; 1377f6603c60Sopenharmony_ci unsigned char** lastdnptr = dnptrs + 5; 1378f6603c60Sopenharmony_ci ret = dn_comp(domain2, bufPtr + len, MAXDNAME - len, dnptrs, lastdnptr); 1379f6603c60Sopenharmony_ci EXPECT_NE(-1, ret) << "dn_comp(with dnptrs) fail, buf+len is '" << bufPtr + len << "'"; 1380f6603c60Sopenharmony_ci 1381f6603c60Sopenharmony_ci char expandDnWithDnptrs[MAXDNAME]; 1382f6603c60Sopenharmony_ci unsigned char* eomorigWithDnptrs = buf + MAXDNAME; 1383f6603c60Sopenharmony_ci ret = dn_expand(dnptrs[1], eomorigWithDnptrs, dnptrs[1], expandDnWithDnptrs, MAXDNAME); 1384f6603c60Sopenharmony_ci EXPECT_NE(-1, ret); 1385f6603c60Sopenharmony_ci EXPECT_STREQ(domain2, expandDnWithDnptrs); 1386f6603c60Sopenharmony_ci} 1387f6603c60Sopenharmony_ci 1388f6603c60Sopenharmony_ci/** 1389f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_1300 1390f6603c60Sopenharmony_ci * @tc.name : test domain name compress and expand abnormally 1391f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1392f6603c60Sopenharmony_ci */ 1393f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testDnCompExpandAbnormal, Function | MediumTest | Level3) 1394f6603c60Sopenharmony_ci{ 1395f6603c60Sopenharmony_ci const char* src = "!#%^.)(-+{}\r\n"; 1396f6603c60Sopenharmony_ci unsigned char destComp[MAXDNAME]; 1397f6603c60Sopenharmony_ci int ret = dn_comp(src, destComp, 10, nullptr, nullptr); 1398f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1399f6603c60Sopenharmony_ci printf("dn_comp ret=%d, compDn is '%s'\n", ret, destComp); 1400f6603c60Sopenharmony_ci 1401f6603c60Sopenharmony_ci ret = dn_comp("www.baidu.com", destComp, MAXDNAME, nullptr, nullptr); 1402f6603c60Sopenharmony_ci EXPECT_NE(-1, ret); 1403f6603c60Sopenharmony_ci 1404f6603c60Sopenharmony_ci // dest array too small 1405f6603c60Sopenharmony_ci char destExpand[5]; 1406f6603c60Sopenharmony_ci unsigned char *eomorig = destComp + 10; 1407f6603c60Sopenharmony_ci ret = dn_expand(destComp, eomorig, destComp, destExpand, MAXDNAME); 1408f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1409f6603c60Sopenharmony_ci printf("dn_expand ret=%d, expandDn is '%s'\n", ret, destExpand); 1410f6603c60Sopenharmony_ci 1411f6603c60Sopenharmony_ci // compress info is 0 1412f6603c60Sopenharmony_ci unsigned char destCompError[20] = {0}; 1413f6603c60Sopenharmony_ci eomorig = destCompError + 20; 1414f6603c60Sopenharmony_ci ret = dn_expand(destCompError, eomorig, destCompError, destExpand, MAXDNAME); 1415f6603c60Sopenharmony_ci EXPECT_EQ(1, ret); 1416f6603c60Sopenharmony_ci printf("dn_expand ret=%d, expandDn is '%s'\n", ret, destExpand); 1417f6603c60Sopenharmony_ci} 1418f6603c60Sopenharmony_ci 1419f6603c60Sopenharmony_ci/** 1420f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_1400 1421f6603c60Sopenharmony_ci * @tc.name : test convert 48 bit Ethernet host address normally 1422f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1423f6603c60Sopenharmony_ci */ 1424f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testEtherConvertNormal, Function | MediumTest | Level2) 1425f6603c60Sopenharmony_ci{ 1426f6603c60Sopenharmony_ci char atonByteRst[24]; 1427f6603c60Sopenharmony_ci char* ntoaRst = nullptr; 1428f6603c60Sopenharmony_ci struct ether_addr *atonRst = nullptr; 1429f6603c60Sopenharmony_ci char addrHex[3][18] = {"FF:FF:FF:FF:FF:FF", "00:00:00:00:00:00", "0A:1B:2C:3D:4E:5F"}; 1430f6603c60Sopenharmony_ci char addrByte[3][24] = {"255.255.255.255.255.255", "0.0.0.0.0.0", "10.27.44.61.78.95"}; 1431f6603c60Sopenharmony_ci for (int i = 0; i < 3; i++) { 1432f6603c60Sopenharmony_ci atonRst = nullptr; 1433f6603c60Sopenharmony_ci atonRst = ether_aton(addrHex[i]); 1434f6603c60Sopenharmony_ci ASSERT_TRUE(atonRst != nullptr); 1435f6603c60Sopenharmony_ci int ret = sprintf_s(atonByteRst, sizeof(atonByteRst), "%u.%u.%u.%u.%u.%u", 1436f6603c60Sopenharmony_ci atonRst->ether_addr_octet[0], atonRst->ether_addr_octet[1], 1437f6603c60Sopenharmony_ci atonRst->ether_addr_octet[2], atonRst->ether_addr_octet[3], 1438f6603c60Sopenharmony_ci atonRst->ether_addr_octet[4], atonRst->ether_addr_octet[5]); 1439f6603c60Sopenharmony_ci EXPECT_STREQ(addrByte[i], atonByteRst) << "ErrInfo:result '" << atonByteRst << "',ret=" << ret; 1440f6603c60Sopenharmony_ci 1441f6603c60Sopenharmony_ci ntoaRst = nullptr; 1442f6603c60Sopenharmony_ci ntoaRst = ether_ntoa(atonRst); 1443f6603c60Sopenharmony_ci EXPECT_TRUE(ntoaRst != nullptr); 1444f6603c60Sopenharmony_ci EXPECT_STREQ(addrHex[i], ntoaRst) << "ErrInfo:result '" << ntoaRst << "'"; 1445f6603c60Sopenharmony_ci } 1446f6603c60Sopenharmony_ci} 1447f6603c60Sopenharmony_ci 1448f6603c60Sopenharmony_ci/** 1449f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_1500 1450f6603c60Sopenharmony_ci * @tc.name : test convert 48 bit Ethernet host address abnormally 1451f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1452f6603c60Sopenharmony_ci */ 1453f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testEtherConvertAbnormal, Function | MediumTest | Level3) 1454f6603c60Sopenharmony_ci{ 1455f6603c60Sopenharmony_ci char* addrError = (char *)":::F:Z:"; 1456f6603c60Sopenharmony_ci struct ether_addr *atonRst = nullptr; 1457f6603c60Sopenharmony_ci atonRst = ether_aton(addrError); 1458f6603c60Sopenharmony_ci EXPECT_TRUE(atonRst == nullptr); 1459f6603c60Sopenharmony_ci} 1460f6603c60Sopenharmony_ci 1461f6603c60Sopenharmony_ci/** 1462f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_1600 1463f6603c60Sopenharmony_ci * @tc.name : test thread safe convert 48 bit Ethernet host address normally 1464f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1465f6603c60Sopenharmony_ci */ 1466f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testEtherConvertNormalWithThreadSafe, Function | MediumTest | Level2) 1467f6603c60Sopenharmony_ci{ 1468f6603c60Sopenharmony_ci int ret; 1469f6603c60Sopenharmony_ci char ntoaDataRst[18]; 1470f6603c60Sopenharmony_ci char* ntoaPointRst = nullptr; 1471f6603c60Sopenharmony_ci struct ether_addr *atonPointRst = nullptr; 1472f6603c60Sopenharmony_ci struct ether_addr *atonDataRst = (ether_addr *)malloc(sizeof(ether_addr)); 1473f6603c60Sopenharmony_ci ASSERT_TRUE(atonDataRst != nullptr); 1474f6603c60Sopenharmony_ci char addrHex[3][18] = {"FF:FF:FF:FF:FF:FF", "00:00:00:00:00:00", "5F:4E:2C:3D:1B:0A"}; 1475f6603c60Sopenharmony_ci char addrByte[3][24] = {"255.255.255.255.255.255", "0.0.0.0.0.0", "95.78.44.61.27.10"}; 1476f6603c60Sopenharmony_ci for (int i = 0; i < 3; i++) { 1477f6603c60Sopenharmony_ci atonPointRst = nullptr; 1478f6603c60Sopenharmony_ci atonPointRst = ether_aton_r(addrHex[i], atonDataRst); 1479f6603c60Sopenharmony_ci ASSERT_TRUE(atonPointRst != nullptr); 1480f6603c60Sopenharmony_ci char byteRst[24]; 1481f6603c60Sopenharmony_ci ret = sprintf_s(byteRst, sizeof(byteRst), "%u.%u.%u.%u.%u.%u", 1482f6603c60Sopenharmony_ci atonDataRst->ether_addr_octet[0], atonDataRst->ether_addr_octet[1], 1483f6603c60Sopenharmony_ci atonDataRst->ether_addr_octet[2], atonDataRst->ether_addr_octet[3], 1484f6603c60Sopenharmony_ci atonDataRst->ether_addr_octet[4], atonDataRst->ether_addr_octet[5]); 1485f6603c60Sopenharmony_ci EXPECT_STREQ(addrByte[i], byteRst) << "ErrInfo:ether_aton_r rst[" << byteRst << "], ret[" << ret << "]"; 1486f6603c60Sopenharmony_ci ret = sprintf_s(byteRst, sizeof(byteRst), "%u.%u.%u.%u.%u.%u", 1487f6603c60Sopenharmony_ci atonPointRst->ether_addr_octet[0], atonPointRst->ether_addr_octet[1], 1488f6603c60Sopenharmony_ci atonPointRst->ether_addr_octet[2], atonPointRst->ether_addr_octet[3], 1489f6603c60Sopenharmony_ci atonPointRst->ether_addr_octet[4], atonPointRst->ether_addr_octet[5]); 1490f6603c60Sopenharmony_ci EXPECT_STREQ(addrByte[i], byteRst) << "ErrInfo:ether_aton_r rst[" << byteRst << "], ret[" << ret << "]"; 1491f6603c60Sopenharmony_ci 1492f6603c60Sopenharmony_ci ntoaPointRst = nullptr; 1493f6603c60Sopenharmony_ci ntoaPointRst = ether_ntoa_r(atonDataRst, ntoaDataRst); 1494f6603c60Sopenharmony_ci EXPECT_STREQ(addrHex[i], ntoaDataRst); 1495f6603c60Sopenharmony_ci EXPECT_STREQ(addrHex[i], ntoaPointRst); 1496f6603c60Sopenharmony_ci printf("ether_ntoa_r result '%s', '%s'\n", ntoaDataRst, ntoaPointRst); 1497f6603c60Sopenharmony_ci } 1498f6603c60Sopenharmony_ci 1499f6603c60Sopenharmony_ci free(atonDataRst); 1500f6603c60Sopenharmony_ci} 1501f6603c60Sopenharmony_ci 1502f6603c60Sopenharmony_ci/** 1503f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_1700 1504f6603c60Sopenharmony_ci * @tc.name : test get protocals by normal name and number 1505f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1506f6603c60Sopenharmony_ci */ 1507f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testGetProtoByNormal, Function | MediumTest | Level2) 1508f6603c60Sopenharmony_ci{ 1509f6603c60Sopenharmony_ci int number; 1510f6603c60Sopenharmony_ci struct protoent *protoPtr = nullptr; 1511f6603c60Sopenharmony_ci for (int i = 0; i < PROTOCOL_COUNT; i++) { 1512f6603c60Sopenharmony_ci protoPtr = getprotobyname(g_protocolList[i]); 1513f6603c60Sopenharmony_ci if (protoPtr == nullptr) { 1514f6603c60Sopenharmony_ci printf("getprotobyname is NULL! [%s]\n", g_protocolList[i]); 1515f6603c60Sopenharmony_ci continue; 1516f6603c60Sopenharmony_ci } 1517f6603c60Sopenharmony_ci EXPECT_STREQ(g_protocolList[i], protoPtr->p_name); 1518f6603c60Sopenharmony_ci number = protoPtr->p_proto; 1519f6603c60Sopenharmony_ci 1520f6603c60Sopenharmony_ci protoPtr = nullptr; 1521f6603c60Sopenharmony_ci protoPtr = getprotobynumber(number); 1522f6603c60Sopenharmony_ci if (protoPtr == nullptr) { 1523f6603c60Sopenharmony_ci EXPECT_TRUE(protoPtr != NULL) << "ErrInfo:getprotobynumber NULL '" << g_protocolList[i] << "'"; 1524f6603c60Sopenharmony_ci continue; 1525f6603c60Sopenharmony_ci } 1526f6603c60Sopenharmony_ci EXPECT_STREQ(g_protocolList[i], protoPtr->p_name); 1527f6603c60Sopenharmony_ci protoPtr = nullptr; 1528f6603c60Sopenharmony_ci } 1529f6603c60Sopenharmony_ci} 1530f6603c60Sopenharmony_ci 1531f6603c60Sopenharmony_ci/** 1532f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_1800 1533f6603c60Sopenharmony_ci * @tc.name : test get protocals by invalid name and number 1534f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1535f6603c60Sopenharmony_ci */ 1536f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testGetProtoByAbNormal, Function | MediumTest | Level2) 1537f6603c60Sopenharmony_ci{ 1538f6603c60Sopenharmony_ci struct protoent* protoPtr = nullptr; 1539f6603c60Sopenharmony_ci protoPtr = getprotobyname("ipv4"); 1540f6603c60Sopenharmony_ci EXPECT_TRUE(protoPtr == NULL); 1541f6603c60Sopenharmony_ci protoPtr = getprotobyname("idpr-cmtp-s"); 1542f6603c60Sopenharmony_ci EXPECT_TRUE(protoPtr == NULL); 1543f6603c60Sopenharmony_ci protoPtr = getprotobyname("12&^%$\n\0?><"); 1544f6603c60Sopenharmony_ci EXPECT_TRUE(protoPtr == NULL); 1545f6603c60Sopenharmony_ci 1546f6603c60Sopenharmony_ci protoPtr = getprotobynumber(-1); 1547f6603c60Sopenharmony_ci EXPECT_TRUE(protoPtr == NULL); 1548f6603c60Sopenharmony_ci protoPtr = getprotobynumber(256); 1549f6603c60Sopenharmony_ci EXPECT_TRUE(protoPtr == NULL); 1550f6603c60Sopenharmony_ci} 1551f6603c60Sopenharmony_ci 1552f6603c60Sopenharmony_ci/** 1553f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_1900 1554f6603c60Sopenharmony_ci * @tc.name : test getprotoent 1555f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1556f6603c60Sopenharmony_ci */ 1557f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testGetProtoent, Function | MediumTest | Level2) 1558f6603c60Sopenharmony_ci{ 1559f6603c60Sopenharmony_ci int index = 0; 1560f6603c60Sopenharmony_ci struct protoent* protoPtr = nullptr; 1561f6603c60Sopenharmony_ci setprotoent(0); 1562f6603c60Sopenharmony_ci while (index < PROTOCOL_COUNT) { 1563f6603c60Sopenharmony_ci protoPtr = getprotoent(); 1564f6603c60Sopenharmony_ci if (protoPtr == NULL) { 1565f6603c60Sopenharmony_ci EXPECT_TRUE(protoPtr != NULL) << "ErrInfo:getprotoent NULL, index[" << index << "]"; 1566f6603c60Sopenharmony_ci } else { 1567f6603c60Sopenharmony_ci EXPECT_STREQ(g_protocolList[index], protoPtr->p_name); 1568f6603c60Sopenharmony_ci EXPECT_EQ(g_protocolNumber[index], protoPtr->p_proto); 1569f6603c60Sopenharmony_ci } 1570f6603c60Sopenharmony_ci protoPtr = nullptr; 1571f6603c60Sopenharmony_ci index ++; 1572f6603c60Sopenharmony_ci } 1573f6603c60Sopenharmony_ci 1574f6603c60Sopenharmony_ci protoPtr = getprotoent(); 1575f6603c60Sopenharmony_ci EXPECT_TRUE(protoPtr == NULL); 1576f6603c60Sopenharmony_ci} 1577f6603c60Sopenharmony_ci 1578f6603c60Sopenharmony_ci/** 1579f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_2000 1580f6603c60Sopenharmony_ci * @tc.name : test setprotoent 1581f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1582f6603c60Sopenharmony_ci */ 1583f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testSetProtoent, Function | MediumTest | Level2) 1584f6603c60Sopenharmony_ci{ 1585f6603c60Sopenharmony_ci int index = 0; 1586f6603c60Sopenharmony_ci struct protoent* protoPtr = nullptr; 1587f6603c60Sopenharmony_ci setprotoent(0); 1588f6603c60Sopenharmony_ci while (index < PROTOCOL_COUNT) { 1589f6603c60Sopenharmony_ci protoPtr = getprotoent(); 1590f6603c60Sopenharmony_ci if (protoPtr == nullptr) { 1591f6603c60Sopenharmony_ci EXPECT_TRUE(protoPtr != NULL) << "ErrInfo:getprotoent NULL, index[" << index << "]"; 1592f6603c60Sopenharmony_ci } else { 1593f6603c60Sopenharmony_ci EXPECT_STREQ(g_protocolList[index], protoPtr->p_name); 1594f6603c60Sopenharmony_ci EXPECT_EQ(g_protocolNumber[index], protoPtr->p_proto); 1595f6603c60Sopenharmony_ci } 1596f6603c60Sopenharmony_ci protoPtr = nullptr; 1597f6603c60Sopenharmony_ci index ++; 1598f6603c60Sopenharmony_ci } 1599f6603c60Sopenharmony_ci protoPtr = getprotoent(); 1600f6603c60Sopenharmony_ci EXPECT_TRUE(protoPtr == NULL); 1601f6603c60Sopenharmony_ci 1602f6603c60Sopenharmony_ci setprotoent(0); 1603f6603c60Sopenharmony_ci protoPtr = nullptr; 1604f6603c60Sopenharmony_ci protoPtr = getprotoent(); 1605f6603c60Sopenharmony_ci ASSERT_TRUE(protoPtr != NULL); 1606f6603c60Sopenharmony_ci EXPECT_STREQ(g_protocolList[0], protoPtr->p_name); 1607f6603c60Sopenharmony_ci EXPECT_EQ(g_protocolNumber[0], protoPtr->p_proto); 1608f6603c60Sopenharmony_ci 1609f6603c60Sopenharmony_ci index = 0; 1610f6603c60Sopenharmony_ci protoPtr = nullptr; 1611f6603c60Sopenharmony_ci setprotoent(0); 1612f6603c60Sopenharmony_ci while (index < PROTOCOL_COUNT) { 1613f6603c60Sopenharmony_ci protoPtr = getprotoent(); 1614f6603c60Sopenharmony_ci if (protoPtr == nullptr) { 1615f6603c60Sopenharmony_ci EXPECT_TRUE(protoPtr != NULL) << "ErrInfo:getprotoent NULL, index[" << index << "]"; 1616f6603c60Sopenharmony_ci } else { 1617f6603c60Sopenharmony_ci EXPECT_STREQ(g_protocolList[index], protoPtr->p_name); 1618f6603c60Sopenharmony_ci EXPECT_EQ(g_protocolNumber[index], protoPtr->p_proto); 1619f6603c60Sopenharmony_ci } 1620f6603c60Sopenharmony_ci protoPtr = nullptr; 1621f6603c60Sopenharmony_ci index ++; 1622f6603c60Sopenharmony_ci } 1623f6603c60Sopenharmony_ci} 1624f6603c60Sopenharmony_ci 1625f6603c60Sopenharmony_ci/** 1626f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_2100 1627f6603c60Sopenharmony_ci * @tc.name : test herror,no output and return value, so no check point 1628f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1629f6603c60Sopenharmony_ci */ 1630f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testHerror, Function | MediumTest | Level2) 1631f6603c60Sopenharmony_ci{ 1632f6603c60Sopenharmony_ci const char* fileName = "/storage/test_herror"; 1633f6603c60Sopenharmony_ci FILE* fp = freopen(fileName, "w", stderr); 1634f6603c60Sopenharmony_ci ASSERT_NE(nullptr, fp); 1635f6603c60Sopenharmony_ci 1636f6603c60Sopenharmony_ci const char *msg = "herror msg"; 1637f6603c60Sopenharmony_ci herror(msg); 1638f6603c60Sopenharmony_ci const int errorCode[5] = {HOST_NOT_FOUND, TRY_AGAIN, NO_RECOVERY, NO_DATA, NO_ADDRESS}; 1639f6603c60Sopenharmony_ci for (int i = 0; i < 5; i++) { 1640f6603c60Sopenharmony_ci h_errno = errorCode[i]; 1641f6603c60Sopenharmony_ci herror(msg); 1642f6603c60Sopenharmony_ci } 1643f6603c60Sopenharmony_ci h_errno = -1; 1644f6603c60Sopenharmony_ci herror(msg); 1645f6603c60Sopenharmony_ci h_errno = 0; 1646f6603c60Sopenharmony_ci herror(msg); 1647f6603c60Sopenharmony_ci herror(msg); 1648f6603c60Sopenharmony_ci fclose(stderr); 1649f6603c60Sopenharmony_ci 1650f6603c60Sopenharmony_ci char buffer[256]; 1651f6603c60Sopenharmony_ci const char* expectStr = "herror msg: Unknown error\nherror msg: Host not found\nherror msg: \ 1652f6603c60Sopenharmony_ciTry again\nherror msg: Non-recoverable error\nherror msg: Address not available\nherror msg: \ 1653f6603c60Sopenharmony_ciAddress not available\nherror msg: Unknown error\nherror msg: Unknown error\nherror msg: Unknown error\n"; 1654f6603c60Sopenharmony_ci FILE* fpRead = fopen(fileName, "rb"); 1655f6603c60Sopenharmony_ci size_t bytes = fread(buffer, 1, sizeof(buffer), fpRead); 1656f6603c60Sopenharmony_ci buffer[bytes] = 0; 1657f6603c60Sopenharmony_ci EXPECT_STREQ(expectStr, buffer); 1658f6603c60Sopenharmony_ci 1659f6603c60Sopenharmony_ci int ret = fclose(fpRead); 1660f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1661f6603c60Sopenharmony_ci ret = remove(fileName); 1662f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 1663f6603c60Sopenharmony_ci} 1664f6603c60Sopenharmony_ci 1665f6603c60Sopenharmony_ci/** 1666f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_2200 1667f6603c60Sopenharmony_ci * @tc.name : test hstrerror normal 1668f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1669f6603c60Sopenharmony_ci */ 1670f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testHstrerrorNormal, Function | MediumTest | Level2) 1671f6603c60Sopenharmony_ci{ 1672f6603c60Sopenharmony_ci const char errorMsgs[5][22] = {"Host not found", "Try again", "Non-recoverable error", "Address not available", 1673f6603c60Sopenharmony_ci "Address not available"}; 1674f6603c60Sopenharmony_ci const int errorCode[5] = {HOST_NOT_FOUND, TRY_AGAIN, NO_RECOVERY, NO_DATA, NO_ADDRESS}; 1675f6603c60Sopenharmony_ci for (int i = 0; i < 5; i++) { 1676f6603c60Sopenharmony_ci EXPECT_STREQ(errorMsgs[i], hstrerror(errorCode[i])); 1677f6603c60Sopenharmony_ci } 1678f6603c60Sopenharmony_ci} 1679f6603c60Sopenharmony_ci 1680f6603c60Sopenharmony_ci/** 1681f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_2300 1682f6603c60Sopenharmony_ci * @tc.name : test hstrerror abnormal 1683f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1684f6603c60Sopenharmony_ci */ 1685f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testHstrerrorAbnormal, Function | MediumTest | Level2) 1686f6603c60Sopenharmony_ci{ 1687f6603c60Sopenharmony_ci const char* expectStr = "Unknown error"; 1688f6603c60Sopenharmony_ci EXPECT_STREQ(expectStr, hstrerror(0)); 1689f6603c60Sopenharmony_ci EXPECT_STREQ(expectStr, hstrerror(-1)); 1690f6603c60Sopenharmony_ci EXPECT_STREQ(expectStr, hstrerror(16)); 1691f6603c60Sopenharmony_ci} 1692f6603c60Sopenharmony_ci 1693f6603c60Sopenharmony_ci/** 1694f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_2400 1695f6603c60Sopenharmony_ci * @tc.name : test convert value from host to network byte order 1696f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1697f6603c60Sopenharmony_ci */ 1698f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testHostToNetwork, Function | MediumTest | Level2) 1699f6603c60Sopenharmony_ci{ 1700f6603c60Sopenharmony_ci uint32_t intInput1 = 0; 1701f6603c60Sopenharmony_ci uint32_t intRst1 = htonl(intInput1); 1702f6603c60Sopenharmony_ci uint32_t intInput2 = 65536; 1703f6603c60Sopenharmony_ci uint32_t intRst2 = htonl(intInput2); 1704f6603c60Sopenharmony_ci 1705f6603c60Sopenharmony_ci uint16_t shortInput1 = 0; 1706f6603c60Sopenharmony_ci uint16_t shortRst1 = htons(shortInput1); 1707f6603c60Sopenharmony_ci uint16_t shortInput2 = 255; 1708f6603c60Sopenharmony_ci uint16_t shortRst2 = htons(shortInput2); 1709f6603c60Sopenharmony_ci 1710f6603c60Sopenharmony_ci#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 1711f6603c60Sopenharmony_ci uint32_t expectZero = 0; 1712f6603c60Sopenharmony_ci uint32_t expectForIinput2 = 256; 1713f6603c60Sopenharmony_ci uint32_t expectForSinput2 = 65280; 1714f6603c60Sopenharmony_ci EXPECT_EQ(expectZero, intRst1); 1715f6603c60Sopenharmony_ci EXPECT_EQ(expectForIinput2, intRst2); 1716f6603c60Sopenharmony_ci EXPECT_EQ(expectZero, shortRst1); 1717f6603c60Sopenharmony_ci EXPECT_EQ(expectForSinput2, shortRst2); 1718f6603c60Sopenharmony_ci#else 1719f6603c60Sopenharmony_ci EXPECT_EQ(intInput1, intRst1); 1720f6603c60Sopenharmony_ci EXPECT_EQ(intInput2, intRst2); 1721f6603c60Sopenharmony_ci EXPECT_EQ(shortInput1, shortRst1); 1722f6603c60Sopenharmony_ci EXPECT_EQ(shortInput2, shortRst2); 1723f6603c60Sopenharmony_ci#endif 1724f6603c60Sopenharmony_ci} 1725f6603c60Sopenharmony_ci 1726f6603c60Sopenharmony_ci/** 1727f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_2500 1728f6603c60Sopenharmony_ci * @tc.name : test convert value from network to host byte order 1729f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1730f6603c60Sopenharmony_ci */ 1731f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testNetworkToHost, Function | MediumTest | Level2) 1732f6603c60Sopenharmony_ci{ 1733f6603c60Sopenharmony_ci uint32_t intInput1 = 0; 1734f6603c60Sopenharmony_ci uint32_t intRst1 = ntohl(intInput1); 1735f6603c60Sopenharmony_ci uint32_t intInput2 = 65536; 1736f6603c60Sopenharmony_ci uint32_t intRst2 = ntohl(intInput2); 1737f6603c60Sopenharmony_ci uint16_t shortInput1 = 0; 1738f6603c60Sopenharmony_ci uint16_t shortRst1 = ntohs(shortInput1); 1739f6603c60Sopenharmony_ci uint16_t shortInput2 = 255; 1740f6603c60Sopenharmony_ci uint16_t shortRst2 = ntohs(shortInput2); 1741f6603c60Sopenharmony_ci 1742f6603c60Sopenharmony_ci#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 1743f6603c60Sopenharmony_ci uint32_t expectZero = 0; 1744f6603c60Sopenharmony_ci uint32_t expectForIinput2 = 256; 1745f6603c60Sopenharmony_ci uint32_t expectForSinput2 = 65280; 1746f6603c60Sopenharmony_ci EXPECT_EQ(expectZero, intRst1); 1747f6603c60Sopenharmony_ci EXPECT_EQ(expectForIinput2, intRst2); 1748f6603c60Sopenharmony_ci EXPECT_EQ(expectZero, shortRst1); 1749f6603c60Sopenharmony_ci EXPECT_EQ(expectForSinput2, shortRst2); 1750f6603c60Sopenharmony_ci#else 1751f6603c60Sopenharmony_ci EXPECT_EQ(intInput1, intRst1); 1752f6603c60Sopenharmony_ci EXPECT_EQ(intInput2, intRst2); 1753f6603c60Sopenharmony_ci EXPECT_EQ(shortInput1, shortRst1); 1754f6603c60Sopenharmony_ci EXPECT_EQ(shortInput2, shortRst2); 1755f6603c60Sopenharmony_ci#endif 1756f6603c60Sopenharmony_ci} 1757f6603c60Sopenharmony_ci 1758f6603c60Sopenharmony_ci/** 1759f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_2600 1760f6603c60Sopenharmony_ci * @tc.name : test inet_pton IPv4 normal 1761f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1762f6603c60Sopenharmony_ci */ 1763f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetPtonIpv4Normal, Function | MediumTest | Level2) 1764f6603c60Sopenharmony_ci{ 1765f6603c60Sopenharmony_ci int ret; 1766f6603c60Sopenharmony_ci struct in_addr rst = {0}; 1767f6603c60Sopenharmony_ci char cpAddrs[4][16] = {"10.58.212.100", "0.0.0.0", "255.0.0.0", "255.255.255.255"}; 1768f6603c60Sopenharmony_ci#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 1769f6603c60Sopenharmony_ci unsigned int expectLittle[4] = {1691630090, 0, 255, 4294967295}; 1770f6603c60Sopenharmony_ci#else 1771f6603c60Sopenharmony_ci unsigned int expectBig[4] = {171627620, 0, 4278190080, 4294967295}; 1772f6603c60Sopenharmony_ci#endif 1773f6603c60Sopenharmony_ci 1774f6603c60Sopenharmony_ci for (int i = 0; i < 4; i++) { 1775f6603c60Sopenharmony_ci ret = inet_pton(AF_INET, cpAddrs[i], &rst); 1776f6603c60Sopenharmony_ci EXPECT_EQ(1, ret); 1777f6603c60Sopenharmony_ci#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 1778f6603c60Sopenharmony_ci EXPECT_EQ(expectLittle[i], rst.s_addr); 1779f6603c60Sopenharmony_ci#else 1780f6603c60Sopenharmony_ci EXPECT_EQ(expectBig[i], rst.s_addr); 1781f6603c60Sopenharmony_ci#endif 1782f6603c60Sopenharmony_ci printf("[###]inet_pton : un[%u],s[%d],hex[%x]\n", rst.s_addr, rst.s_addr, rst.s_addr); 1783f6603c60Sopenharmony_ci } 1784f6603c60Sopenharmony_ci} 1785f6603c60Sopenharmony_ci 1786f6603c60Sopenharmony_ci/** 1787f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_2700 1788f6603c60Sopenharmony_ci * @tc.name : test inet_pton IPv4 abnormal 1789f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1790f6603c60Sopenharmony_ci */ 1791f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetPtonIpv4Abnormal, Function | MediumTest | Level2) 1792f6603c60Sopenharmony_ci{ 1793f6603c60Sopenharmony_ci int ret; 1794f6603c60Sopenharmony_ci struct in_addr rst = {0}; 1795f6603c60Sopenharmony_ci char cpAddrs[10][16] = {"255", "256", "255.0", "255.0.0", "256.0.0.1", "a.a.a.a", "....", "#", 1796f6603c60Sopenharmony_ci "127.0.0.f", "0:0:0:0:0:0:0:1"}; 1797f6603c60Sopenharmony_ci for (int i = 0; i < 10; i++) { 1798f6603c60Sopenharmony_ci ret = inet_pton(AF_INET, cpAddrs[i], &rst); 1799f6603c60Sopenharmony_ci EXPECT_EQ(0, ret) << "ErrInfo:inet_pton abnormal [" << cpAddrs[i] << "]"; 1800f6603c60Sopenharmony_ci } 1801f6603c60Sopenharmony_ci} 1802f6603c60Sopenharmony_ci 1803f6603c60Sopenharmony_ci/** 1804f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_2800 1805f6603c60Sopenharmony_ci * @tc.name : test inet_pton IPv6 normal 1806f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1807f6603c60Sopenharmony_ci */ 1808f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetPtonIpv6Normal, Function | MediumTest | Level2) 1809f6603c60Sopenharmony_ci{ 1810f6603c60Sopenharmony_ci int ret; 1811f6603c60Sopenharmony_ci struct in6_addr rst = {0}; 1812f6603c60Sopenharmony_ci char cpAddrs[6][40] = {"0101:0101:0101:0101:1010:1010:1010:1010", "0:0:0:0:0:0:0:0", 1813f6603c60Sopenharmony_ci "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF", "::", "1::", "0011:0011:0011:0011:11:11:11:11"}; 1814f6603c60Sopenharmony_ci for (int i = 0; i < 6; i++) { 1815f6603c60Sopenharmony_ci ret = inet_pton(AF_INET6, cpAddrs[i], &rst); 1816f6603c60Sopenharmony_ci EXPECT_EQ(1, ret) << "ErrInfo:inet_pton [" << cpAddrs[i] << "]"; 1817f6603c60Sopenharmony_ci } 1818f6603c60Sopenharmony_ci} 1819f6603c60Sopenharmony_ci 1820f6603c60Sopenharmony_ci/** 1821f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_2900 1822f6603c60Sopenharmony_ci * @tc.name : test inet_pton IPv6 abnormal 1823f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1824f6603c60Sopenharmony_ci */ 1825f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetPtonIpv6Abnormal, Function | MediumTest | Level2) 1826f6603c60Sopenharmony_ci{ 1827f6603c60Sopenharmony_ci int ret; 1828f6603c60Sopenharmony_ci struct in6_addr rst = {0}; 1829f6603c60Sopenharmony_ci char cpAddrs[7][40] = {"127.0.0.1", "f", ":", "0:0", "1:::", ":::::::", 1830f6603c60Sopenharmony_ci "1111:1111:1111:1111:1111:1111:1111:111G"}; 1831f6603c60Sopenharmony_ci for (int i = 0; i < 7; i++) { 1832f6603c60Sopenharmony_ci ret = inet_pton(AF_INET6, cpAddrs[i], &rst); 1833f6603c60Sopenharmony_ci EXPECT_EQ(0, ret) << "ErrInfo:inet_pton abnormal [" << cpAddrs[i] << "]"; 1834f6603c60Sopenharmony_ci } 1835f6603c60Sopenharmony_ci} 1836f6603c60Sopenharmony_ci 1837f6603c60Sopenharmony_ci/** 1838f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_3000 1839f6603c60Sopenharmony_ci * @tc.name : test inet_pton with invalid family 1840f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1841f6603c60Sopenharmony_ci */ 1842f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetPtonInvalidFamily, Function | MediumTest | Level2) 1843f6603c60Sopenharmony_ci{ 1844f6603c60Sopenharmony_ci struct in_addr rst = {0}; 1845f6603c60Sopenharmony_ci int ret = inet_pton(AF_IPX, "127.0.0.1", &rst); 1846f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1847f6603c60Sopenharmony_ci ret = inet_pton(-1, "127.0.0.1", &rst); 1848f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 1849f6603c60Sopenharmony_ci} 1850f6603c60Sopenharmony_ci 1851f6603c60Sopenharmony_ci/** 1852f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_3100 1853f6603c60Sopenharmony_ci * @tc.name : test inet_ntop IPv4 normal 1854f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1855f6603c60Sopenharmony_ci */ 1856f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetNtopIpv4Normal, Function | MediumTest | Level2) 1857f6603c60Sopenharmony_ci{ 1858f6603c60Sopenharmony_ci const char* ret = nullptr; 1859f6603c60Sopenharmony_ci struct in_addr inputAddr = {0}; 1860f6603c60Sopenharmony_ci char rstBuff[INET_ADDRSTRLEN]; 1861f6603c60Sopenharmony_ci#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 1862f6603c60Sopenharmony_ci unsigned int inputLittle[4] = {0x64d43a0a, 0, 255, 4294967295}; 1863f6603c60Sopenharmony_ci#else 1864f6603c60Sopenharmony_ci unsigned int inputBig[4] = {171627620, 0, 4278190080, 4294967295}; 1865f6603c60Sopenharmony_ci#endif 1866f6603c60Sopenharmony_ci 1867f6603c60Sopenharmony_ci char expectAddrs[4][16] = {"10.58.212.100", "0.0.0.0", "255.0.0.0", "255.255.255.255"}; 1868f6603c60Sopenharmony_ci for (int i = 0; i < 4; i++) { 1869f6603c60Sopenharmony_ci#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 1870f6603c60Sopenharmony_ci inputAddr.s_addr = inputLittle[i]; 1871f6603c60Sopenharmony_ci#else 1872f6603c60Sopenharmony_ci inputAddr.s_addr = inputBig[i]; 1873f6603c60Sopenharmony_ci#endif 1874f6603c60Sopenharmony_ci ret = inet_ntop(AF_INET, &inputAddr, rstBuff, sizeof(rstBuff)); 1875f6603c60Sopenharmony_ci if (ret == nullptr) { 1876f6603c60Sopenharmony_ci EXPECT_TRUE(ret != NULL) << "ErrInfo:inet_ntop NULL [" << expectAddrs[i] << "]"; 1877f6603c60Sopenharmony_ci } else { 1878f6603c60Sopenharmony_ci printf("[###]inet_ntop expect [%s]: ret[%s], buf[%s]\n", expectAddrs[i], ret, rstBuff); 1879f6603c60Sopenharmony_ci EXPECT_STREQ(expectAddrs[i], ret); 1880f6603c60Sopenharmony_ci EXPECT_STREQ(expectAddrs[i], rstBuff); 1881f6603c60Sopenharmony_ci } 1882f6603c60Sopenharmony_ci } 1883f6603c60Sopenharmony_ci} 1884f6603c60Sopenharmony_ci 1885f6603c60Sopenharmony_ci/** 1886f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_3200 1887f6603c60Sopenharmony_ci * @tc.name : test inet_ntop IPv4 boundary input 1888f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1889f6603c60Sopenharmony_ci */ 1890f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetNtopIpv4Abnormal, Function | MediumTest | Level2) 1891f6603c60Sopenharmony_ci{ 1892f6603c60Sopenharmony_ci const char* ret = nullptr; 1893f6603c60Sopenharmony_ci struct in_addr inputAddr = {0}; 1894f6603c60Sopenharmony_ci char rstBuff[INET_ADDRSTRLEN]; 1895f6603c60Sopenharmony_ci char expectStr[2][16] = {"255.255.255.255", "0.0.0.0"}; 1896f6603c60Sopenharmony_ci for (int i = 0; i < 2; i++) { 1897f6603c60Sopenharmony_ci inputAddr.s_addr = in_addr_t(i == 0 ? -1 : 4294967296); 1898f6603c60Sopenharmony_ci ret = inet_ntop(AF_INET, &inputAddr, rstBuff, sizeof(rstBuff)); 1899f6603c60Sopenharmony_ci ASSERT_TRUE(ret != NULL); 1900f6603c60Sopenharmony_ci EXPECT_STREQ(expectStr[i], ret); 1901f6603c60Sopenharmony_ci EXPECT_STREQ(expectStr[i], rstBuff); 1902f6603c60Sopenharmony_ci } 1903f6603c60Sopenharmony_ci} 1904f6603c60Sopenharmony_ci 1905f6603c60Sopenharmony_ci/** 1906f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_3300 1907f6603c60Sopenharmony_ci * @tc.name : test inet_ntop IPv6 normal 1908f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1909f6603c60Sopenharmony_ci */ 1910f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetNtopIpv6Normal, Function | MediumTest | Level2) 1911f6603c60Sopenharmony_ci{ 1912f6603c60Sopenharmony_ci int iret; 1913f6603c60Sopenharmony_ci const char* ret = nullptr; 1914f6603c60Sopenharmony_ci struct in6_addr inputAddr = {0}; 1915f6603c60Sopenharmony_ci char rstBuff[INET6_ADDRSTRLEN]; 1916f6603c60Sopenharmony_ci char inputAddrs[6][40] = {"0101:0101:0101:0101:1010:1010:1010:1010", "0:0:0:0:0:0:0:0", 1917f6603c60Sopenharmony_ci "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF", "::", "1::", "0011:0011:0011:0011:11:11:11:11"}; 1918f6603c60Sopenharmony_ci char expectAddrs[6][40] = {"101:101:101:101:1010:1010:1010:1010", "::", 1919f6603c60Sopenharmony_ci "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", "::", "1::", "11:11:11:11:11:11:11:11"}; 1920f6603c60Sopenharmony_ci for (int i = 0; i < 6; i++) { 1921f6603c60Sopenharmony_ci iret = inet_pton(AF_INET6, inputAddrs[i], &inputAddr); 1922f6603c60Sopenharmony_ci ASSERT_EQ(1, iret); 1923f6603c60Sopenharmony_ci ret = inet_ntop(AF_INET6, &inputAddr, rstBuff, sizeof(rstBuff)); 1924f6603c60Sopenharmony_ci if (ret == nullptr) { 1925f6603c60Sopenharmony_ci EXPECT_TRUE(ret != NULL) << "ErrInfo:inet_ntop NULL [" << expectAddrs[i] << "]"; 1926f6603c60Sopenharmony_ci } else { 1927f6603c60Sopenharmony_ci printf("[###]inet_ntop expect [%s]: ret[%s], buf[%s]\n", expectAddrs[i], ret, rstBuff); 1928f6603c60Sopenharmony_ci EXPECT_STREQ(expectAddrs[i], ret); 1929f6603c60Sopenharmony_ci EXPECT_STREQ(expectAddrs[i], rstBuff); 1930f6603c60Sopenharmony_ci } 1931f6603c60Sopenharmony_ci } 1932f6603c60Sopenharmony_ci} 1933f6603c60Sopenharmony_ci 1934f6603c60Sopenharmony_ci/** 1935f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_3400 1936f6603c60Sopenharmony_ci * @tc.name : test inet_ntop IPv6 boundary input 1937f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1938f6603c60Sopenharmony_ci */ 1939f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetNtopIpv6Abnormal, Function | MediumTest | Level2) 1940f6603c60Sopenharmony_ci{ 1941f6603c60Sopenharmony_ci const char* ret = nullptr; 1942f6603c60Sopenharmony_ci struct in6_addr inputAddr = {0}; 1943f6603c60Sopenharmony_ci char rstBuff[INET6_ADDRSTRLEN]; 1944f6603c60Sopenharmony_ci char expectStr[2][40] = {"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", "::"}; 1945f6603c60Sopenharmony_ci for (int i = 0; i < 2; i++) { 1946f6603c60Sopenharmony_ci for (int j = 0; j < 16; j++) { 1947f6603c60Sopenharmony_ci inputAddr.s6_addr[j] = (i == 0 ? -1 : 256); 1948f6603c60Sopenharmony_ci } 1949f6603c60Sopenharmony_ci ret = inet_ntop(AF_INET6, &inputAddr, rstBuff, sizeof(rstBuff)); 1950f6603c60Sopenharmony_ci ASSERT_TRUE(ret != NULL); 1951f6603c60Sopenharmony_ci EXPECT_STREQ(expectStr[i], ret); 1952f6603c60Sopenharmony_ci EXPECT_STREQ(expectStr[i], rstBuff); 1953f6603c60Sopenharmony_ci } 1954f6603c60Sopenharmony_ci} 1955f6603c60Sopenharmony_ci 1956f6603c60Sopenharmony_ci/** 1957f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_3500 1958f6603c60Sopenharmony_ci * @tc.name : test inet_ntop with invalid family 1959f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1960f6603c60Sopenharmony_ci */ 1961f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetNtopInvalidFamily, Function | MediumTest | Level2) 1962f6603c60Sopenharmony_ci{ 1963f6603c60Sopenharmony_ci int iret; 1964f6603c60Sopenharmony_ci const char* ret = nullptr; 1965f6603c60Sopenharmony_ci struct in6_addr inputAddr = {0}; 1966f6603c60Sopenharmony_ci char rstBuff[INET6_ADDRSTRLEN]; 1967f6603c60Sopenharmony_ci 1968f6603c60Sopenharmony_ci iret = inet_pton(AF_INET6, "1::", &inputAddr); 1969f6603c60Sopenharmony_ci ASSERT_EQ(1, iret); 1970f6603c60Sopenharmony_ci ret = inet_ntop(AF_IPX, &inputAddr, rstBuff, sizeof(rstBuff)); 1971f6603c60Sopenharmony_ci EXPECT_TRUE(ret == NULL); 1972f6603c60Sopenharmony_ci ret = inet_ntop(-1, &inputAddr, rstBuff, sizeof(rstBuff)); 1973f6603c60Sopenharmony_ci EXPECT_TRUE(ret == NULL); 1974f6603c60Sopenharmony_ci} 1975f6603c60Sopenharmony_ci 1976f6603c60Sopenharmony_ci/** 1977f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_3600 1978f6603c60Sopenharmony_ci * @tc.name : test inet_addr normal 1979f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1980f6603c60Sopenharmony_ci */ 1981f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetAddrNormal, Function | MediumTest | Level2) 1982f6603c60Sopenharmony_ci{ 1983f6603c60Sopenharmony_ci in_addr_t rst; 1984f6603c60Sopenharmony_ci char cpAddrs[7][16] = {"10.58.212.100", "0.0.0.0", "255", "0.255.0", "255.0.0.0", 1985f6603c60Sopenharmony_ci "255.255.255.255", "257"}; 1986f6603c60Sopenharmony_ci unsigned int expectList[7] = {1691630090, 0, 4278190080, 65280, 255, 4294967295, 16842752}; 1987f6603c60Sopenharmony_ci for (int i = 0; i < 7; i++) { 1988f6603c60Sopenharmony_ci rst = inet_addr(cpAddrs[i]); 1989f6603c60Sopenharmony_ci EXPECT_EQ(expectList[i], rst); 1990f6603c60Sopenharmony_ci printf("[###]inet_addr %s: uns[%u],s[%d],hex[%x]\n", cpAddrs[i], rst, rst, rst); 1991f6603c60Sopenharmony_ci } 1992f6603c60Sopenharmony_ci} 1993f6603c60Sopenharmony_ci 1994f6603c60Sopenharmony_ci/** 1995f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_3700 1996f6603c60Sopenharmony_ci * @tc.name : test inet_addr abnormal 1997f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 1998f6603c60Sopenharmony_ci */ 1999f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetAddrAbnormal, Function | MediumTest | Level2) 2000f6603c60Sopenharmony_ci{ 2001f6603c60Sopenharmony_ci in_addr_t rst; 2002f6603c60Sopenharmony_ci unsigned int expect = 4294967295; 2003f6603c60Sopenharmony_ci char invalidAddrs[4][10] = {"-1", "a", "%^", "257.1.1.1"}; 2004f6603c60Sopenharmony_ci for (int i = 0; i < 4; i++) { 2005f6603c60Sopenharmony_ci rst = inet_addr(invalidAddrs[i]); 2006f6603c60Sopenharmony_ci EXPECT_EQ(expect, rst) << "ErrInfo:inet_addr [" << invalidAddrs[i] << "]"; 2007f6603c60Sopenharmony_ci } 2008f6603c60Sopenharmony_ci} 2009f6603c60Sopenharmony_ci 2010f6603c60Sopenharmony_ci/** 2011f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_3800 2012f6603c60Sopenharmony_ci * @tc.name : test inet_aton normal 2013f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 2014f6603c60Sopenharmony_ci */ 2015f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetAtonNormal, Function | MediumTest | Level2) 2016f6603c60Sopenharmony_ci{ 2017f6603c60Sopenharmony_ci int ret; 2018f6603c60Sopenharmony_ci struct in_addr addr = {0}; 2019f6603c60Sopenharmony_ci char cpAddrs[7][16] = {"10.58.212.100", "0.0.0.0", "255", "0.255.0", "255.0.0.0", 2020f6603c60Sopenharmony_ci "255.255.255.255", "257"}; 2021f6603c60Sopenharmony_ci unsigned int expectList[7] = {1691630090, 0, 4278190080, 65280, 255, 4294967295, 16842752}; 2022f6603c60Sopenharmony_ci for (int i = 0; i < 7; i++) { 2023f6603c60Sopenharmony_ci ret = inet_aton(cpAddrs[i], &addr); 2024f6603c60Sopenharmony_ci EXPECT_EQ(1, ret); 2025f6603c60Sopenharmony_ci EXPECT_EQ(expectList[i], addr.s_addr); 2026f6603c60Sopenharmony_ci printf("##inet_aton %s: uns[%u],s[%d],hex[%x]\n", cpAddrs[i], addr.s_addr, addr.s_addr, addr.s_addr); 2027f6603c60Sopenharmony_ci } 2028f6603c60Sopenharmony_ci} 2029f6603c60Sopenharmony_ci 2030f6603c60Sopenharmony_ci/** 2031f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_3900 2032f6603c60Sopenharmony_ci * @tc.name : test inet_aton abnormal 2033f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 2034f6603c60Sopenharmony_ci */ 2035f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetAtonAbnormal, Function | MediumTest | Level2) 2036f6603c60Sopenharmony_ci{ 2037f6603c60Sopenharmony_ci int ret; 2038f6603c60Sopenharmony_ci struct in_addr addr = {0}; 2039f6603c60Sopenharmony_ci char invalidAddrs[4][10] = {"-1", "a", "%^", "257.1.1.1"}; 2040f6603c60Sopenharmony_ci for (int i = 0; i < 4; i++) { 2041f6603c60Sopenharmony_ci ret = inet_aton(invalidAddrs[i], &addr); 2042f6603c60Sopenharmony_ci EXPECT_EQ(0, ret) << "ErrInfo:inet_addr [" << invalidAddrs[i] << "]"; 2043f6603c60Sopenharmony_ci } 2044f6603c60Sopenharmony_ci} 2045f6603c60Sopenharmony_ci 2046f6603c60Sopenharmony_ci/** 2047f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_4000 2048f6603c60Sopenharmony_ci * @tc.name : test inet_ntoa normal 2049f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 2050f6603c60Sopenharmony_ci */ 2051f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetNtoaNormal, Function | MediumTest | Level2) 2052f6603c60Sopenharmony_ci{ 2053f6603c60Sopenharmony_ci char *rst = nullptr; 2054f6603c60Sopenharmony_ci struct in_addr addr = {0}; 2055f6603c60Sopenharmony_ci char expectAddrs[6][16] = {"10.58.212.100", "0.0.0.0", "255.255.255.255", "0.0.0.255", "0.255.0.0", "0.0.1.1"}; 2056f6603c60Sopenharmony_ci unsigned int inputList[6] = {1691630090, 0, 4294967295, 4278190080, 65280, 16842752}; 2057f6603c60Sopenharmony_ci for (int i = 0; i < 6; i++) { 2058f6603c60Sopenharmony_ci addr.s_addr = inputList[i]; 2059f6603c60Sopenharmony_ci rst = inet_ntoa(addr); 2060f6603c60Sopenharmony_ci if (rst == nullptr) { 2061f6603c60Sopenharmony_ci EXPECT_TRUE(rst != NULL); 2062f6603c60Sopenharmony_ci } else { 2063f6603c60Sopenharmony_ci EXPECT_STREQ(expectAddrs[i], rst); 2064f6603c60Sopenharmony_ci } 2065f6603c60Sopenharmony_ci printf("##inet_ntoa %u: rst is [%s]\n", inputList[i], expectAddrs[i]); 2066f6603c60Sopenharmony_ci } 2067f6603c60Sopenharmony_ci} 2068f6603c60Sopenharmony_ci 2069f6603c60Sopenharmony_ci/** 2070f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_4100 2071f6603c60Sopenharmony_ci * @tc.name : test inet_ntoa boundary input 2072f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 2073f6603c60Sopenharmony_ci */ 2074f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetNtoaAbnormal, Function | MediumTest | Level2) 2075f6603c60Sopenharmony_ci{ 2076f6603c60Sopenharmony_ci const char* ret = nullptr; 2077f6603c60Sopenharmony_ci struct in_addr addrInput = {0}; 2078f6603c60Sopenharmony_ci char expectStr[2][16] = {"255.255.255.255", "0.0.0.0"}; 2079f6603c60Sopenharmony_ci for (int i = 0; i < 2; i++) { 2080f6603c60Sopenharmony_ci addrInput.s_addr = (i == 0 ? -1 : 4294967296); 2081f6603c60Sopenharmony_ci ret = inet_ntoa(addrInput); 2082f6603c60Sopenharmony_ci ASSERT_TRUE(ret != NULL); 2083f6603c60Sopenharmony_ci EXPECT_STREQ(expectStr[i], ret); 2084f6603c60Sopenharmony_ci } 2085f6603c60Sopenharmony_ci} 2086f6603c60Sopenharmony_ci 2087f6603c60Sopenharmony_ci/** 2088f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_4200 2089f6603c60Sopenharmony_ci * @tc.name : test inet_network normal 2090f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 2091f6603c60Sopenharmony_ci */ 2092f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetNetworkNormal, Function | MediumTest | Level2) 2093f6603c60Sopenharmony_ci{ 2094f6603c60Sopenharmony_ci in_addr_t rst; 2095f6603c60Sopenharmony_ci char cpAddrs[7][16] = {"10.58.212.100", "0.0.0.0", "255", "0.255.0", "255.0.0.0", 2096f6603c60Sopenharmony_ci "255.255.255.255", "257"}; 2097f6603c60Sopenharmony_ci unsigned int expectList[7] = {171627620, 0, 255, 16711680, 4278190080, 4294967295, 257}; 2098f6603c60Sopenharmony_ci for (int i = 0; i < 7; i++) { 2099f6603c60Sopenharmony_ci rst = inet_network(cpAddrs[i]); 2100f6603c60Sopenharmony_ci EXPECT_EQ(expectList[i], rst); 2101f6603c60Sopenharmony_ci printf("##inet_network %s: uns[%u],s[%d],hex[%x]\n", cpAddrs, rst, rst, rst); 2102f6603c60Sopenharmony_ci } 2103f6603c60Sopenharmony_ci} 2104f6603c60Sopenharmony_ci 2105f6603c60Sopenharmony_ci/** 2106f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_4300 2107f6603c60Sopenharmony_ci * @tc.name : test inet_network abnormal 2108f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 2109f6603c60Sopenharmony_ci */ 2110f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetNetworkAbnormal, Function | MediumTest | Level2) 2111f6603c60Sopenharmony_ci{ 2112f6603c60Sopenharmony_ci in_addr_t rst; 2113f6603c60Sopenharmony_ci unsigned int expect = 4294967295; 2114f6603c60Sopenharmony_ci char invalidAddrs[4][10] = {"-1", "a", "%^", "257.1.1.1"}; 2115f6603c60Sopenharmony_ci for (int i = 0; i < 4; i++) { 2116f6603c60Sopenharmony_ci rst = inet_network(invalidAddrs[i]); 2117f6603c60Sopenharmony_ci EXPECT_EQ(expect, rst) << "ErrInfo:inet_network [" << invalidAddrs[i] << "]"; 2118f6603c60Sopenharmony_ci } 2119f6603c60Sopenharmony_ci} 2120f6603c60Sopenharmony_ci 2121f6603c60Sopenharmony_ci/** 2122f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_4400 2123f6603c60Sopenharmony_ci * @tc.name : test inet_lnaof normal 2124f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 2125f6603c60Sopenharmony_ci */ 2126f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetLnaofNormal, Function | MediumTest | Level2) 2127f6603c60Sopenharmony_ci{ 2128f6603c60Sopenharmony_ci in_addr_t rst; 2129f6603c60Sopenharmony_ci struct in_addr addr = {0}; 2130f6603c60Sopenharmony_ci char cpAddrs[7][16] = {"10.58.212.100", "0.0.0.0", "255", "0.255.0", "255.0.0.0", 2131f6603c60Sopenharmony_ci "255.255.255.255", "257"}; 2132f6603c60Sopenharmony_ci unsigned int expectList[7] = {13908490, 0, 0, 65280, 255, 255, 65536}; 2133f6603c60Sopenharmony_ci for (int i = 0; i < 7; i++) { 2134f6603c60Sopenharmony_ci addr.s_addr = inet_network(cpAddrs[i]); 2135f6603c60Sopenharmony_ci rst = inet_lnaof(addr); 2136f6603c60Sopenharmony_ci EXPECT_EQ(expectList[i], rst); 2137f6603c60Sopenharmony_ci printf("[###]inet_lnaof %s: uns[%u],s[%d],hex[%x]\n", cpAddrs[i], rst, rst, rst); 2138f6603c60Sopenharmony_ci } 2139f6603c60Sopenharmony_ci} 2140f6603c60Sopenharmony_ci 2141f6603c60Sopenharmony_ci/** 2142f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_4500 2143f6603c60Sopenharmony_ci * @tc.name : test inet_netof normal 2144f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 2145f6603c60Sopenharmony_ci */ 2146f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetNetofNormal, Function | MediumTest | Level2) 2147f6603c60Sopenharmony_ci{ 2148f6603c60Sopenharmony_ci in_addr_t rst; 2149f6603c60Sopenharmony_ci struct in_addr addr = {0}; 2150f6603c60Sopenharmony_ci char cpAddrs[7][16] = {"10.58.212.100", "0.0.0.0", "255", "0.255.0", "255.0.0.0", 2151f6603c60Sopenharmony_ci "255.255.255.255", "257"}; 2152f6603c60Sopenharmony_ci unsigned int expectList[7] = {100, 0, 16711680, 0, 0, 16777215, 1}; 2153f6603c60Sopenharmony_ci for (int i = 0; i < 7; i++) { 2154f6603c60Sopenharmony_ci addr.s_addr = inet_network(cpAddrs[i]); 2155f6603c60Sopenharmony_ci rst = inet_netof(addr); 2156f6603c60Sopenharmony_ci EXPECT_EQ(expectList[i], rst); 2157f6603c60Sopenharmony_ci printf("[###]inet_netof %s: uns[%u],s[%d],hex[%x]\n", cpAddrs[i], rst, rst, rst); 2158f6603c60Sopenharmony_ci } 2159f6603c60Sopenharmony_ci} 2160f6603c60Sopenharmony_ci 2161f6603c60Sopenharmony_ci/** 2162f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_4600 2163f6603c60Sopenharmony_ci * @tc.name : test inet_makeaddr normal 2164f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 2165f6603c60Sopenharmony_ci */ 2166f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInetMakeaddrNormal, Function | MediumTest | Level2) 2167f6603c60Sopenharmony_ci{ 2168f6603c60Sopenharmony_ci struct in_addr addrRst = {0}; 2169f6603c60Sopenharmony_ci int hostList[7] = {13908490, 0, 0, 65280, 255, 255, 65536}; 2170f6603c60Sopenharmony_ci int netList[7] = {100, 0, 16711680, 0, 0, 16777215, 1}; 2171f6603c60Sopenharmony_ci unsigned int expectList[7] = {171627620, 0, 255, 16711680, 4278190080, 4294967295, 257}; 2172f6603c60Sopenharmony_ci for (int i = 0; i < 7; i++) { 2173f6603c60Sopenharmony_ci addrRst = inet_makeaddr(netList[i], hostList[i]); 2174f6603c60Sopenharmony_ci EXPECT_EQ(expectList[i], addrRst.s_addr); 2175f6603c60Sopenharmony_ci printf("[###]inet_makeaddr: uns[%u],s[%d],hex[%x]\n", addrRst.s_addr, addrRst.s_addr, addrRst.s_addr); 2176f6603c60Sopenharmony_ci } 2177f6603c60Sopenharmony_ci} 2178f6603c60Sopenharmony_ci 2179f6603c60Sopenharmony_ci/** 2180f6603c60Sopenharmony_ci * @tc.number : SUB_KERNEL_NET_4700 2181f6603c60Sopenharmony_ci * @tc.name : test invalid parameter 2182f6603c60Sopenharmony_ci * @tc.desc : [C- SOFTWARE -0200] 2183f6603c60Sopenharmony_ci */ 2184f6603c60Sopenharmony_ciHWTEST_F(ActsNetTest, testInvalidParameter, Function | MediumTest | Level3) 2185f6603c60Sopenharmony_ci{ 2186f6603c60Sopenharmony_ci int ret; 2187f6603c60Sopenharmony_ci int fdFail = -1; 2188f6603c60Sopenharmony_ci int fdSuccess = -1; 2189f6603c60Sopenharmony_ci 2190f6603c60Sopenharmony_ci fdFail = socket(0, 0, 0); 2191f6603c60Sopenharmony_ci EXPECT_EQ(fdFail, -1); 2192f6603c60Sopenharmony_ci fdSuccess = socket(AF_INET, SOCK_STREAM, 0); 2193f6603c60Sopenharmony_ci EXPECT_NE(fdSuccess, -1); 2194f6603c60Sopenharmony_ci 2195f6603c60Sopenharmony_ci ret = ::bind(fdFail, nullptr, sizeof(struct sockaddr_in)); 2196f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2197f6603c60Sopenharmony_ci ret = ::bind(fdSuccess, nullptr, sizeof(struct sockaddr_in)); 2198f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2199f6603c60Sopenharmony_ci 2200f6603c60Sopenharmony_ci ret = connect(fdFail, nullptr, sizeof(struct sockaddr)); 2201f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2202f6603c60Sopenharmony_ci ret = connect(fdSuccess, nullptr, sizeof(struct sockaddr)); 2203f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2204f6603c60Sopenharmony_ci 2205f6603c60Sopenharmony_ci ret = accept(fdFail, nullptr, nullptr); 2206f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2207f6603c60Sopenharmony_ci ret = accept(fdSuccess, nullptr, nullptr); 2208f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2209f6603c60Sopenharmony_ci 2210f6603c60Sopenharmony_ci ret = getsockname(fdFail, nullptr, nullptr); 2211f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2212f6603c60Sopenharmony_ci ret = getsockname(fdSuccess, nullptr, nullptr); 2213f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2214f6603c60Sopenharmony_ci 2215f6603c60Sopenharmony_ci ret = getpeername(fdFail, nullptr, nullptr); 2216f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2217f6603c60Sopenharmony_ci ret = getpeername(fdSuccess, nullptr, nullptr); 2218f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2219f6603c60Sopenharmony_ci 2220f6603c60Sopenharmony_ci ret = send(fdFail, nullptr, strlen(g_srvMsg), 0); 2221f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2222f6603c60Sopenharmony_ci ret = send(fdSuccess, nullptr, strlen(g_srvMsg), 0); 2223f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2224f6603c60Sopenharmony_ci 2225f6603c60Sopenharmony_ci ret = sendto(fdFail, nullptr, strlen(g_srvMsg), 0, nullptr, (socklen_t)sizeof(struct sockaddr_in)); 2226f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2227f6603c60Sopenharmony_ci ret = sendto(fdSuccess, nullptr, strlen(g_srvMsg), 0, nullptr, (socklen_t)sizeof(struct sockaddr_in)); 2228f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2229f6603c60Sopenharmony_ci 2230f6603c60Sopenharmony_ci ret = recv(fdFail, nullptr, sizeof(g_srvMsg), 0); 2231f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2232f6603c60Sopenharmony_ci ret = recv(fdSuccess, nullptr, sizeof(g_srvMsg), 0); 2233f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2234f6603c60Sopenharmony_ci 2235f6603c60Sopenharmony_ci struct msghdr msg = {nullptr}; 2236f6603c60Sopenharmony_ci ret = recvmsg(fdFail, &msg, 0); 2237f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2238f6603c60Sopenharmony_ci ret = recvmsg(fdSuccess, &msg, 0); 2239f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2240f6603c60Sopenharmony_ci 2241f6603c60Sopenharmony_ci ret = recvfrom(fdFail, nullptr, sizeof(g_srvMsg), 0, nullptr, nullptr); 2242f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2243f6603c60Sopenharmony_ci ret = recvfrom(fdSuccess, nullptr, sizeof(g_srvMsg), 0, nullptr, nullptr); 2244f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2245f6603c60Sopenharmony_ci 2246f6603c60Sopenharmony_ci ret = setsockopt(fdFail, SOL_SOCKET, SO_RCVTIMEO, nullptr, (socklen_t)sizeof(struct timeval)); 2247f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2248f6603c60Sopenharmony_ci ret = setsockopt(fdSuccess, SOL_SOCKET, SO_RCVTIMEO, nullptr, (socklen_t)sizeof(struct timeval)); 2249f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2250f6603c60Sopenharmony_ci ret = getsockopt(fdFail, SOL_SOCKET, SO_RCVTIMEO, nullptr, (socklen_t*)sizeof(struct timeval)); 2251f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2252f6603c60Sopenharmony_ci ret = getsockopt(fdSuccess, SOL_SOCKET, SO_RCVTIMEO, nullptr, (socklen_t*)sizeof(struct timeval)); 2253f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2254f6603c60Sopenharmony_ci 2255f6603c60Sopenharmony_ci ret = sendmsg(fdFail, nullptr, 0); 2256f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2257f6603c60Sopenharmony_ci ret = sendmsg(fdSuccess, nullptr, 0); 2258f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2259f6603c60Sopenharmony_ci 2260f6603c60Sopenharmony_ci ret = listen(fdFail, 0); 2261f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2262f6603c60Sopenharmony_ci ret = select(fdFail, nullptr, nullptr, nullptr, nullptr); 2263f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2264f6603c60Sopenharmony_ci 2265f6603c60Sopenharmony_ci ret = shutdown(fdFail, SHUT_RD); 2266f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2267f6603c60Sopenharmony_ci ret = shutdown(fdSuccess, -1); 2268f6603c60Sopenharmony_ci EXPECT_EQ(-1, ret); 2269f6603c60Sopenharmony_ci 2270f6603c60Sopenharmony_ci ret = close(fdSuccess); 2271f6603c60Sopenharmony_ci EXPECT_EQ(0, ret); 2272f6603c60Sopenharmony_ci} 2273