From ce7bef0795e6137b36cdfdfa4e747e31fae09405 Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 8 Apr 2009 00:59:53 +0200 Subject: [PATCH] RANDOMKEY issue 26 fixed, generic test + regression added --- redis.c | 3 ++- test-redis.tcl | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/redis.c b/redis.c index 00df17e67..d3e439c15 100644 --- 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); diff --git a/test-redis.tcl b/test-redis.tcl index 5c4eb571c..bcc5ee3d6 100644 --- a/test-redis.tcl +++ b/test-redis.tcl @@ -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