testThrowExceptionOnErrorResponse()   A
last analyzed

Complexity

Conditions 4
Paths 6

Size

Total Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 20
rs 9.6
c 0
b 0
f 0
cc 4
nc 6
nop 1
1
<?php
2
3
/*
4
 * This file is part of the Phive Queue package.
5
 *
6
 * (c) Eugene Leonovich <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Phive\Queue\Tests\Queue;
13
14
use Phive\Queue\NoItemAvailableException;
15
use Phive\Queue\QueueException;
16
use Phive\Queue\RedisQueue;
17
use Phive\Queue\Tests\Handler\RedisHandler;
18
19
/**
20
 * @requires function Redis::connect
21
 */
22
class RedisQueueTest extends QueueTest
23
{
24
    use Performance;
25
    use Concurrency;
26
27
    protected function getUnsupportedItemTypes()
28
    {
29
        return [Types::TYPE_ARRAY, Types::TYPE_OBJECT];
30
    }
31
32
    /**
33
     * @dataProvider provideItemsOfUnsupportedTypes
34
     * @expectedException PHPUnit_Framework_Exception
35
     * @expectedExceptionMessageRegExp /could not be converted to string|Array to string conversion/
36
     */
37
    public function testUnsupportedItemType($item)
38
    {
39
        $this->queue->push($item);
40
    }
41
42
    /**
43
     * @requires function Redis::_serialize
44
     * @dataProvider provideItemsOfVariousTypes
45
     */
46
    public function testSupportItemTypeWithSerializerLoose($item)
47
    {
48
        $redis = self::getHandler()->createRedis();
49
        $queue = new RedisQueue($redis);
50
51
        $serializers = [\Redis::SERIALIZER_PHP];
52
        if (defined('Redis::SERIALIZER_IGBINARY')) {
53
            $serializers[] = \Redis::SERIALIZER_IGBINARY;
54
        }
55
56
        foreach ($serializers as $serializer) {
57
            $redis->setOption(\Redis::OPT_SERIALIZER, $serializer);
58
59
            $queue->push($item);
60
            $this->assertEquals($item, $queue->pop());
61
        }
62
    }
63
64
    /**
65
     * @dataProvider provideQueueInterfaceMethods
66
     */
67
    public function testThrowExceptionOnErrorResponse($method)
68
    {
69
        $mock = $this->getMock('Redis');
70
71
        $redisMethods = get_class_methods('Redis');
72
        foreach ($redisMethods as $redisMethod) {
73
            $mock->expects($this->any())->method($redisMethod)->will($this->returnValue(false));
74
        }
75
76
        $queue = new RedisQueue($mock);
77
78
        try {
79
            $this->callQueueMethod($queue, $method);
80
        } catch (NoItemAvailableException $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
81
        } catch (QueueException $e) {
82
            return;
83
        }
84
85
        $this->fail();
86
    }
87
88
    public static function createHandler(array $config)
89
    {
90
        return new RedisHandler([
91
            'host'   => $config['PHIVE_REDIS_HOST'],
92
            'port'   => $config['PHIVE_REDIS_PORT'],
93
            'prefix' => $config['PHIVE_REDIS_PREFIX'],
94
        ]);
95
    }
96
}
97