Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Kernel Liteos A
提交
4ff66c7f
K
Kernel Liteos A
项目概览
OpenHarmony
/
Kernel Liteos A
1 年多 前同步成功
通知
460
Star
414
Fork
55
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel Liteos A
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
4ff66c7f
编写于
3月 15, 2023
作者:
O
openharmony_ci
提交者:
Gitee
3月 15, 2023
浏览文件
操作
浏览文件
下载
差异文件
!1133 fix: 修复网络容器测试失败问题
Merge pull request !1133 from zhushengle/container_net
上级
2845efe8
8f937c87
变更
16
隐藏空白更改
内联
并排
Showing
16 changed file
with
263 addition
and
238 deletion
+263
-238
testsuites/unittest/container/It_container_test.cpp
testsuites/unittest/container/It_container_test.cpp
+135
-36
testsuites/unittest/container/It_container_test.h
testsuites/unittest/container/It_container_test.h
+4
-0
testsuites/unittest/container/config.gni
testsuites/unittest/container/config.gni
+2
-1
testsuites/unittest/container/full/It_net_container_010.cpp
testsuites/unittest/container/full/It_net_container_010.cpp
+2
-0
testsuites/unittest/container/full/It_pid_container_003.cpp
testsuites/unittest/container/full/It_pid_container_003.cpp
+2
-0
testsuites/unittest/container/full/It_pid_container_009.cpp
testsuites/unittest/container/full/It_pid_container_009.cpp
+3
-1
testsuites/unittest/container/full/It_pid_container_020.cpp
testsuites/unittest/container/full/It_pid_container_020.cpp
+2
-0
testsuites/unittest/container/full/It_pid_container_024.cpp
testsuites/unittest/container/full/It_pid_container_024.cpp
+2
-0
testsuites/unittest/container/full/It_user_container_005.cpp
testsuites/unittest/container/full/It_user_container_005.cpp
+2
-0
testsuites/unittest/container/full/It_uts_container_003.cpp
testsuites/unittest/container/full/It_uts_container_003.cpp
+2
-0
testsuites/unittest/container/smoke/It_net_container_001.cpp
testsuites/unittest/container/smoke/It_net_container_001.cpp
+26
-38
testsuites/unittest/container/smoke/It_net_container_002.cpp
testsuites/unittest/container/smoke/It_net_container_002.cpp
+31
-38
testsuites/unittest/container/smoke/It_net_container_005.cpp
testsuites/unittest/container/smoke/It_net_container_005.cpp
+2
-59
testsuites/unittest/container/smoke/It_net_container_009.cpp
testsuites/unittest/container/smoke/It_net_container_009.cpp
+44
-65
testsuites/unittest/container/smoke/It_pid_container_032.cpp
testsuites/unittest/container/smoke/It_pid_container_032.cpp
+2
-0
testsuites/unittest/container/smoke/It_pid_container_033.cpp
testsuites/unittest/container/smoke/It_pid_container_033.cpp
+2
-0
未找到文件。
testsuites/unittest/container/It_container_test.cpp
浏览文件 @
4ff66c7f
...
...
@@ -30,6 +30,10 @@
#include <climits>
#include <gtest/gtest.h>
#include <cstdio>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <net/route.h>
#include "It_container_test.h"
const
char
*
USERDATA_DIR_NAME
=
"/userdata"
;
...
...
@@ -41,6 +45,8 @@ const char *FS_TYPE = "vfat";
const
int
BIT_ON_RETURN_VALUE
=
8
;
const
int
STACK_SIZE
=
1024
*
1024
;
const
int
CHILD_FUNC_ARG
=
0x2088
;
static
const
int
TRY_COUNT
=
5
;
static
const
int
OFFSET
=
2
;
int
ChildFunction
(
void
*
args
)
{
...
...
@@ -145,6 +151,98 @@ int GetLine(char *buf, int count, int maxLen, char **array)
return
(
index
+
1
);
}
static
int
TryResetNetAddr
(
const
char
*
ifname
,
const
char
*
ip
,
const
char
*
netmask
,
const
char
*
gw
)
{
int
ret
;
struct
ifreq
ifr
;
struct
rtentry
rt
;
int
fd
=
socket
(
AF_INET
,
SOCK_DGRAM
,
IPPROTO_IP
);
if
(
fd
<
0
)
{
return
-
1
;
}
ret
=
strncpy_s
(
ifr
.
ifr_name
,
sizeof
(
ifr
.
ifr_name
),
ifname
,
IFNAMSIZ
);
if
(
ret
!=
EOK
)
{
(
void
)
close
(
fd
);
return
-
1
;
}
ifr
.
ifr_addr
.
sa_family
=
AF_INET
;
inet_pton
(
AF_INET
,
netmask
,
ifr
.
ifr_addr
.
sa_data
+
OFFSET
);
ret
=
ioctl
(
fd
,
SIOCSIFNETMASK
,
&
ifr
);
if
(
ret
!=
0
)
{
printf
(
"[ERR][%s:%d] ioctl SIOCSIFNETMASK failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
(
void
)
close
(
fd
);
return
-
1
;
}
inet_pton
(
AF_INET
,
ip
,
ifr
.
ifr_addr
.
sa_data
+
OFFSET
);
ret
=
ioctl
(
fd
,
SIOCSIFADDR
,
&
ifr
);
if
(
ret
!=
0
)
{
(
void
)
close
(
fd
);
printf
(
"[ERR][%s:%d] ioctl SIOCGIFADDR failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
return
-
1
;
}
struct
sockaddr_in
*
addr
=
reinterpret_cast
<
struct
sockaddr_in
*>
(
&
rt
.
rt_gateway
);
addr
->
sin_family
=
AF_INET
;
addr
->
sin_addr
.
s_addr
=
inet_addr
(
gw
);
rt
.
rt_flags
=
RTF_GATEWAY
;
ret
=
ioctl
(
fd
,
SIOCADDRT
,
&
rt
);
if
(
ret
!=
0
)
{
(
void
)
close
(
fd
);
printf
(
"[ERR][%s:%d] ioctl SIOCADDRT failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
return
ret
;
}
ret
=
close
(
fd
);
if
(
ret
!=
0
)
{
printf
(
"[ERR][%s:%d] close failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
return
ret
;
}
return
ret
;
}
int
NetContainerResetNetAddr
(
const
char
*
ifname
,
const
char
*
ip
,
const
char
*
netmask
,
const
char
*
gw
)
{
int
ret
;
int
try_count
=
TRY_COUNT
;
while
(
try_count
--
)
{
ret
=
TryResetNetAddr
(
ifname
,
ip
,
netmask
,
gw
);
if
(
ret
==
0
)
{
break
;
}
sleep
(
1
);
}
return
ret
;
}
int
NetContainerGetLocalIP
(
const
char
*
ifname
,
char
*
ip
,
int
ipLen
)
{
struct
ifreq
ifr
=
{
0
};
int
ret
=
strcpy_s
(
ifr
.
ifr_name
,
sizeof
(
ifr
.
ifr_name
),
ifname
);
if
(
ret
!=
EOK
)
{
return
-
1
;
/* -1: errno */
}
int
inet_sock
=
socket
(
AF_INET
,
SOCK_DGRAM
,
0
);
if
(
inet_sock
<
0
)
{
return
-
2
;
/* -2: errno */
}
ret
=
ioctl
(
inet_sock
,
SIOCGIFADDR
,
&
ifr
);
if
(
ret
!=
0
)
{
(
void
)
close
(
inet_sock
);
printf
(
"[ERR][%s:%d] ioctl SIOCGIFADDR failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
return
-
3
;
/* -3: errno */
}
ret
=
close
(
inet_sock
);
if
(
ret
!=
0
)
{
return
-
4
;
/* -4: errno */
}
ret
=
strcpy_s
(
ip
,
ipLen
,
inet_ntoa
((
reinterpret_cast
<
struct
sockaddr_in
*>
(
&
ifr
.
ifr_addr
))
->
sin_addr
));
if
(
ret
!=
EOK
)
{
(
void
)
close
(
inet_sock
);
return
-
5
;
/* -5: errno */
}
return
0
;
}
std
::
string
GenContainerLinkPath
(
int
pid
,
const
std
::
string
&
containerType
)
{
std
::
ostringstream
buf
;
...
...
@@ -290,18 +388,6 @@ HWTEST_F(ContainerTest, ItNetContainer009, TestSize.Level0)
ItNetContainer009
();
}
/**
* @tc.name: Container_NET_Test_010
* @tc.desc: uts container function test case
* @tc.type: FUNC
* @tc.require: issueI6HPH2
* @tc.author:
*/
HWTEST_F
(
ContainerTest
,
ItNetContainer010
,
TestSize
.
Level0
)
{
ItNetContainer010
();
}
/**
* @tc.name: Container_NET_Test_011
* @tc.desc: uts container function test case
...
...
@@ -400,6 +486,30 @@ HWTEST_F(ContainerTest, ItUserContainer007, TestSize.Level0)
}
#endif
#if defined(LOSCFG_USER_TEST_PID_CONTAINER)
/**
* @tc.name: Container_Pid_Test_032
* @tc.desc: pid container function test case
* @tc.type: FUNC
* @tc.require: issueI6HDQK
* @tc.author:
*/
HWTEST_F
(
ContainerTest
,
ItPidContainer032
,
TestSize
.
Level0
)
{
ItPidContainer032
();
}
/**
* @tc.name: Container_Pid_Test_033
* @tc.desc: pid container function test case
* @tc.type: FUNC
* @tc.require: issueI6HDQK
* @tc.author:
*/
HWTEST_F
(
ContainerTest
,
ItPidContainer033
,
TestSize
.
Level0
)
{
ItPidContainer033
();
}
/**
* @tc.name: Container_Pid_Test_023
* @tc.desc: pid container function test case
...
...
@@ -495,30 +605,6 @@ HWTEST_F(ContainerTest, ItPidContainer031, TestSize.Level0)
{
ItPidContainer031
();
}
/**
* @tc.name: Container_Pid_Test_032
* @tc.desc: pid container function test case
* @tc.type: FUNC
* @tc.require: issueI6HDQK
* @tc.author:
*/
HWTEST_F
(
ContainerTest
,
ItPidContainer032
,
TestSize
.
Level0
)
{
ItPidContainer032
();
}
/**
* @tc.name: Container_Pid_Test_033
* @tc.desc: pid container function test case
* @tc.type: FUNC
* @tc.require: issueI6HDQK
* @tc.author:
*/
HWTEST_F
(
ContainerTest
,
ItPidContainer033
,
TestSize
.
Level0
)
{
ItPidContainer033
();
}
#endif
#if defined(LOSCFG_USER_TEST_UTS_CONTAINER)
/**
...
...
@@ -1279,6 +1365,19 @@ HWTEST_F(ContainerTest, ItUserContainer005, TestSize.Level0)
ItUserContainer005
();
}
#endif
#if defined(LOSCFG_USER_TEST_NET_CONTAINER)
/**
* @tc.name: Container_NET_Test_010
* @tc.desc: uts container function test case
* @tc.type: FUNC
* @tc.require: issueI6HPH2
* @tc.author:
*/
HWTEST_F
(
ContainerTest
,
ItNetContainer010
,
TestSize
.
Level0
)
{
ItNetContainer010
();
}
#endif
#endif
}
// namespace OHOS
...
...
testsuites/unittest/container/It_container_test.h
浏览文件 @
4ff66c7f
...
...
@@ -101,6 +101,10 @@ pid_t CloneWrapper(int (*func)(void *), int flag, void *args);
int
WaitChild
(
pid_t
pid
,
int
*
status
,
int
errNo1
,
int
errNo2
);
int
NetContainerResetNetAddr
(
const
char
*
ifname
,
const
char
*
ip
,
const
char
*
netmask
,
const
char
*
gw
);
int
NetContainerGetLocalIP
(
const
char
*
ifname
,
char
*
ip
,
int
ipLen
);
std
::
string
GenContainerLinkPath
(
int
pid
,
const
std
::
string
&
containerType
);
extern
std
::
string
ReadlinkContainer
(
int
pid
,
const
std
::
string
&
containerType
);
...
...
testsuites/unittest/container/config.gni
浏览文件 @
4ff66c7f
...
...
@@ -160,8 +160,9 @@ if (defined(LOSCFG_USER_TEST_NET_CONTAINER)) {
"$TEST_UNITTEST_DIR/container/smoke/It_net_container_007.cpp",
"$TEST_UNITTEST_DIR/container/smoke/It_net_container_008.cpp",
"$TEST_UNITTEST_DIR/container/smoke/It_net_container_009.cpp",
"$TEST_UNITTEST_DIR/container/smoke/It_net_container_010.cpp",
"$TEST_UNITTEST_DIR/container/smoke/It_net_container_011.cpp",
"$TEST_UNITTEST_DIR/container/smoke/It_net_container_012.cpp",
]
sources_full +=
[ "$TEST_UNITTEST_DIR/container/full/It_net_container_010.cpp" ]
}
testsuites/unittest/container/
smoke
/It_net_container_010.cpp
→
testsuites/unittest/container/
full
/It_net_container_010.cpp
浏览文件 @
4ff66c7f
...
...
@@ -77,4 +77,6 @@ void ItNetContainer010(void)
ASSERT_EQ
(
ret
,
pid
);
status
=
WEXITSTATUS
(
status
);
ASSERT_EQ
(
status
,
EXIT_CODE_ERRNO_5
);
sleep
(
5
);
/* 5: Wait for process resources to be reclaimed */
}
testsuites/unittest/container/full/It_pid_container_003.cpp
浏览文件 @
4ff66c7f
...
...
@@ -99,4 +99,6 @@ void ItPidContainer003(void)
ASSERT_NE
(
ret
,
0
);
ret
=
WEXITSTATUS
(
status
);
ASSERT_EQ
(
ret
,
CONTAINER_FIRST_PID
);
sleep
(
5
);
/* 5: Wait for process resources to be reclaimed */
}
testsuites/unittest/container/full/It_pid_container_009.cpp
浏览文件 @
4ff66c7f
...
...
@@ -46,7 +46,7 @@ static int ChildFun(void *p)
for
(
int
i
=
0
;
i
<
count
;
i
++
)
{
pid
=
fork
();
if
(
pid
==
0
)
{
sleep
(
5
);
/* delay 5
s */
sleep
(
2
);
/* delay 2
s */
exit
(
0
);
}
else
if
(
pid
<
0
)
{
if
(
errno
!=
EAGAIN
)
{
...
...
@@ -91,4 +91,6 @@ void ItPidContainer009(void)
ASSERT_NE
(
ret
,
0
);
ret
=
WEXITSTATUS
(
status
);
ASSERT_EQ
(
ret
,
EXIT_CODE_ERRNO_255
);
sleep
(
5
);
/* 5: Wait for process resources to be reclaimed */
}
testsuites/unittest/container/full/It_pid_container_020.cpp
浏览文件 @
4ff66c7f
...
...
@@ -112,4 +112,6 @@ void ItPidContainer020(void)
ASSERT_NE
(
ret
,
0
);
ret
=
WEXITSTATUS
(
status
);
ASSERT_EQ
(
ret
,
0
);
sleep
(
5
);
/* 5: Wait for process resources to be reclaimed */
}
testsuites/unittest/container/full/It_pid_container_024.cpp
浏览文件 @
4ff66c7f
...
...
@@ -77,4 +77,6 @@ void ItPidContainer024(void)
ASSERT_EQ
(
ret
,
pid
);
status
=
WEXITSTATUS
(
status
);
ASSERT_EQ
(
status
,
EXIT_CODE_ERRNO_5
);
sleep
(
5
);
/* 5: Wait for process resources to be reclaimed */
}
testsuites/unittest/container/full/It_user_container_005.cpp
浏览文件 @
4ff66c7f
...
...
@@ -85,4 +85,6 @@ void ItUserContainer005(void)
status
=
WEXITSTATUS
(
status
);
ASSERT_EQ
(
status
,
EXIT_TRUE_CODE
);
sleep
(
5
);
/* 5: Wait for process resources to be reclaimed */
}
testsuites/unittest/container/full/It_uts_container_003.cpp
浏览文件 @
4ff66c7f
...
...
@@ -78,4 +78,6 @@ void ItUtsContainer003(void)
ASSERT_EQ
(
ret
,
pid
);
status
=
WEXITSTATUS
(
status
);
ASSERT_EQ
(
status
,
EXIT_CODE_ERRNO_5
);
sleep
(
5
);
/* 5: Wait for process resources to be reclaimed */
}
testsuites/unittest/container/smoke/It_net_container_001.cpp
浏览文件 @
4ff66c7f
...
...
@@ -32,32 +32,11 @@
#include "It_container_test.h"
using
namespace
std
;
const
int
IpLen
=
16
;
static
int
GetLocalIP
(
char
*
ip
)
{
struct
ifreq
ifr
;
int
inet_sock
=
socket
(
AF_INET
,
SOCK_DGRAM
,
0
);
if
(
inet_sock
<
0
)
{
return
-
1
;
}
int
ret
=
strcpy_s
(
ifr
.
ifr_name
,
sizeof
(
ifr
.
ifr_name
),
"eth0"
);
if
(
ret
!=
EOK
)
{
(
void
)
close
(
inet_sock
);
return
-
1
;
}
ioctl
(
inet_sock
,
SIOCGIFADDR
,
&
ifr
);
ret
=
strcpy_s
(
ip
,
IpLen
,
inet_ntoa
((
reinterpret_cast
<
struct
sockaddr_in
*>
(
&
ifr
.
ifr_addr
))
->
sin_addr
));
if
(
ret
!=
EOK
)
{
(
void
)
close
(
inet_sock
);
return
-
1
;
}
ret
=
close
(
inet_sock
);
if
(
ret
!=
0
)
{
return
-
1
;
}
return
0
;
}
static
const
int
IpLen
=
16
;
static
const
char
*
NETMASK
=
"255.255.255.0"
;
static
const
char
*
GW
=
"192.168.100.1"
;
static
const
char
*
IFNAME
=
"veth0"
;
static
const
char
*
PEER_IP
=
"192.168.100.5"
;
static
int
SetIP
(
char
*
ip
)
{
...
...
@@ -73,7 +52,13 @@ static int SetIP(char *ip)
}
ifr
.
ifr_addr
.
sa_family
=
AF_INET
;
inet_pton
(
AF_INET
,
ip
,
ifr
.
ifr_addr
.
sa_data
+
2
);
/* 2: offset */
ioctl
(
fd
,
SIOCSIFADDR
,
&
ifr
);
ret
=
ioctl
(
fd
,
SIOCSIFADDR
,
&
ifr
);
if
(
ret
!=
0
)
{
(
void
)
close
(
fd
);
printf
(
"[ERR][%s:%d] ioctl SIOCSIFADDR failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
return
-
1
;
}
ret
=
close
(
fd
);
if
(
ret
!=
0
)
{
return
-
1
;
...
...
@@ -88,27 +73,31 @@ static int ChildFunc(void *arg)
char
oldIp
[
IpLen
]
=
{
NULL
};
char
newIp
[
IpLen
]
=
{
NULL
};
ret
=
GetLocalIP
(
oldIp
);
if
(
ret
!
=
0
)
{
ret
=
NetContainerGetLocalIP
(
"eth0"
,
oldIp
,
IpLen
);
if
(
ret
=
=
0
)
{
return
EXIT_CODE_ERRNO_1
;
}
ret
=
SetIP
(
"192.168.1.233"
);
if
(
ret
!
=
0
)
{
if
(
ret
=
=
0
)
{
return
EXIT_CODE_ERRNO_2
;
}
ret
=
GetLocalIP
(
newIp
);
ret
=
NetContainerResetNetAddr
(
IFNAME
,
PEER_IP
,
NETMASK
,
GW
);
if
(
ret
!=
0
)
{
return
EXIT_CODE_ERRNO_3
;
}
ret
=
strcmp
(
oldIp
,
newIp
);
if
(
ret
==
0
)
{
(
void
)
memset_s
(
newIp
,
IpLen
,
0
,
IpLen
);
ret
=
NetContainerGetLocalIP
(
IFNAME
,
newIp
,
IpLen
);
if
(
ret
!=
0
)
{
return
EXIT_CODE_ERRNO_4
;
}
printf
(
"%s %d
\n
"
,
__FUNCTION__
,
__LINE__
);
if
(
strcmp
(
PEER_IP
,
newIp
)
!=
0
)
{
return
EXIT_CODE_ERRNO_5
;
}
printf
(
"######## [%s:%d] %s: %s ########
\n
"
,
__FUNCTION__
,
__LINE__
,
IFNAME
,
newIp
);
return
0
;
}
...
...
@@ -122,11 +111,10 @@ void ItNetContainer001(void)
EXPECT_STRNE
(
stack
,
NULL
);
char
*
stackTop
=
stack
+
STACK_SIZE
;
ret
=
GetLocalIP
(
oldIp
);
ret
=
NetContainerGetLocalIP
(
"eth0"
,
oldIp
,
IpLen
);
ASSERT_EQ
(
ret
,
0
);
int
arg
=
CHILD_FUNC_ARG
;
auto
pid
=
clone
(
ChildFunc
,
stackTop
,
SIGCHLD
|
CLONE_NEWNET
,
&
arg
);
auto
pid
=
clone
(
ChildFunc
,
stackTop
,
SIGCHLD
|
CLONE_NEWNET
,
NULL
);
ASSERT_NE
(
pid
,
-
1
);
int
status
;
...
...
@@ -136,7 +124,7 @@ void ItNetContainer001(void)
int
exitCode
=
WEXITSTATUS
(
status
);
ASSERT_EQ
(
exitCode
,
0
);
ret
=
GetLocalIP
(
newIp
);
ret
=
NetContainerGetLocalIP
(
"eth0"
,
newIp
,
IpLen
);
ASSERT_EQ
(
ret
,
0
);
ret
=
strcmp
(
oldIp
,
newIp
);
...
...
testsuites/unittest/container/smoke/It_net_container_002.cpp
浏览文件 @
4ff66c7f
...
...
@@ -32,32 +32,11 @@
#include "It_container_test.h"
using
namespace
std
;
const
int
IpLen
=
16
;
static
int
GetLocalIP
(
char
*
ip
)
{
struct
ifreq
ifr
;
int
inet_sock
=
socket
(
AF_INET
,
SOCK_DGRAM
,
0
);
if
(
inet_sock
<
0
)
{
return
-
1
;
}
int
ret
=
strcpy_s
(
ifr
.
ifr_name
,
sizeof
(
ifr
.
ifr_name
),
"eth0"
);
if
(
ret
!=
EOK
)
{
(
void
)
close
(
inet_sock
);
return
-
1
;
}
ioctl
(
inet_sock
,
SIOCGIFADDR
,
&
ifr
);
ret
=
strcpy_s
(
ip
,
IpLen
,
inet_ntoa
((
reinterpret_cast
<
struct
sockaddr_in
*>
(
&
ifr
.
ifr_addr
))
->
sin_addr
));
if
(
ret
!=
EOK
)
{
(
void
)
close
(
inet_sock
);
return
-
1
;
}
ret
=
close
(
inet_sock
);
if
(
ret
!=
0
)
{
return
-
1
;
}
return
0
;
}
static
const
int
IpLen
=
16
;
static
const
char
*
NETMASK
=
"255.255.255.0"
;
static
const
char
*
GW
=
"192.168.100.1"
;
static
const
char
*
IFNAME
=
"veth0"
;
static
const
char
*
PEER_IP
=
"192.168.100.5"
;
static
int
SetIP
(
char
*
ip
)
{
...
...
@@ -73,7 +52,12 @@ static int SetIP(char *ip)
}
ifr
.
ifr_addr
.
sa_family
=
AF_INET
;
inet_pton
(
AF_INET
,
ip
,
ifr
.
ifr_addr
.
sa_data
+
2
);
/* 2: offset */
ioctl
(
fd
,
SIOCSIFADDR
,
&
ifr
);
ret
=
ioctl
(
fd
,
SIOCSIFADDR
,
&
ifr
);
if
(
ret
!=
0
)
{
printf
(
"[ERR][%s:%d] ioctl SIOCSIFADDR failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
(
void
)
close
(
fd
);
return
-
1
;
}
ret
=
close
(
fd
);
if
(
ret
!=
0
)
{
return
-
1
;
...
...
@@ -88,7 +72,7 @@ static int ChildFunc(void *arg)
char
oldIp
[
IpLen
]
=
{
NULL
};
char
newIp
[
IpLen
]
=
{
NULL
};
ret
=
GetLocalIP
(
oldIp
);
ret
=
NetContainerGetLocalIP
(
"eth0"
,
oldIp
,
IpLen
);
if
(
ret
!=
0
)
{
return
EXIT_CODE_ERRNO_1
;
}
...
...
@@ -98,21 +82,31 @@ static int ChildFunc(void *arg)
return
EXIT_CODE_ERRNO_2
;
}
ret
=
SetIP
(
"192.168.1.234"
);
if
(
ret
!
=
0
)
{
ret
=
NetContainerGetLocalIP
(
"eth0"
,
newIp
,
IpLen
);
if
(
ret
=
=
0
)
{
return
EXIT_CODE_ERRNO_3
;
}
ret
=
GetLocalIP
(
newIp
);
if
(
ret
!
=
0
)
{
ret
=
SetIP
(
"192.168.1.234"
);
if
(
ret
=
=
0
)
{
return
EXIT_CODE_ERRNO_4
;
}
ret
=
strcmp
(
oldIp
,
newIp
);
if
(
ret
=
=
0
)
{
ret
=
NetContainerResetNetAddr
(
IFNAME
,
PEER_IP
,
NETMASK
,
GW
);
if
(
ret
!
=
0
)
{
return
EXIT_CODE_ERRNO_5
;
}
(
void
)
memset_s
(
newIp
,
IpLen
,
0
,
IpLen
);
ret
=
NetContainerGetLocalIP
(
IFNAME
,
newIp
,
IpLen
);
if
(
ret
!=
0
)
{
return
EXIT_CODE_ERRNO_6
;
}
if
(
strcmp
(
PEER_IP
,
newIp
)
!=
0
)
{
return
EXIT_CODE_ERRNO_7
;
}
printf
(
"######## [%s:%d] %s: %s ########
\n
"
,
__FUNCTION__
,
__LINE__
,
IFNAME
,
newIp
);
return
0
;
}
...
...
@@ -126,11 +120,10 @@ void ItNetContainer002(void)
EXPECT_STRNE
(
stack
,
NULL
);
char
*
stackTop
=
stack
+
STACK_SIZE
;
ret
=
GetLocalIP
(
oldIp
);
ret
=
NetContainerGetLocalIP
(
"eth0"
,
oldIp
,
IpLen
);
ASSERT_EQ
(
ret
,
0
);
int
arg
=
CHILD_FUNC_ARG
;
auto
pid
=
clone
(
ChildFunc
,
stackTop
,
SIGCHLD
,
&
arg
);
auto
pid
=
clone
(
ChildFunc
,
stackTop
,
SIGCHLD
,
NULL
);
ASSERT_NE
(
pid
,
-
1
);
int
status
;
...
...
@@ -140,7 +133,7 @@ void ItNetContainer002(void)
int
exitCode
=
WEXITSTATUS
(
status
);
ASSERT_EQ
(
exitCode
,
0
);
ret
=
GetLocalIP
(
newIp
);
ret
=
NetContainerGetLocalIP
(
"eth0"
,
newIp
,
IpLen
);
ASSERT_EQ
(
ret
,
0
);
ret
=
strcmp
(
oldIp
,
newIp
);
...
...
testsuites/unittest/container/smoke/It_net_container_005.cpp
浏览文件 @
4ff66c7f
...
...
@@ -44,61 +44,6 @@ static const int DATA_LEN = 128;
static
const
char
*
SERVER_MSG
=
"===Hi, I'm Server.==="
;
static
const
char
*
PEER_MSG
=
"===Hi, I'm Peer.==="
;
static
const
int
TRY_COUNT
=
5
;
static
const
int
OFFSET
=
2
;
static
int
TryResetNetaddr
(
const
char
*
ifname
,
const
char
*
ip
,
const
char
*
netmask
,
const
char
*
gw
)
{
int
ret
;
struct
ifreq
ifr
;
struct
rtentry
rt
;
int
fd
=
socket
(
AF_INET
,
SOCK_DGRAM
,
IPPROTO_IP
);
if
(
fd
<
0
)
{
return
-
1
;
}
ret
=
strncpy_s
(
ifr
.
ifr_name
,
sizeof
(
ifr
.
ifr_name
),
ifname
,
IFNAMSIZ
);
if
(
ret
!=
EOK
)
{
(
void
)
close
(
fd
);
return
-
1
;
}
ifr
.
ifr_addr
.
sa_family
=
AF_INET
;
inet_pton
(
AF_INET
,
netmask
,
ifr
.
ifr_addr
.
sa_data
+
OFFSET
);
ret
=
ioctl
(
fd
,
SIOCSIFNETMASK
,
&
ifr
);
if
(
ret
==
0
)
{
inet_pton
(
AF_INET
,
ip
,
ifr
.
ifr_addr
.
sa_data
+
OFFSET
);
ret
=
ioctl
(
fd
,
SIOCSIFADDR
,
&
ifr
);
if
(
ret
==
0
)
{
struct
sockaddr_in
*
addr
=
reinterpret_cast
<
struct
sockaddr_in
*>
(
&
rt
.
rt_gateway
);
addr
->
sin_family
=
AF_INET
;
addr
->
sin_addr
.
s_addr
=
inet_addr
(
GW
);
rt
.
rt_flags
=
RTF_GATEWAY
;
ret
=
ioctl
(
fd
,
SIOCADDRT
,
&
rt
);
}
}
if
(
ret
!=
0
)
{
(
void
)
close
(
fd
);
return
ret
;
}
ret
=
close
(
fd
);
return
ret
;
}
static
int
ResetNetaddr
(
const
char
*
ifname
,
const
char
*
ip
,
const
char
*
netmask
,
const
char
*
gw
)
{
int
ret
;
int
try_count
=
TRY_COUNT
;
while
(
try_count
--
)
{
ret
=
TryResetNetaddr
(
ifname
,
ip
,
netmask
,
gw
);
if
(
ret
==
0
)
{
break
;
}
sleep
(
1
);
}
return
ret
;
}
static
int
UdpClient
(
void
)
{
...
...
@@ -162,7 +107,7 @@ static int UdpClient(void)
static
int
ChildFunc
(
void
*
arg
)
{
int
ret
=
ResetNeta
ddr
(
IFNAME
,
PEER_IP
,
NETMASK
,
GW
);
int
ret
=
NetContainerResetNetA
ddr
(
IFNAME
,
PEER_IP
,
NETMASK
,
GW
);
if
(
ret
!=
0
)
{
return
EXIT_CODE_ERRNO_1
;
}
...
...
@@ -219,9 +164,7 @@ static int UdpServer(void)
static
void
*
UdpServerThread
(
void
*
arg
)
{
int
ret
;
ret
=
ResetNetaddr
(
IFNAME
,
SERVER_IP
,
NETMASK
,
GW
);
int
ret
=
NetContainerResetNetAddr
(
IFNAME
,
SERVER_IP
,
NETMASK
,
GW
);
if
(
ret
!=
0
)
{
return
(
void
*
)(
intptr_t
)
ret
;
}
...
...
testsuites/unittest/container/smoke/It_net_container_009.cpp
浏览文件 @
4ff66c7f
...
...
@@ -43,61 +43,7 @@ static const char *SERVER_MSG = "===Hi, I'm Server.===";
static
const
char
*
PEER_MSG
=
"===Hi, I'm Peer.==="
;
static
const
int
TRY_COUNT
=
5
;
static
const
int
DATA_LEN
=
128
;
static
int
TryResetNetaddr
(
const
char
*
ifname
,
const
char
*
ip
,
const
char
*
netmask
,
const
char
*
gw
)
{
int
ret
;
struct
ifreq
ifr
;
struct
rtentry
rt
;
int
fd
=
socket
(
AF_INET
,
SOCK_DGRAM
,
IPPROTO_IP
);
if
(
fd
<
0
)
{
return
-
1
;
}
ret
=
strncpy_s
(
ifr
.
ifr_name
,
sizeof
(
ifr
.
ifr_name
),
ifname
,
IFNAMSIZ
);
if
(
ret
!=
EOK
)
{
close
(
fd
);
return
-
1
;
}
ifr
.
ifr_addr
.
sa_family
=
AF_INET
;
inet_pton
(
AF_INET
,
netmask
,
ifr
.
ifr_addr
.
sa_data
+
2
);
/* 2: offset */
ret
=
ioctl
(
fd
,
SIOCSIFNETMASK
,
&
ifr
);
if
(
ret
==
0
)
{
inet_pton
(
AF_INET
,
ip
,
ifr
.
ifr_addr
.
sa_data
+
2
);
/* 2: offset */
ret
=
ioctl
(
fd
,
SIOCSIFADDR
,
&
ifr
);
if
(
ret
==
0
)
{
struct
sockaddr_in
*
addr
=
reinterpret_cast
<
struct
sockaddr_in
*>
(
&
rt
.
rt_gateway
);
addr
->
sin_family
=
AF_INET
;
addr
->
sin_addr
.
s_addr
=
inet_addr
(
GW
);
rt
.
rt_flags
=
RTF_GATEWAY
;
ret
=
ioctl
(
fd
,
SIOCADDRT
,
&
rt
);
}
}
if
(
ret
!=
0
)
{
(
void
)
close
(
fd
);
return
ret
;
}
ret
=
close
(
fd
);
return
ret
;
}
static
int
ResetNetaddr
(
const
char
*
ifname
,
const
char
*
ip
,
const
char
*
netmask
,
const
char
*
gw
)
{
int
ret
;
int
try_count
=
TRY_COUNT
;
while
(
try_count
--
)
{
ret
=
TryResetNetaddr
(
ifname
,
ip
,
netmask
,
gw
);
if
(
ret
==
0
)
{
break
;
}
sleep
(
1
);
}
return
ret
;
}
static
const
int
IpLen
=
16
;
static
int
TcpClient
(
void
)
{
...
...
@@ -124,26 +70,30 @@ static int TcpClient(void)
}
while
(
ret
!=
0
&&
(
try_count
--
));
if
(
ret
<
0
)
{
(
void
)
close
(
peer
);
printf
(
"[ERR][%s:%d] connect failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
return
EXIT_CODE_ERRNO_2
;
}
ret
=
send
(
peer
,
PEER_MSG
,
strlen
(
PEER_MSG
)
+
1
,
0
);
if
(
ret
<
0
)
{
(
void
)
close
(
peer
);
printf
(
"[ERR][%s:%d] send failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
return
EXIT_CODE_ERRNO_3
;
}
ret
=
recv
(
peer
,
recv_data
,
sizeof
(
recv_data
),
0
);
if
(
ret
<
0
)
{
(
void
)
close
(
peer
);
printf
(
"[ERR][%s:%d] recv failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
return
EXIT_CODE_ERRNO_4
;
}
(
void
)
close
(
peer
);
ret
=
strcmp
(
recv_data
,
SERVER_MSG
);
if
(
ret
!=
0
)
{
return
EXIT_CODE_ERRNO_5
;
}
(
void
)
close
(
peer
);
return
0
;
}
...
...
@@ -154,7 +104,6 @@ static int TcpServer(void)
int
peer
;
char
recv_data
[
DATA_LEN
];
struct
sockaddr_in
server_addr
;
socklen_t
client_addr_len
=
sizeof
(
struct
sockaddr
);
server
=
socket
(
AF_INET
,
SOCK_STREAM
,
IPPROTO_TCP
);
if
(
server
<
0
)
{
...
...
@@ -169,16 +118,19 @@ static int TcpServer(void)
ret
=
bind
(
server
,
const_cast
<
struct
sockaddr
*>
(
reinterpret_cast
<
struct
sockaddr
*>
(
&
server_addr
)),
sizeof
(
struct
sockaddr
));
if
(
ret
!=
0
)
{
printf
(
"[ERR][%s:%d] bind failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
return
EXIT_CODE_ERRNO_2
;
}
ret
=
listen
(
server
,
1
);
if
(
ret
<
0
)
{
printf
(
"[ERR][%s:%d] listen failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
return
EXIT_CODE_ERRNO_3
;
}
peer
=
accept
(
server
,
nullptr
,
nullptr
);
if
(
peer
<
0
)
{
printf
(
"[ERR][%s:%d] accept failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
return
EXIT_CODE_ERRNO_4
;
}
...
...
@@ -186,6 +138,7 @@ static int TcpServer(void)
ret
=
recv
(
peer
,
recv_data
,
sizeof
(
recv_data
),
0
);
if
(
ret
<
0
)
{
printf
(
"[ERR][%s:%d] recv failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
return
EXIT_CODE_ERRNO_5
;
}
...
...
@@ -196,31 +149,54 @@ static int TcpServer(void)
ret
=
send
(
peer
,
SERVER_MSG
,
strlen
(
SERVER_MSG
)
+
1
,
0
);
if
(
ret
<
0
)
{
printf
(
"[ERR][%s:%d] send failed, %s!
\n
"
,
__FUNCTION__
,
__LINE__
,
strerror
(
errno
));
return
EXIT_CODE_ERRNO_7
;
}
(
void
)
close
(
peer
);
return
0
;
}
static
void
*
TcpClientThread
(
void
*
arg
)
{
int
ret
=
ResetNetaddr
(
IFNAME
,
PEER_IP
,
NETMASK
,
GW
);
if
(
ret
==
0
)
{
ret
=
TcpClient
();
char
newIp
[
IpLen
]
=
{
NULL
};
int
ret
=
NetContainerResetNetAddr
(
IFNAME
,
PEER_IP
,
NETMASK
,
GW
);
if
(
ret
!=
0
)
{
return
(
void
*
)(
intptr_t
)
EXIT_CODE_ERRNO_1
;
}
ret
=
NetContainerGetLocalIP
(
IFNAME
,
newIp
,
IpLen
);
if
(
ret
!=
0
)
{
return
(
void
*
)(
intptr_t
)
EXIT_CODE_ERRNO_2
;
}
if
(
strncmp
(
PEER_IP
,
newIp
,
strlen
(
PEER_IP
))
!=
0
)
{
return
(
void
*
)(
intptr_t
)
EXIT_CODE_ERRNO_3
;
}
printf
(
"######## [%s:%d] %s: %s ########
\n
"
,
__FUNCTION__
,
__LINE__
,
IFNAME
,
newIp
);
ret
=
TcpClient
();
return
(
void
*
)(
intptr_t
)
ret
;
}
static
int
ChildFunc
(
void
*
arg
)
{
int
ret
=
ret
=
ResetNetaddr
(
IFNAME
,
SERVER_IP
,
NETMASK
,
GW
);
char
newIp
[
IpLen
]
=
{
NULL
};
int
ret
=
NetContainerResetNetAddr
(
IFNAME
,
SERVER_IP
,
NETMASK
,
GW
);
if
(
ret
!=
0
)
{
return
EXIT_CODE_ERRNO_1
;
return
EXIT_CODE_ERRNO_8
;
}
ret
=
NetContainerGetLocalIP
(
IFNAME
,
newIp
,
IpLen
);
if
(
ret
!=
0
)
{
return
EXIT_CODE_ERRNO_9
;
}
if
(
strncmp
(
SERVER_IP
,
newIp
,
strlen
(
SERVER_IP
))
!=
0
)
{
return
EXIT_CODE_ERRNO_10
;
}
printf
(
"######## [%s:%d] %s: %s ########
\n
"
,
__FUNCTION__
,
__LINE__
,
IFNAME
,
newIp
);
return
TcpServer
();
}
...
...
@@ -249,6 +225,9 @@ VOID ItNetContainer009(void)
ret
=
pthread_join
(
srv
,
&
tret
);
ASSERT_EQ
(
ret
,
0
);
ret
=
(
uintptr_t
)
tret
;
ASSERT_EQ
(
ret
,
0
);
ret
=
pthread_attr_destroy
(
&
attr
);
ASSERT_EQ
(
ret
,
0
);
...
...
testsuites/unittest/container/smoke/It_pid_container_032.cpp
浏览文件 @
4ff66c7f
...
...
@@ -51,6 +51,8 @@ void ItPidContainer032(void)
char
*
array
[
g_arryLen
]
=
{
nullptr
};
char
buf
[
g_buffSize
]
=
{
0
};
sleep
(
2
);
/* 2: Wait for cache resource reclamation */
int
ret
=
ReadFile
(
path
.
c_str
(),
buf
);
ASSERT_NE
(
ret
,
-
1
);
...
...
testsuites/unittest/container/smoke/It_pid_container_033.cpp
浏览文件 @
4ff66c7f
...
...
@@ -55,6 +55,8 @@ void ItPidContainer033(void)
char
buf
[
g_buffSize
]
=
{
0
};
int
status
=
0
;
sleep
(
2
);
/* 2: Wait for cache resource reclamation */
int
ret
=
ReadFile
(
path
.
c_str
(),
buf
);
ASSERT_NE
(
ret
,
-
1
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录