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

LoopTest::testMongoDBRun()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 71
Code Lines 57

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 71
rs 9.1369
c 0
b 0
f 0
cc 2
eloc 57
nc 2
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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