Passed
Push — master ( 1b1dbd...2b0006 )
by Petr
10:06
created

MemoryTest::testHarderCounter()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 11
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 13
rs 9.9
1
<?php
2
3
namespace StorageTests;
4
5
6
use CommonTestClass;
7
use kalanis\kw_storage\Storage\Target;
8
use kalanis\kw_storage\StorageException;
9
10
11
class MemoryTest extends CommonTestClass
12
{
13
    public function tearDown(): void
14
    {
15
        if (is_file($this->mockTestFile())) {
16
            unlink($this->mockTestFile());
17
        }
18
        if (is_dir($this->mockTestFile())) {
19
            rmdir($this->mockTestFile());
20
        }
21
        parent::tearDown();
22
    }
23
24
    /**
25
     * @throws StorageException
26
     */
27
    public function testExists(): void
28
    {
29
        $memory = new Target\Memory();
30
        $this->assertTrue($memory->check($this->getTestDir()));
31
        $this->assertFalse($memory->exists($this->mockTestFile()));
32
        $this->expectException(StorageException::class);
33
        $memory->load($this->mockTestFile());
34
    }
35
36
    /**
37
     * @throws StorageException
38
     */
39
    public function testOperations(): void
40
    {
41
        $memory = new Target\Memory();
42
        $this->assertFalse($memory->exists($this->mockTestFile()));
43
        $this->assertTrue($memory->save($this->mockTestFile(), 'asdfghjklpoiuztrewqyxcvbnm'));
44
        $this->assertTrue($memory->exists($this->mockTestFile()));
45
        $this->assertEquals('asdfghjklpoiuztrewqyxcvbnm', $memory->load($this->mockTestFile()));
46
        $this->assertTrue($memory->remove($this->mockTestFile()));
47
        $this->assertFalse($memory->exists($this->mockTestFile()));
48
    }
49
50
    /**
51
     * @throws StorageException
52
     */
53
    public function testLookup(): void
54
    {
55
        $memory = new Target\Memory();
56
        $this->assertTrue($memory->check($this->getTestDir()));
57
        $testFiles = [
58
            'dummyFile.tst' => $this->getTestDir() . 'dummyFile.tst',
59
            'dummyFile.0.tst' => $this->getTestDir() . 'dummyFile.0.tst',
60
            'dummyFile.1.tst' => $this->getTestDir() . 'dummyFile.1.tst',
61
            'dummyFile.2.tst' => $this->getTestDir() . 'dummyFile.2.tst',
62
        ];
63
        $removal = $memory->removeMulti($testFiles);
64
        $this->assertEquals([
65
            'dummyFile.tst' => false,
66
            'dummyFile.0.tst' => false,
67
            'dummyFile.1.tst' => false,
68
            'dummyFile.2.tst' => false,
69
        ], $removal);
70
71
        iterator_to_array($memory->lookup('this path does not exists'));
72
        $this->assertEquals(0, count(array_filter(iterator_to_array($memory->lookup($this->getTestDir())), [$this, 'dotDirs'])));
73
74
        $memory->save($this->getTestDir() . 'dummyFile.tst', 'asdfghjklqwertzuiopyxcvbnm');
75
        $memory->save($this->getTestDir() . 'dummyFile.0.tst', 'asdfghjklqwertzuiopyxcvbnm');
76
        $memory->save($this->getTestDir() . 'dummyFile.1.tst', 'asdfghjklqwertzuiopyxcvbnm');
77
        $memory->save($this->getTestDir() . 'dummyFile.2.tst', 'asdfghjklqwertzuiopyxcvbnm');
78
79
        $files = iterator_to_array($memory->lookup($this->getTestDir()));
80
        sort($files);
81
        $files = array_filter($files, [$this, 'dotDirs']);
82
83
        $this->assertEquals(count($testFiles), count($files));
84
        $this->assertEquals('dummyFile.0.tst', reset($files));
85
        $this->assertEquals('dummyFile.1.tst', next($files));
86
        $this->assertEquals('dummyFile.2.tst', next($files));
87
        $this->assertEquals('dummyFile.tst', next($files));
88
89
        $removal = $memory->removeMulti($testFiles);
90
        $this->assertFalse($memory->exists($this->getTestDir() . 'dummyFile.tst'));
91
        $this->assertFalse($memory->exists($this->getTestDir() . 'dummyFile.0.tst'));
92
        $this->assertFalse($memory->exists($this->getTestDir() . 'dummyFile.1.tst'));
93
        $this->assertFalse($memory->exists($this->getTestDir() . 'dummyFile.2.tst'));
94
95
        $this->assertEquals([
96
            'dummyFile.tst' => true,
97
            'dummyFile.0.tst' => true,
98
            'dummyFile.1.tst' => true,
99
            'dummyFile.2.tst' => true,
100
        ], $removal);
101
    }
102
103
    public function dotDirs(string $path): bool
104
    {
105
        return !in_array($path, ['.', '..']);
106
    }
107
108
    /**
109
     * @throws StorageException
110
     */
111
    public function testSimpleCounter(): void
112
    {
113
        $memory = new Target\Memory();
114
        $this->assertFalse($memory->exists($this->mockTestFile()));
115
        $this->assertTrue($memory->save($this->mockTestFile(), 15));
116
        $this->assertTrue($memory->decrement($this->mockTestFile()));
117
        $this->assertTrue($memory->decrement($this->mockTestFile()));
118
        $this->assertTrue($memory->increment($this->mockTestFile()));
119
        $this->assertEquals(14, $memory->load($this->mockTestFile()));
120
        $this->assertTrue($memory->remove($this->mockTestFile()));
121
        $this->assertFalse($memory->exists($this->mockTestFile()));
122
    }
123
124
    /**
125
     * @throws StorageException
126
     */
127
    public function testHarderCounter(): void
128
    {
129
        $memory = new Target\Memory();
130
        $this->assertFalse($memory->exists($this->mockTestFile()));
131
        $this->assertTrue($memory->decrement($this->mockTestFile()));
132
        $this->assertTrue($memory->increment($this->mockTestFile()));
133
        $this->assertEquals(1, $memory->load($this->mockTestFile()));
134
        $this->assertTrue($memory->remove($this->mockTestFile()));
135
        $this->assertTrue($memory->increment($this->mockTestFile()));
136
        $this->assertTrue($memory->decrement($this->mockTestFile()));
137
        $this->assertEquals(0, $memory->load($this->mockTestFile()));
138
        $this->assertTrue($memory->remove($this->mockTestFile()));
139
        $this->assertFalse($memory->exists($this->mockTestFile()));
140
    }
141
}
142