Passed
Branch master (dae886)
by Alice
02:15
created

ThreadPoolTest::test_getMaxRunningThreadNb()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Wonderland\Thread\Tests;
4
5
use PHPUnit\Framework\TestCase;
6
use Wonderland\Thread\Event\Event;
7
use Wonderland\Thread\Exception\ThreadException;
8
use Wonderland\Thread\Mediator\Listener\Listener;
9
use Wonderland\Thread\Mediator\Mediator;
10
use Wonderland\Thread\Thread;
11
use Wonderland\Thread\ThreadPool;
12
13
/**
14
 * Class ThreadPoolTest
15
 * @package Wonderland\Thread\Tests
16
 * @author Alice Praud <[email protected]>
17
 */
18
class ThreadPoolTest extends TestCase
19
{
20
	/** @var ThreadPool */
21
	private $threadPool;
22
23
	protected function setUp()
24
	{
25
		$this->threadPool = new ThreadPool();
26
	}
27
28
	public function test_constructor_destructor()
29
	{
30
		$this->assertAttributeEquals([], 'threads', $this->threadPool);
31
		$this->assertAttributeEquals([], 'runningThreads', $this->threadPool);
32
		$this->assertAttributeEquals([], 'toRunThreads', $this->threadPool);
33
		$this->assertAttributeEquals(false, 'isRunning', $this->threadPool);
34
		$this->assertAttributeEquals(0, 'maxRunningThreadNb', $this->threadPool);
35
		$this->assertSame(Mediator::class, get_class($this->threadPool->getMediator()));
36
37
		unset($this->threadPool);
38
	}
39
40
	public function test_getThreads()
41
	{
42
		$threads = [new Thread()];
43
		$this->assertSame($this->threadPool, $this->threadPool->setThreads($threads));
44
		$this->assertSame($threads, $this->threadPool->getThreads());
45
	}
46
47
	public function test_addThread()
48
	{
49
		$thread = new Thread();
50
		$this->assertSame($this->threadPool, $this->threadPool->addThread($thread));
51
		$this->assertContains($thread, $this->threadPool->getThreads());
52
	}
53
54
	public function test_getMaxRunningThreadNb()
55
	{
56
		$this->assertSame(0, $this->threadPool->getMaxRunningThreadNb());
57
	}
58
59
	public function test_setMaxRunningThreadNb()
60
	{
61
		$this->assertSame($this->threadPool, $this->threadPool->setMaxRunningThreadNb(10));
62
		$this->assertSame(10, $this->threadPool->getMaxRunningThreadNb());
63
	}
64
65
	public function test_getToRunThreads()
66
	{
67
		$this->assertSame([], $this->threadPool->getToRunThreads());
68
	}
69
70
	public function test_getRunningThreads()
71
	{
72
		$this->assertSame([], $this->threadPool->getRunningThreads());
73
	}
74
75
	/**
76
	 * @throws \Wonderland\Thread\Exception\ThreadException
77
	 */
78
	public function test_run()
79
	{
80
		$thread = new Thread();
81
		$thread->setCallback(function (){ return 0;
82
83
  });
84
		$thread->setProcessName('unitTest');
85
		$threads = [];
86
		$listener = new Listener(Event::POOL_NEW_THREAD, function (){
87
  });
88
89
		$this->threadPool->setMaxRunningThreadNb(10);
90
		$this->assertSame($this->threadPool, $this->threadPool->addListener($listener));
91
		for ($i = 0; $i < 20;
92
$i++) { $threads[] = clone $thread;
93
		}
94
		$this->assertSame($this->threadPool, $this->threadPool->addThread($thread));
95
		$this->assertSame($this->threadPool, $this->threadPool->setThreads($threads));
96
97
		$this->threadPool->run();
98
99
		$this->assertSame($this->threadPool, $this->threadPool->removeListener($listener));
100
	}
101
102
	/**
103
	 * @throws ThreadException
104
	 */
105
	public function test_run_exception()
106
	{
107
		$this->expectException(ThreadException::class);
108
		$this->threadPool->run();
109
110
	}
111
112
}
113