Completed
Push — master ( 590dbb...658da2 )
by Alexander
02:01
created

FileTargetTest::testInit()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 0
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
<?php
2
namespace Yiisoft\Log\Target\File\Tests;
3
4
use PHPUnit\Framework\TestCase;
5
use Psr\Log\LogLevel;
6
use Yiisoft\Files\FileHelper;
7
use Yiisoft\Log\Target\File\FileRotator;
8
use Yiisoft\Log\Target\File\FileTarget;
9
use Yiisoft\Log\Logger;
10
11
/**
12
 * @group log
13
 */
14
final class FileTargetTest extends TestCase
15
{
16
    public function booleanDataProvider(): array
17
    {
18
        return [
19
            [true],
20
            [false],
21
        ];
22
    }
23
24
    /**
25
     * Tests that log directory isn't created during init process
26
     * @see https://github.com/yiisoft/yii2/issues/15662
27
     */
28
    public function testInit(): void
29
    {
30
        $logFile = __DIR__ . '/runtime/log/filetargettest.log';
31
        FileHelper::removeDirectory(dirname($logFile));
32
        new FileTarget($logFile);
33
        $this->assertFileNotExists(
34
            dirname($logFile),
35
            'Log directory should not be created during init process'
36
        );
37
    }
38
39
    /**
40
     * @dataProvider booleanDataProvider
41
     * @param bool $rotateByCopy
42
     */
43
    public function testRotate(bool $rotateByCopy): void
44
    {
45
        $logFile = __DIR__ . '/runtime/log/filetargettest.log';
46
        FileHelper::removeDirectory(dirname($logFile));
47
        mkdir(dirname($logFile), 0777, true);
48
49
        $rotator = new FileRotator(1024, 1, null, $rotateByCopy);
50
        $fileTarget = new FileTarget($logFile, $rotator);
51
52
        $logger = new Logger([
53
            'file' => $fileTarget,
54
        ]);
55
56
        // one file
57
58
        $logger->log(LogLevel::WARNING, str_repeat('x', 1024));
59
        $logger->flush(true);
60
61
        clearstatcache();
62
63
        $this->assertFileExists($logFile);
64
        $this->assertFileNotExists($logFile . '.1');
65
        $this->assertFileNotExists($logFile . '.2');
66
        $this->assertFileNotExists($logFile . '.3');
67
        $this->assertFileNotExists($logFile . '.4');
68
69
        // exceed max size
70
        for ($i = 0; $i < 1024; $i++) {
71
            $logger->log(LogLevel::WARNING, str_repeat('x', 1024));
72
        }
73
        $logger->flush(true);
74
75
        // first rotate
76
77
        $logger->log(LogLevel::WARNING, str_repeat('x', 1024));
78
        $logger->flush(true);
79
80
        clearstatcache();
81
82
        $this->assertFileExists($logFile);
83
        $this->assertFileExists($logFile . '.1');
84
        $this->assertFileNotExists($logFile . '.2');
85
        $this->assertFileNotExists($logFile . '.3');
86
        $this->assertFileNotExists($logFile . '.4');
87
88
        // second rotate
89
90
        for ($i = 0; $i < 1024; $i++) {
91
            $logger->log(LogLevel::WARNING, str_repeat('x', 1024));
92
        }
93
        $logger->flush(true);
94
95
        clearstatcache();
96
97
        $this->assertFileExists($logFile);
98
        $this->assertFileExists($logFile . '.1');
99
        $this->assertFileNotExists($logFile . '.2');
100
        $this->assertFileNotExists($logFile . '.3');
101
        $this->assertFileNotExists($logFile . '.4');
102
    }
103
}
104