]> git.saurik.com Git - redis.git/commitdiff
RANDOMKEY issue 26 fixed, generic test + regression added
authorantirez <antirez@gmail.com>
Tue, 7 Apr 2009 22:59:53 +0000 (00:59 +0200)
committerantirez <antirez@gmail.com>
Tue, 7 Apr 2009 22:59:53 +0000 (00:59 +0200)
redis.c
test-redis.tcl

diff --git a/redis.c b/redis.c
index 00df17e671eef96473653ee0273d9af357e197ae..d3e439c1546c62fad79d5caf001a7086e17ff7f2 100644 (file)
--- a/redis.c
+++ b/redis.c
@@ -2237,9 +2237,10 @@ static void randomkeyCommand(redisClient *c) {
    
     while(1) {
         de = dictGetRandomKey(c->db->dict);
-        if (expireIfNeeded(c->db,dictGetEntryKey(de)) == 0) break;
+        if (!de || expireIfNeeded(c->db,dictGetEntryKey(de)) == 0) break;
     }
     if (de == NULL) {
+        addReply(c,shared.plus);
         addReply(c,shared.crlf);
     } else {
         addReply(c,shared.plus);
index 5c4eb571cc308ffe87f191bed51cb5fa05eaf0b5..bcc5ee3d667365d520fa4294c196f2e0e46d1aa6 100644 (file)
@@ -588,6 +588,29 @@ proc main {server port} {
         $r mget foo baazz bar myset
     } {BAR {} FOO {}}
 
+    test {RANDOMKEY} {
+        $r flushall
+        $r set foo x
+        $r set bar y
+        set foo_seen 0
+        set bar_seen 0
+        for {set i 0} {$i < 100} {incr i} {
+            set rkey [$r randomkey]
+            if {$rkey eq {foo}} {
+                set foo_seen 1
+            }
+            if {$rkey eq {bar}} {
+                set bar_seen 1
+            }
+        }
+        list $foo_seen $bar_seen
+    } {1 1}
+
+    test {RANDOMKEY against empty DB} {
+        $r flushall
+        $r randomkey
+    } {}
+
     # Leave the user with a clean DB before to exit
     test {FLUSHALL} {
         $r flushall