Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
hanoi2005
redis
提交
d6107fd6
R
redis
项目概览
hanoi2005
/
redis
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d6107fd6
编写于
12月 10, 2010
作者:
A
antirez
浏览文件
操作
浏览文件
下载
差异文件
Merge remote branch 'pietern/testverbosity'
上级
a15742a4
6f8a32d5
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
143 addition
and
75 deletion
+143
-75
tests/support/server.tcl
tests/support/server.tcl
+35
-32
tests/support/test.tcl
tests/support/test.tcl
+55
-26
tests/support/util.tcl
tests/support/util.tcl
+8
-4
tests/test_helper.tcl
tests/test_helper.tcl
+29
-5
tests/unit/sort.tcl
tests/unit/sort.tcl
+16
-8
未找到文件。
tests/support/server.tcl
浏览文件 @
d6107fd6
...
...
@@ -83,10 +83,14 @@ proc ping_server {host port} {
}
close $fd
}
e
]}
{
if
{
$::verbose
}
{
puts -nonewline
"."
}
}
else
{
if
{
$::verbose
}
{
puts -nonewline
"ok"
}
}
return $retval
}
...
...
@@ -181,7 +185,10 @@ proc start_server {options {code undefined}} {
set retrynum 20
set serverisup 0
if
{
$::verbose
}
{
puts -nonewline
"=== (
$tags
) Starting server
${::host}
:
${::port}
"
}
after 10
if
{
$code
ne
"undefined"
}
{
while
{[
incr retrynum -1
]}
{
...
...
@@ -196,7 +203,10 @@ proc start_server {options {code undefined}} {
}
else
{
set serverisup 1
}
puts
{}
if
{
$::verbose
}
{
puts
""
}
if
{
!$serverisup
}
{
error_and_quit $config_file
[
exec cat $stderr
]
...
...
@@ -246,42 +256,35 @@ proc start_server {options {code undefined}} {
reconnect
# execute provided block
set curnum $::testnum
if
{
!
[
catch
{
uplevel 1 $code
}
err
]}
{
# zero exit status is good
unset err
}
set num_tests $::num_tests
if
{[
catch
{
uplevel 1 $code
}
error
]}
{
set backtrace $::errorInfo
if
{
$curnum
== $::testnum
}
{
# don't check for leaks when no tests were executed
# Kill the server without checking for leaks
dict set srv
"skipleaks"
1
}
# pop the server object
set ::servers
[
lrange $::servers 0 end-1
]
kill_server $srv
# allow an exception to bubble up the call chain but still kill this
# server, because we want to reuse the ports when the tests are re-run
if
{[
info exists err
]}
{
if
{
$err
eq
"exception"
}
{
puts
[
format
"Logged warnings (pid %d):"
[
dict get $srv
"pid"
]]
# Print warnings from log
puts
[
format
"
\n
Logged warnings (pid %d):"
[
dict get $srv
"pid"
]]
set warnings
[
warnings_from_file
[
dict get $srv
"stdout"
]]
if
{[
string length $warnings
]
> 0
}
{
puts
"
$warnings
"
}
else
{
puts
"(none)"
}
# kill this server without checking for leaks
dict set srv
"skipleaks"
1
kill_server $srv
error
"exception"
}
elseif
{[
string length $err
]
> 0
}
{
puts
"Error executing the suite, aborting..."
puts $err
exit 1
puts
""
error $error $backtrace
}
# Don't do the leak check when no tests were run
if
{
$num
_tests == $::num_tests
}
{
dict set srv
"skipleaks"
1
}
# pop the server object
set ::servers
[
lrange $::servers 0 end-1
]
set ::tags
[
lrange $::tags 0 end-
[
llength $tags
]]
kill_server $srv
}
else
{
...
...
tests/support/test.tcl
浏览文件 @
d6107fd6
set ::passed 0
set ::failed 0
set ::testnum 0
set ::num_tests 0
set ::num_passed 0
set ::num_failed 0
set ::tests_failed
{}
proc assert
{
condition
}
{
if
{
!
[
uplevel 1 expr $condition
]}
{
puts
"!! ERROR
\n
Expected '
$value
' to evaluate to true"
error
"assertion"
error
"assertion:Expected '
$value
' to be true"
}
}
proc assert_match
{
pattern value
}
{
if
{
!
[
string match $pattern $value
]}
{
puts
"!! ERROR
\n
Expected '
$value
' to match '
$pattern
'"
error
"assertion"
error
"assertion:Expected '
$value
' to match '
$pattern
'"
}
}
proc assert_equal
{
expected value
}
{
if
{
$expected
ne $value
}
{
puts
"!! ERROR
\n
Expected '
$value
' to be equal to '
$expected
'"
error
"assertion"
error
"assertion:Expected '
$value
' to be equal to '
$expected
'"
}
}
...
...
@@ -27,8 +25,7 @@ proc assert_error {pattern code} {
if
{[
catch
{
uplevel 1 $code
}
error
]}
{
assert_match $pattern $error
}
else
{
puts
"!! ERROR
\n
Expected an error but nothing was catched"
error
"assertion"
error
"assertion:Expected an error but nothing was catched"
}
}
...
...
@@ -47,7 +44,7 @@ proc assert_type {type key} {
assert_equal $type
[
r type $key
]
}
proc test
{
name code
{
okpattern
notspecifi
ed
}}
{
proc test
{
name code
{
okpattern
undefin
ed
}}
{
# abort if tagged with a tag to deny
foreach tag $::denytags
{
if
{[
lsearch $::tags $tag
]
>= 0
}
{
...
...
@@ -69,30 +66,62 @@ proc test {name code {okpattern notspecified}} {
}
}
incr ::testnum
puts -nonewline
[
format
"#%03d %-68s "
$::testnum $name
]
incr ::num_tests
set details
{}
lappend details $::curfile
lappend details $::tags
lappend details $name
if
{
$::verbose
}
{
puts -nonewline
[
format
"#%03d %-68s "
$::num_tests $name
]
flush stdout
}
if
{[
catch
{
set retval
[
uplevel 1 $code
]}
error
]}
{
if
{
$error
eq
"assertion"
}
{
incr ::failed
if
{[
string match
"assertion:*"
$error
]}
{
set msg
[
string range $error 10 end
]
lappend details $msg
lappend ::tests_failed $details
incr ::num_failed
if
{
$::verbose
}
{
puts
"FAILED"
puts
"
$msg
\n
"
}
else
{
puts
"EXCEPTION"
puts
"
\n
Caught error:
$error
"
error
"exception"
puts -nonewline
"F"
}
}
else
{
if
{
$okpattern
eq
"notspecified"
|| $okpattern eq $retval ||
[
string match $okpattern $retval
]}
{
# Re-raise, let handler up the stack take care of this.
error $error $::errorInfo
}
}
else
{
if
{
$okpattern
eq
"undefined"
|| $okpattern eq $retval ||
[
string match $okpattern $retval
]}
{
incr ::num_passed
if
{
$::verbose
}
{
puts
"PASSED"
incr ::passed
}
else
{
puts
"!! ERROR expected
\n
'
$okpattern
'
\n
but got
\n
'
$retval
'"
incr ::failed
puts -nonewline
"."
}
}
else
{
set msg
"Expected '
$okpattern
' to equal or match '
$retval
'"
lappend details $msg
lappend ::tests_failed $details
incr ::num_failed
if
{
$::verbose
}
{
puts
"FAILED"
puts
"
$msg
\n
"
}
else
{
puts -nonewline
"F"
}
}
}
flush stdout
if
{
$::traceleaks
}
{
set output
[
exec leaks redis-server
]
if
{
!
[
string match
{
*0 leaks*
}
$output
]}
{
puts
"---
------ Test
$::testnum
LEAKED! -----
---"
puts
"---
Test
\"
$name
\"
leaked!
---"
puts $output
exit 1
}
...
...
tests/support/util.tcl
浏览文件 @
d6107fd6
...
...
@@ -52,8 +52,10 @@ proc status {r property} {
proc waitForBgsave r
{
while 1
{
if
{[
status r bgsave_in_progress
]
eq 1
}
{
if
{
$::verbose
}
{
puts -nonewline
"
\n
Waiting for background save to finish... "
flush stdout
}
after 1000
}
else
{
break
...
...
@@ -64,8 +66,10 @@ proc waitForBgsave r {
proc waitForBgrewriteaof r
{
while 1
{
if
{[
status r bgrewriteaof_in_progress
]
eq 1
}
{
if
{
$::verbose
}
{
puts -nonewline
"
\n
Waiting for background AOF rewrite to finish... "
flush stdout
}
after 1000
}
else
{
break
...
...
tests/test_helper.tcl
浏览文件 @
d6107fd6
...
...
@@ -13,13 +13,17 @@ set ::host 127.0.0.1
set ::port 16379
set ::traceleaks 0
set ::valgrind 0
set ::verbose 0
set ::denytags
{}
set ::allowtags
{}
set ::external 0
;
# If
"1"
this means, we are running against external instance
set ::file
""
;
# If set, runs only the tests in this comma separated list
set ::curfile
""
;
# Hold the filename of the current suite
proc execute_tests name
{
source
"tests/
$name.tcl
"
set path
"tests/
$name.tcl
"
set ::curfile $path
source $path
}
# Setup a list to hold a stack of server configs. When calls to start_server
...
...
@@ -147,9 +151,27 @@ proc main {} {
}
cleanup
puts
"
\n
[
expr $::passed+$::failed
]
tests,
$::passed
passed,
$::failed
failed"
if
{
$::failed
> 0
}
{
puts
"
\n
*** WARNING!!!
$::failed
FAILED TESTS ***
\n
"
puts
"
\n
[
expr $::num_tests
]
tests,
$::num
_passed passed,
$::num
_failed failed
\n
"
if
{
$::num
_failed > 0
}
{
set curheader
""
puts
"Failures:"
foreach
{
test
}
$::tests_failed
{
set header
[
lindex $test 0
]
append header
" ("
append header
[
join
[
lindex $test 1
]
","
]
append header
")"
if
{
$curheader
ne $header
}
{
set curheader $header
puts
"
\n
$curheader:
"
}
set name
[
lindex $test 2
]
set msg
[
lindex $test 3
]
puts
"-
$name:
$msg
"
}
puts
""
exit 1
}
}
...
...
@@ -179,6 +201,8 @@ for {set j 0} {$j < [llength $argv]} {incr j} {
}
elseif
{
$opt
eq
{
--port
}}
{
set ::port $arg
incr j
}
elseif
{
$opt
eq
{
--verbose
}}
{
set ::verbose 1
}
else
{
puts
"Wrong argument:
$opt
"
exit 1
...
...
@@ -189,7 +213,7 @@ if {[catch { main } err]} {
if
{[
string length $err
]
> 0
}
{
# only display error when not generated by the test suite
if
{
$err
ne
"exception"
}
{
puts $
err
puts $
::errorInfo
}
exit 1
}
...
...
tests/unit/sort.tcl
浏览文件 @
d6107fd6
...
...
@@ -144,9 +144,11 @@ start_server {
set sorted
[
r sort tosort BY weight_* LIMIT 0 10
]
}
set elapsed
[
expr
[
clock clicks -milliseconds
]
-$start
]
if
{
$::verbose
}
{
puts -nonewline
"
\n
Average time to sort:
[
expr double
(
$elapsed
)
/100
]
milliseconds "
flush stdout
}
}
test
"SORT speed,
$num
element list BY hash field, 100 times"
{
set start
[
clock clicks -milliseconds
]
...
...
@@ -154,9 +156,11 @@ start_server {
set sorted
[
r sort tosort BY wobj_*->weight LIMIT 0 10
]
}
set elapsed
[
expr
[
clock clicks -milliseconds
]
-$start
]
if
{
$::verbose
}
{
puts -nonewline
"
\n
Average time to sort:
[
expr double
(
$elapsed
)
/100
]
milliseconds "
flush stdout
}
}
test
"SORT speed,
$num
element list directly, 100 times"
{
set start
[
clock clicks -milliseconds
]
...
...
@@ -164,9 +168,11 @@ start_server {
set sorted
[
r sort tosort LIMIT 0 10
]
}
set elapsed
[
expr
[
clock clicks -milliseconds
]
-$start
]
if
{
$::verbose
}
{
puts -nonewline
"
\n
Average time to sort:
[
expr double
(
$elapsed
)
/100
]
milliseconds "
flush stdout
}
}
test
"SORT speed,
$num
element list BY <const>, 100 times"
{
set start
[
clock clicks -milliseconds
]
...
...
@@ -174,8 +180,10 @@ start_server {
set sorted
[
r sort tosort BY nokey LIMIT 0 10
]
}
set elapsed
[
expr
[
clock clicks -milliseconds
]
-$start
]
if
{
$::verbose
}
{
puts -nonewline
"
\n
Average time to sort:
[
expr double
(
$elapsed
)
/100
]
milliseconds "
flush stdout
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录