Tests for the interactive mode of redis-cli

Changed redis-cli to output the raw response for a bulk reply when it is
run in interactive mode instead of checking isatty.
This commit is contained in:
Pieter Noordhuis 2010-08-04 14:15:52 +02:00
parent 6825491928
commit f2dd4769dd
3 changed files with 84 additions and 4 deletions

View File

@ -59,7 +59,7 @@ static struct config {
int shutdown;
int monitor_mode;
int pubsub_mode;
int raw_output;
int raw_output; /* output mode per command */
char *auth;
char *historyfile;
} config;
@ -152,7 +152,7 @@ static int cliReadBulkReply(int fd) {
reply = zmalloc(bulklen);
anetRead(fd,reply,bulklen);
anetRead(fd,crlf,2);
if (config.raw_output || !isatty(fileno(stdout))) {
if (config.raw_output || !config.interactive) {
if (bulklen && fwrite(reply,bulklen,1,stdout) == 0) {
zfree(reply);
return 1;
@ -494,7 +494,10 @@ int main(int argc, char **argv) {
cliSendCommand(2, convertToSds(2, authargv), 1);
}
if (argc == 0 || config.interactive == 1) repl();
if (argc == 0 || config.interactive == 1) {
config.interactive = 1;
repl();
}
argvcopy = convertToSds(argc+1, argv);
if (config.argn_from_stdin) {

View File

@ -0,0 +1,69 @@
start_server {tags {"cli"}} {
proc open_cli {} {
set ::env(TERM) dumb
set fd [open [format "|src/redis-cli -p %d -n 9" [srv port]] "r+"]
fconfigure $fd -buffering none
fconfigure $fd -blocking false
fconfigure $fd -translation binary
assert_equal "redis> " [read_cli $fd]
set _ $fd
}
proc close_cli {fd} {
close $fd
}
proc read_cli {fd} {
set buf [read $fd]
while {[string length $buf] == 0} {
# wait some time and try again
after 10
set buf [read $fd]
}
set _ $buf
}
proc write_cli {fd buf} {
puts $fd $buf
flush $fd
}
proc run_command {fd cmd} {
write_cli $fd $cmd
set lines [split [read_cli $fd] "\n"]
assert_equal "redis> " [lindex $lines end]
join [lrange $lines 0 end-1] "\n"
}
proc test_interactive_cli {name code} {
set fd [open_cli]
test "Interactive CLI: $name" $code
close_cli $fd
}
test_interactive_cli "INFO response should be printed raw" {
set lines [split [run_command $fd info] "\n"]
foreach line $lines {
assert [regexp {^[a-z0-9_]+:[a-z0-9_]+} $line]
}
}
test_interactive_cli "Status reply" {
assert_equal "OK" [run_command $fd "set key foo"]
}
test_interactive_cli "Integer reply" {
assert_equal "(integer) 1" [run_command $fd "incr counter"]
}
test_interactive_cli "Bulk reply" {
r set key foo
assert_equal "\"foo\"" [run_command $fd "get key"]
}
test_interactive_cli "Multi-bulk reply" {
r rpush list foo
r rpush list bar
assert_equal "1. \"foo\"\n2. \"bar\"" [run_command $fd "lrange list 0 -1"]
}
}

View File

@ -25,7 +25,14 @@ proc execute_tests name {
# are nested, use "srv 0 pid" to get the pid of the inner server. To access
# outer servers, use "srv -1 pid" etcetera.
set ::servers {}
proc srv {level property} {
proc srv {args} {
set level 0
if {[string is integer [lindex $args 0]]} {
set level [lindex $args 0]
set property [lindex $args 1]
} else {
set property [lindex $args 0]
}
set srv [lindex $::servers end+$level]
dict get $srv $property
}
@ -88,6 +95,7 @@ proc main {} {
execute_tests "unit/cas"
execute_tests "integration/replication"
execute_tests "integration/aof"
execute_tests "integration/redis-cli"
execute_tests "unit/pubsub"
# run tests with VM enabled