Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
6072b0ae
G
Gpdb
项目概览
Greenplum
/
Gpdb
通知
7
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gpdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6072b0ae
编写于
3月 02, 2017
作者:
A
Ashwin Agrawal and Xin Zhang
提交者:
Ashwin Agrawal
3月 06, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add unit test for ForwardFsyncRequest() to ComptactBgwriterRequestQueue().
上级
3112d13d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
83 addition
and
1 deletion
+83
-1
src/backend/postmaster/test/Makefile
src/backend/postmaster/test/Makefile
+2
-1
src/backend/postmaster/test/bgwriter_test.c
src/backend/postmaster/test/bgwriter_test.c
+81
-0
未找到文件。
src/backend/postmaster/test/Makefile
浏览文件 @
6072b0ae
...
...
@@ -2,6 +2,7 @@ subdir=src/backend/postmaster
top_builddir
=
../../../..
include
$(top_builddir)/src/Makefile.global
TARGETS
=
syslogger
TARGETS
=
syslogger
bgwriter
include
$(top_builddir)/src/backend/mock.mk
bgwriter.t
:
$(MOCK_DIR)/backend/storage/lmgr/lwlock_mock.o
src/backend/postmaster/test/bgwriter_test.c
0 → 100644
浏览文件 @
6072b0ae
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include "cmockery.h"
#include "c.h"
#include "../bgwriter.c"
#include "postgres.h"
#define MAX_BGW_REQUESTS 5
void
init_request_queue
(
void
)
{
size_t
size
=
sizeof
(
BgWriterShmemStruct
)
+
sizeof
(
BgWriterRequest
)
*
MAX_BGW_REQUESTS
;
BgWriterShmem
=
(
BgWriterShmemStruct
*
)
malloc
(
size
);
memset
(
BgWriterShmem
,
0
,
size
);
BgWriterShmem
->
bgwriter_pid
=
1234
;
BgWriterShmem
->
max_requests
=
MAX_BGW_REQUESTS
;
IsUnderPostmaster
=
true
;
}
/*
* Basic enqueue tests, including compaction upon enqueuing into a
* full queue.
*/
void
test__ForwardFsyncRequest_enqueue
(
void
**
state
)
{
bool
ret
;
int
i
;
RelFileNode
dummy
=
{
1
,
1
,
1
};
init_request_queue
();
expect_value
(
LWLockAcquire
,
lockid
,
BgWriterCommLock
);
expect_value
(
LWLockAcquire
,
mode
,
LW_EXCLUSIVE
);
will_be_called
(
LWLockAcquire
);
expect_value
(
LWLockRelease
,
lockid
,
BgWriterCommLock
);
will_be_called
(
LWLockRelease
);
/* basic enqueue */
ret
=
ForwardFsyncRequest
(
dummy
,
1
);
assert_true
(
ret
);
assert_true
(
BgWriterShmem
->
num_requests
==
1
);
/* fill up the queue */
for
(
i
=
2
;
i
<=
MAX_BGW_REQUESTS
;
i
++
)
{
expect_value
(
LWLockAcquire
,
lockid
,
BgWriterCommLock
);
expect_value
(
LWLockAcquire
,
mode
,
LW_EXCLUSIVE
);
will_be_called
(
LWLockAcquire
);
expect_value
(
LWLockRelease
,
lockid
,
BgWriterCommLock
);
will_be_called
(
LWLockRelease
);
ret
=
ForwardFsyncRequest
(
dummy
,
i
);
assert_true
(
ret
);
}
expect_value
(
LWLockAcquire
,
lockid
,
BgWriterCommLock
);
expect_value
(
LWLockAcquire
,
mode
,
LW_EXCLUSIVE
);
will_be_called
(
LWLockAcquire
);
expect_value
(
LWLockRelease
,
lockid
,
BgWriterCommLock
);
will_be_called
(
LWLockRelease
);
#ifdef USE_ASSERT_CHECKING
expect_value
(
LWLockHeldByMe
,
lockid
,
BgWriterCommLock
);
will_return
(
LWLockHeldByMe
,
true
);
#endif
/*
* This enqueue request should trigger compaction but no
* duplicates are in the queue. So the queue should remain
* full.
*/
ret
=
ForwardFsyncRequest
(
dummy
,
0
);
assert_false
(
ret
);
assert_true
(
BgWriterShmem
->
num_requests
==
BgWriterShmem
->
max_requests
);
free
(
BgWriterShmem
);
}
int
main
(
int
argc
,
char
*
argv
[])
{
cmockery_parse_arguments
(
argc
,
argv
);
MemoryContextInit
();
const
UnitTest
tests
[]
=
{
unit_test
(
test__ForwardFsyncRequest_enqueue
)
};
return
run_tests
(
tests
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录