testWhenItWillRetryIsExponential()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
cc 1
eloc 15
c 2
b 1
f 0
nc 1
nop 0
dl 0
loc 23
rs 9.7666
1
<?php
2
3
namespace Graze\DogStatsD\Test\Unit;
4
5
use Graze\DogStatsD\Stream\StreamWriter;
6
use Graze\DogStatsD\Test\TestCase;
7
use ReflectionClass;
8
use ReflectionProperty;
9
10
class StreamWriterTest extends TestCase
11
{
12
    public function testDestructionWithInvalidSocket()
13
    {
14
        $writer = new StreamWriter();
15
        $writer->write('test');
16
17
        // close the socket
18
        $reflector = new ReflectionProperty(StreamWriter::class, 'socket');
19
        $reflector->setAccessible(true);
20
        $socket = $reflector->getValue($writer);
21
        fclose($socket);
22
23
        $writer = null;
24
25
        $this->assertNull($writer);
26
    }
27
28
    public function testDestructionWillCloseTheSocket()
29
    {
30
        $writer = new StreamWriter();
31
        $writer->write('test');
32
33
        // close the socket
34
        $reflector = new ReflectionProperty(StreamWriter::class, 'socket');
35
        $reflector->setAccessible(true);
36
        $socket = $reflector->getValue($writer);
37
38
        $this->assertTrue(is_resource($socket));
39
        $writer = null;
40
41
        $this->assertNull($writer);
42
        $this->assertFalse(is_resource($socket));
43
    }
44
45
    public function testSendFailureWillReconnect()
46
    {
47
        $writer = new StreamWriter();
48
        $writer->write('test');
49
50
        // close the socket
51
        $reflector = new ReflectionProperty(StreamWriter::class, 'socket');
52
        $reflector->setAccessible(true);
53
        $socket = $reflector->getValue($writer);
54
        fclose($socket);
55
56
        $this->assertTrue($writer->write('reconnect'));
57
58
        $socket = $reflector->getValue($writer);
59
        $this->assertTrue(is_resource($socket));
60
    }
61
62
    public function testWhenItWillRetryIsExponential()
63
    {
64
        $writer = new StreamWriter('test', 'doesnotexist.tld', 8125, StreamWriter::ON_ERROR_IGNORE);
65
66
        // make connect public to test lots of attempts to connect
67
        $class = new ReflectionClass(StreamWriter::class);
68
        $connect = $class->getMethod('connect');
69
        $connect->setAccessible(true);
70
71
        $connect->invoke($writer);
72
        $connect->invoke($writer);
73
        $connect->invoke($writer);
74
        $connect->invoke($writer);
75
        $connect->invoke($writer);
76
        $connect->invoke($writer);
77
        $connect->invoke($writer);
78
79
        $this->assertGreaterThan(microtime(true) + 2, $writer->waitTill);
80
        $this->assertEquals(7, $writer->numFails);
81
82
        $writer->write('test');
83
84
        $this->assertEquals(7, $writer->numFails, 'attempting to write with a back-off should not try and connect');
85
    }
86
87
    public function testLongMessage()
88
    {
89
        $writer = new StreamWriter();
90
        $this->assertTrue($writer->write(str_repeat('x', 10000)));
91
    }
92
}
93