Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
hiredis
Commits
aec1fbd2
Commit
aec1fbd2
authored
Sep 20, 2010
by
Pieter Noordhuis
Browse files
Use automatic numbering in tests
parent
3253105d
Changes
1
Hide whitespace changes
Inline
Side-by-side
test.c
View file @
aec1fbd2
...
@@ -6,7 +6,8 @@
...
@@ -6,7 +6,8 @@
#include "hiredis.h"
#include "hiredis.h"
/* The following line is our testing "framework" :) */
/* The following lines make up our testing "framework" :) */
#define test(_s) { printf("#%02d ", ++tests); printf(_s); }
#define test_cond(_c) if(_c) printf("PASSED\n"); else {printf("FAILED\n"); fails++;}
#define test_cond(_c) if(_c) printf("PASSED\n"); else {printf("FAILED\n"); fails++;}
static
long
long
usec
(
void
)
{
static
long
long
usec
(
void
)
{
...
@@ -25,21 +26,19 @@ static void __connect(int *fd) {
...
@@ -25,21 +26,19 @@ static void __connect(int *fd) {
int
main
(
void
)
{
int
main
(
void
)
{
int
fd
;
int
fd
;
int
i
,
fails
=
0
;
int
i
,
tests
=
0
,
fails
=
0
;
long
long
t1
,
t2
;
long
long
t1
,
t2
;
redisReply
*
reply
;
redisReply
*
reply
;
__connect
(
&
fd
);
__connect
(
&
fd
);
/* test 0 */
test
(
"Returns I/O error when the connection is lost: "
);
printf
(
"#0 Returns I/O error when the connection is lost: "
);
reply
=
redisCommand
(
fd
,
"QUIT"
);
reply
=
redisCommand
(
fd
,
"QUIT"
);
test_cond
(
reply
->
type
==
REDIS_REPLY_ERROR
&&
test_cond
(
reply
->
type
==
REDIS_REPLY_ERROR
&&
strcasecmp
(
reply
->
reply
,
"i/o error"
)
==
0
);
strcasecmp
(
reply
->
reply
,
"i/o error"
)
==
0
);
freeReplyObject
(
reply
);
freeReplyObject
(
reply
);
__connect
(
&
fd
);
/* reconnect */
__connect
(
&
fd
);
/* reconnect */
/* test 1 */
test
(
"Is able to deliver commands: "
);
printf
(
"#1 Is able to deliver commands: "
);
reply
=
redisCommand
(
fd
,
"PING"
);
reply
=
redisCommand
(
fd
,
"PING"
);
test_cond
(
reply
->
type
==
REDIS_REPLY_STRING
&&
test_cond
(
reply
->
type
==
REDIS_REPLY_STRING
&&
strcasecmp
(
reply
->
reply
,
"pong"
)
==
0
)
strcasecmp
(
reply
->
reply
,
"pong"
)
==
0
)
...
@@ -60,15 +59,13 @@ int main(void) {
...
@@ -60,15 +59,13 @@ int main(void) {
}
}
freeReplyObject
(
reply
);
freeReplyObject
(
reply
);
/* test 2 */
test
(
"Is a able to send commands verbatim: "
);
printf
(
"#2 Is a able to send commands verbatim: "
);
reply
=
redisCommand
(
fd
,
"SET foo bar"
);
reply
=
redisCommand
(
fd
,
"SET foo bar"
);
test_cond
(
reply
->
type
==
REDIS_REPLY_STRING
&&
test_cond
(
reply
->
type
==
REDIS_REPLY_STRING
&&
strcasecmp
(
reply
->
reply
,
"ok"
)
==
0
)
strcasecmp
(
reply
->
reply
,
"ok"
)
==
0
)
freeReplyObject
(
reply
);
freeReplyObject
(
reply
);
/* test 3 */
test
(
"%%s String interpolation works: "
);
printf
(
"#3 %%s String interpolation works: "
);
reply
=
redisCommand
(
fd
,
"SET %s %s"
,
"foo"
,
"hello world"
);
reply
=
redisCommand
(
fd
,
"SET %s %s"
,
"foo"
,
"hello world"
);
freeReplyObject
(
reply
);
freeReplyObject
(
reply
);
reply
=
redisCommand
(
fd
,
"GET foo"
);
reply
=
redisCommand
(
fd
,
"GET foo"
);
...
@@ -76,32 +73,29 @@ int main(void) {
...
@@ -76,32 +73,29 @@ int main(void) {
strcmp
(
reply
->
reply
,
"hello world"
)
==
0
);
strcmp
(
reply
->
reply
,
"hello world"
)
==
0
);
freeReplyObject
(
reply
);
freeReplyObject
(
reply
);
/* test 4 & 5 */
test
(
"%%b String interpolation works: "
);
printf
(
"#4 %%b String interpolation works: "
);
reply
=
redisCommand
(
fd
,
"SET %b %b"
,
"foo"
,
3
,
"hello
\x00
world"
,
11
);
reply
=
redisCommand
(
fd
,
"SET %b %b"
,
"foo"
,
3
,
"hello
\x00
world"
,
11
);
freeReplyObject
(
reply
);
freeReplyObject
(
reply
);
reply
=
redisCommand
(
fd
,
"GET foo"
);
reply
=
redisCommand
(
fd
,
"GET foo"
);
test_cond
(
reply
->
type
==
REDIS_REPLY_STRING
&&
test_cond
(
reply
->
type
==
REDIS_REPLY_STRING
&&
memcmp
(
reply
->
reply
,
"hello
\x00
world"
,
11
)
==
0
)
memcmp
(
reply
->
reply
,
"hello
\x00
world"
,
11
)
==
0
)
printf
(
"#5 b
inary reply length is correct: "
);
test
(
"B
inary reply length is correct: "
);
test_cond
(
sdslen
(
reply
->
reply
)
==
11
)
test_cond
(
sdslen
(
reply
->
reply
)
==
11
)
freeReplyObject
(
reply
);
freeReplyObject
(
reply
);
/* test 6 */
test
(
"Can parse nil replies: "
);
printf
(
"#6 can parse nil replies: "
);
reply
=
redisCommand
(
fd
,
"GET nokey"
);
reply
=
redisCommand
(
fd
,
"GET nokey"
);
test_cond
(
reply
->
type
==
REDIS_REPLY_NIL
)
test_cond
(
reply
->
type
==
REDIS_REPLY_NIL
)
freeReplyObject
(
reply
);
freeReplyObject
(
reply
);
/* test 7 */
/* test 7 */
printf
(
"#7 c
an parse integer replies: "
);
test
(
"C
an parse integer replies: "
);
reply
=
redisCommand
(
fd
,
"INCR mycounter"
);
reply
=
redisCommand
(
fd
,
"INCR mycounter"
);
test_cond
(
reply
->
type
==
REDIS_REPLY_INTEGER
&&
reply
->
integer
==
1
)
test_cond
(
reply
->
type
==
REDIS_REPLY_INTEGER
&&
reply
->
integer
==
1
)
freeReplyObject
(
reply
);
freeReplyObject
(
reply
);
/* test 8 */
test
(
"Can parse multi bulk replies: "
);
printf
(
"#8 can parse multi bulk replies: "
);
freeReplyObject
(
redisCommand
(
fd
,
"LPUSH mylist foo"
));
freeReplyObject
(
redisCommand
(
fd
,
"LPUSH mylist foo"
));
freeReplyObject
(
redisCommand
(
fd
,
"LPUSH mylist bar"
));
freeReplyObject
(
redisCommand
(
fd
,
"LPUSH mylist bar"
));
reply
=
redisCommand
(
fd
,
"LRANGE mylist 0 -1"
);
reply
=
redisCommand
(
fd
,
"LRANGE mylist 0 -1"
);
...
@@ -111,9 +105,9 @@ int main(void) {
...
@@ -111,9 +105,9 @@ int main(void) {
!
memcmp
(
reply
->
element
[
1
]
->
reply
,
"foo"
,
3
))
!
memcmp
(
reply
->
element
[
1
]
->
reply
,
"foo"
,
3
))
freeReplyObject
(
reply
);
freeReplyObject
(
reply
);
/*
test 9 (
m/e with multi bulk reply *before* other reply
)
.
/* m/e with multi bulk reply *before* other reply.
* specifically test ordering of reply items to parse. */
* specifically test ordering of reply items to parse. */
printf
(
"#10 c
an handle nested multi bulk replies: "
);
test
(
"C
an handle nested multi bulk replies: "
);
freeReplyObject
(
redisCommand
(
fd
,
"MULTI"
));
freeReplyObject
(
redisCommand
(
fd
,
"MULTI"
));
freeReplyObject
(
redisCommand
(
fd
,
"LRANGE mylist 0 -1"
));
freeReplyObject
(
redisCommand
(
fd
,
"LRANGE mylist 0 -1"
));
freeReplyObject
(
redisCommand
(
fd
,
"PING"
));
freeReplyObject
(
redisCommand
(
fd
,
"PING"
));
...
@@ -128,13 +122,7 @@ int main(void) {
...
@@ -128,13 +122,7 @@ int main(void) {
strcasecmp
(
reply
->
element
[
1
]
->
reply
,
"pong"
)
==
0
);
strcasecmp
(
reply
->
element
[
1
]
->
reply
,
"pong"
)
==
0
);
freeReplyObject
(
reply
);
freeReplyObject
(
reply
);
if
(
fails
==
0
)
{
test
(
"Throughput:
\n
"
);
printf
(
"ALL TESTS PASSED
\n
"
);
}
else
{
printf
(
"*** %d TESTS FAILED ***
\n
"
,
fails
);
}
printf
(
"
\n
Speed tests:
\n
"
);
for
(
i
=
0
;
i
<
500
;
i
++
)
for
(
i
=
0
;
i
<
500
;
i
++
)
freeReplyObject
(
redisCommand
(
fd
,
"LPUSH mylist foo"
));
freeReplyObject
(
redisCommand
(
fd
,
"LPUSH mylist foo"
));
...
@@ -142,17 +130,23 @@ int main(void) {
...
@@ -142,17 +130,23 @@ int main(void) {
for
(
i
=
0
;
i
<
1000
;
i
++
)
for
(
i
=
0
;
i
<
1000
;
i
++
)
freeReplyObject
(
redisCommand
(
fd
,
"PING"
));
freeReplyObject
(
redisCommand
(
fd
,
"PING"
));
t2
=
usec
();
t2
=
usec
();
printf
(
"(1000x PING: %.2fs)
\n
"
,
(
t2
-
t1
)
/
1000000
.
0
);
printf
(
"
\t
(1000x PING: %.2fs)
\n
"
,
(
t2
-
t1
)
/
1000000
.
0
);
t1
=
usec
();
t1
=
usec
();
for
(
i
=
0
;
i
<
1000
;
i
++
)
for
(
i
=
0
;
i
<
1000
;
i
++
)
freeReplyObject
(
redisCommand
(
fd
,
"LRANGE mylist 0 499"
));
freeReplyObject
(
redisCommand
(
fd
,
"LRANGE mylist 0 499"
));
t2
=
usec
();
t2
=
usec
();
printf
(
"(1000x LRANGE with 500 elements: %.2fs)
\n
"
,
(
t2
-
t1
)
/
1000000
.
0
);
printf
(
"
\t
(1000x LRANGE with 500 elements: %.2fs)
\n
"
,
(
t2
-
t1
)
/
1000000
.
0
);
/* Clean DB 9 */
/* Clean DB 9 */
reply
=
redisCommand
(
fd
,
"FLUSHDB"
);
reply
=
redisCommand
(
fd
,
"FLUSHDB"
);
freeReplyObject
(
reply
);
freeReplyObject
(
reply
);
if
(
fails
==
0
)
{
printf
(
"ALL TESTS PASSED
\n
"
);
}
else
{
printf
(
"*** %d TESTS FAILED ***
\n
"
,
fails
);
}
return
0
;
return
0
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment