Ttl   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 153
Duplicated Lines 0 %

Importance

Changes 4
Bugs 0 Features 0
Metric Value
eloc 56
c 4
b 0
f 0
dl 0
loc 153
rs 10
wmc 10

9 Methods

Rating   Name   Duplication   Size   Complexity  
A testStatsDelayed() 0 5 1
A testTimeToLive() 0 6 1
A testTimeToRun() 0 11 1
A testTouchTimeToRun() 0 13 1
A testDelayedRelease() 0 13 1
A testDelay() 0 11 1
A testTouchTimeToLive() 0 14 1
A testTouchInvalidInterval() 0 7 2
A testPriority() 0 12 1
1
<?php
2
3
/**
4
 * This file is part of the tarantool/queue package.
5
 *
6
 * (c) Eugene Leonovich <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
declare(strict_types=1);
13
14
namespace Tarantool\Queue\Tests\Integration;
15
16
use Tarantool\Queue\Queue;
17
use Tarantool\Queue\States;
18
19
trait Ttl
20
{
21
    /**
22
     * @lua tube = create_tube('%tube_name%', '%tube_type%')
23
     * @lua tube:put('ttr_1', {ttr = 1})
24
     */
25
    public function testTimeToRun() : void
26
    {
27
        $queue = $this->getQueue();
28
29
        $task1 = $queue->take(.1);
30
        sleep(1);
31
        $task2 = $queue->take(.1);
32
33
        self::assertTaskInstance($task1);
34
        self::assertSame('ttr_1', $task1->getData());
35
        self::assertEquals($task1, $task2);
36
    }
37
38
    /**
39
     * @lua tube = create_tube('%tube_name%', '%tube_type%')
40
     * @lua tube:put('ttl_1', {ttl = 1})
41
     */
42
    public function testTimeToLive() : void
43
    {
44
        sleep(1);
45
        $task = $this->getQueue()->take(.1);
46
47
        self::assertNull($task);
48
    }
49
50
    /**
51
     * @lua tube = create_tube('%tube_name%', '%tube_type%')
52
     * @lua tube:put('touch_ttr_1', {ttr = 1})
53
     */
54
    public function testTouchTimeToRun() : void
55
    {
56
        $queue = $this->getQueue();
57
58
        $task1 = $queue->take(.1);
59
        $task2 = $queue->touch($task1->getId(), 1);
60
        sleep(1);
61
        $task3 = $queue->take(.1);
62
63
        self::assertTaskInstance($task2);
64
        self::assertSame('touch_ttr_1', $task2->getData());
65
        self::assertEquals($task1, $task2);
66
        self::assertNull($task3);
67
    }
68
69
    /**
70
     * @lua tube = create_tube('%tube_name%', '%tube_type%')
71
     * @lua tube:put('touch_ttl_1', {ttl = 1})
72
     */
73
    public function testTouchTimeToLive() : void
74
    {
75
        $queue = $this->getQueue();
76
77
        $task1 = $queue->take(.1);
78
        $task2 = $queue->touch($task1->getId(), 1);
79
        $queue->release($task1->getId());
80
        sleep(1);
81
        $task3 = $queue->take(.1);
82
83
        self::assertTaskInstance($task2);
84
        self::assertSame('touch_ttl_1', $task2->getData());
85
        self::assertEquals($task1, $task2);
86
        self::assertEquals($task2, $task3);
87
    }
88
89
    /**
90
     * @lua tube = create_tube('%tube_name%', '%tube_type%')
91
     * @lua tube:put('touch_invalid_interval')
92
     */
93
    public function testTouchInvalidInterval() : void
94
    {
95
        $queue = $this->getQueue();
96
        $task = $queue->take(.1);
97
98
        foreach ([0, -1] as $interval) {
99
            self::assertNull($queue->touch($task->getId(), $interval));
100
        }
101
    }
102
103
    /**
104
     * @lua tube = create_tube('%tube_name%', '%tube_type%')
105
     * @lua tube:put('pri_low', {pri = 2})
106
     * @lua tube:put('pri_high', {pri = 1})
107
     */
108
    public function testPriority() : void
109
    {
110
        $queue = $this->getQueue();
111
112
        $task1 = $queue->take(.1);
113
        $queue->delete($task1->getId());
114
115
        $task2 = $queue->take(.1);
116
        $queue->delete($task2->getId());
117
118
        self::assertSame('pri_high', $task1->getData());
119
        self::assertSame('pri_low', $task2->getData());
120
    }
121
122
    /**
123
     * @lua tube = create_tube('%tube_name%', '%tube_type%')
124
     * @lua tube:put('delay_1', {delay = 1})
125
     */
126
    public function testDelay() : void
127
    {
128
        $queue = $this->getQueue();
129
130
        $task = $queue->peek(0);
131
        self::assertTask($task, 0, States::DELAYED, 'delay_1');
132
133
        sleep(1);
134
135
        $task = $queue->take(.1);
136
        self::assertTask($task, 0, States::TAKEN, 'delay_1');
137
    }
138
139
    /**
140
     * @lua tube = create_tube('%tube_name%', '%tube_type%')
141
     * @lua tube:put('release_0')
142
     * @lua tube:take()
143
     */
144
    public function testDelayedRelease() : void
145
    {
146
        $queue = $this->getQueue();
147
148
        $queue->release(0, ['delay' => 1]);
149
150
        $task = $queue->peek(0);
151
        self::assertTask($task, 0, States::DELAYED, 'release_0');
152
153
        sleep(1);
154
155
        $task = $queue->take(.1);
156
        self::assertTask($task, 0, States::TAKEN, 'release_0');
157
    }
158
159
    /**
160
     * @lua tube = create_tube('%tube_name%', '%tube_type%')
161
     * @lua tube:put('stat_delayed_0', {delay = 9999})
162
     * @lua tube:put('stat_delayed_1', {delay = 9999})
163
     */
164
    public function testStatsDelayed() : void
165
    {
166
        $count = $this->getQueue()->stats('tasks.delayed');
167
168
        self::assertSame(2, $count);
169
    }
170
171
    abstract protected function getQueue() : Queue;
172
}
173