Test Failed
Pull Request — master (#1)
by Leonardo
02:49
created

RedisAdapterTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 31
c 1
b 0
f 0
dl 0
loc 66
rs 10
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testSetAdapter() 0 10 1
A testHalfOpenFailAndOpenCircuit() 0 25 1
A testOpenCircuit() 0 17 1
A testCloseCircuitSuccess() 0 5 1
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