From e25861a286d17234b74c12a0286c05604ac58e83 Mon Sep 17 00:00:00 2001 From: Fabio Del Bene Date: Wed, 23 Nov 2016 17:38:31 +0100 Subject: [PATCH 1/6] Added Symfony2/ApplyFaclsTask --- Mage/Task/BuiltIn/Symfony2/ApplyFaclsTask.php | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 Mage/Task/BuiltIn/Symfony2/ApplyFaclsTask.php diff --git a/Mage/Task/BuiltIn/Symfony2/ApplyFaclsTask.php b/Mage/Task/BuiltIn/Symfony2/ApplyFaclsTask.php new file mode 100644 index 0000000..a88b255 --- /dev/null +++ b/Mage/Task/BuiltIn/Symfony2/ApplyFaclsTask.php @@ -0,0 +1,64 @@ + + */ +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', []); + + 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 + ); + } + +} From 1318763289b7353f252981c67105f21ec2a72a69 Mon Sep 17 00:00:00 2001 From: Fabio Del Bene Date: Wed, 23 Nov 2016 18:07:00 +0100 Subject: [PATCH 2/6] Added ApplyFacls Task Factory:get Test --- .../BuiltIn/Symfony2/ApplyFaclsTaskTest.php | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php diff --git a/tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php b/tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php new file mode 100644 index 0000000..eda0e68 --- /dev/null +++ b/tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php @@ -0,0 +1,63 @@ +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 + $taskData = array( + 'name' => 'symfony2/apply-facls', + 'parameters' => array( + 'httpuser' => '', + 'localuser' => 'deployer', + 'folders' => array('var', 'web') + ), + ); + // Act + $task = Factory::get($taskData, $this->config); + $task->run(); + } +} From ee9a2159928c86a6a48b2a0969202fc879c7e0b6 Mon Sep 17 00:00:00 2001 From: Fabio Del Bene Date: Wed, 23 Nov 2016 18:07:38 +0100 Subject: [PATCH 3/6] Added on-deploy config on docs --- docs/example-config/.mage/config/environment/production.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/example-config/.mage/config/environment/production.yml b/docs/example-config/.mage/config/environment/production.yml index 1af997f..0fa9374 100644 --- a/docs/example-config/.mage/config/environment/production.yml +++ b/docs/example-config/.mage/config/environment/production.yml @@ -21,6 +21,12 @@ tasks: - privileges - sampleTask - sampleTaskRollbackAware + - symfony2/apply-facls: + httpuser: www-data + localuser: deployer + folders: + - var + - web verbose_logging: true env: variables: From 5b2791ae99dd2f6731c93fc635cd69f8b89d27e2 Mon Sep 17 00:00:00 2001 From: Fabio Del Bene Date: Wed, 23 Nov 2016 18:16:10 +0100 Subject: [PATCH 4/6] fix array syntax for php 5.3 --- Mage/Task/BuiltIn/Symfony2/ApplyFaclsTask.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage/Task/BuiltIn/Symfony2/ApplyFaclsTask.php b/Mage/Task/BuiltIn/Symfony2/ApplyFaclsTask.php index a88b255..572af3e 100644 --- a/Mage/Task/BuiltIn/Symfony2/ApplyFaclsTask.php +++ b/Mage/Task/BuiltIn/Symfony2/ApplyFaclsTask.php @@ -43,7 +43,7 @@ class ApplyFaclsTask extends AbstractTask implements IsReleaseAware if (empty($localuser)) { throw new SkipException('Parameter localuser not set.'); } - $folders = $this->getParameter('folders', []); + $folders = $this->getParameter('folders', array()); foreach ($folders as $folder) { $folderPath = $currentCopy."/".$folder; From 827836ccb4fcfa0b930e00b67f70208242088d92 Mon Sep 17 00:00:00 2001 From: Fabio Del Bene Date: Thu, 24 Nov 2016 10:45:55 +0100 Subject: [PATCH 5/6] Added createFaclsCommand unit test, run without correct parameter test --- .../BuiltIn/Symfony2/ApplyFaclsTaskTest.php | 64 ++++++++++++++++--- 1 file changed, 55 insertions(+), 9 deletions(-) diff --git a/tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php b/tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php index eda0e68..fb7267a 100644 --- a/tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php +++ b/tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php @@ -1,6 +1,8 @@ 'symfony2/apply-facls', - 'parameters' => array( - 'httpuser' => '', - 'localuser' => 'deployer', - 'folders' => array('var', 'web') - ), - ); + $config = new Config(); + $config->addParameter('httpuser', ''); + $task = new ApplyFaclsTask($config); // Act - $task = Factory::get($taskData, $this->config); $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 [ + 'no facls options' => [ + '', 'www-data', 'deployer', 'var', 'setfacl -m u:www-data:rwX -m u:deployer:rwX var' + ], + 'with facls options' => [ + '-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); + } } From 71bba4b7a23678b1ef64e21bb5545f08bf539f19 Mon Sep 17 00:00:00 2001 From: Fabio Del Bene Date: Thu, 24 Nov 2016 10:50:46 +0100 Subject: [PATCH 6/6] fixed array definition [ into test for php 5.3 --- .../Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php b/tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php index fb7267a..e4274f4 100644 --- a/tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php +++ b/tests/MageTest/Task/BuiltIn/Symfony2/ApplyFaclsTaskTest.php @@ -76,14 +76,14 @@ class ApplyFaclsTaskTest extends PHPUnit_Framework_TestCase public function provider_createFaclsCommand() { - return [ - 'no facls options' => [ + return array( + 'no facls options' => array( '', 'www-data', 'deployer', 'var', 'setfacl -m u:www-data:rwX -m u:deployer:rwX var' - ], - 'with facls options' => [ + ), + 'with facls options' => array( '-dR', 'www-data', 'deployer', 'var', 'setfacl -dR -m u:www-data:rwX -m u:deployer:rwX var' - ] - ]; + ) + ); } /**