Преглед на файлове

Fix implementation for hash tags extraction from keys.

We now fully comply with the specifications defined by Redis.
Daniele Alessandri преди 11 години
родител
ревизия
8fbe658ca8
променени са 2 файла, в които са добавени 10 реда и са изтрити 3 реда
  1. 2 2
      lib/Predis/Cluster/RedisStrategy.php
  2. 8 1
      tests/Predis/Cluster/RedisStrategyTest.php

+ 2 - 2
lib/Predis/Cluster/RedisStrategy.php

@@ -305,8 +305,8 @@ class RedisStrategy implements StrategyInterface
     protected function extractKeyTag($key)
     {
         if (false !== $start = strpos($key, '{')) {
-            if (false !== $end = strpos($key, '}', $start)) {
-                $key = substr($key, ++$start, $end - $start);
+            if (false !== ($end = strpos($key, '}', $start)) && $end !== ++$start) {
+                $key = substr($key, $start, $end - $start);
             }
         }
 

+ 8 - 1
tests/Predis/Cluster/RedisStrategyTest.php

@@ -29,7 +29,14 @@ class RedisStrategyTest extends PredisTestCase
         $this->assertSame(44950, $strategy->getKeyHash('{foo}'));
         $this->assertSame(44950, $strategy->getKeyHash('{foo}:bar'));
         $this->assertSame(44950, $strategy->getKeyHash('{foo}:baz'));
-        $this->assertSame(44950, $strategy->getKeyHash('bar:{foo}:bar'));
+        $this->assertSame(44950, $strategy->getKeyHash('bar:{foo}:baz'));
+        $this->assertSame(44950, $strategy->getKeyHash('bar:{foo}:{baz}'));
+
+        $this->assertSame(44950, $strategy->getKeyHash('bar:{foo}:baz{}'));
+        $this->assertSame(9415,  $strategy->getKeyHash('{}bar:{foo}:baz'));
+
+        $this->assertSame(0,     $strategy->getKeyHash(''));
+        $this->assertSame(31641, $strategy->getKeyHash('{}'));
     }
 
     /**