Passed
Push — master ( 84cbf2...ef661a )
by Leonardo
04:29 queued 02:41
created

RedisAdapterTest::testOpenCircuit()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 11
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 17
rs 9.9
1
<?php
2
3
use LeoCarmo\CircuitBreaker\CircuitBreaker;
4
use LeoCarmo\CircuitBreaker\Adapters\RedisAdapter;
5
6
class RedisAdapterTest extends \PHPUnit\Framework\TestCase
7
{
8
9
    public function testSetAdapter()
10
    {
11
        $redis = new \Redis();
12
        $redis->connect('0.0.0.0', 6379);
13
14
        $redis = new RedisAdapter($redis, 'my-product');
15
16
        CircuitBreaker::setAdapter($redis);
17
18
        $this->assertInstanceOf(RedisAdapter::class, CircuitBreaker::getAdapter());
19
    }
20
21
    public function testOpenCircuit()
22
    {
23
        $service = 'my-service';
24
25
        CircuitBreaker::setServiceSettings($service, [
26
            'timeWindow' => 20,
27
            'failureRateThreshold' => 5,
28
            'intervalToHalfOpen' => 10,
29
        ]);
30
31
        CircuitBreaker::failure($service);
32
        CircuitBreaker::failure($service);
33
        CircuitBreaker::failure($service);
34
        CircuitBreaker::failure($service);
35
        CircuitBreaker::failure($service);
36
37
        $this->assertFalse(CircuitBreaker::isAvailable($service));
38
    }
39
40
    public function testCloseCircuitSuccess()
41
    {
42
        CircuitBreaker::success('my-service');
43
44
        $this->assertTrue(CircuitBreaker::isAvailable('my-service'));
45
    }
46
47
    public function testHalfOpenFailAndOpenCircuit()
48
    {
49
        $service = 'my-service-2';
50
51
        CircuitBreaker::setServiceSettings($service, [
52
            'timeWindow' => 1,
53
            'failureRateThreshold' => 3,
54
            'intervalToHalfOpen' => 15,
55
        ]);
56
57
        CircuitBreaker::failure($service);
58
        CircuitBreaker::failure($service);
59
        CircuitBreaker::failure($service);
60
61
        // Check if is available for open circuit
62
        $this->assertFalse(CircuitBreaker::isAvailable($service));
63
64
        // Sleep for half open
65
        sleep(2);
66
67
        // Register new failure
68
        CircuitBreaker::failure($service);
69
70
        // Check if is open
71
        $this->assertFalse(CircuitBreaker::isAvailable($service));
72
    }
73
}
74