mirror of
				https://github.com/hauke68/Magallanes.git
				synced 2025-11-04 00:50:18 +01:00 
			
		
		
		
	[Nostromo] Add File System tasks and tests
This commit is contained in:
		
							parent
							
								
									5d95b4d6cb
								
							
						
					
					
						commit
						3f071ff6bf
					
				
							
								
								
									
										59
									
								
								src/Mage/Task/BuiltIn/FS/AbstractFileTask.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								src/Mage/Task/BuiltIn/FS/AbstractFileTask.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,59 @@
 | 
			
		||||
<?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\Task\BuiltIn\FS;
 | 
			
		||||
 | 
			
		||||
use Mage\Runtime\Exception\RuntimeException;
 | 
			
		||||
use Mage\Task\AbstractTask;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * File System Task - Abstract Base class for File Operations
 | 
			
		||||
 *
 | 
			
		||||
 * @author Andrés Montañez <andresmontanez@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
abstract class AbstractFileTask extends AbstractTask
 | 
			
		||||
{
 | 
			
		||||
    protected function getOptions()
 | 
			
		||||
    {
 | 
			
		||||
        $mandatory = $this->getParameters();
 | 
			
		||||
 | 
			
		||||
        foreach ($mandatory as $parameter) {
 | 
			
		||||
            if (!array_key_exists($parameter, $this->options)) {
 | 
			
		||||
                throw new RuntimeException(sprintf('Parameter "%s" is not defined', $parameter));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this->options;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    abstract protected function getParameters();
 | 
			
		||||
 | 
			
		||||
    protected function getFile($file)
 | 
			
		||||
    {
 | 
			
		||||
        $mapping = [
 | 
			
		||||
            '%environment%' => $this->runtime->getEnvironment(),
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        if ($this->runtime->getWorkingHost()) {
 | 
			
		||||
            $mapping['%host%'] = $this->runtime->getWorkingHost();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($this->runtime->getReleaseId()) {
 | 
			
		||||
            $mapping['%release%'] = $this->runtime->getReleaseId();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $options = $this->getOptions();
 | 
			
		||||
        return str_replace(
 | 
			
		||||
            array_keys($mapping),
 | 
			
		||||
            array_values($mapping),
 | 
			
		||||
            $options[$file]
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										49
									
								
								src/Mage/Task/BuiltIn/FS/CopyTask.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/Mage/Task/BuiltIn/FS/CopyTask.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
			
		||||
<?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\Task\BuiltIn\FS;
 | 
			
		||||
 | 
			
		||||
use Symfony\Component\Process\Process;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * File System Task - Copy a File
 | 
			
		||||
 *
 | 
			
		||||
 * @author Andrés Montañez <andresmontanez@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
class CopyTask extends AbstractFileTask
 | 
			
		||||
{
 | 
			
		||||
    public function getName()
 | 
			
		||||
    {
 | 
			
		||||
        return 'fs/copy';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getDescription()
 | 
			
		||||
    {
 | 
			
		||||
        return sprintf('[FS] Copy "%s" to "%s"', $this->getFile('from'), $this->getFile('to'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function execute()
 | 
			
		||||
    {
 | 
			
		||||
        $from = $this->getFile('from');
 | 
			
		||||
        $to = $this->getFile('to');
 | 
			
		||||
 | 
			
		||||
        $cmd = sprintf('cp -p %s %s', $from, $to);
 | 
			
		||||
 | 
			
		||||
        /** @var Process $process */
 | 
			
		||||
        $process = $this->runtime->runCommand($cmd);
 | 
			
		||||
 | 
			
		||||
        return $process->isSuccessful();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function getParameters()
 | 
			
		||||
    {
 | 
			
		||||
        return ['from', 'to'];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										49
									
								
								src/Mage/Task/BuiltIn/FS/MoveTask.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/Mage/Task/BuiltIn/FS/MoveTask.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
			
		||||
<?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\Task\BuiltIn\FS;
 | 
			
		||||
 | 
			
		||||
use Symfony\Component\Process\Process;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * File System Task - Move a File
 | 
			
		||||
 *
 | 
			
		||||
 * @author Andrés Montañez <andresmontanez@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
class MoveTask extends AbstractFileTask
 | 
			
		||||
{
 | 
			
		||||
    public function getName()
 | 
			
		||||
    {
 | 
			
		||||
        return 'fs/move';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getDescription()
 | 
			
		||||
    {
 | 
			
		||||
        return sprintf('[FS] Move "%s" to "%s"', $this->getFile('from'), $this->getFile('to'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function execute()
 | 
			
		||||
    {
 | 
			
		||||
        $from = $this->getFile('from');
 | 
			
		||||
        $to = $this->getFile('to');
 | 
			
		||||
 | 
			
		||||
        $cmd = sprintf('mv %s %s', $from, $to);
 | 
			
		||||
 | 
			
		||||
        /** @var Process $process */
 | 
			
		||||
        $process = $this->runtime->runCommand($cmd);
 | 
			
		||||
 | 
			
		||||
        return $process->isSuccessful();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function getParameters()
 | 
			
		||||
    {
 | 
			
		||||
        return ['from', 'to'];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										48
									
								
								src/Mage/Task/BuiltIn/FS/RemoveTask.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/Mage/Task/BuiltIn/FS/RemoveTask.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
			
		||||
<?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\Task\BuiltIn\FS;
 | 
			
		||||
 | 
			
		||||
use Symfony\Component\Process\Process;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * File System Task - Remove a File
 | 
			
		||||
 *
 | 
			
		||||
 * @author Andrés Montañez <andresmontanez@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
class RemoveTask extends AbstractFileTask
 | 
			
		||||
{
 | 
			
		||||
    public function getName()
 | 
			
		||||
    {
 | 
			
		||||
        return 'fs/remove';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getDescription()
 | 
			
		||||
    {
 | 
			
		||||
        return sprintf('[FS] Remove "%s"', $this->getFile('file'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function execute()
 | 
			
		||||
    {
 | 
			
		||||
        $file = $this->getFile('file');
 | 
			
		||||
 | 
			
		||||
        $cmd = sprintf('rm %s', $file);
 | 
			
		||||
 | 
			
		||||
        /** @var Process $process */
 | 
			
		||||
        $process = $this->runtime->runCommand($cmd);
 | 
			
		||||
 | 
			
		||||
        return $process->isSuccessful();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function getParameters()
 | 
			
		||||
    {
 | 
			
		||||
        return ['file'];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										241
									
								
								src/Mage/Tests/Task/BuiltIn/FileSystemTaskTest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										241
									
								
								src/Mage/Tests/Task/BuiltIn/FileSystemTaskTest.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,241 @@
 | 
			
		||||
<?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\Task\BuiltIn;
 | 
			
		||||
 | 
			
		||||
use Mage\Runtime\Exception\RuntimeException;
 | 
			
		||||
use Mage\Task\BuiltIn\FS\CopyTask;
 | 
			
		||||
use Mage\Task\BuiltIn\FS\MoveTask;
 | 
			
		||||
use Mage\Task\BuiltIn\FS\RemoveTask;
 | 
			
		||||
use Exception;
 | 
			
		||||
use Mage\Tests\Runtime\RuntimeMockup;
 | 
			
		||||
use PHPUnit_Framework_TestCase as TestCase;
 | 
			
		||||
 | 
			
		||||
class FileSystemTaskTest extends TestCase
 | 
			
		||||
{
 | 
			
		||||
    public function testCopyTask()
 | 
			
		||||
    {
 | 
			
		||||
        $runtime = new RuntimeMockup();
 | 
			
		||||
        $runtime->setConfiguration(['environments' => ['test' => []]]);
 | 
			
		||||
        $runtime->setEnvironment('test');
 | 
			
		||||
 | 
			
		||||
        $task = new CopyTask();
 | 
			
		||||
        $task->setOptions(['from' => 'a.txt', 'to' => 'b.txt']);
 | 
			
		||||
        $task->setRuntime($runtime);
 | 
			
		||||
 | 
			
		||||
        $task->execute();
 | 
			
		||||
 | 
			
		||||
        $ranCommands = $runtime->getRanCommands();
 | 
			
		||||
 | 
			
		||||
        $testCase = array(
 | 
			
		||||
            0 => 'cp -p a.txt b.txt',
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // Check total of Executed Commands
 | 
			
		||||
        $this->assertEquals(count($testCase), count($ranCommands));
 | 
			
		||||
 | 
			
		||||
        // Check Generated Commands
 | 
			
		||||
        foreach ($testCase as $index => $command) {
 | 
			
		||||
            $this->assertEquals($command, $ranCommands[$index]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testCopyReplaceTask()
 | 
			
		||||
    {
 | 
			
		||||
        $runtime = new RuntimeMockup();
 | 
			
		||||
        $runtime->setConfiguration(['environments' => ['test' => []]]);
 | 
			
		||||
        $runtime->setEnvironment('test');
 | 
			
		||||
 | 
			
		||||
        $task = new CopyTask();
 | 
			
		||||
        $task->setOptions(['from' => '%environment%.txt', 'to' => 'b.txt']);
 | 
			
		||||
        $task->setRuntime($runtime);
 | 
			
		||||
 | 
			
		||||
        $task->execute();
 | 
			
		||||
 | 
			
		||||
        $ranCommands = $runtime->getRanCommands();
 | 
			
		||||
 | 
			
		||||
        $testCase = array(
 | 
			
		||||
            0 => 'cp -p test.txt b.txt',
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // Check total of Executed Commands
 | 
			
		||||
        $this->assertEquals(count($testCase), count($ranCommands));
 | 
			
		||||
 | 
			
		||||
        // Check Generated Commands
 | 
			
		||||
        foreach ($testCase as $index => $command) {
 | 
			
		||||
            $this->assertEquals($command, $ranCommands[$index]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testCopyBadOptionsTask()
 | 
			
		||||
    {
 | 
			
		||||
        $runtime = new RuntimeMockup();
 | 
			
		||||
        $runtime->setConfiguration(['environments' => ['test' => []]]);
 | 
			
		||||
        $runtime->setEnvironment('test');
 | 
			
		||||
 | 
			
		||||
        $task = new CopyTask();
 | 
			
		||||
        $task->setOptions(['form' => 'a.txt', 'to' => 'b.txt']);
 | 
			
		||||
        $task->setRuntime($runtime);
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            $task->execute();
 | 
			
		||||
            $this->assertTrue(false, 'Task did not failed');
 | 
			
		||||
        } catch (Exception $exception) {
 | 
			
		||||
            $this->assertTrue($exception instanceof RuntimeException);
 | 
			
		||||
            $this->assertEquals('Parameter "from" is not defined', $exception->getMessage());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testMoveTask()
 | 
			
		||||
    {
 | 
			
		||||
        $runtime = new RuntimeMockup();
 | 
			
		||||
        $runtime->setConfiguration(['environments' => ['test' => []]]);
 | 
			
		||||
        $runtime->setEnvironment('test');
 | 
			
		||||
 | 
			
		||||
        $task = new MoveTask();
 | 
			
		||||
        $task->setOptions(['from' => 'a.txt', 'to' => 'b.txt']);
 | 
			
		||||
        $task->setRuntime($runtime);
 | 
			
		||||
 | 
			
		||||
        $task->execute();
 | 
			
		||||
 | 
			
		||||
        $ranCommands = $runtime->getRanCommands();
 | 
			
		||||
 | 
			
		||||
        $testCase = array(
 | 
			
		||||
            0 => 'mv a.txt b.txt',
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // Check total of Executed Commands
 | 
			
		||||
        $this->assertEquals(count($testCase), count($ranCommands));
 | 
			
		||||
 | 
			
		||||
        // Check Generated Commands
 | 
			
		||||
        foreach ($testCase as $index => $command) {
 | 
			
		||||
            $this->assertEquals($command, $ranCommands[$index]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testMoveReplaceTask()
 | 
			
		||||
    {
 | 
			
		||||
        $runtime = new RuntimeMockup();
 | 
			
		||||
        $runtime->setConfiguration(['environments' => ['test' => []]]);
 | 
			
		||||
        $runtime->setEnvironment('test');
 | 
			
		||||
 | 
			
		||||
        $task = new MoveTask();
 | 
			
		||||
        $task->setOptions(['from' => '%environment%.txt', 'to' => 'b.txt']);
 | 
			
		||||
        $task->setRuntime($runtime);
 | 
			
		||||
 | 
			
		||||
        $task->execute();
 | 
			
		||||
 | 
			
		||||
        $ranCommands = $runtime->getRanCommands();
 | 
			
		||||
 | 
			
		||||
        $testCase = array(
 | 
			
		||||
            0 => 'mv test.txt b.txt',
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // Check total of Executed Commands
 | 
			
		||||
        $this->assertEquals(count($testCase), count($ranCommands));
 | 
			
		||||
 | 
			
		||||
        // Check Generated Commands
 | 
			
		||||
        foreach ($testCase as $index => $command) {
 | 
			
		||||
            $this->assertEquals($command, $ranCommands[$index]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testMoveBadOptionsTask()
 | 
			
		||||
    {
 | 
			
		||||
        $runtime = new RuntimeMockup();
 | 
			
		||||
        $runtime->setConfiguration(['environments' => ['test' => []]]);
 | 
			
		||||
        $runtime->setEnvironment('test');
 | 
			
		||||
 | 
			
		||||
        $task = new MoveTask();
 | 
			
		||||
        $task->setOptions(['form' => 'a.txt', 'to' => 'b.txt']);
 | 
			
		||||
        $task->setRuntime($runtime);
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            $task->execute();
 | 
			
		||||
            $this->assertTrue(false, 'Task did not failed');
 | 
			
		||||
        } catch (Exception $exception) {
 | 
			
		||||
            $this->assertTrue($exception instanceof RuntimeException);
 | 
			
		||||
            $this->assertEquals('Parameter "from" is not defined', $exception->getMessage());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testRemoveTask()
 | 
			
		||||
    {
 | 
			
		||||
        $runtime = new RuntimeMockup();
 | 
			
		||||
        $runtime->setConfiguration(['environments' => ['test' => []]]);
 | 
			
		||||
        $runtime->setEnvironment('test');
 | 
			
		||||
 | 
			
		||||
        $task = new RemoveTask();
 | 
			
		||||
        $task->setOptions(['file' => 'a.txt']);
 | 
			
		||||
        $task->setRuntime($runtime);
 | 
			
		||||
 | 
			
		||||
        $task->execute();
 | 
			
		||||
 | 
			
		||||
        $ranCommands = $runtime->getRanCommands();
 | 
			
		||||
 | 
			
		||||
        $testCase = array(
 | 
			
		||||
            0 => 'rm a.txt',
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // Check total of Executed Commands
 | 
			
		||||
        $this->assertEquals(count($testCase), count($ranCommands));
 | 
			
		||||
 | 
			
		||||
        // Check Generated Commands
 | 
			
		||||
        foreach ($testCase as $index => $command) {
 | 
			
		||||
            $this->assertEquals($command, $ranCommands[$index]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testRemoveReplaceTask()
 | 
			
		||||
    {
 | 
			
		||||
        $runtime = new RuntimeMockup();
 | 
			
		||||
        $runtime->setConfiguration(['environments' => ['test' => []]]);
 | 
			
		||||
        $runtime->setEnvironment('test');
 | 
			
		||||
 | 
			
		||||
        $task = new RemoveTask();
 | 
			
		||||
        $task->setOptions(['file' => '%environment%.txt']);
 | 
			
		||||
        $task->setRuntime($runtime);
 | 
			
		||||
 | 
			
		||||
        $task->execute();
 | 
			
		||||
 | 
			
		||||
        $ranCommands = $runtime->getRanCommands();
 | 
			
		||||
 | 
			
		||||
        $testCase = array(
 | 
			
		||||
            0 => 'rm test.txt',
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // Check total of Executed Commands
 | 
			
		||||
        $this->assertEquals(count($testCase), count($ranCommands));
 | 
			
		||||
 | 
			
		||||
        // Check Generated Commands
 | 
			
		||||
        foreach ($testCase as $index => $command) {
 | 
			
		||||
            $this->assertEquals($command, $ranCommands[$index]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testRemoveBadOptionsTask()
 | 
			
		||||
    {
 | 
			
		||||
        $runtime = new RuntimeMockup();
 | 
			
		||||
        $runtime->setConfiguration(['environments' => ['test' => []]]);
 | 
			
		||||
        $runtime->setEnvironment('test');
 | 
			
		||||
 | 
			
		||||
        $task = new RemoveTask();
 | 
			
		||||
        $task->setOptions(['from' => 'a.txt']);
 | 
			
		||||
        $task->setRuntime($runtime);
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            $task->execute();
 | 
			
		||||
            $this->assertTrue(false, 'Task did not failed');
 | 
			
		||||
        } catch (Exception $exception) {
 | 
			
		||||
            $this->assertTrue($exception instanceof RuntimeException);
 | 
			
		||||
            $this->assertEquals('Parameter "file" is not defined', $exception->getMessage());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user