]> git.saurik.com Git - redis.git/commitdiff
Tests for the interactive mode of redis-cli
authorPieter Noordhuis <pcnoordhuis@gmail.com>
Wed, 4 Aug 2010 12:15:52 +0000 (14:15 +0200)
committerPieter Noordhuis <pcnoordhuis@gmail.com>
Wed, 4 Aug 2010 13:28:03 +0000 (15:28 +0200)
Changed redis-cli to output the raw response for a bulk reply when it is
run in interactive mode instead of checking isatty.

src/redis-cli.c
tests/integration/redis-cli.tcl [new file with mode: 0644]
tests/test_helper.tcl

index dac8286251b983d233729885d05f7dc866bd9598..97a119c8cd9afe7aa74f30708c81153c4a08f221 100644 (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) {
diff --git a/tests/integration/redis-cli.tcl b/tests/integration/redis-cli.tcl
new file mode 100644 (file)
index 0000000..191c659
--- /dev/null
@@ -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"]
+    }
+}
index ef1f99233434fe9682ff35ad217a5aaded9a2d51..4ae9cc65967f30b83af2cc70193960b7a06e1eec 100644 (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