109 lines
4.0 KiB
PHP
109 lines
4.0 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* This program is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU General Public License
|
||
|
* as published by the Free Software Foundation; under version 2
|
||
|
* of the License (non-upgradable).
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
|
*
|
||
|
* Copyright (c) 2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
namespace oat\taoTaskQueue\test\model\Worker;
|
||
|
|
||
|
use oat\taoTaskQueue\model\Worker\WorkerProcessManager;
|
||
|
use React\ChildProcess\Process;
|
||
|
use React\Stream\ReadableStreamInterface;
|
||
|
use React\Stream\WritableStreamInterface;
|
||
|
use oat\generis\test\TestCase;
|
||
|
|
||
|
class WorkerProcessManagerTest extends TestCase
|
||
|
{
|
||
|
public function testAddProcess()
|
||
|
{
|
||
|
$workerManager = new WorkerProcessManager();
|
||
|
|
||
|
$process1 = $this->getMockBuilder(Process::class)->disableOriginalConstructor()->getMock();
|
||
|
$process1
|
||
|
->method('getPid')->willReturn(1);
|
||
|
$process1->stdout = $this->getMockBuilder(ReadableStreamInterface::class)->disableOriginalConstructor()->getMock();
|
||
|
$process1->stdin = $this->getMockBuilder(WritableStreamInterface::class)->disableOriginalConstructor()->getMock();
|
||
|
|
||
|
$process2 = $this->getMockBuilder(Process::class)->disableOriginalConstructor()->getMock();
|
||
|
$process2->stdout = $this->getMockBuilder(ReadableStreamInterface::class)->disableOriginalConstructor()->getMock();
|
||
|
$process2->stdin = $this->getMockBuilder(WritableStreamInterface::class)->disableOriginalConstructor()->getMock();
|
||
|
$process1
|
||
|
->method('getPid')->willReturn(2);
|
||
|
$workerManager->addProcess($process1);
|
||
|
$workerManager->addProcess($process2);
|
||
|
|
||
|
$this->assertCount(2, $workerManager->getProcesses());
|
||
|
}
|
||
|
|
||
|
public function testCanRunWithSuccess()
|
||
|
{
|
||
|
/** @var WorkerProcessManager $workerManager */
|
||
|
$workerManager = $this->getMockBuilder(WorkerProcessManager::class)
|
||
|
->setMethods(['logInfo','getMemoryUsage','getCpuUsage'])
|
||
|
->disableOriginalConstructor()->getMockForAbstractClass();
|
||
|
|
||
|
$workerManager
|
||
|
->method('getMemoryUsage')->willReturn(50);
|
||
|
$workerManager
|
||
|
->method('getCpuUsage')->willReturn(50);
|
||
|
|
||
|
$workerManager->setLimitOfMemory(80);
|
||
|
$workerManager->setLimitOfCpu(80);
|
||
|
$this->assertTrue($workerManager->canRun());
|
||
|
}
|
||
|
|
||
|
public function testCanRunFailed()
|
||
|
{
|
||
|
/** @var WorkerProcessManager $workerManager */
|
||
|
$workerManager = $this->getMockBuilder(WorkerProcessManager::class)
|
||
|
->setMethods(['logInfo','getMemoryUsage','getCpuUsage'])
|
||
|
->disableOriginalConstructor()->getMockForAbstractClass();
|
||
|
|
||
|
$workerManager
|
||
|
->method('getMemoryUsage')->willReturn(90);
|
||
|
$workerManager
|
||
|
->method('getCpuUsage')->willReturn(90);
|
||
|
|
||
|
$workerManager->setLimitOfMemory(80);
|
||
|
$workerManager->setLimitOfCpu(80);
|
||
|
|
||
|
$this->assertFalse($workerManager->canRun());
|
||
|
}
|
||
|
|
||
|
public function testGetCommand()
|
||
|
{
|
||
|
$workerManager = new WorkerProcessManager();
|
||
|
$workerManager->setOption(WorkerProcessManager::OPTION_TASK_COMMAND, 'some task');
|
||
|
$this->assertSame('some task', $workerManager->getCommand());
|
||
|
}
|
||
|
|
||
|
public function testGetMemoryUsage()
|
||
|
{
|
||
|
$workerManager = new WorkerProcessManager();
|
||
|
|
||
|
$this->assertIsNumeric($workerManager->getMemoryUsage());
|
||
|
}
|
||
|
|
||
|
public function testGetCpuUsage()
|
||
|
{
|
||
|
$workerManager = new WorkerProcessManager();
|
||
|
|
||
|
$this->assertIsFloat($workerManager->getCpuUsage());
|
||
|
}
|
||
|
}
|