Completed
Push — master ( 745336...aadd5d )
by Matthew
06:17
created

LoopTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 135
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 12

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 12
dl 0
loc 135
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A testBeansstalkdRun() 0 60 3
A testMongoDBRun() 0 71 2
1
<?php
2
3
namespace Dtc\QueueBundle\Tests\Run;
4
5
use Dtc\QueueBundle\Beanstalkd\Job;
6
use Dtc\QueueBundle\Model\WorkerManager;
7
use Dtc\QueueBundle\ODM\JobManager;
8
use Dtc\QueueBundle\ODM\RunManager;
9
use Dtc\QueueBundle\Run\Loop;
10
use Dtc\QueueBundle\Tests\Beanstalkd\JobManagerTest;
11
use Dtc\QueueBundle\Tests\FibonacciWorker;
12
use PHPUnit\Framework\TestCase;
13
use Dtc\QueueBundle\EventDispatcher\EventDispatcher;
14
15
class LoopTest extends TestCase
16
{
17
    public function testBeansstalkdRun()
18
    {
19
        JobManagerTest::setUpBeforeClass();
20
        $jobManager = JobManagerTest::$jobManager;
21
        $eventDispatcher = new EventDispatcher();
22
        $workerManager = new WorkerManager($jobManager, $eventDispatcher);
23
        $worker = new FibonacciWorker();
24
        $worker->setJobClass(Job::class);
25
        $workerManager->addWorker($worker);
26
        $worker->setJobManager($jobManager);
27
28
        $runClass = \Dtc\QueueBundle\Document\Run::class;
29
        $runArchiveClass = \Dtc\QueueBundle\Document\RunArchive::class;
30
        $runManager = new \Dtc\QueueBundle\Model\RunManager($runClass, $runArchiveClass);
0 ignored issues
show
Unused Code introduced by
The call to RunManager::__construct() has too many arguments starting with $runArchiveClass.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
31
        $loop = new Loop($workerManager, $jobManager, $runManager);
32
        $job = $worker->later()->fibonacci(1);
33
        self::assertNotNull($job->getId(), 'Job id should be generated');
34
        $start = microtime(true);
35
        self::assertNull($loop->getRun());
36
        $failed = false;
37
        try {
38
            $loop->runJobById($start, $job->getId());
39
            $failed = true;
40
        } catch (\Exception $e) {
41
            self::assertNotNull($loop->getRun());
42
            self::assertEquals(0, $loop->getRun()->getProcessed());
43
            self::assertEquals(gethostname(), $loop->getRun()->getHostname());
44
        }
45
        self::assertFalse($failed);
46
47
        try {
48
            $loop->runLoop($start, null, null, 0, 0);
49
            self::fail("shouldn't get here");
50
        } catch (\Exception $exception) {
51
            self::assertTrue(true);
52
        }
53
54
        $result = $loop->runLoop($start, null, null, 1);
55
        self::assertEquals(0, $result);
56
        self::assertNotNull($loop->getRun());
57
        self::assertEquals(1, $loop->getRun()->getProcessed());
58
59
        $result = $loop->runLoop($start, null, null, 1);
60
        self::assertEquals(0, $result);
61
        self::assertNotNull($loop->getRun());
62
        self::assertEquals(0, $loop->getRun()->getProcessed());
63
64
        $worker->later()->fibonacci(1);
65
        $worker->later()->fibonacci(2);
66
67
        $result = $loop->runLoop($start, null, null, 4);
68
        self::assertEquals(0, $result);
69
        self::assertNotNull($loop->getRun());
70
        self::assertEquals(2, $loop->getRun()->getProcessed());
71
72
        $result = $loop->runLoop($start, null, null, 4);
73
        self::assertEquals(0, $result);
74
        self::assertNotNull($loop->getRun());
75
        self::assertEquals(0, $loop->getRun()->getProcessed());
76
    }
77
78
    public function testMongoDBRun()
79
    {
80
        \Dtc\QueueBundle\Tests\ODM\JobManagerTest::setUpBeforeClass();
81
82
        /** @var JobManager $jobManager */
83
        $jobManager = \Dtc\QueueBundle\Tests\ODM\JobManagerTest::$jobManager;
84
        $eventDispatcher = new EventDispatcher();
85
        $workerManager = new WorkerManager($jobManager, $eventDispatcher);
86
        $worker = new FibonacciWorker();
87
        $worker->setJobClass(\Dtc\QueueBundle\Document\Job::class);
88
        $workerManager->addWorker($worker);
89
        $worker->setJobManager($jobManager);
90
91
        $runClass = \Dtc\QueueBundle\Document\Run::class;
92
        $runManager = new RunManager($runClass);
93
        $runManager->setObjectManager($jobManager->getObjectManager());
94
        $loop = new Loop($workerManager, $jobManager, $runManager);
95
        $job = $worker->later()->fibonacci(1);
96
        self::assertNotNull($job->getId(), 'Job id should be generated');
97
        $start = microtime(true);
98
        self::assertNull($loop->getRun());
99
        try {
100
            $loop->runJobById($start, $job->getId());
101
        } catch (\Exception $e) {
102
            self::fail('Should not get here');
103
        }
104
105
        self::assertNotNull($loop->getRun());
106
        self::assertNotNull($id1 = $loop->getRun()->getId());
107
        self::assertEquals(1, $loop->getRun()->getProcessed());
108
        self::assertEquals(gethostname(), $loop->getRun()->getHostname());
109
        $worker->later()->fibonacci(1);
110
111
        $result = $loop->runLoop($start, null, null, 1);
112
        self::assertEquals(0, $result);
113
        self::assertNotNull($loop->getRun());
114
        self::assertNotNull($id2 = $loop->getRun()->getId());
115
        self::assertNotEquals($id1, $id2);
116
        self::assertEquals(1, $loop->getRun()->getProcessed());
117
118
        $documentManager = $jobManager->getObjectManager();
119
        $runArchiveRepository = $documentManager->getRepository($jobManager->getRunArchiveClass());
120
        self::assertNotNull($runArchiveRepository->find($id1));
121
        self::assertNotNull($runArchiveRepository->find($id2));
122
123
        $result = $loop->runLoop($start, null, null, 1);
124
        self::assertEquals(0, $result);
125
        self::assertNotNull($loop->getRun());
126
        self::assertEquals(0, $loop->getRun()->getProcessed());
127
128
        $worker->later()->fibonacci(1);
129
        $worker->later()->fibonacci(2);
130
131
        $result = $loop->runLoop($start, null, null, 4);
132
        self::assertEquals(0, $result);
133
        self::assertNotNull($loop->getRun());
134
        self::assertEquals(2, $loop->getRun()->getProcessed());
135
136
        $result = $loop->runLoop($start, null, null, 4);
137
        self::assertEquals(0, $result);
138
        self::assertNotNull($loop->getRun());
139
        self::assertEquals(0, $loop->getRun()->getProcessed());
140
141
        $timeStart = time();
142
        $result = $loop->runLoop($start, null, null, null, 1);
143
        self::assertEquals(0, $result);
144
        self::assertNotNull($loop->getRun());
145
        self::assertEquals(0, $loop->getRun()->getProcessed());
146
        $total = time() - $timeStart;
147
        self::assertGreaterThanOrEqual(1, $total);
148
    }
149
}
150