mirror of https://github.com/hauke68/Magallanes
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
207 lines
6.4 KiB
207 lines
6.4 KiB
<?php |
|
/* |
|
* This file is part of the Magallanes package. |
|
* |
|
* (c) Andrés Montañez <andres@andresmontanez.com> |
|
* |
|
* For the full copyright and license information, please view the LICENSE |
|
* file that was distributed with this source code. |
|
*/ |
|
|
|
namespace Mage\Tests\Runtime; |
|
|
|
use Mage\Runtime\Exception\RuntimeException; |
|
use Mage\Runtime\Runtime; |
|
use Exception; |
|
use Monolog\Logger; |
|
use Monolog\Handler\TestHandler; |
|
use PHPUnit\Framework\TestCase; |
|
use Psr\Log\LogLevel; |
|
use Symfony\Component\Process\Process; |
|
use DateTime; |
|
|
|
class RuntimeTest extends TestCase |
|
{ |
|
public function testReleaseIdGeneration() |
|
{ |
|
// Given that this is a time based operation, lets conform that at least the format is right |
|
// and the time diff is less than 2 seconds |
|
|
|
$now = new DateTime(); |
|
|
|
$runtime = new Runtime(); |
|
$runtime->generateReleaseId(); |
|
$releaseId = $runtime->getReleaseId(); |
|
|
|
$releaseDate = DateTime::createFromFormat('YmdHis', $releaseId); |
|
$this->assertTrue($releaseDate instanceof DateTime); |
|
|
|
$dateDiff = $releaseDate->diff($now); |
|
$this->assertLessThanOrEqual(2, $dateDiff->s); |
|
} |
|
|
|
public function testEnvOptionWithInvalidEnvironment() |
|
{ |
|
$runtime = new Runtime(); |
|
$runtime->setConfiguration(['environments' => ['invalid' => []]]); |
|
$runtime->setEnvironment('invalid'); |
|
$runtime->setConfiguration(['environments' => []]); |
|
|
|
$controlValue = time(); |
|
$returnedValue = $runtime->getEnvOption('test', $controlValue); |
|
|
|
$this->assertEquals($controlValue, $returnedValue); |
|
} |
|
|
|
public function testNoConfigWithEmptyTasks() |
|
{ |
|
$runtime = new Runtime(); |
|
$tasks = $runtime->getTasks(); |
|
|
|
$this->assertTrue(is_array($tasks)); |
|
$this->assertEquals(0, count($tasks)); |
|
} |
|
|
|
public function testInvalidEnvironmentEmptyTasks() |
|
{ |
|
$runtime = new Runtime(); |
|
$runtime->setConfiguration(['environments' => ['invalid' => []]]); |
|
$runtime->setEnvironment('invalid'); |
|
$runtime->setConfiguration(['environments' => []]); |
|
|
|
$tasks = $runtime->getTasks(); |
|
|
|
$this->assertTrue(is_array($tasks)); |
|
$this->assertEquals(0, count($tasks)); |
|
} |
|
|
|
public function testInvalidEnvironments() |
|
{ |
|
try { |
|
$runtime = new Runtime(); |
|
$runtime->setEnvironment('invalid'); |
|
} catch (Exception $exception) { |
|
$this->assertTrue($exception instanceof RuntimeException); |
|
} |
|
|
|
try { |
|
$runtime = new Runtime(); |
|
$runtime->setConfiguration(['environments' => ['valid' => []]]); |
|
$runtime->setEnvironment('invalid'); |
|
} catch (Exception $exception) { |
|
$this->assertTrue($exception instanceof RuntimeException); |
|
} |
|
} |
|
|
|
public function testTempFile() |
|
{ |
|
$runtime = new Runtime(); |
|
$tempFile = $runtime->getTempFile(); |
|
|
|
$this->assertNotEquals('', $tempFile); |
|
$this->assertTrue(file_exists($tempFile)); |
|
$this->assertTrue(is_readable($tempFile)); |
|
$this->assertTrue(is_writable($tempFile)); |
|
$this->assertEquals(0, filesize($tempFile)); |
|
} |
|
|
|
public function testSSHConfigUndefinedOptions() |
|
{ |
|
$runtime = new Runtime(); |
|
$sshConfig = $runtime->getSSHConfig(); |
|
|
|
$this->assertTrue(is_array($sshConfig)); |
|
|
|
$this->assertTrue(array_key_exists('port', $sshConfig)); |
|
$this->assertEquals('22', $sshConfig['port']); |
|
|
|
$this->assertTrue(array_key_exists('flags', $sshConfig)); |
|
$this->assertEquals('-q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no', $sshConfig['flags']); |
|
} |
|
|
|
public function testSSHConfigPortDefinedInHostNotation() |
|
{ |
|
$runtime = new Runtime(); |
|
$runtime->setWorkingHost('223.12.24.64:1056'); |
|
$sshConfig = $runtime->getSSHConfig(); |
|
|
|
$this->assertEquals('1056', $sshConfig['port']); |
|
|
|
$runtime->setWorkingHost('223.12.24.64'); |
|
$sshConfig = $runtime->getSSHConfig(); |
|
|
|
$this->assertEquals('22', $sshConfig['port']); |
|
} |
|
|
|
public function testSSHConfigEmptyOptions() |
|
{ |
|
$runtime = new Runtime(); |
|
$runtime->setConfiguration(['environments' => ['test' => ['ssh' => []]]]); |
|
$runtime->setEnvironment('test'); |
|
$sshConfig = $runtime->getSSHConfig(); |
|
|
|
$this->assertTrue(is_array($sshConfig)); |
|
|
|
$this->assertTrue(array_key_exists('port', $sshConfig)); |
|
$this->assertEquals('22', $sshConfig['port']); |
|
|
|
$this->assertTrue(array_key_exists('flags', $sshConfig)); |
|
$this->assertEquals('-q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no', $sshConfig['flags']); |
|
} |
|
|
|
public function testSSHConfigCustomOptions() |
|
{ |
|
$runtime = new Runtime(); |
|
$runtime->setConfiguration(['environments' => ['test' => ['ssh' => ['port' => '2222', 'flags' => '-q']]]]); |
|
$runtime->setEnvironment('test'); |
|
$sshConfig = $runtime->getSSHConfig(); |
|
|
|
$this->assertTrue(is_array($sshConfig)); |
|
|
|
$this->assertTrue(array_key_exists('port', $sshConfig)); |
|
$this->assertEquals('2222', $sshConfig['port']); |
|
|
|
$this->assertTrue(array_key_exists('flags', $sshConfig)); |
|
$this->assertEquals('-q', $sshConfig['flags']); |
|
} |
|
|
|
public function testLogger() |
|
{ |
|
$logger = new Logger('test'); |
|
$handler = new TestHandler(); |
|
$logger->pushHandler($handler); |
|
|
|
$runtime = new Runtime(); |
|
$runtime->setLogger($logger); |
|
|
|
$runtime->log('Test Message', LogLevel::INFO); |
|
|
|
$this->assertTrue($handler->hasInfoRecords()); |
|
$this->assertTrue($handler->hasInfo('Test Message')); |
|
} |
|
|
|
public function testLocalCommand() |
|
{ |
|
$runtime = new Runtime(); |
|
|
|
/** @var Process $process */ |
|
$process = $runtime->runLocalCommand('date +%s'); |
|
$timestamp = time(); |
|
$this->assertTrue($process->isSuccessful()); |
|
$this->assertEquals($timestamp, trim($process->getOutput())); |
|
|
|
/** @var Process $process */ |
|
$process = $runtime->runLocalCommand('false'); |
|
$this->assertFalse($process->isSuccessful()); |
|
} |
|
|
|
public function testCurrentUser() |
|
{ |
|
$runtime = new Runtime(); |
|
$userData = posix_getpwuid(posix_geteuid()); |
|
|
|
$this->assertTrue(is_array($userData)); |
|
$this->assertArrayHasKey('name', $userData); |
|
$this->assertEquals($userData['name'], $runtime->getCurrentUser()); |
|
} |
|
}
|
|
|