Passed
Push — master ( c53463...c477f2 )
by Harry
02:10
created

testDestructionWillCloseTheSocket()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 15
rs 9.7666
c 0
b 0
f 0
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
        $this->assertAttributeInternalType('resource', 'socket', $writer);
59
    }
60
61
    public function testWhenItWillRetryIsExponential()
62
    {
63
        $writer = new StreamWriter('test', 'doesnotexist.tld', 8125, StreamWriter::ON_ERROR_IGNORE);
64
65
        // make connect public to test lots of attempts to connect
66
        $class = new ReflectionClass(StreamWriter::class);
67
        $connect = $class->getMethod('connect');
68
        $connect->setAccessible(true);
69
70
        $connect->invoke($writer);
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
78
        $this->assertAttributeGreaterThan(microtime(true) + 2, 'waitTill', $writer);
79
        $this->assertAttributeEquals(7, 'numFails', $writer);
80
81
        $writer->write('test');
82
83
        $this->assertAttributeEquals(
84
            7,
85
            'numFails',
86
            $writer,
87
            'attempting to write with a back-off should not try and connect'
88
        );
89
    }
90
91
    public function testLongMessage()
92
    {
93
        $writer = new StreamWriter();
94
        $this->assertTrue($writer->write(str_repeat('x', 10000)));
95
    }
96
}
97