More testing. Removed Gitea actions.
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
@ -1,37 +0,0 @@
|
||||
name: Build and test
|
||||
run-name: Perform a regular build and test
|
||||
on: push
|
||||
|
||||
jobs:
|
||||
requirements:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v3
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.2'
|
||||
extensions: mbstring, xml, curl, zip
|
||||
tools: composer, phpdoc
|
||||
coverage: xdebug
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
composer config github-oauth.github.com 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
|
||||
composer install
|
||||
wget https://downloads.rclone.org/rclone-current-linux-amd64.deb
|
||||
dpkg -i rclone-current-linux-amd64.deb
|
||||
- name: Dry run
|
||||
run: ./backup show config.example.yml
|
||||
- name: Static analysis
|
||||
run: composer analyze
|
||||
- name: Test
|
||||
run: composer test-coverage
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
path: output/test.html
|
||||
- name: Document
|
||||
run: phpdoc run
|
||||
# - uses: actions/upload-artifact@v3
|
||||
# with:
|
||||
# path: output/docs
|
@ -54,8 +54,7 @@ class CommandBackup extends Command
|
||||
return Command::FAILURE;
|
||||
}
|
||||
|
||||
$rclone = new Rclone((string)$app->getConfig('rclone.path'));
|
||||
$rclone->setLogger($app->getLogger()->withName('rclone'));
|
||||
$rclone = new Rclone($app->getLogger()->withName('rclone'), (string)$app->getConfig('rclone.path'));
|
||||
|
||||
$notification = new Notification();
|
||||
/** @var array<array-key,array<string,string>> */
|
||||
|
@ -4,8 +4,6 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Rclone;
|
||||
|
||||
use Psr\Log\LoggerAwareTrait;
|
||||
use Psr\Log\NullLogger;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Symfony\Component\Process\Process;
|
||||
use Symfony\Component\Process\Exception\ProcessFailedException;
|
||||
@ -20,7 +18,10 @@ use Exception;
|
||||
*/
|
||||
class Rclone
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
/**
|
||||
* The logger instance.
|
||||
*/
|
||||
protected LoggerInterface $logger;
|
||||
|
||||
protected string $rclonePath;
|
||||
/**
|
||||
@ -40,10 +41,10 @@ class Rclone
|
||||
*
|
||||
* @param string $rclonePath Relative or absolute path
|
||||
*/
|
||||
public function __construct(string $rclonePath = "rclone")
|
||||
public function __construct(LoggerInterface $logger, string $rclonePath = "rclone")
|
||||
{
|
||||
$this->rclonePath = $rclonePath;
|
||||
$this->setLogger(new NullLogger());
|
||||
$this->logger = $logger;
|
||||
|
||||
$process = $this->exec('--version');
|
||||
if (!$process->isSuccessful()) {
|
||||
@ -130,22 +131,18 @@ class Rclone
|
||||
$options
|
||||
)
|
||||
);
|
||||
if ($this->logger instanceof LoggerInterface) {
|
||||
|
||||
$this->logger->info("Execute command", [$process->getCommandLine()]);
|
||||
}
|
||||
|
||||
|
||||
$process->setTimeout(4 * 3600);
|
||||
$process->run();
|
||||
|
||||
// executes after the command finishes
|
||||
if (!$process->isSuccessful()) {
|
||||
if ($this->logger instanceof LoggerInterface) {
|
||||
$this->logger->error("Failed execution");
|
||||
}
|
||||
}
|
||||
if ($this->logger instanceof LoggerInterface) {
|
||||
$this->logger->info("Return code", [$process->getExitCode()]);
|
||||
}
|
||||
return $process;
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||
namespace App\Tests;
|
||||
|
||||
use App\Rclone\Rclone;
|
||||
use Psr\Log\NullLogger;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class RcloneTest extends TestCase
|
||||
@ -23,26 +24,26 @@ final class RcloneTest extends TestCase
|
||||
public function testRclonePath(): void
|
||||
{
|
||||
$this->expectException(\Exception::class);
|
||||
new Rclone('invalid');
|
||||
new Rclone(new NullLogger(), 'invalid');
|
||||
$this->fail('Exception was not thrown');
|
||||
}
|
||||
|
||||
public function testRcloneInvalidVersion(): void
|
||||
{
|
||||
$this->expectException(\Exception::class);
|
||||
new Rclone('uname');
|
||||
new Rclone(new NullLogger(), 'uname');
|
||||
$this->fail('Exception was not thrown');
|
||||
}
|
||||
|
||||
public function testRcloneValidVersion(): void
|
||||
{
|
||||
$rclone = new Rclone();
|
||||
$rclone = new Rclone(new NullLogger());
|
||||
$this->assertStringStartsWith('rclone', $rclone->getVersion());
|
||||
}
|
||||
|
||||
public function testRcloneSize(): void
|
||||
{
|
||||
$rclone = new Rclone();
|
||||
$rclone = new Rclone(new NullLogger());
|
||||
$size = $rclone->getSize('temp/source');
|
||||
$this->assertGreaterThan(10000, $size);
|
||||
|
||||
@ -54,17 +55,33 @@ final class RcloneTest extends TestCase
|
||||
|
||||
public function testRcloneCopy(): void
|
||||
{
|
||||
$rclone = new Rclone();
|
||||
$rclone = new Rclone(new NullLogger());
|
||||
$rclone->copy('temp/source', 'temp/destination');
|
||||
$this->assertDirectoryExists('temp/destination');
|
||||
}
|
||||
|
||||
$rclone = new Rclone();
|
||||
public function testRcloneCopyParam(): void
|
||||
{
|
||||
$rclone = new Rclone(new NullLogger());
|
||||
$rclone->copy('temp/source', 'temp/destination', ['bwlimit' => '6M']);
|
||||
$this->assertDirectoryExists('temp/destination');
|
||||
}
|
||||
|
||||
public function testRcloneCopyBad(): void
|
||||
{
|
||||
$rclone = new Rclone(new NullLogger());
|
||||
$this->expectException(\Exception::class);
|
||||
$this->expectExceptionMessage("ERROR");
|
||||
$rclone->copy('temp/bogus-source', 'temp/bogus-destination');
|
||||
$this->fail('Exception was not thrown');
|
||||
}
|
||||
|
||||
public function testRcloneCopyBadParam(): void
|
||||
{
|
||||
$rclone = new Rclone(new NullLogger());
|
||||
$this->expectException(\Exception::class);
|
||||
$this->expectExceptionMessage("ERROR");
|
||||
$rclone->copy('temp/bogus-source', 'temp/bogus-destination', ['bwlimit' => '6M']);
|
||||
$this->fail('Exception was not thrown');
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ declare(strict_types=1);
|
||||
namespace App\Tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use App\Template\TwigExtension;
|
||||
use Twig\TwigFilter;
|
||||
|
||||
|
20
tests/Template/TwigTest.php
Normal file
20
tests/Template/TwigTest.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use App\Template\Twig;
|
||||
use Twig\TwigFilter;
|
||||
|
||||
final class TwigTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
public function testInstance(): void
|
||||
{
|
||||
$obj = new Twig(['template' => 'start {{ var }} end']);
|
||||
$template = $obj->load('template');
|
||||
$output = $template->render(['var' => 'middle']);
|
||||
$this->assertEquals('start middle end', $output);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user