istic-openstack/server/vendor/php-opencloud/common/tests/integration/TestCase.php
2016-03-23 15:30:47 +01:00

115 lines
3 KiB
PHP

<?php
namespace OpenCloud\Integration;
use Psr\Log\LoggerInterface;
abstract class TestCase extends \PHPUnit_Framework_TestCase implements TestInterface
{
private $logger;
private $startPoint;
private $lastPoint;
private $sampleManager;
public function __construct(LoggerInterface $logger, SampleManagerInterface $sampleManager)
{
$this->logger = $logger;
$this->sampleManager = $sampleManager;
}
public function teardown()
{
$this->sampleManager->deletePaths();
}
public function runOneTest($name)
{
if (!method_exists($this, $name)) {
throw new \InvalidArgumentException(sprintf("%s method does not exist", $name));
}
$this->startTimer();
$this->$name();
$this->outputTimeTaken();
}
protected function startTimer()
{
$this->startPoint = $this->lastPoint = microtime(true);
}
private function wrapColor($message, $colorPrefix)
{
return sprintf("%s%s", $colorPrefix, $message) . "\033[0m\033[1;0m";
}
protected function logStep($message, array $context = [])
{
$duration = microtime(true) - $this->lastPoint;
$stepTimeTaken = sprintf('(%s)', $this->formatSecDifference($duration));
if ($duration >= 10) {
$color = "\033[0m\033[1;31m"; // red
} elseif ($duration >= 2) {
$color = "\033[0m\033[1;33m"; // yellow
} else {
$color = "\033[0m\033[1;32m"; // green
}
$message = '{timeTaken} ' . $message;
$context['{timeTaken}'] = $this->wrapColor($stepTimeTaken, $color);
$this->logger->info($message, $context);
$this->lastPoint = microtime(true);
}
protected function randomStr($length = 5)
{
$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charsLen = strlen($chars);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $chars[rand(0, $charsLen - 1)];
}
return 'phptest_' . $randomString;
}
private function formatMinDifference($duration)
{
$output = '';
if (($minutes = floor($duration / 60)) > 0) {
$output .= $minutes . 'min' . (($minutes > 1) ? 's' : '');
}
if (($seconds = number_format(fmod($duration, 60), 2)) > 0) {
if ($minutes > 0) {
$output .= ' ';
}
$output .= $seconds . 's';
}
return $output;
}
private function formatSecDifference($duration)
{
return number_format($duration, 2) . 's';
}
protected function outputTimeTaken()
{
$output = $this->formatMinDifference(microtime(true) - $this->startPoint);
$this->logger->info('Finished all tests! Time taken: {output}.', ['{output}' => $output]);
}
protected function sampleFile(array $replacements, $path)
{
return $this->sampleManager->write($path, $replacements);
}
}