mirror of
https://github.com/andres-montanez/Magallanes
synced 2024-05-25 01:42:14 +02:00
Merge 71bba4b7a2
into b0d41af3ee
This commit is contained in:
commit
3576271113
64
Mage/Task/BuiltIn/Symfony2/ApplyFaclsTask.php
Normal file
64
Mage/Task/BuiltIn/Symfony2/ApplyFaclsTask.php
Normal file
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
namespace Mage\Task\BuiltIn\Symfony2;
|
||||
|
||||
use Mage\Task\AbstractTask;
|
||||
use Mage\Task\SkipException;
|
||||
use Mage\Task\Releases\IsReleaseAware;
|
||||
|
||||
/**
|
||||
* Task to setup Symfony file permission
|
||||
*
|
||||
* @see http://symfony.com/doc/current/setup/file_permissions.html Documentation of Symfony file permission setup.
|
||||
*
|
||||
* @author Fabio Del Bene <fabio.delbene@gmail.com>
|
||||
*/
|
||||
class ApplyFaclsTask extends AbstractTask implements IsReleaseAware
|
||||
{
|
||||
/**
|
||||
* Returns the Title of the Task
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return 'Set Symfony file ACLs on remote system [built-in]';
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs the task
|
||||
*
|
||||
* @return boolean
|
||||
* @throws SkipException
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$releasesDirectory = $this->getConfig()->release('directory', 'releases');
|
||||
$currentCopy = $releasesDirectory . '/' . $this->getConfig()->getReleaseId();
|
||||
|
||||
|
||||
$httpUser = $this->getParameter('httpuser', '');
|
||||
if (empty($httpUser)) {
|
||||
throw new SkipException('Parameter httpuser not set.');
|
||||
}
|
||||
$localuser = $this->getParameter('localuser', '');
|
||||
if (empty($localuser)) {
|
||||
throw new SkipException('Parameter localuser not set.');
|
||||
}
|
||||
$folders = $this->getParameter('folders', array());
|
||||
|
||||
foreach ($folders as $folder) {
|
||||
$folderPath = $currentCopy."/".$folder;
|
||||
$this->runCommandRemote($this->createFaclCommand('-R', $httpUser,$localuser, $folderPath), $output);
|
||||
$this->runCommandRemote($this->createFaclCommand('-dR', $httpUser,$localuser, $folderPath), $output);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function createFaclCommand($setFaclOptions, $httpUser,$localuser, $folder)
|
||||
{
|
||||
return sprintf('setfacl %s -m u:%s:rwX -m u:%s:rwX %s',
|
||||
$setFaclOptions, $httpUser, $localuser, $folder
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -21,6 +21,12 @@ tasks:
|
|||
- privileges
|
||||
- sampleTask
|
||||
- sampleTaskRollbackAware
|
||||
- symfony2/apply-facls:
|
||||
httpuser: www-data
|
||||
localuser: deployer
|
||||
folders:
|
||||
- var
|
||||
- web
|
||||
verbose_logging: true
|
||||
env:
|
||||
variables:
|
||||
|
|
109
tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php
Normal file
109
tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php
Normal file
|
@ -0,0 +1,109 @@
|
|||
<?php
|
||||
namespace MageTest\Task\BuiltIn\Symfony2;
|
||||
|
||||
use Mage\Config;
|
||||
use Mage\Task\BuiltIn\Symfony2\ApplyFaclsTask;
|
||||
use Mage\Task\Factory;
|
||||
use PHPUnit_Framework_TestCase;
|
||||
|
||||
class ApplyFaclsTaskTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
private $config;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->config = $this->getMock('Mage\\Config');
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Mage\Task\Factory::get
|
||||
*/
|
||||
public function testGet()
|
||||
{
|
||||
$task = Factory::get('symfony2/apply-facls', $this->config);
|
||||
$this->assertInstanceOf('\\Mage\\Task\\BuiltIn\\Symfony2\\ApplyFaclsTask', $task);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Mage\Task\Factory::get
|
||||
*/
|
||||
public function testGetTaskDataIsArray()
|
||||
{
|
||||
$taskData = array(
|
||||
'name' => 'symfony2/apply-facls',
|
||||
'parameters' => array(
|
||||
'httpuser' => 'www-data',
|
||||
'localuser' => 'deployer',
|
||||
'folders' => array('var', 'web')
|
||||
),
|
||||
);
|
||||
|
||||
$task = Factory::get($taskData, $this->config);
|
||||
$this->assertInstanceOf('\\Mage\\Task\\BuiltIn\\Symfony2\\ApplyFaclsTask', $task);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Mage\Task\SkipException
|
||||
* @expectedExceptionMessage Parameter httpuser not set.
|
||||
* @covers Mage\Task\BuiltIn\Symfony2\ApplyFaclsTask::run
|
||||
*/
|
||||
public function test_Run_WithNoHttpUserParameter_Expect_throw_SkipException()
|
||||
{
|
||||
// Arrange
|
||||
$config = new Config();
|
||||
$config->addParameter('httpuser', '');
|
||||
$task = new ApplyFaclsTask($config);
|
||||
// Act
|
||||
$task->run();
|
||||
}
|
||||
|
||||
/**
|
||||
* @group unit
|
||||
* @expectedException \Mage\Task\SkipException
|
||||
* @expectedExceptionMessage Parameter localuser not set.
|
||||
* @covers Mage\Task\BuiltIn\Symfony2\ApplyFaclsTask::run
|
||||
*/
|
||||
public function test_run_withNoLocalUserParameter_trow_SkipException()
|
||||
{
|
||||
// Arrange
|
||||
$config = new Config();
|
||||
$config->addParameter('httpuser', 'www-data');
|
||||
$config->addParameter('localuser', '');
|
||||
$task = new ApplyFaclsTask($config);
|
||||
// Act
|
||||
$task->run();
|
||||
}
|
||||
|
||||
public function provider_createFaclsCommand()
|
||||
{
|
||||
return array(
|
||||
'no facls options' => array(
|
||||
'', 'www-data', 'deployer', 'var', 'setfacl -m u:www-data:rwX -m u:deployer:rwX var'
|
||||
),
|
||||
'with facls options' => array(
|
||||
'-dR', 'www-data', 'deployer', 'var', 'setfacl -dR -m u:www-data:rwX -m u:deployer:rwX var'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group unit
|
||||
* @dataProvider provider_createFaclsCommand
|
||||
* @covers Mage\Task\BuiltIn\Symfony2\ApplyFaclsTask::createFaclCommand
|
||||
*
|
||||
* @param string $faclOptions
|
||||
* @param string $httpUser
|
||||
* @param string $localUser
|
||||
* @param string $folder
|
||||
* @param string $expectedCommand
|
||||
*/
|
||||
public function test_createFaclsCommand($faclOptions, $httpUser, $localUser, $folder, $expectedCommand)
|
||||
{
|
||||
// Arrange
|
||||
$task = new ApplyFaclsTask($this->config);
|
||||
// Act
|
||||
$command = $task->createFaclCommand($faclOptions, $httpUser, $localUser, $folder);
|
||||
// Assert
|
||||
$this->assertEquals($expectedCommand, $command);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue