Completed
Push — master ( 70b352...622f18 )
by Harry
02:46
created

StreamWriterTest::testLongMessage()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 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 testSendFailureWillReconnect()
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
        fclose($socket);
38
39
        $this->assertTrue($writer->write('reconnect'));
40
41
        $this->assertAttributeInternalType('resource', 'socket', $writer);
42
    }
43
44
    public function testWhenItWillRetryIsExponential()
45
    {
46
        $writer = new StreamWriter('test', 'doesnotexist.tld', 8125, StreamWriter::ON_ERROR_IGNORE);
47
48
        // make connect public to test lots of attempts to connect
49
        $class = new ReflectionClass(StreamWriter::class);
50
        $connect = $class->getMethod('connect');
51
        $connect->setAccessible(true);
52
53
        $connect->invoke($writer);
54
        $connect->invoke($writer);
55
        $connect->invoke($writer);
56
        $connect->invoke($writer);
57
        $connect->invoke($writer);
58
        $connect->invoke($writer);
59
        $connect->invoke($writer);
60
61
        $this->assertAttributeGreaterThan(microtime(true) + 2, 'waitTill', $writer);
62
        $this->assertAttributeEquals(7, 'numFails', $writer);
63
64
        $writer->write('test');
65
66
        $this->assertAttributeEquals(
67
            7,
68
            'numFails',
69
            $writer,
70
            'attempting to write with a back-off should not try and connect'
71
        );
72
    }
73
74
    public function testLongMessage()
75
    {
76
        $writer = new StreamWriter();
77
        $this->assertTrue($writer->write(str_repeat('x', 10000)));
78
    }
79
}
80