mirror of
http://github.com/valkey-io/valkey
synced 2024-11-22 00:52:38 +00:00
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:
parent
6825491928
commit
f2dd4769dd
@ -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) {
|
||||
|
69
tests/integration/redis-cli.tcl
Normal file
69
tests/integration/redis-cli.tcl
Normal 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"]
|
||||
}
|
||||
}
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user