Esempio n. 1
0
 function testInc()
 {
     $scope = __FUNCTION__;
     Redis::config(array('format' => $scope));
     // simplest call
     $expected = array('bar' => 1);
     $this->assertEqual($expected, Stats::inc('foo', 'bar'));
     $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:global:foo"));
     // simplest call
     $expected = array('bar' => 2);
     $this->assertEqual($expected, Stats::inc('foo', 'bar'));
     $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:global:foo"));
     // simple call, adding second field
     $expected = array('bar' => 2, 'baz' => 1);
     $this->assertEqual(array('baz' => 1), Stats::inc('foo', 'baz'));
     $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:global:foo"));
     // simple call, increment second value
     $expected = array('bar' => 2, 'baz' => 2);
     $this->assertEqual(array('baz' => 2), Stats::inc('foo', 'baz'));
     $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:global:foo"));
     // multiple at once as flat array
     // would be cool to have!
     // $expected = array('field1' => 1, 'field2' => 1);
     // $this->assertEqual($expected, Stats::inc('multiFlat', array('field1', 'field2')));
     // $this->assertEqual($expected, $this->redis->hGetAll("$scope:stats:global:multiFlat"));
     // multiple at once
     $expected = array('field1' => 1, 'field2' => 1);
     $this->assertEqual($expected, Stats::inc('multi', array('field1' => 1, 'field2' => 1)));
     $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:global:multi"));
     // incrementing multiple at once
     $expected = array('field1' => 2, 'field2' => 3);
     $this->assertEqual($expected, Stats::inc('multi', array('field1' => 1, 'field2' => 2)));
     $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:global:multi"));
     // multiple at once, with plain bucket
     $expected = array('field1' => 1, 'field2' => 1);
     $this->assertEqual($expected, Stats::inc('withBucket', $expected, 'prefix'));
     $this->assertEqual(array(), $this->redis->hGetAll("{$scope}:stats:global:withBucket"));
     $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:prefix:withBucket"));
     // multiple buckets at once
     $data = array('field1' => 1, 'field2' => 1);
     $expected = array('prefix1' => $data, 'prefix2' => $data);
     $this->assertEqual($expected, Stats::inc('multiBucket', $data, array('prefix1', 'prefix2')));
     $this->assertEqual(array(), $this->redis->hGetAll("{$scope}:stats:global:multiBucket"));
     $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:prefix1:multiBucket"));
     $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:prefix2:multiBucket"));
     // multiple at once, with one bucket in array
     $expected = array('field1' => 1, 'field2' => 1);
     $this->assertEqual($expected, Stats::inc('withBucketArray', $expected, array('user' => 'foo')));
     $this->assertEqual(array(), $this->redis->hGetAll("{$scope}:stats:global:withBucketArray"));
     $this->assertEqual($expected, $this->redis->hGetAll("{$scope}:stats:user:foo:withBucketArray"));
     // multiple buckets as associated array
     $data = array('field1' => 1, 'field2' => 1);
     $expected = array('user:foo' => $data, 'year:2013' => $data);
     $this->assertEqual($expected, Stats::inc('multiBucketArray', $data, array('user' => 'foo', 'year' => '2013')));
     $this->assertEqual(array(), $this->redis->hGetAll("{$scope}:stats:global:multiBucketArray"));
     $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:user:foo:multiBucketArray"));
     $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:year:2013:multiBucketArray"));
     // multiple buckets as associated array with global
     $data = array('field1' => 2, 'field2' => 2);
     $expected = array('global' => $data, 'prefix1' => $data, 'prefix2' => $data);
     $result = Stats::inc('multiBucketWithGlobal', $data, array('global', 'prefix1', 'prefix2'));
     $this->assertEqual($expected, $result);
     $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:global:multiBucketWithGlobal"));
     $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:prefix1:multiBucketWithGlobal"));
     $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:prefix2:multiBucketWithGlobal"));
     $data = array('field1' => 3, 'field2' => 3);
     $expected = array('global' => $data, 'user:foo' => $data, 'year:2013' => $data);
     $result = Stats::inc('multiBucketArrayWithGlobal', $data, array('global', 'user' => 'foo', 'year' => '2013'));
     $this->assertEqual($expected, $result);
     $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:global:multiBucketArrayWithGlobal"));
     $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:user:foo:multiBucketArrayWithGlobal"));
     $this->assertEqual($data, $this->redis->hGetAll("{$scope}:stats:year:2013:multiBucketArrayWithGlobal"));
 }