Completed
Push — master ( 203a9c...2f9634 )
by Matthew
05:23 queued 25s
created

BaseJobManagerTest::setUpBeforeClass()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 22
rs 9.2
c 0
b 0
f 0
cc 1
eloc 13
nc 1
nop 0
1
<?php
2
3
namespace Dtc\QueueBundle\Tests\Doctrine;
4
5
use Doctrine\ODM\MongoDB\DocumentManager;
6
use Doctrine\ORM\EntityManager;
7
use Dtc\QueueBundle\Doctrine\BaseJobManager;
8
use Dtc\QueueBundle\Doctrine\DtcQueueListener;
9
use Dtc\QueueBundle\Model\BaseJob;
10
use Dtc\QueueBundle\Model\Job;
11
use Dtc\QueueBundle\Tests\FibonacciWorker;
12
use Dtc\QueueBundle\Tests\Model\BaseJobManagerTest as BaseBaseJobManagerTest;
13
use Dtc\QueueBundle\ODM\JobManager;
14
use Dtc\QueueBundle\Tests\ORM\JobManagerTest;
15
use Symfony\Component\DependencyInjection\Container;
16
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
17
18
/**
19
 * @author David
20
 *
21
 * This test requires local mongodb running
22
 */
23
abstract class BaseJobManagerTest extends BaseBaseJobManagerTest
24
{
25
    protected static $dtcQueueListener;
26
27
    /** @var DocumentManager|EntityManager */
28
    protected static $objectManager;
29
    protected static $objectName;
30
    protected static $archiveObjectName;
31
    protected static $runClass;
32
    protected static $runArchiveClass;
33
    protected static $jobManagerClass;
34
35
    public static function setUpBeforeClass()
36
    {
37
        self::$jobManager = new self::$jobManagerClass(self::$objectManager, self::$objectName, self::$archiveObjectName, self::$runClass, self::$runArchiveClass);
38
39
        /** @var BaseJobManager $jobManager */
40
        $jobManager = self::$jobManager;
41
42
        $parameters = new ParameterBag();
43
44
        $container = new Container($parameters);
45
        $container->set('dtc_queue.job_manager', $jobManager);
46
47
        self::$dtcQueueListener = new DtcQueueListener($container);
48
        self::$objectManager->getEventManager()->addEventListener('preUpdate', self::$dtcQueueListener);
49
        self::$objectManager->getEventManager()->addEventListener('prePersist', self::$dtcQueueListener);
50
        self::$objectManager->getEventManager()->addEventListener('preRemove', self::$dtcQueueListener);
51
52
        self::$worker = new FibonacciWorker();
53
54
        self::$worker->setJobClass($jobManager->getRepository()->getClassName());
55
        parent::setUpBeforeClass();
56
    }
57
58
    public static function tearDownAfterClass()
59
    {
60
        self::$objectManager->getEventManager()->removeEventListener('preUpdate', self::$dtcQueueListener);
61
        self::$objectManager->getEventManager()->removeEventListener('prePersist', self::$dtcQueueListener);
62
        self::$objectManager->getEventManager()->removeEventListener('preRemove', self::$dtcQueueListener);
63
        parent::tearDownAfterClass();
64
    }
65
66
    public function testDeleteJob()
67
    {
68
        /** @var JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */
69
        $jobManager = self::$jobManager;
70
71
        /** @var Job $job */
72
        $job = $this->getNewJob();
73
        $id = $job->getId();
74
        $jobManager->deleteJob($job);
75
76
        $nextJob = $jobManager->getJob();
77
        self::assertNull($nextJob, "Shouldn't be any jobs left in queue");
78
79
        $archiveObjectName = $jobManager->getArchiveObjectName();
80
81
        self::assertNotNull($id);
82
        $archiveRepository = $jobManager->getObjectManager()->getRepository($archiveObjectName);
83
        $result = $archiveRepository->find($id);
84
        self::assertNotNull($result);
85
        self::assertEquals($id, $result->getId());
86
    }
87
88
    public function testResetErroneousJobs()
89
    {
90
        /** @var JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */
91
        $jobManager = self::$jobManager;
92
93
        /** @var Job $job */
94
        $job = $this->getNewJob();
95
        $id = $job->getId();
96
        $jobManager->deleteJob($job);
97
98
        /** @var JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */
99
        $jobManager = self::$jobManager;
100
        $archiveObjectName = $jobManager->getArchiveObjectName();
101
102
        $objectManager = $jobManager->getObjectManager();
103
104
        $archiveRepository = $objectManager->getRepository($archiveObjectName);
105
        $result = $archiveRepository->find($id);
106
        self::assertNotNull($result);
107
        self::assertEquals($id, $result->getId());
108
109
        $result->setStatus(BaseJob::STATUS_ERROR);
110
        $result->setLocked(true);
111
        $result->setLockedAt(new \DateTime());
112
        $result->setFinishedAt(new \DateTime());
113
        $result->setElapsed(12345);
114
        $result->setMessage('soomething');
115
        $objectManager->persist($result);
116
        $objectManager->flush();
117
118
        if ($objectManager instanceof EntityManager) {
119
            JobManagerTest::createObjectManager();
120
            $jobManager = new self::$jobManagerClass(self::$objectManager, self::$objectName, self::$archiveObjectName, self::$runClass, self::$runArchiveClass);
121
            $jobManager->getObjectManager()->clear();
122
            $objectManager = $jobManager->getObjectManager();
123
        }
124
125
        $count = $jobManager->resetErroneousJobs();
126
127
        self::assertEquals(1, $count);
128
        $repository = $jobManager->getRepository();
129
        $job = $repository->find($id);
130
131
        self::assertNotNull($job);
132
        self::assertEquals(BaseJob::STATUS_NEW, $job->getStatus());
133
        self::assertNull($job->getLockedAt());
134
        self::assertNull($job->getFinishedAt());
135
        self::assertNull($job->getElapsed());
136
        self::assertNull($job->getMessage());
137
        self::assertNull($job->getLocked());
138
139
        $objectManager->remove($job);
140
        $objectManager->flush();
141
    }
142
143
    public function testResetStalledJobs()
144
    {
145
        /** @var JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */
146
        $jobManager = self::$jobManager;
147
148
        $job = new self::$jobClass(self::$worker, false, null);
149
        $job->fibonacci(1);
150
        self::assertNotNull($job->getId(), 'Job id should be generated');
151
        $job->setStatus(BaseJob::STATUS_RUNNING);
152
        $job->setLocked(true);
153
        $time = time();
154
        $date = new \DateTime("@$time");
155
        $job->setLockedAt($date);
156
        $id = $job->getId();
157
        $job = $jobManager->getRepository()->find($id);
158
159
        self::assertNotNull($job);
160
161
        $runClass = $jobManager->getRunClass();
162
163
        $objectManager = $jobManager->getObjectManager();
164
        $run = new $runClass();
165
        $run->setLastHeartbeatAt(new \DateTime());
166
        $objectManager->persist($run);
167
        $objectManager->flush();
168
        $runId = $run->getId();
169
        self::assertNotNull($runId);
170
        $job->setRunId($runId);
171
        $objectManager->persist($job);
172
        $objectManager->flush();
173
        $objectManager->remove($run);
174
        $objectManager->flush();
175
        $id = $job->getId();
176
        $job = $jobManager->getRepository()->find($id);
177
178
        self::assertNotNull($job);
179
180
        $archivedRun = $objectManager->getRepository($jobManager->getRunArchiveClass())->find($runId);
181
182
        $minusTime = $time - (BaseJobManager::STALLED_SECONDS + 1);
183
        $archivedRun->setEndedAt(new \DateTime("@$minusTime"));
184
185
        $objectManager->persist($archivedRun);
186
        $objectManager->flush();
187
188
        $count = $jobManager->resetStalledJobs();
189
190
        self::assertEquals(1, $count);
191
192
        $id = $job->getId();
193
        $job = $jobManager->getRepository()->find($id);
194
195
        self::assertNotNull($job);
196
        self::assertEquals(BaseJob::STATUS_NEW, $job->getStatus());
197
        self::assertNull($job->getLockedAt());
198
        self::assertNull($job->getFinishedAt());
199
        self::assertNull($job->getElapsed());
200
        self::assertNull($job->getMessage());
201
        self::assertNull($job->getLocked());
202
        self::assertEquals(1, $job->getStalledCount());
203
204
        $objectManager->remove($job);
205
        $objectManager->flush();
206
    }
207
208
    public function testPruneErroneousJobs()
209
    {
210
        $job = $this->getJob();
211
        $id = $job->getId();
212
213
        /** @var JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */
214
        $jobManager = self::$jobManager;
215
        $jobManager->deleteJob($job);
216
        $archiveObjectName = $jobManager->getArchiveObjectName();
217
218
        $objectManager = $jobManager->getObjectManager();
219
220
        $archiveRepository = $objectManager->getRepository($archiveObjectName);
221
        $result = $archiveRepository->find($id);
222
        self::assertNotNull($result);
223
        self::assertEquals($id, $result->getId());
224
225
        $result->setStatus(BaseJob::STATUS_ERROR);
226
        $result->setLocked(true);
227
        $result->setLockedAt(new \DateTime());
228
        $result->setFinishedAt(new \DateTime());
229
        $result->setElapsed(12345);
230
        $result->setMessage('soomething');
231
        $objectManager->persist($result);
232
        $objectManager->flush();
233
234
        $count = $jobManager->pruneErroneousJobs('asdf');
235
        self::assertEquals(0, $count);
236
        $count = $jobManager->pruneErroneousJobs(null, 'asdf');
237
        self::assertEquals(0, $count);
238
        $count = $jobManager->pruneErroneousJobs('fibonacci', 'asdf');
239
        self::assertEquals(0, $count);
240
        $count = $jobManager->pruneErroneousJobs('fibonacci', 'asdf');
241
        self::assertEquals(0, $count);
242
        $count = $jobManager->pruneErroneousJobs('fibonacci', 'fibonacci');
243
        self::assertEquals(1, $count);
244
        $repository = $jobManager->getRepository();
245
        $job = $repository->find($id);
246
        $objectManager->clear();
247
        self::assertNull($job);
248
        $archiveJob = $archiveRepository->find($id);
249
        self::assertNull($archiveJob);
250
251
        $job = $this->getJob();
252
        $id = $job->getId();
253
        $objectManager->remove($job);
254
        $objectManager->flush();
255
        /** @var JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */
256
        $jobManager = self::$jobManager;
257
        $archiveObjectName = $jobManager->getArchiveObjectName();
258
259
        $objectManager = $jobManager->getObjectManager();
260
261
        $archiveRepository = $objectManager->getRepository($archiveObjectName);
262
        $result = $archiveRepository->find($id);
263
        self::assertNotNull($result);
264
        self::assertEquals($id, $result->getId());
265
266
        $result->setStatus(BaseJob::STATUS_ERROR);
267
        $result->setLocked(true);
268
        $result->setLockedAt(new \DateTime());
269
        $result->setFinishedAt(new \DateTime());
270
        $result->setElapsed(12345);
271
        $result->setMessage('soomething');
272
        $objectManager->persist($result);
273
        $objectManager->flush();
274
275
        $job = $this->getJob();
276
        $id = $job->getId();
277
        $objectManager->remove($job);
278
        $objectManager->flush();
279
280
        /** @var JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */
281
        $jobManager = self::$jobManager;
282
        $archiveObjectName = $jobManager->getArchiveObjectName();
283
        $objectManager = $jobManager->getObjectManager();
284
285
        $archiveRepository = $objectManager->getRepository($archiveObjectName);
286
        $result = $archiveRepository->find($id);
287
        self::assertNotNull($result);
288
        self::assertEquals($id, $result->getId());
289
290
        $result->setStatus(BaseJob::STATUS_ERROR);
291
        $result->setLocked(true);
292
        $result->setLockedAt(new \DateTime());
293
        $result->setFinishedAt(new \DateTime());
294
        $result->setElapsed(12345);
295
        $result->setMessage('soomething');
296
        $objectManager->persist($result);
297
        $objectManager->flush();
298
        $count = $jobManager->pruneErroneousJobs();
299
        self::assertEquals(2, $count);
300
    }
301
302
    public function testPruneStalledJobs()
303
    {
304
        static::setUpBeforeClass();
305
306
        /** @var JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */
307
        $jobManager = self::$jobManager;
308
309
        $job = new self::$jobClass(self::$worker, false, null);
310
        $job->fibonacci(1);
311
        self::assertNotNull($job->getId(), 'Job id should be generated');
312
        $job->setStatus(BaseJob::STATUS_RUNNING);
313
        $job->setLocked(true);
314
        $time = time();
315
        $date = new \DateTime("@$time");
316
        $job->setLockedAt($date);
317
        $id = $job->getId();
318
        $job = $jobManager->getRepository()->find($id);
319
320
        self::assertNotNull($job);
321
322
        $runClass = $jobManager->getRunClass();
323
324
        $objectManager = $jobManager->getObjectManager();
325
        $run = new $runClass();
326
        $run->setLastHeartbeatAt(new \DateTime());
327
        $objectManager->persist($run);
328
        $objectManager->flush();
329
        $runId = $run->getId();
330
        self::assertNotNull($runId);
331
        $job->setRunId($runId);
332
        $objectManager->persist($job);
333
        $objectManager->flush();
334
        $objectManager->remove($run);
335
        $objectManager->flush();
336
        $id = $job->getId();
337
        $job = $jobManager->getRepository()->find($id);
338
339
        self::assertNotNull($job);
340
341
        $archivedRun = $objectManager->getRepository($jobManager->getRunArchiveClass())->find($runId);
342
343
        $minusTime = $time - (BaseJobManager::STALLED_SECONDS + 1);
344
        $archivedRun->setEndedAt(new \DateTime("@$minusTime"));
345
346
        $objectManager->persist($archivedRun);
347
        $objectManager->flush();
348
349
        $count = $jobManager->pruneStalledJobs('asdf');
350
        self::assertEquals(0, $count);
351
        $count = $jobManager->pruneStalledJobs(null, 'asdf');
352
        self::assertEquals(0, $count);
353
        $count = $jobManager->pruneStalledJobs('fibonacci', 'asdf');
354
        self::assertEquals(0, $count);
355
        $count = $jobManager->pruneStalledJobs('fibonacci', 'fibonacci');
356
        self::assertEquals(1, $count);
357
358
        $job = $jobManager->getRepository()->find($id);
359
360
        self::assertNull($job);
361
362
        $archivedJob = $jobManager->getObjectManager()->getRepository($jobManager->getArchiveObjectName())->find($id);
363
364
        self::assertNotNull($archivedJob);
365
        self::assertEquals(BaseJob::STATUS_ERROR, $archivedJob->getStatus());
366
        self::assertEquals(1, $archivedJob->getStalledCount());
367
        $objectManager->remove($archivedJob);
368
        $objectManager->flush();
369
370
        // multiple
371
372
        /** @var JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */
373
        $jobManager = self::$jobManager;
374
375
        $job = new self::$jobClass(self::$worker, false, null);
376
        $job->fibonacci(1);
377
        self::assertNotNull($job->getId(), 'Job id should be generated');
378
        $job->setStatus(BaseJob::STATUS_RUNNING);
379
        $job->setLocked(true);
380
        $time = time();
381
        $date = new \DateTime("@$time");
382
        $job->setLockedAt($date);
383
        $id = $job->getId();
384
        $job = $jobManager->getRepository()->find($id);
385
386
        self::assertNotNull($job);
387
388
        $runClass = $jobManager->getRunClass();
389
390
        $objectManager = $jobManager->getObjectManager();
391
        $run = new $runClass();
392
        $run->setLastHeartbeatAt(new \DateTime());
393
        $objectManager->persist($run);
394
        $objectManager->flush();
395
        $runId = $run->getId();
396
        self::assertNotNull($runId);
397
        $job->setRunId($runId);
398
        $objectManager->persist($job);
399
        $objectManager->flush();
400
        $objectManager->remove($run);
401
        $objectManager->flush();
402
        $id = $job->getId();
403
        $job = $jobManager->getRepository()->find($id);
404
405
        self::assertNotNull($job);
406
407
        $archivedRun = $objectManager->getRepository($jobManager->getRunArchiveClass())->find($runId);
408
409
        $minusTime = $time - (BaseJobManager::STALLED_SECONDS + 1);
410
        $archivedRun->setEndedAt(new \DateTime("@$minusTime"));
411
412
        $objectManager->persist($archivedRun);
413
        $objectManager->flush();
414
415
        $job = new self::$jobClass(self::$worker, false, null);
416
        $job->fibonacci(1);
417
        self::assertNotNull($job->getId(), 'Job id should be generated');
418
        $job->setStatus(BaseJob::STATUS_RUNNING);
419
        $job->setLocked(true);
420
        $time = time();
421
        $date = new \DateTime("@$time");
422
        $job->setLockedAt($date);
423
        $id = $job->getId();
424
        $job = $jobManager->getRepository()->find($id);
425
426
        self::assertNotNull($job);
427
428
        $runClass = $jobManager->getRunClass();
429
430
        $objectManager = $jobManager->getObjectManager();
431
        $run = new $runClass();
432
        $objectManager->persist($run);
433
        $objectManager->flush();
434
        $runId = $run->getId();
435
        self::assertNotNull($runId);
436
        $job->setRunId($runId);
437
        $objectManager->persist($job);
438
        $objectManager->flush();
439
        $objectManager->remove($run);
440
        $objectManager->flush();
441
        $id = $job->getId();
442
        $job = $jobManager->getRepository()->find($id);
443
444
        self::assertNotNull($job);
445
446
        $archivedRun = $objectManager->getRepository($jobManager->getRunArchiveClass())->find($runId);
447
448
        $minusTime = $time - (BaseJobManager::STALLED_SECONDS + 1);
449
        $archivedRun->setEndedAt(new \DateTime("@$minusTime"));
450
451
        $objectManager->persist($archivedRun);
452
        $objectManager->flush();
453
        $count = $jobManager->pruneStalledJobs();
454
        self::assertEquals(2, $count);
455
    }
456
457
    public function testPruneExpiredJobs()
458
    {
459
        /** @var JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */
460
        $jobManager = self::$jobManager;
461
        $objectManager = $jobManager->getObjectManager();
462
463
        $job = new self::$jobClass(self::$worker, false, null);
464
        $job->fibonacci(1);
465
        self::assertNotNull($job->getId(), 'Job id should be generated');
466
        $time = time() - 1;
467
        $date = new \DateTime("@$time");
468
        $job->setExpiresAt($date);
469
        $objectManager->persist($job);
470
        $objectManager->flush();
471
472
        $count = $jobManager->pruneExpiredJobs('asdf');
473
        self::assertEquals(0, $count);
474
        $count = $jobManager->pruneExpiredJobs(null, 'asdf');
475
        self::assertEquals(0, $count);
476
        $count = $jobManager->pruneExpiredJobs(null, 'fibonacci');
477
        self::assertEquals(1, $count);
478
479
        $job = new self::$jobClass(self::$worker, false, null);
480
        $job->fibonacci(1);
481
        self::assertNotNull($job->getId(), 'Job id should be generated');
482
        $time = time() - 1;
483
        $date = new \DateTime("@$time");
484
        $job->setExpiresAt($date);
485
        $objectManager->persist($job);
486
        $objectManager->flush();
487
488
        $job = new self::$jobClass(self::$worker, false, null);
489
        $job->fibonacci(1);
490
        self::assertNotNull($job->getId(), 'Job id should be generated');
491
        $time = time() - 1;
492
        $date = new \DateTime("@$time");
493
        $job->setExpiresAt($date);
494
        $objectManager->persist($job);
495
        $objectManager->flush();
496
497
        $count = $jobManager->pruneExpiredJobs(null, 'fibonacci');
498
        self::assertEquals(2, $count);
499
500
        $job = new self::$jobClass(self::$worker, false, null);
501
        $job->fibonacci(1);
502
        self::assertNotNull($job->getId(), 'Job id should be generated');
503
        $time = time() - 1;
504
        $date = new \DateTime("@$time");
505
        $job->setExpiresAt($date);
506
        $objectManager->persist($job);
507
        $objectManager->flush();
508
509
        $job = new self::$jobClass(self::$worker, false, null);
510
        $job->fibonacci(1);
511
        self::assertNotNull($job->getId(), 'Job id should be generated');
512
        $time = time() - 1;
513
        $date = new \DateTime("@$time");
514
        $job->setExpiresAt($date);
515
        $objectManager->persist($job);
516
        $objectManager->flush();
517
518
        $count = $jobManager->pruneExpiredJobs('fibonacci', 'fibonacci');
519
        self::assertEquals(2, $count);
520
521
        $job = new self::$jobClass(self::$worker, false, null);
522
        $job->fibonacci(1);
523
        self::assertNotNull($job->getId(), 'Job id should be generated');
524
        $time = time() - 1;
525
        $date = new \DateTime("@$time");
526
        $job->setExpiresAt($date);
527
        $objectManager->persist($job);
528
        $objectManager->flush();
529
530
        $job = new self::$jobClass(self::$worker, false, null);
531
        $job->fibonacci(1);
532
        self::assertNotNull($job->getId(), 'Job id should be generated');
533
        $time = time() - 1;
534
        $date = new \DateTime("@$time");
535
        $job->setExpiresAt($date);
536
        $objectManager->persist($job);
537
        $objectManager->flush();
538
539
        $count = $jobManager->pruneExpiredJobs('fibonacci');
540
        self::assertEquals(2, $count);
541
542
        $job = new self::$jobClass(self::$worker, false, null);
543
        $job->fibonacci(1);
544
        self::assertNotNull($job->getId(), 'Job id should be generated');
545
        $time = time() - 1;
546
        $date = new \DateTime("@$time");
547
        $job->setExpiresAt($date);
548
        $objectManager->persist($job);
549
        $objectManager->flush();
550
551
        $jobId1 = $job->getId();
552
553
        $job = new self::$jobClass(self::$worker, false, null);
554
        $job->fibonacci(1);
555
        self::assertNotNull($job->getId(), 'Job id should be generated');
556
        $time = time() - 1;
557
        $date = new \DateTime("@$time");
558
        $job->setExpiresAt($date);
559
        $objectManager->persist($job);
560
        $objectManager->flush();
561
562
        $jobId2 = $job->getId();
563
564
        $count = $jobManager->pruneExpiredJobs();
565
        self::assertEquals(2, $count);
566
567
        $archiveRepository = $jobManager->getObjectManager()->getRepository($jobManager->getArchiveObjectName());
568
569
        $job = $archiveRepository->find($jobId1);
570
        self::assertNotNull($job);
571
        self::assertEquals(Job::STATUS_EXPIRED, $job->getStatus());
572
573
        $job = $archiveRepository->find($jobId2);
574
        self::assertNotNull($job);
575
        self::assertEquals(Job::STATUS_EXPIRED, $job->getStatus());
576
    }
577
578
    public function testPruneArchivedJobs()
579
    {
580
        /** @var JobManager|\Dtc\QueueBundle\ORM\JobManager $jobManager */
581
        $jobManager = self::$jobManager;
582
        $objectManager = $jobManager->getObjectManager();
583
        $jobArchiveClass = $jobManager->getArchiveObjectName();
584
        $jobArchiveRepository = $objectManager->getRepository($jobArchiveClass);
585
586
        self::$objectManager->getEventManager()->removeEventListener('preUpdate', self::$dtcQueueListener);
587
588
        $job = new self::$jobClass(self::$worker, false, null);
589
        $job->fibonacci(1);
590
        $id = $job->getId();
591
        $objectManager->remove($job);
592
        $objectManager->flush();
593
594
        $jobArchive = $jobArchiveRepository->find($id);
595
        self::assertNotNull($jobArchive);
596
        $time = time() - 86401;
597
        $jobArchive->setUpdatedAt(new \DateTime("@$time"));
598
        $objectManager->persist($jobArchive);
599
        $objectManager->flush();
600
601
        $older = $time + 1;
602
        $count = $jobManager->pruneArchivedJobs(new \DateTime("@$time"));
603
        self::assertEquals(0, $count);
604
        $count = $jobManager->pruneArchivedJobs(new \DateTime("@$older"));
605
        self::assertEquals(1, $count);
606
607
        $job = new self::$jobClass(self::$worker, false, null);
608
        $job->fibonacci(1);
609
        $id = $job->getId();
610
        $objectManager->remove($job);
611
        $objectManager->flush();
612
613
        $jobArchive = $jobArchiveRepository->find($id);
614
        self::assertNotNull($jobArchive);
615
        $time = time() - 86401;
616
        $jobArchive->setUpdatedAt(new \DateTime("@$time"));
617
        $objectManager->persist($jobArchive);
618
        $objectManager->flush();
619
620
        $job = new self::$jobClass(self::$worker, false, null);
621
        $job->fibonacci(1);
622
        $id = $job->getId();
623
        $objectManager->remove($job);
624
        $objectManager->flush();
625
626
        $jobArchive = $jobArchiveRepository->find($id);
627
        self::assertNotNull($jobArchive);
628
        $jobArchive->setUpdatedAt(new \DateTime("@$time"));
629
        $objectManager->persist($jobArchive);
630
        $objectManager->flush();
631
        $older = $time + 1;
632
        $count = $jobManager->pruneArchivedJobs(new \DateTime("@$time"));
633
        self::assertEquals(0, $count);
634
        $count = $jobManager->pruneArchivedJobs(new \DateTime("@$older"));
635
        self::assertEquals(2, $count);
636
637
        self::$objectManager->getEventManager()->addEventListener('preUpdate', self::$dtcQueueListener);
638
    }
639
640
    public function testPerformance()
641
    {
642
        $jobs = self::$jobManager->getRepository()->findAll();
643
        foreach ($jobs as $job) {
644
            self::$jobManager->getObjectManager()->remove($job);
645
        }
646
        self::$jobManager->getObjectManager()->flush();
647
648
        self::$jobManager->getObjectManager()->clear();
649
        parent::testPerformance();
650
    }
651
}
652