Passed
Pull Request — master (#57)
by Matthew
07:36
created

LoopTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 131
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 11

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 5
lcom 1
cbo 11
dl 0
loc 131
rs 10
c 2
b 0
f 0
1
<?php
2
3
namespace Dtc\QueueBundle\Tests\Run;
4
5
use Dtc\QueueBundle\Beanstalkd\Job;
6
use Dtc\QueueBundle\Manager\WorkerManager;
7
use Dtc\QueueBundle\ODM\JobManager;
8
use Dtc\QueueBundle\Run\Loop;
9
use Dtc\QueueBundle\Tests\Beanstalkd\JobManagerTest;
10
use Dtc\QueueBundle\Tests\FibonacciWorker;
11
use PHPUnit\Framework\TestCase;
12
use Dtc\QueueBundle\EventDispatcher\EventDispatcher;
13
14
class LoopTest extends TestCase
15
{
16
    public function testBeansstalkdRun()
17
    {
18
        JobManagerTest::setUpBeforeClass();
19
        $jobManager = JobManagerTest::$jobManager;
20
        $eventDispatcher = new EventDispatcher();
21
        $workerManager = new WorkerManager($jobManager, $eventDispatcher);
22
        $worker = new FibonacciWorker();
23
        $workerManager->addWorker($worker);
24
        $worker->setJobManager($jobManager);
25
26
        $runClass = \Dtc\QueueBundle\Document\Run::class;
27
        $runManager = new \Dtc\QueueBundle\Manager\RunManager($runClass);
28
        $loop = new Loop($workerManager, $jobManager, $runManager);
29
        $job = $worker->later()->fibonacci(1);
30
        self::assertNotNull($job->getId(), 'Job id should be generated');
31
        $start = microtime(true);
32
        self::assertNull($loop->getLastRun());
33
        $failed = false;
34
        try {
35
            $loop->runJobById($start, $job->getId());
36
            $failed = true;
37
        } catch (\Exception $e) {
38
            self::assertNotNull($loop->getLastRun());
39
            self::assertEquals(0, $loop->getLastRun()->getProcessed());
40
            self::assertEquals(gethostname(), $loop->getLastRun()->getHostname());
41
        }
42
        self::assertFalse($failed);
43
44
        try {
45
            $loop->runLoop($start, null, null, 0, 0);
46
            self::fail("shouldn't get here");
47
        } catch (\Exception $exception) {
48
            self::assertTrue(true);
49
        }
50
51
        $result = $loop->runLoop($start, null, null, 1);
52
        self::assertEquals(0, $result);
53
        self::assertNotNull($loop->getLastRun());
54
        self::assertEquals(1, $loop->getLastRun()->getProcessed());
55
56
        $result = $loop->runLoop($start, null, null, 1);
57
        self::assertEquals(0, $result);
58
        self::assertNotNull($loop->getLastRun());
59
        self::assertEquals(0, $loop->getLastRun()->getProcessed());
60
61
        $worker->later()->fibonacci(1);
62
        $worker->later()->fibonacci(2);
63
64
        $result = $loop->runLoop($start, null, null, 4);
65
        self::assertEquals(0, $result);
66
        self::assertNotNull($loop->getLastRun());
67
        self::assertEquals(2, $loop->getLastRun()->getProcessed());
68
69
        $result = $loop->runLoop($start, null, null, 4);
70
        self::assertEquals(0, $result);
71
        self::assertNotNull($loop->getLastRun());
72
        self::assertEquals(0, $loop->getLastRun()->getProcessed());
73
    }
74
75
    public function testMongoDBRun()
76
    {
77
        \Dtc\QueueBundle\Tests\ODM\JobManagerTest::setUpBeforeClass();
78
79
        /** @var JobManager $jobManager */
80
        $jobManager = \Dtc\QueueBundle\Tests\ODM\JobManagerTest::$jobManager;
81
        $eventDispatcher = new EventDispatcher();
82
        $workerManager = new WorkerManager($jobManager, $eventDispatcher);
83
        $worker = new FibonacciWorker();
84
        $workerManager->addWorker($worker);
85
        $worker->setJobManager($jobManager);
86
87
        $runManager = \Dtc\QueueBundle\Tests\ODM\JobManagerTest::$runManager;
88
        $loop = new Loop($workerManager, $jobManager, $runManager);
89
        $job = $worker->later()->fibonacci(1);
90
        self::assertNotNull($job->getId(), 'Job id should be generated');
91
        $start = microtime(true);
92
        self::assertNull($loop->getLastRun());
93
        try {
94
            $loop->runJobById($start, $job->getId());
95
        } catch (\Exception $e) {
96
            self::fail('Should not get here');
97
        }
98
99
        self::assertNotNull($loop->getLastRun());
100
        self::assertNotNull($id1 = $loop->getLastRun()->getId());
101
        self::assertEquals(1, $loop->getLastRun()->getProcessed());
102
        self::assertEquals(gethostname(), $loop->getLastRun()->getHostname());
103
        $worker->later()->fibonacci(1);
104
105
        $result = $loop->runLoop($start, null, null, 1);
106
        self::assertEquals(0, $result);
107
        self::assertNotNull($loop->getLastRun());
108
        self::assertNotNull($id2 = $loop->getLastRun()->getId());
109
        self::assertNotEquals($id1, $id2);
110
        self::assertEquals(1, $loop->getLastRun()->getProcessed());
111
112
        $documentManager = $jobManager->getObjectManager();
113
        print_r($runManager->getRunArchiveClass());
114
        $runArchiveRepository = $documentManager->getRepository($runManager->getRunArchiveClass());
115
        self::assertNotNull($runArchiveRepository->find($id1));
116
        self::assertNotNull($runArchiveRepository->find($id2));
117
118
        $result = $loop->runLoop($start, null, null, 1);
119
        self::assertEquals(0, $result);
120
        self::assertNotNull($loop->getLastRun());
121
        self::assertEquals(0, $loop->getLastRun()->getProcessed());
122
123
        $worker->later()->fibonacci(1);
124
        $worker->later()->fibonacci(2);
125
126
        $result = $loop->runLoop($start, null, null, 4);
127
        self::assertEquals(0, $result);
128
        self::assertNotNull($loop->getLastRun());
129
        self::assertEquals(2, $loop->getLastRun()->getProcessed());
130
131
        $result = $loop->runLoop($start, null, null, 4);
132
        self::assertEquals(0, $result);
133
        self::assertNotNull($loop->getLastRun());
134
        self::assertEquals(0, $loop->getLastRun()->getProcessed());
135
136
        $timeStart = microtime(true);
137
        $result = $loop->runLoop($timeStart, null, null, null, 2);
138
        self::assertEquals(0, $result);
139
        self::assertNotNull($loop->getLastRun());
140
        self::assertEquals(0, $loop->getLastRun()->getProcessed());
141
        $total = time() - intval($timeStart);
142
        self::assertGreaterThanOrEqual(2, $total);
143
    }
144
}
145