tao-test/app/taoTaskQueue/test/model/Worker/WorkerProcessManagerTest.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());
}
}