Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
9ce8a7c5
L
libvirt
项目概览
openeuler
/
libvirt
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
libvirt
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9ce8a7c5
编写于
2月 14, 2014
作者:
T
Thorsten Behrens
提交者:
Michal Privoznik
2月 20, 2014
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add unit test for virCgroupGetBlkioIo*Serviced
上级
0bd2ccde
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
228 addition
and
2 deletion
+228
-2
tests/testutilslxc.h
tests/testutilslxc.h
+3
-0
tests/vircgroupmock.c
tests/vircgroupmock.c
+96
-2
tests/vircgrouptest.c
tests/vircgrouptest.c
+129
-0
未找到文件。
tests/testutilslxc.h
浏览文件 @
9ce8a7c5
#include "capabilities.h"
#define FAKEDEVDIR0 "/fakedevdir0/bla/fasl"
#define FAKEDEVDIR1 "/fakedevdir1/bla/fasl"
virCapsPtr
testLXCCapsInit
(
void
);
tests/vircgroupmock.c
浏览文件 @
9ce8a7c5
...
...
@@ -30,10 +30,13 @@
# include <fcntl.h>
# include <sys/stat.h>
# include <stdarg.h>
# include "testutilslxc.h"
static
int
(
*
realopen
)(
const
char
*
path
,
int
flags
,
...);
static
FILE
*
(
*
realfopen
)(
const
char
*
path
,
const
char
*
mode
);
static
int
(
*
realaccess
)(
const
char
*
path
,
int
mode
);
static
int
(
*
realstat
)(
const
char
*
path
,
struct
stat
*
sb
);
static
int
(
*
real__xstat
)(
int
ver
,
const
char
*
path
,
struct
stat
*
sb
);
static
int
(
*
reallstat
)(
const
char
*
path
,
struct
stat
*
sb
);
static
int
(
*
real__lxstat
)(
int
ver
,
const
char
*
path
,
struct
stat
*
sb
);
static
int
(
*
realmkdir
)(
const
char
*
path
,
mode_t
mode
);
...
...
@@ -43,6 +46,8 @@ static int (*realmkdir)(const char *path, mode_t mode);
* vircgroupmock.c:462:22: error: static variable 'fakesysfsdir' is used in an inline function with external linkage [-Werror,-Wstatic-in-inline]
*/
char
*
fakesysfsdir
;
const
char
*
fakedevicedir0
=
FAKEDEVDIR0
;
const
char
*
fakedevicedir1
=
FAKEDEVDIR1
;
# define SYSFS_PREFIX "/not/really/sys/fs/cgroup/"
...
...
@@ -332,13 +337,23 @@ static int make_controller(const char *path, mode_t mode)
"8:0 Write 411440480256
\n
"
"8:0 Sync 248486822912
\n
"
"8:0 Async 222495764480
\n
"
"8:0 Total 470982587392
\n
"
);
"8:0 Total 470982587392
\n
"
"9:0 Read 59542107137
\n
"
"9:0 Write 411440480257
\n
"
"9:0 Sync 248486822912
\n
"
"9:0 Async 222495764480
\n
"
"9:0 Total 470982587392
\n
"
);
MAKE_FILE
(
"blkio.throttle.io_serviced"
,
"8:0 Read 4832583
\n
"
"8:0 Write 36641903
\n
"
"8:0 Sync 30723171
\n
"
"8:0 Async 10751315
\n
"
"8:0 Total 41474486
\n
"
);
"8:0 Total 41474486
\n
"
"9:0 Read 4832584
\n
"
"9:0 Write 36641904
\n
"
"9:0 Sync 30723171
\n
"
"9:0 Async 10751315
\n
"
"9:0 Total 41474486
\n
"
);
MAKE_FILE
(
"blkio.throttle.read_bps_device"
,
""
);
MAKE_FILE
(
"blkio.throttle.read_iops_device"
,
""
);
MAKE_FILE
(
"blkio.throttle.write_bps_device"
,
""
);
...
...
@@ -382,6 +397,7 @@ static void init_syms(void)
LOAD_SYM
(
fopen
);
LOAD_SYM
(
access
);
LOAD_SYM_ALT
(
lstat
,
__lxstat
);
LOAD_SYM_ALT
(
stat
,
__xstat
);
LOAD_SYM
(
mkdir
);
LOAD_SYM
(
open
);
}
...
...
@@ -529,6 +545,14 @@ int __lxstat(int ver, const char *path, struct stat *sb)
}
ret
=
real__lxstat
(
ver
,
newpath
,
sb
);
free
(
newpath
);
}
else
if
(
STRPREFIX
(
path
,
fakedevicedir0
))
{
sb
->
st_mode
=
S_IFBLK
;
sb
->
st_rdev
=
makedev
(
8
,
0
);
return
0
;
}
else
if
(
STRPREFIX
(
path
,
fakedevicedir1
))
{
sb
->
st_mode
=
S_IFBLK
;
sb
->
st_rdev
=
makedev
(
9
,
0
);
return
0
;
}
else
{
ret
=
real__lxstat
(
ver
,
path
,
sb
);
}
...
...
@@ -552,12 +576,82 @@ int lstat(const char *path, struct stat *sb)
}
ret
=
reallstat
(
newpath
,
sb
);
free
(
newpath
);
}
else
if
(
STRPREFIX
(
path
,
fakedevicedir0
))
{
sb
->
st_mode
=
S_IFBLK
;
sb
->
st_rdev
=
makedev
(
8
,
0
);
return
0
;
}
else
if
(
STRPREFIX
(
path
,
fakedevicedir1
))
{
sb
->
st_mode
=
S_IFBLK
;
sb
->
st_rdev
=
makedev
(
9
,
0
);
return
0
;
}
else
{
ret
=
reallstat
(
path
,
sb
);
}
return
ret
;
}
int
__xstat
(
int
ver
,
const
char
*
path
,
struct
stat
*
sb
)
{
int
ret
;
init_syms
();
if
(
STRPREFIX
(
path
,
SYSFS_PREFIX
))
{
init_sysfs
();
char
*
newpath
;
if
(
asprintf
(
&
newpath
,
"%s/%s"
,
fakesysfsdir
,
path
+
strlen
(
SYSFS_PREFIX
))
<
0
)
{
errno
=
ENOMEM
;
return
-
1
;
}
ret
=
real__xstat
(
ver
,
newpath
,
sb
);
free
(
newpath
);
}
else
if
(
STRPREFIX
(
path
,
fakedevicedir0
))
{
sb
->
st_mode
=
S_IFBLK
;
sb
->
st_rdev
=
makedev
(
8
,
0
);
return
0
;
}
else
if
(
STRPREFIX
(
path
,
fakedevicedir1
))
{
sb
->
st_mode
=
S_IFBLK
;
sb
->
st_rdev
=
makedev
(
9
,
0
);
return
0
;
}
else
{
ret
=
real__xstat
(
ver
,
path
,
sb
);
}
return
ret
;
}
int
stat
(
const
char
*
path
,
struct
stat
*
sb
)
{
int
ret
;
init_syms
();
if
(
STRPREFIX
(
path
,
SYSFS_PREFIX
))
{
init_sysfs
();
char
*
newpath
;
if
(
asprintf
(
&
newpath
,
"%s/%s"
,
fakesysfsdir
,
path
+
strlen
(
SYSFS_PREFIX
))
<
0
)
{
errno
=
ENOMEM
;
return
-
1
;
}
ret
=
realstat
(
newpath
,
sb
);
free
(
newpath
);
}
else
if
(
STRPREFIX
(
path
,
fakedevicedir0
))
{
sb
->
st_mode
=
S_IFBLK
;
sb
->
st_rdev
=
makedev
(
8
,
0
);
return
0
;
}
else
if
(
STRPREFIX
(
path
,
fakedevicedir1
))
{
sb
->
st_mode
=
S_IFBLK
;
sb
->
st_rdev
=
makedev
(
9
,
0
);
return
0
;
}
else
{
ret
=
realstat
(
path
,
sb
);
}
return
ret
;
}
int
mkdir
(
const
char
*
path
,
mode_t
mode
)
{
int
ret
;
...
...
tests/vircgrouptest.c
浏览文件 @
9ce8a7c5
...
...
@@ -32,6 +32,7 @@
# include "virerror.h"
# include "virlog.h"
# include "virfile.h"
# include "testutilslxc.h"
# define VIR_FROM_THIS VIR_FROM_NONE
...
...
@@ -529,6 +530,128 @@ static int testCgroupAvailable(const void *args)
return
0
;
}
static
int
testCgroupGetBlkioIoServiced
(
const
void
*
args
ATTRIBUTE_UNUSED
)
{
virCgroupPtr
cgroup
=
NULL
;
size_t
i
;
int
rv
,
ret
=
-
1
;
const
long
long
expected_values
[]
=
{
119084214273
,
822880960513
,
9665167
,
73283807
};
const
char
*
names
[]
=
{
"bytes read"
,
"bytes written"
,
"requests read"
,
"requests written"
};
long
long
values
[
ARRAY_CARDINALITY
(
expected_values
)];
if
((
rv
=
virCgroupNewPartition
(
"/virtualmachines"
,
true
,
(
1
<<
VIR_CGROUP_CONTROLLER_BLKIO
),
&
cgroup
))
<
0
)
{
fprintf
(
stderr
,
"Could not create /virtualmachines cgroup: %d
\n
"
,
-
rv
);
goto
cleanup
;
}
if
((
rv
=
virCgroupGetBlkioIoServiced
(
cgroup
,
values
,
&
values
[
1
],
&
values
[
2
],
&
values
[
3
]))
<
0
)
{
fprintf
(
stderr
,
"Could not retrieve BlkioIoServiced for /virtualmachines cgroup: %d
\n
"
,
-
rv
);
goto
cleanup
;
}
for
(
i
=
0
;
i
<
ARRAY_CARDINALITY
(
expected_values
);
i
++
)
{
if
(
expected_values
[
i
]
!=
values
[
i
])
{
fprintf
(
stderr
,
"Wrong value for %s from virCgroupBlkioIoServiced (expected %lld)
\n
"
,
names
[
i
],
expected_values
[
i
]);
goto
cleanup
;
}
}
ret
=
0
;
cleanup:
virCgroupFree
(
&
cgroup
);
return
ret
;
}
static
int
testCgroupGetBlkioIoDeviceServiced
(
const
void
*
args
ATTRIBUTE_UNUSED
)
{
virCgroupPtr
cgroup
=
NULL
;
size_t
i
;
int
rv
,
ret
=
-
1
;
const
long
long
expected_values0
[]
=
{
59542107136
,
411440480256
,
4832583
,
36641903
};
const
long
long
expected_values1
[]
=
{
59542107137
,
411440480257
,
4832584
,
36641904
};
const
char
*
names
[]
=
{
"bytes read"
,
"bytes written"
,
"requests read"
,
"requests written"
};
long
long
values
[
ARRAY_CARDINALITY
(
expected_values0
)];
if
((
rv
=
virCgroupNewPartition
(
"/virtualmachines"
,
true
,
(
1
<<
VIR_CGROUP_CONTROLLER_BLKIO
),
&
cgroup
))
<
0
)
{
fprintf
(
stderr
,
"Could not create /virtualmachines cgroup: %d
\n
"
,
-
rv
);
goto
cleanup
;
}
if
((
rv
=
virCgroupGetBlkioIoDeviceServiced
(
cgroup
,
FAKEDEVDIR0
,
values
,
&
values
[
1
],
&
values
[
2
],
&
values
[
3
]))
<
0
)
{
fprintf
(
stderr
,
"Could not retrieve BlkioIoDeviceServiced for /virtualmachines cgroup: %d
\n
"
,
-
rv
);
goto
cleanup
;
}
for
(
i
=
0
;
i
<
ARRAY_CARDINALITY
(
expected_values0
);
i
++
)
{
if
(
expected_values0
[
i
]
!=
values
[
i
])
{
fprintf
(
stderr
,
"Wrong value for %s from virCgroupGetBlkioIoDeviceServiced (expected %lld)
\n
"
,
names
[
i
],
expected_values0
[
i
]);
goto
cleanup
;
}
}
if
((
rv
=
virCgroupGetBlkioIoDeviceServiced
(
cgroup
,
FAKEDEVDIR1
,
values
,
&
values
[
1
],
&
values
[
2
],
&
values
[
3
]))
<
0
)
{
fprintf
(
stderr
,
"Could not retrieve BlkioIoDeviceServiced for /virtualmachines cgroup: %d
\n
"
,
-
rv
);
goto
cleanup
;
}
for
(
i
=
0
;
i
<
ARRAY_CARDINALITY
(
expected_values1
);
i
++
)
{
if
(
expected_values1
[
i
]
!=
values
[
i
])
{
fprintf
(
stderr
,
"Wrong value for %s from virCgroupGetBlkioIoDeviceServiced (expected %lld)
\n
"
,
names
[
i
],
expected_values1
[
i
]);
goto
cleanup
;
}
}
ret
=
0
;
cleanup:
virCgroupFree
(
&
cgroup
);
return
ret
;
}
# define FAKESYSFSDIRTEMPLATE abs_builddir "/fakesysfsdir-XXXXXX"
...
...
@@ -571,6 +694,12 @@ mymain(void)
if
(
virtTestRun
(
"Cgroup available"
,
testCgroupAvailable
,
(
void
*
)
0x1
)
<
0
)
ret
=
-
1
;
if
(
virtTestRun
(
"virCgroupGetBlkioIoServiced works"
,
testCgroupGetBlkioIoServiced
,
NULL
)
<
0
)
ret
=
-
1
;
if
(
virtTestRun
(
"virCgroupGetBlkioIoDeviceServiced works"
,
testCgroupGetBlkioIoDeviceServiced
,
NULL
)
<
0
)
ret
=
-
1
;
setenv
(
"VIR_CGROUP_MOCK_MODE"
,
"allinone"
,
1
);
if
(
virtTestRun
(
"New cgroup for self (allinone)"
,
testCgroupNewForSelfAllInOne
,
NULL
)
<
0
)
ret
=
-
1
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录