mirror of https://github.com/hauke68/Magallanes
Andrés Montañez
8 years ago
23 changed files with 640 additions and 1031 deletions
@ -0,0 +1,249 @@ |
|||||||
|
<?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\Command\BuiltIn; |
||||||
|
|
||||||
|
use Mage\Command\BuiltIn\DeployCommand; |
||||||
|
use Mage\Tests\MageApplicationMockup; |
||||||
|
use Mage\Command\AbstractCommand; |
||||||
|
use Symfony\Component\Console\Tester\CommandTester; |
||||||
|
use PHPUnit_Framework_TestCase as TestCase; |
||||||
|
|
||||||
|
class DeployCommandMiscTest extends TestCase |
||||||
|
{ |
||||||
|
public function testDeploymentWithSudo() |
||||||
|
{ |
||||||
|
$application = new MageApplicationMockup(); |
||||||
|
$application->configure(__DIR__ . '/../../Resources/testhost-sudo.yml'); |
||||||
|
|
||||||
|
/** @var AbstractCommand $command */ |
||||||
|
$command = $application->find('deploy'); |
||||||
|
$this->assertTrue($command instanceof DeployCommand); |
||||||
|
|
||||||
|
$tester = new CommandTester($command); |
||||||
|
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
||||||
|
|
||||||
|
$ranCommands = $application->getRuntime()->getRanCommands(); |
||||||
|
|
||||||
|
$testCase = array( |
||||||
|
0 => 'git branch | grep "*"', |
||||||
|
1 => 'git checkout test', |
||||||
|
2 => 'git pull', |
||||||
|
3 => 'composer install', |
||||||
|
4 => 'composer dumpautoload --optimize', |
||||||
|
5 => 'rsync -e "ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" -avz --exclude=.git --exclude=./var/cache/* --exclude=./var/log/* --exclude=./web/app_dev.php ./ tester@testhost:/var/www/test', |
||||||
|
6 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& sudo bin/console cache:warmup --env=dev \\"', |
||||||
|
7 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& sudo bin/console assets:install --env=dev --symlink --relative web\\"', |
||||||
|
8 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& sudo bin/console assetic:dump --env=dev \\"', |
||||||
|
9 => 'git checkout master', |
||||||
|
); |
||||||
|
|
||||||
|
// Check total of Executed Commands |
||||||
|
$this->assertEquals(count($testCase), count($ranCommands)); |
||||||
|
|
||||||
|
// Check Generated Commands |
||||||
|
foreach ($testCase as $index => $command) { |
||||||
|
$this->assertEquals($command, $ranCommands[$index]); |
||||||
|
} |
||||||
|
|
||||||
|
$this->assertEquals(0, $tester->getStatusCode()); |
||||||
|
} |
||||||
|
|
||||||
|
public function testDeploymentWithBranchOverwrite() |
||||||
|
{ |
||||||
|
$application = new MageApplicationMockup(); |
||||||
|
$application->configure(__DIR__ . '/../../Resources/testhost-without-releases.yml'); |
||||||
|
|
||||||
|
/** @var AbstractCommand $command */ |
||||||
|
$command = $application->find('deploy'); |
||||||
|
$this->assertTrue($command instanceof DeployCommand); |
||||||
|
|
||||||
|
$tester = new CommandTester($command); |
||||||
|
$tester->execute(['command' => $command->getName(), 'environment' => 'test', '--branch' => 'maintenance']); |
||||||
|
|
||||||
|
$ranCommands = $application->getRuntime()->getRanCommands(); |
||||||
|
|
||||||
|
$testCase = array( |
||||||
|
0 => 'git branch | grep "*"', |
||||||
|
1 => 'git checkout maintenance', |
||||||
|
2 => 'git pull', |
||||||
|
3 => 'composer install', |
||||||
|
4 => 'composer dumpautoload --optimize', |
||||||
|
5 => 'rsync -e "ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" -avz --exclude=.git --exclude=./var/cache/* --exclude=./var/log/* --exclude=./web/app_dev.php ./ tester@testhost:/var/www/test', |
||||||
|
6 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console cache:warmup --env=dev \\"', |
||||||
|
7 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console assets:install --env=dev --symlink --relative web\\"', |
||||||
|
8 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console assetic:dump --env=dev \\"', |
||||||
|
9 => 'git checkout master', |
||||||
|
); |
||||||
|
|
||||||
|
// Check total of Executed Commands |
||||||
|
$this->assertEquals(count($testCase), count($ranCommands)); |
||||||
|
|
||||||
|
// Check Generated Commands |
||||||
|
foreach ($testCase as $index => $command) { |
||||||
|
$this->assertEquals($command, $ranCommands[$index]); |
||||||
|
} |
||||||
|
|
||||||
|
$this->assertEquals(0, $tester->getStatusCode()); |
||||||
|
} |
||||||
|
|
||||||
|
public function testDeploymentWithCustomTask() |
||||||
|
{ |
||||||
|
$application = new MageApplicationMockup(); |
||||||
|
$application->configure(__DIR__ . '/../../Resources/testhost-custom-task.yml'); |
||||||
|
|
||||||
|
|
||||||
|
/** @var AbstractCommand $command */ |
||||||
|
$command = $application->find('deploy'); |
||||||
|
$this->assertTrue($command instanceof DeployCommand); |
||||||
|
|
||||||
|
$tester = new CommandTester($command); |
||||||
|
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
||||||
|
|
||||||
|
$ranCommands = $application->getRuntime()->getRanCommands(); |
||||||
|
|
||||||
|
$testCase = array( |
||||||
|
0 => 'composer install', |
||||||
|
1 => 'composer dumpautoload --optimize', |
||||||
|
2 => 'rsync -e "ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" -avz --exclude=.git --exclude=./var/cache/* --exclude=./var/log/* --exclude=./web/app_dev.php ./ tester@testhost:/var/www/test', |
||||||
|
); |
||||||
|
|
||||||
|
// Check total of Executed Commands |
||||||
|
$this->assertEquals(count($testCase), count($ranCommands)); |
||||||
|
|
||||||
|
// Check Generated Commands |
||||||
|
foreach ($testCase as $index => $command) { |
||||||
|
$this->assertEquals($command, $ranCommands[$index]); |
||||||
|
} |
||||||
|
|
||||||
|
$this->assertTrue(strpos($tester->getDisplay(), '[Custom] Dummy Task') !== false); |
||||||
|
|
||||||
|
$this->assertEquals(0, $tester->getStatusCode()); |
||||||
|
} |
||||||
|
|
||||||
|
public function testDeploymentWithErrorTaskCommands() |
||||||
|
{ |
||||||
|
$application = new MageApplicationMockup(); |
||||||
|
$application->configure(__DIR__ . '/../../Resources/testhost-with-error.yml'); |
||||||
|
|
||||||
|
$application->getRuntime()->setReleaseId('20170101015120'); |
||||||
|
|
||||||
|
/** @var AbstractCommand $command */ |
||||||
|
$command = $application->find('deploy'); |
||||||
|
$this->assertTrue($command instanceof DeployCommand); |
||||||
|
|
||||||
|
$tester = new CommandTester($command); |
||||||
|
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
||||||
|
|
||||||
|
$ranCommands = $application->getRuntime()->getRanCommands(); |
||||||
|
|
||||||
|
$testCase = array( |
||||||
|
0 => 'git branch | grep "*"', |
||||||
|
1 => 'git checkout test', |
||||||
|
2 => 'git pull', |
||||||
|
3 => 'composer install', |
||||||
|
4 => 'composer dumpautoload --optimize', |
||||||
|
5 => 'tar cfz /tmp/mageXYZ --exclude=".git" --exclude="./var/cache/*" --exclude="./var/log/*" --exclude="./web/app_dev.php" ./', |
||||||
|
6 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"mkdir -p /var/www/test/releases/1234567890\\"', |
||||||
|
7 => 'scp -P 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /tmp/mageXYZ tester@testhost:/var/www/test/releases/1234567890/mageXYZ', |
||||||
|
8 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test/releases/1234567890 \\&\\& tar xfz mageXYZ\\"', |
||||||
|
9 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"rm /var/www/test/releases/1234567890/mageXYZ\\"', |
||||||
|
); |
||||||
|
|
||||||
|
// Check total of Executed Commands |
||||||
|
$this->assertEquals(count($testCase), count($ranCommands)); |
||||||
|
|
||||||
|
// Check Generated Commands |
||||||
|
foreach ($testCase as $index => $command) { |
||||||
|
$this->assertEquals($command, $ranCommands[$index]); |
||||||
|
} |
||||||
|
|
||||||
|
$this->assertTrue(strpos($tester->getDisplay(), 'ERROR') !== false); |
||||||
|
|
||||||
|
$this->assertNotEquals(0, $tester->getStatusCode()); |
||||||
|
} |
||||||
|
|
||||||
|
public function testDeploymentWithFailingPostDeployTaskCommands() |
||||||
|
{ |
||||||
|
$application = new MageApplicationMockup(); |
||||||
|
$application->configure(__DIR__ . '/../../Resources/testhost-with-postdeploy-error.yml'); |
||||||
|
|
||||||
|
/** @var AbstractCommand $command */ |
||||||
|
$command = $application->find('deploy'); |
||||||
|
$this->assertTrue($command instanceof DeployCommand); |
||||||
|
|
||||||
|
$tester = new CommandTester($command); |
||||||
|
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
||||||
|
|
||||||
|
$ranCommands = $application->getRuntime()->getRanCommands(); |
||||||
|
|
||||||
|
$testCase = array( |
||||||
|
0 => 'git branch | grep "*"', |
||||||
|
1 => 'git checkout test', |
||||||
|
2 => 'git pull', |
||||||
|
3 => 'composer install', |
||||||
|
4 => 'composer dumpautoload --optimize', |
||||||
|
5 => 'rsync -e "ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" -avz --exclude=.git --exclude=./var/cache/* --exclude=./var/log/* --exclude=./web/app_dev.php ./ tester@testhost:/var/www/test', |
||||||
|
6 => 'git checkout master', |
||||||
|
); |
||||||
|
|
||||||
|
// Check total of Executed Commands |
||||||
|
$this->assertEquals(count($testCase), count($ranCommands)); |
||||||
|
|
||||||
|
// Check Generated Commands |
||||||
|
foreach ($testCase as $index => $command) { |
||||||
|
$this->assertEquals($command, $ranCommands[$index]); |
||||||
|
} |
||||||
|
|
||||||
|
$this->assertTrue(strpos($tester->getDisplay(), 'ERROR') !== false); |
||||||
|
|
||||||
|
$this->assertNotEquals(0, $tester->getStatusCode()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public function testDeploymentWithSkippingTask() |
||||||
|
{ |
||||||
|
$application = new MageApplicationMockup(); |
||||||
|
$application->configure(__DIR__ . '/../../Resources/testhost-skipping.yml'); |
||||||
|
|
||||||
|
/** @var AbstractCommand $command */ |
||||||
|
$command = $application->find('deploy'); |
||||||
|
$this->assertTrue($command instanceof DeployCommand); |
||||||
|
|
||||||
|
$tester = new CommandTester($command); |
||||||
|
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
||||||
|
|
||||||
|
$ranCommands = $application->getRuntime()->getRanCommands(); |
||||||
|
|
||||||
|
$testCase = array( |
||||||
|
0 => 'git branch | grep "*"', |
||||||
|
1 => 'git pull', |
||||||
|
2 => 'composer install', |
||||||
|
3 => 'composer dumpautoload --optimize', |
||||||
|
4 => 'rsync -e "ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" -avz --exclude=.git --exclude=./var/cache/* --exclude=./var/log/* --exclude=./web/app_dev.php ./ tester@testhost:/var/www/test', |
||||||
|
5 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console cache:warmup --env=dev \\"', |
||||||
|
6 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console assets:install --env=dev --symlink --relative web\\"', |
||||||
|
7 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console assetic:dump --env=dev \\"', |
||||||
|
8 => 'git branch | grep "*"', |
||||||
|
); |
||||||
|
|
||||||
|
// Check total of Executed Commands |
||||||
|
$this->assertEquals(count($testCase), count($ranCommands)); |
||||||
|
|
||||||
|
// Check Generated Commands |
||||||
|
foreach ($testCase as $index => $command) { |
||||||
|
$this->assertEquals($command, $ranCommands[$index]); |
||||||
|
} |
||||||
|
|
||||||
|
$this->assertTrue(strpos($tester->getDisplay(), 'SKIPPED') !== false); |
||||||
|
|
||||||
|
$this->assertEquals(0, $tester->getStatusCode()); |
||||||
|
} |
||||||
|
} |
@ -1,785 +0,0 @@ |
|||||||
<?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\Command\BuiltIn; |
|
||||||
|
|
||||||
use Mage\Command\BuiltIn\DeployCommand; |
|
||||||
use Mage\Command\AbstractCommand; |
|
||||||
use Mage\Tests\MageTestApplication; |
|
||||||
use Mage\Tests\Runtime\RuntimeMockup; |
|
||||||
use Symfony\Component\Console\Tester\CommandTester; |
|
||||||
use PHPUnit_Framework_TestCase as TestCase; |
|
||||||
|
|
||||||
class DeployCommandTest extends TestCase |
|
||||||
{ |
|
||||||
public function testDeploymentWithReleasesCommands() |
|
||||||
{ |
|
||||||
$application = new MageTestApplication(); |
|
||||||
$application->add(new DeployCommand()); |
|
||||||
|
|
||||||
$runtime = new RuntimeMockup(); |
|
||||||
$runtime->setConfiguration(array( |
|
||||||
'environments' => |
|
||||||
array( |
|
||||||
'test' => |
|
||||||
array( |
|
||||||
'user' => 'tester', |
|
||||||
'branch' => 'test', |
|
||||||
'host_path' => '/var/www/test', |
|
||||||
'releases' => 4, |
|
||||||
'exclude' => |
|
||||||
array( |
|
||||||
0 => 'vendor', |
|
||||||
1 => 'app/cache', |
|
||||||
2 => 'app/log', |
|
||||||
3 => 'web/app_dev.php', |
|
||||||
), |
|
||||||
'hosts' => |
|
||||||
array( |
|
||||||
0 => 'testhost', |
|
||||||
), |
|
||||||
'pre-deploy' => |
|
||||||
array( |
|
||||||
0 => 'git/update', |
|
||||||
1 => 'composer/install', |
|
||||||
2 => 'composer/generate-autoload', |
|
||||||
), |
|
||||||
'on-deploy' => |
|
||||||
array( |
|
||||||
0 => |
|
||||||
array( |
|
||||||
'symfony/cache-clear' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
1 => |
|
||||||
array( |
|
||||||
'symfony/cache-warmup' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
2 => |
|
||||||
array( |
|
||||||
'symfony/assets-install' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
3 => |
|
||||||
array( |
|
||||||
'symfony/assetic-dump' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
), |
|
||||||
'on-release' => null, |
|
||||||
'post-release' => null, |
|
||||||
'post-deploy' => null, |
|
||||||
), |
|
||||||
), |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
$runtime->setReleaseId('20170101015120'); |
|
||||||
|
|
||||||
/** @var AbstractCommand $command */ |
|
||||||
$command = $application->find('deploy'); |
|
||||||
$command->setRuntime($runtime); |
|
||||||
|
|
||||||
$tester = new CommandTester($command); |
|
||||||
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
|
||||||
|
|
||||||
$ranCommands = $runtime->getRanCommands(); |
|
||||||
|
|
||||||
$testCase = array( |
|
||||||
0 => 'git branch | grep "*"', |
|
||||||
1 => 'git checkout test', |
|
||||||
2 => 'git pull', |
|
||||||
3 => 'composer install --dev', |
|
||||||
4 => 'composer dumpautoload --optimize', |
|
||||||
5 => 'tar cfz /tmp/mageXYZ --exclude=".git" --exclude="vendor" --exclude="app/cache" --exclude="app/log" --exclude="web/app_dev.php" ./', |
|
||||||
6 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"mkdir -p /var/www/test/releases/1234567890\\"', |
|
||||||
7 => 'scp -P 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /tmp/mageXYZ tester@testhost:/var/www/test/releases/1234567890/mageXYZ', |
|
||||||
8 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test/releases/1234567890 \\&\\& tar xfz mageXYZ\\"', |
|
||||||
9 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"rm /var/www/test/releases/1234567890/mageXYZ\\"', |
|
||||||
10 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test/releases/1234567890 \\&\\& bin/console cache:clear --env=dev \\"', |
|
||||||
11 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test/releases/1234567890 \\&\\& bin/console cache:warmup --env=dev \\"', |
|
||||||
12 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test/releases/1234567890 \\&\\& bin/console assets:install --env=dev --symlink --relative web\\"', |
|
||||||
13 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test/releases/1234567890 \\&\\& bin/console assetic:dump --env=dev \\"', |
|
||||||
14 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& ln -snf releases/1234567890 current\\"', |
|
||||||
15 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"ls -1 /var/www/test/releases\\"', |
|
||||||
16 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"rm -rf /var/www/test/releases/20170101015110\\"', |
|
||||||
17 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"rm -rf /var/www/test/releases/20170101015111\\"', |
|
||||||
18 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"rm -rf /var/www/test/releases/20170101015112\\"', |
|
||||||
19 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"rm -rf /var/www/test/releases/20170101015113\\"', |
|
||||||
20 => 'rm /tmp/mageXYZ', |
|
||||||
21 => 'git checkout master', |
|
||||||
); |
|
||||||
|
|
||||||
// Check total of Executed Commands |
|
||||||
$this->assertEquals(count($testCase), count($ranCommands)); |
|
||||||
|
|
||||||
// Check Generated Commands |
|
||||||
foreach ($testCase as $index => $command) { |
|
||||||
$this->assertEquals($command, $ranCommands[$index]); |
|
||||||
} |
|
||||||
|
|
||||||
$this->assertEquals(0, $tester->getStatusCode()); |
|
||||||
} |
|
||||||
|
|
||||||
public function testDeploymentWithErrorTaskCommands() |
|
||||||
{ |
|
||||||
$application = new MageTestApplication(); |
|
||||||
$application->add(new DeployCommand()); |
|
||||||
|
|
||||||
$runtime = new RuntimeMockup(); |
|
||||||
$runtime->setConfiguration(array( |
|
||||||
'environments' => |
|
||||||
array( |
|
||||||
'test' => |
|
||||||
array( |
|
||||||
'user' => 'tester', |
|
||||||
'branch' => 'test', |
|
||||||
'host_path' => '/var/www/test', |
|
||||||
'releases' => 4, |
|
||||||
'exclude' => |
|
||||||
array( |
|
||||||
0 => 'vendor', |
|
||||||
1 => 'app/cache', |
|
||||||
2 => 'app/log', |
|
||||||
3 => 'web/app_dev.php', |
|
||||||
), |
|
||||||
'hosts' => |
|
||||||
array( |
|
||||||
0 => 'testhost', |
|
||||||
), |
|
||||||
'pre-deploy' => |
|
||||||
array( |
|
||||||
0 => 'git/update', |
|
||||||
1 => 'composer/install', |
|
||||||
2 => 'composer/generate-autoload', |
|
||||||
), |
|
||||||
'on-deploy' => |
|
||||||
array( |
|
||||||
0 => 'deploy/rsync', |
|
||||||
), |
|
||||||
'on-release' => null, |
|
||||||
'post-release' => null, |
|
||||||
'post-deploy' => null, |
|
||||||
), |
|
||||||
), |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
$runtime->setReleaseId('20170101015120'); |
|
||||||
|
|
||||||
/** @var AbstractCommand $command */ |
|
||||||
$command = $application->find('deploy'); |
|
||||||
$command->setRuntime($runtime); |
|
||||||
|
|
||||||
$tester = new CommandTester($command); |
|
||||||
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
|
||||||
|
|
||||||
$ranCommands = $runtime->getRanCommands(); |
|
||||||
|
|
||||||
$testCase = array( |
|
||||||
0 => 'git branch | grep "*"', |
|
||||||
1 => 'git checkout test', |
|
||||||
2 => 'git pull', |
|
||||||
3 => 'composer install --dev', |
|
||||||
4 => 'composer dumpautoload --optimize', |
|
||||||
5 => 'tar cfz /tmp/mageXYZ --exclude=".git" --exclude="vendor" --exclude="app/cache" --exclude="app/log" --exclude="web/app_dev.php" ./', |
|
||||||
6 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"mkdir -p /var/www/test/releases/1234567890\\"', |
|
||||||
7 => 'scp -P 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /tmp/mageXYZ tester@testhost:/var/www/test/releases/1234567890/mageXYZ', |
|
||||||
8 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test/releases/1234567890 \\&\\& tar xfz mageXYZ\\"', |
|
||||||
9 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"rm /var/www/test/releases/1234567890/mageXYZ\\"', |
|
||||||
); |
|
||||||
|
|
||||||
// Check total of Executed Commands |
|
||||||
$this->assertEquals(count($testCase), count($ranCommands)); |
|
||||||
|
|
||||||
// Check Generated Commands |
|
||||||
foreach ($testCase as $index => $command) { |
|
||||||
$this->assertEquals($command, $ranCommands[$index]); |
|
||||||
} |
|
||||||
|
|
||||||
$this->assertTrue(strpos($tester->getDisplay(), 'ERROR') !== false); |
|
||||||
|
|
||||||
$this->assertNotEquals(0, $tester->getStatusCode()); |
|
||||||
} |
|
||||||
|
|
||||||
public function testDeploymentWithFailingPostDeployTaskCommands() |
|
||||||
{ |
|
||||||
$application = new MageTestApplication(); |
|
||||||
$application->add(new DeployCommand()); |
|
||||||
|
|
||||||
$runtime = new RuntimeMockup(); |
|
||||||
$runtime->setConfiguration(array( |
|
||||||
'environments' => |
|
||||||
array( |
|
||||||
'test' => |
|
||||||
array( |
|
||||||
'user' => 'tester', |
|
||||||
'branch' => 'test', |
|
||||||
'host_path' => '/var/www/test', |
|
||||||
'exclude' => |
|
||||||
array( |
|
||||||
0 => 'vendor', |
|
||||||
1 => 'app/cache', |
|
||||||
2 => 'app/log', |
|
||||||
3 => 'web/app_dev.php', |
|
||||||
), |
|
||||||
'hosts' => |
|
||||||
array( |
|
||||||
0 => 'testhost', |
|
||||||
), |
|
||||||
'pre-deploy' => |
|
||||||
array( |
|
||||||
0 => 'git/update', |
|
||||||
1 => 'composer/install', |
|
||||||
2 => 'composer/generate-autoload', |
|
||||||
), |
|
||||||
'on-deploy' => |
|
||||||
array( |
|
||||||
0 => 'deploy/rsync', |
|
||||||
), |
|
||||||
'on-release' => null, |
|
||||||
'post-release' => null, |
|
||||||
'post-deploy' => |
|
||||||
array( |
|
||||||
0 => 'deploy/targz/cleanup', |
|
||||||
), |
|
||||||
), |
|
||||||
), |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
/** @var AbstractCommand $command */ |
|
||||||
$command = $application->find('deploy'); |
|
||||||
$command->setRuntime($runtime); |
|
||||||
|
|
||||||
$tester = new CommandTester($command); |
|
||||||
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
|
||||||
|
|
||||||
$ranCommands = $runtime->getRanCommands(); |
|
||||||
|
|
||||||
$testCase = array( |
|
||||||
0 => 'git branch | grep "*"', |
|
||||||
1 => 'git checkout test', |
|
||||||
2 => 'git pull', |
|
||||||
3 => 'composer install --dev', |
|
||||||
4 => 'composer dumpautoload --optimize', |
|
||||||
5 => 'rsync -e "ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" -avz --exclude=.git --exclude=vendor --exclude=app/cache --exclude=app/log --exclude=web/app_dev.php ./ tester@testhost:/var/www/test', |
|
||||||
6 => 'git checkout master', |
|
||||||
); |
|
||||||
|
|
||||||
// Check total of Executed Commands |
|
||||||
$this->assertEquals(count($testCase), count($ranCommands)); |
|
||||||
|
|
||||||
// Check Generated Commands |
|
||||||
foreach ($testCase as $index => $command) { |
|
||||||
$this->assertEquals($command, $ranCommands[$index]); |
|
||||||
} |
|
||||||
|
|
||||||
$this->assertTrue(strpos($tester->getDisplay(), 'ERROR') !== false); |
|
||||||
|
|
||||||
$this->assertNotEquals(0, $tester->getStatusCode()); |
|
||||||
} |
|
||||||
|
|
||||||
public function testDeploymentWithoutReleasesCommands() |
|
||||||
{ |
|
||||||
$application = new MageTestApplication(); |
|
||||||
$application->add(new DeployCommand()); |
|
||||||
|
|
||||||
$runtime = new RuntimeMockup(); |
|
||||||
$runtime->setConfiguration(array( |
|
||||||
'environments' => |
|
||||||
array( |
|
||||||
'test' => |
|
||||||
array( |
|
||||||
'user' => 'tester', |
|
||||||
'branch' => 'test', |
|
||||||
'host_path' => '/var/www/test', |
|
||||||
'exclude' => |
|
||||||
array( |
|
||||||
0 => 'vendor', |
|
||||||
1 => 'app/cache', |
|
||||||
2 => 'app/log', |
|
||||||
3 => 'web/app_dev.php', |
|
||||||
), |
|
||||||
'hosts' => |
|
||||||
array( |
|
||||||
0 => 'testhost', |
|
||||||
), |
|
||||||
'pre-deploy' => |
|
||||||
array( |
|
||||||
0 => 'git/update', |
|
||||||
1 => 'composer/install', |
|
||||||
2 => 'composer/generate-autoload', |
|
||||||
), |
|
||||||
'on-deploy' => |
|
||||||
array( |
|
||||||
0 => |
|
||||||
array( |
|
||||||
'symfony/cache-clear' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
1 => |
|
||||||
array( |
|
||||||
'symfony/cache-warmup' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
2 => |
|
||||||
array( |
|
||||||
'symfony/assets-install' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
3 => |
|
||||||
array( |
|
||||||
'symfony/assetic-dump' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
), |
|
||||||
'on-release' => null, |
|
||||||
'post-release' => null, |
|
||||||
'post-deploy' => null, |
|
||||||
), |
|
||||||
), |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
/** @var AbstractCommand $command */ |
|
||||||
$command = $application->find('deploy'); |
|
||||||
$command->setRuntime($runtime); |
|
||||||
|
|
||||||
$tester = new CommandTester($command); |
|
||||||
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
|
||||||
|
|
||||||
$ranCommands = $runtime->getRanCommands(); |
|
||||||
|
|
||||||
$testCase = array( |
|
||||||
0 => 'git branch | grep "*"', |
|
||||||
1 => 'git checkout test', |
|
||||||
2 => 'git pull', |
|
||||||
3 => 'composer install --dev', |
|
||||||
4 => 'composer dumpautoload --optimize', |
|
||||||
5 => 'rsync -e "ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" -avz --exclude=.git --exclude=vendor --exclude=app/cache --exclude=app/log --exclude=web/app_dev.php ./ tester@testhost:/var/www/test', |
|
||||||
6 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console cache:clear --env=dev \\"', |
|
||||||
7 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console cache:warmup --env=dev \\"', |
|
||||||
8 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console assets:install --env=dev --symlink --relative web\\"', |
|
||||||
9 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console assetic:dump --env=dev \\"', |
|
||||||
10 => 'git checkout master', |
|
||||||
); |
|
||||||
|
|
||||||
// Check total of Executed Commands |
|
||||||
$this->assertEquals(count($testCase), count($ranCommands)); |
|
||||||
|
|
||||||
// Check Generated Commands |
|
||||||
foreach ($testCase as $index => $command) { |
|
||||||
$this->assertEquals($command, $ranCommands[$index]); |
|
||||||
} |
|
||||||
|
|
||||||
$this->assertEquals(0, $tester->getStatusCode()); |
|
||||||
} |
|
||||||
|
|
||||||
public function testDeploymentWithSudo() |
|
||||||
{ |
|
||||||
$application = new MageTestApplication(); |
|
||||||
$application->add(new DeployCommand()); |
|
||||||
|
|
||||||
$runtime = new RuntimeMockup(); |
|
||||||
$runtime->setConfiguration(array( |
|
||||||
'environments' => |
|
||||||
array( |
|
||||||
'test' => |
|
||||||
array( |
|
||||||
'user' => 'tester', |
|
||||||
'sudo' => true, |
|
||||||
'branch' => 'test', |
|
||||||
'host_path' => '/var/www/test', |
|
||||||
'exclude' => |
|
||||||
array( |
|
||||||
0 => 'vendor', |
|
||||||
1 => 'app/cache', |
|
||||||
2 => 'app/log', |
|
||||||
3 => 'web/app_dev.php', |
|
||||||
), |
|
||||||
'hosts' => |
|
||||||
array( |
|
||||||
0 => 'testhost', |
|
||||||
), |
|
||||||
'pre-deploy' => |
|
||||||
array( |
|
||||||
0 => 'git/update', |
|
||||||
1 => 'composer/install', |
|
||||||
2 => 'composer/generate-autoload', |
|
||||||
), |
|
||||||
'on-deploy' => |
|
||||||
array( |
|
||||||
0 => |
|
||||||
array( |
|
||||||
'symfony/cache-clear' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
1 => |
|
||||||
array( |
|
||||||
'symfony/cache-warmup' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
2 => |
|
||||||
array( |
|
||||||
'symfony/assets-install' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
3 => |
|
||||||
array( |
|
||||||
'symfony/assetic-dump' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
), |
|
||||||
'on-release' => null, |
|
||||||
'post-release' => null, |
|
||||||
'post-deploy' => null, |
|
||||||
), |
|
||||||
), |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
/** @var AbstractCommand $command */ |
|
||||||
$command = $application->find('deploy'); |
|
||||||
$command->setRuntime($runtime); |
|
||||||
|
|
||||||
$tester = new CommandTester($command); |
|
||||||
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
|
||||||
|
|
||||||
$ranCommands = $runtime->getRanCommands(); |
|
||||||
|
|
||||||
$testCase = array( |
|
||||||
0 => 'git branch | grep "*"', |
|
||||||
1 => 'git checkout test', |
|
||||||
2 => 'git pull', |
|
||||||
3 => 'composer install --dev', |
|
||||||
4 => 'composer dumpautoload --optimize', |
|
||||||
5 => 'rsync -e "ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" -avz --exclude=.git --exclude=vendor --exclude=app/cache --exclude=app/log --exclude=web/app_dev.php ./ tester@testhost:/var/www/test', |
|
||||||
6 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& sudo bin/console cache:clear --env=dev \\"', |
|
||||||
7 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& sudo bin/console cache:warmup --env=dev \\"', |
|
||||||
8 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& sudo bin/console assets:install --env=dev --symlink --relative web\\"', |
|
||||||
9 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& sudo bin/console assetic:dump --env=dev \\"', |
|
||||||
10 => 'git checkout master', |
|
||||||
); |
|
||||||
|
|
||||||
// Check total of Executed Commands |
|
||||||
$this->assertEquals(count($testCase), count($ranCommands)); |
|
||||||
|
|
||||||
// Check Generated Commands |
|
||||||
foreach ($testCase as $index => $command) { |
|
||||||
$this->assertEquals($command, $ranCommands[$index]); |
|
||||||
} |
|
||||||
|
|
||||||
$this->assertEquals(0, $tester->getStatusCode()); |
|
||||||
} |
|
||||||
|
|
||||||
public function testDeploymentWithBranchOverwrite() |
|
||||||
{ |
|
||||||
$application = new MageTestApplication(); |
|
||||||
$application->add(new DeployCommand()); |
|
||||||
|
|
||||||
$runtime = new RuntimeMockup(); |
|
||||||
$runtime->setConfiguration(array( |
|
||||||
'environments' => |
|
||||||
array( |
|
||||||
'test' => |
|
||||||
array( |
|
||||||
'user' => 'tester', |
|
||||||
'branch' => 'test', |
|
||||||
'host_path' => '/var/www/test', |
|
||||||
'exclude' => |
|
||||||
array( |
|
||||||
0 => 'vendor', |
|
||||||
1 => 'app/cache', |
|
||||||
2 => 'app/log', |
|
||||||
3 => 'web/app_dev.php', |
|
||||||
), |
|
||||||
'hosts' => |
|
||||||
array( |
|
||||||
0 => 'testhost', |
|
||||||
), |
|
||||||
'pre-deploy' => |
|
||||||
array( |
|
||||||
0 => 'git/update', |
|
||||||
1 => 'composer/install', |
|
||||||
2 => 'composer/generate-autoload', |
|
||||||
), |
|
||||||
'on-deploy' => |
|
||||||
array( |
|
||||||
0 => |
|
||||||
array( |
|
||||||
'symfony/cache-clear' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
1 => |
|
||||||
array( |
|
||||||
'symfony/cache-warmup' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
2 => |
|
||||||
array( |
|
||||||
'symfony/assets-install' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
3 => |
|
||||||
array( |
|
||||||
'symfony/assetic-dump' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
), |
|
||||||
'on-release' => null, |
|
||||||
'post-release' => null, |
|
||||||
'post-deploy' => null, |
|
||||||
), |
|
||||||
), |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
/** @var AbstractCommand $command */ |
|
||||||
$command = $application->find('deploy'); |
|
||||||
$command->setRuntime($runtime); |
|
||||||
|
|
||||||
$tester = new CommandTester($command); |
|
||||||
$tester->execute(['command' => $command->getName(), 'environment' => 'test', '--branch' => 'maintenance']); |
|
||||||
|
|
||||||
$ranCommands = $runtime->getRanCommands(); |
|
||||||
|
|
||||||
$testCase = array( |
|
||||||
0 => 'git branch | grep "*"', |
|
||||||
1 => 'git checkout maintenance', |
|
||||||
2 => 'git pull', |
|
||||||
3 => 'composer install --dev', |
|
||||||
4 => 'composer dumpautoload --optimize', |
|
||||||
5 => 'rsync -e "ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" -avz --exclude=.git --exclude=vendor --exclude=app/cache --exclude=app/log --exclude=web/app_dev.php ./ tester@testhost:/var/www/test', |
|
||||||
6 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console cache:clear --env=dev \\"', |
|
||||||
7 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console cache:warmup --env=dev \\"', |
|
||||||
8 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console assets:install --env=dev --symlink --relative web\\"', |
|
||||||
9 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console assetic:dump --env=dev \\"', |
|
||||||
10 => 'git checkout master', |
|
||||||
); |
|
||||||
|
|
||||||
// Check total of Executed Commands |
|
||||||
$this->assertEquals(count($testCase), count($ranCommands)); |
|
||||||
|
|
||||||
// Check Generated Commands |
|
||||||
foreach ($testCase as $index => $command) { |
|
||||||
$this->assertEquals($command, $ranCommands[$index]); |
|
||||||
} |
|
||||||
|
|
||||||
$this->assertEquals(0, $tester->getStatusCode()); |
|
||||||
} |
|
||||||
|
|
||||||
public function testDeploymentWithSkippingTask() |
|
||||||
{ |
|
||||||
$application = new MageTestApplication(); |
|
||||||
$application->add(new DeployCommand()); |
|
||||||
|
|
||||||
$runtime = new RuntimeMockup(); |
|
||||||
$runtime->setConfiguration(array( |
|
||||||
'environments' => |
|
||||||
array( |
|
||||||
'test' => |
|
||||||
array( |
|
||||||
'user' => 'tester', |
|
||||||
'host_path' => '/var/www/test', |
|
||||||
'branch' => 'master', |
|
||||||
'exclude' => |
|
||||||
array( |
|
||||||
0 => 'vendor', |
|
||||||
1 => 'app/cache', |
|
||||||
2 => 'app/log', |
|
||||||
3 => 'web/app_dev.php', |
|
||||||
), |
|
||||||
'hosts' => |
|
||||||
array( |
|
||||||
0 => 'testhost', |
|
||||||
), |
|
||||||
'pre-deploy' => |
|
||||||
array( |
|
||||||
0 => 'git/update', |
|
||||||
1 => 'composer/install', |
|
||||||
2 => 'composer/generate-autoload', |
|
||||||
), |
|
||||||
'on-deploy' => |
|
||||||
array( |
|
||||||
0 => |
|
||||||
array( |
|
||||||
'symfony/cache-clear' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
1 => |
|
||||||
array( |
|
||||||
'symfony/cache-warmup' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
2 => |
|
||||||
array( |
|
||||||
'symfony/assets-install' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
3 => |
|
||||||
array( |
|
||||||
'symfony/assetic-dump' => |
|
||||||
array( |
|
||||||
'env' => 'dev', |
|
||||||
), |
|
||||||
), |
|
||||||
), |
|
||||||
'on-release' => null, |
|
||||||
'post-release' => null, |
|
||||||
'post-deploy' => null, |
|
||||||
), |
|
||||||
), |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
/** @var AbstractCommand $command */ |
|
||||||
$command = $application->find('deploy'); |
|
||||||
$command->setRuntime($runtime); |
|
||||||
|
|
||||||
$tester = new CommandTester($command); |
|
||||||
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
|
||||||
|
|
||||||
$ranCommands = $runtime->getRanCommands(); |
|
||||||
|
|
||||||
$testCase = array( |
|
||||||
0 => 'git branch | grep "*"', |
|
||||||
1 => 'git pull', |
|
||||||
2 => 'composer install --dev', |
|
||||||
3 => 'composer dumpautoload --optimize', |
|
||||||
4 => 'rsync -e "ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" -avz --exclude=.git --exclude=vendor --exclude=app/cache --exclude=app/log --exclude=web/app_dev.php ./ tester@testhost:/var/www/test', |
|
||||||
5 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console cache:clear --env=dev \\"', |
|
||||||
6 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console cache:warmup --env=dev \\"', |
|
||||||
7 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console assets:install --env=dev --symlink --relative web\\"', |
|
||||||
8 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console assetic:dump --env=dev \\"', |
|
||||||
9 => 'git branch | grep "*"', |
|
||||||
); |
|
||||||
|
|
||||||
// Check total of Executed Commands |
|
||||||
$this->assertEquals(count($testCase), count($ranCommands)); |
|
||||||
|
|
||||||
// Check Generated Commands |
|
||||||
foreach ($testCase as $index => $command) { |
|
||||||
$this->assertEquals($command, $ranCommands[$index]); |
|
||||||
} |
|
||||||
|
|
||||||
$this->assertTrue(strpos($tester->getDisplay(), 'SKIPPED') !== false); |
|
||||||
|
|
||||||
$this->assertEquals(0, $tester->getStatusCode()); |
|
||||||
} |
|
||||||
|
|
||||||
public function testDeploymentWithCustomTask() |
|
||||||
{ |
|
||||||
$application = new MageTestApplication(); |
|
||||||
$application->add(new DeployCommand()); |
|
||||||
|
|
||||||
$runtime = new RuntimeMockup(); |
|
||||||
$runtime->setConfiguration(array( |
|
||||||
'environments' => |
|
||||||
array( |
|
||||||
'test' => |
|
||||||
array( |
|
||||||
'user' => 'tester', |
|
||||||
'host_path' => '/var/www/test', |
|
||||||
'exclude' => |
|
||||||
array( |
|
||||||
0 => 'vendor', |
|
||||||
1 => 'app/cache', |
|
||||||
2 => 'app/log', |
|
||||||
3 => 'web/app_dev.php', |
|
||||||
), |
|
||||||
'hosts' => |
|
||||||
array( |
|
||||||
0 => 'testhost', |
|
||||||
), |
|
||||||
'pre-deploy' => |
|
||||||
array( |
|
||||||
1 => 'composer/install', |
|
||||||
2 => 'composer/generate-autoload', |
|
||||||
), |
|
||||||
'on-deploy' => |
|
||||||
array( |
|
||||||
0 => 'Mage\\Tests\\Task\\CustomTask', |
|
||||||
), |
|
||||||
'on-release' => null, |
|
||||||
'post-release' => null, |
|
||||||
'post-deploy' => null, |
|
||||||
), |
|
||||||
), |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
/** @var AbstractCommand $command */ |
|
||||||
$command = $application->find('deploy'); |
|
||||||
$command->setRuntime($runtime); |
|
||||||
|
|
||||||
$tester = new CommandTester($command); |
|
||||||
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
|
||||||
|
|
||||||
$ranCommands = $runtime->getRanCommands(); |
|
||||||
|
|
||||||
$testCase = array( |
|
||||||
0 => 'composer install --dev', |
|
||||||
1 => 'composer dumpautoload --optimize', |
|
||||||
2 => 'rsync -e "ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" -avz --exclude=.git --exclude=vendor --exclude=app/cache --exclude=app/log --exclude=web/app_dev.php ./ tester@testhost:/var/www/test', |
|
||||||
); |
|
||||||
|
|
||||||
// Check total of Executed Commands |
|
||||||
$this->assertEquals(count($testCase), count($ranCommands)); |
|
||||||
|
|
||||||
// Check Generated Commands |
|
||||||
foreach ($testCase as $index => $command) { |
|
||||||
$this->assertEquals($command, $ranCommands[$index]); |
|
||||||
} |
|
||||||
|
|
||||||
$this->assertTrue(strpos($tester->getDisplay(), '[Custom] Dummy Task') !== false); |
|
||||||
|
|
||||||
$this->assertEquals(0, $tester->getStatusCode()); |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,71 @@ |
|||||||
|
<?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\Command\BuiltIn; |
||||||
|
|
||||||
|
use Mage\Command\BuiltIn\DeployCommand; |
||||||
|
use Mage\Command\AbstractCommand; |
||||||
|
use Mage\Tests\MageApplicationMockup; |
||||||
|
use Symfony\Component\Console\Tester\CommandTester; |
||||||
|
use PHPUnit_Framework_TestCase as TestCase; |
||||||
|
|
||||||
|
class DeployCommandWithReleasesTest extends TestCase |
||||||
|
{ |
||||||
|
public function testDeploymentWithReleasesCommands() |
||||||
|
{ |
||||||
|
$application = new MageApplicationMockup(); |
||||||
|
$application->configure(__DIR__ . '/../../Resources/testhost.yml'); |
||||||
|
|
||||||
|
$application->getRuntime()->setReleaseId('20170101015120'); |
||||||
|
|
||||||
|
/** @var AbstractCommand $command */ |
||||||
|
$command = $application->find('deploy'); |
||||||
|
$this->assertTrue($command instanceof DeployCommand); |
||||||
|
|
||||||
|
$tester = new CommandTester($command); |
||||||
|
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
||||||
|
|
||||||
|
$ranCommands = $application->getRuntime()->getRanCommands(); |
||||||
|
|
||||||
|
$testCase = array( |
||||||
|
0 => 'git branch | grep "*"', |
||||||
|
1 => 'git checkout test', |
||||||
|
2 => 'git pull', |
||||||
|
3 => 'composer install', |
||||||
|
4 => 'composer dumpautoload --optimize', |
||||||
|
5 => 'tar cfz /tmp/mageXYZ --exclude=".git" --exclude="./var/cache/*" --exclude="./var/log/*" --exclude="./web/app_dev.php" ./', |
||||||
|
6 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"mkdir -p /var/www/test/releases/1234567890\\"', |
||||||
|
7 => 'scp -P 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /tmp/mageXYZ tester@testhost:/var/www/test/releases/1234567890/mageXYZ', |
||||||
|
8 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test/releases/1234567890 \\&\\& tar xfz mageXYZ\\"', |
||||||
|
9 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"rm /var/www/test/releases/1234567890/mageXYZ\\"', |
||||||
|
10 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test/releases/1234567890 \\&\\& bin/console cache:warmup --env=dev \\"', |
||||||
|
11 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test/releases/1234567890 \\&\\& bin/console assets:install --env=dev --symlink --relative web\\"', |
||||||
|
12 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test/releases/1234567890 \\&\\& bin/console assetic:dump --env=dev \\"', |
||||||
|
13 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& ln -snf releases/1234567890 current\\"', |
||||||
|
14 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"ls -1 /var/www/test/releases\\"', |
||||||
|
15 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"rm -rf /var/www/test/releases/20170101015110\\"', |
||||||
|
16 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"rm -rf /var/www/test/releases/20170101015111\\"', |
||||||
|
17 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"rm -rf /var/www/test/releases/20170101015112\\"', |
||||||
|
18 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"rm -rf /var/www/test/releases/20170101015113\\"', |
||||||
|
19 => 'rm /tmp/mageXYZ', |
||||||
|
20 => 'git checkout master', |
||||||
|
); |
||||||
|
|
||||||
|
// Check total of Executed Commands |
||||||
|
$this->assertEquals(count($testCase), count($ranCommands)); |
||||||
|
|
||||||
|
// Check Generated Commands |
||||||
|
foreach ($testCase as $index => $command) { |
||||||
|
$this->assertEquals($command, $ranCommands[$index]); |
||||||
|
} |
||||||
|
|
||||||
|
$this->assertEquals(0, $tester->getStatusCode()); |
||||||
|
} |
||||||
|
} |
@ -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\Tests\Command\BuiltIn; |
||||||
|
|
||||||
|
use Mage\Command\BuiltIn\DeployCommand; |
||||||
|
use Mage\Command\AbstractCommand; |
||||||
|
use Mage\Tests\MageApplicationMockup; |
||||||
|
use Symfony\Component\Console\Tester\CommandTester; |
||||||
|
use PHPUnit_Framework_TestCase as TestCase; |
||||||
|
|
||||||
|
class DeployCommandWithoutReleasesTest extends TestCase |
||||||
|
{ |
||||||
|
public function testDeploymentWithoutReleasesCommands() |
||||||
|
{ |
||||||
|
$application = new MageApplicationMockup(); |
||||||
|
$application->configure(__DIR__ . '/../../Resources/testhost-without-releases.yml'); |
||||||
|
|
||||||
|
/** @var AbstractCommand $command */ |
||||||
|
$command = $application->find('deploy'); |
||||||
|
$this->assertTrue($command instanceof DeployCommand); |
||||||
|
|
||||||
|
$tester = new CommandTester($command); |
||||||
|
$tester->execute(['command' => $command->getName(), 'environment' => 'test']); |
||||||
|
|
||||||
|
$ranCommands = $application->getRuntime()->getRanCommands(); |
||||||
|
|
||||||
|
$testCase = array ( |
||||||
|
0 => 'git branch | grep "*"', |
||||||
|
1 => 'git checkout test', |
||||||
|
2 => 'git pull', |
||||||
|
3 => 'composer install', |
||||||
|
4 => 'composer dumpautoload --optimize', |
||||||
|
5 => 'rsync -e "ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" -avz --exclude=.git --exclude=./var/cache/* --exclude=./var/log/* --exclude=./web/app_dev.php ./ tester@testhost:/var/www/test', |
||||||
|
6 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console cache:warmup --env=dev \\"', |
||||||
|
7 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console assets:install --env=dev --symlink --relative web\\"', |
||||||
|
8 => 'ssh -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no tester@testhost sh -c \\"cd /var/www/test \\&\\& bin/console assetic:dump --env=dev \\"', |
||||||
|
9 => 'git checkout master', |
||||||
|
); |
||||||
|
|
||||||
|
// Check total of Executed Commands |
||||||
|
$this->assertEquals(count($testCase), count($ranCommands)); |
||||||
|
|
||||||
|
// Check Generated Commands |
||||||
|
foreach ($testCase as $index => $command) { |
||||||
|
$this->assertEquals($command, $ranCommands[$index]); |
||||||
|
} |
||||||
|
|
||||||
|
$this->assertEquals(0, $tester->getStatusCode()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
<?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; |
||||||
|
|
||||||
|
use Mage\Tests\Runtime\RuntimeMockup; |
||||||
|
use Mage\MageApplication; |
||||||
|
|
||||||
|
class MageApplicationMockup extends MageApplication |
||||||
|
{ |
||||||
|
/** |
||||||
|
* Gets the Runtime instance to use |
||||||
|
* |
||||||
|
* @return RuntimeMockup |
||||||
|
*/ |
||||||
|
protected function instantiateRuntime() |
||||||
|
{ |
||||||
|
return new RuntimeMockup(); |
||||||
|
} |
||||||
|
} |
@ -1,17 +0,0 @@ |
|||||||
<?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; |
|
||||||
|
|
||||||
use Symfony\Component\Console\Application; |
|
||||||
|
|
||||||
class MageTestApplication extends Application |
|
||||||
{ |
|
||||||
} |
|
@ -0,0 +1,20 @@ |
|||||||
|
magephp: |
||||||
|
log_dir: /tmp |
||||||
|
environments: |
||||||
|
test: |
||||||
|
user: tester |
||||||
|
host_path: /var/www/test |
||||||
|
exclude: |
||||||
|
- ./var/cache/* |
||||||
|
- ./var/log/* |
||||||
|
- ./web/app_dev.php |
||||||
|
hosts: |
||||||
|
- testhost |
||||||
|
pre-deploy: |
||||||
|
- composer/install |
||||||
|
- composer/generate-autoload |
||||||
|
on-deploy: |
||||||
|
- Mage\Tests\Task\CustomTask |
||||||
|
on-release: |
||||||
|
post-release: |
||||||
|
post-deploy: |
@ -0,0 +1,24 @@ |
|||||||
|
magephp: |
||||||
|
log_dir: /tmp |
||||||
|
environments: |
||||||
|
test: |
||||||
|
user: tester |
||||||
|
branch: master |
||||||
|
host_path: /var/www/test |
||||||
|
exclude: |
||||||
|
- ./var/cache/* |
||||||
|
- ./var/log/* |
||||||
|
- ./web/app_dev.php |
||||||
|
hosts: |
||||||
|
- testhost |
||||||
|
pre-deploy: |
||||||
|
- git/update |
||||||
|
- composer/install |
||||||
|
- composer/generate-autoload |
||||||
|
on-deploy: |
||||||
|
- symfony/cache-warmup: { env: 'dev' } |
||||||
|
- symfony/assets-install: { env: 'dev' } |
||||||
|
- symfony/assetic-dump: { env: 'dev' } |
||||||
|
on-release: |
||||||
|
post-release: |
||||||
|
post-deploy: |
@ -0,0 +1,25 @@ |
|||||||
|
magephp: |
||||||
|
log_dir: /tmp |
||||||
|
environments: |
||||||
|
test: |
||||||
|
user: tester |
||||||
|
branch: test |
||||||
|
host_path: /var/www/test |
||||||
|
sudo: true |
||||||
|
exclude: |
||||||
|
- ./var/cache/* |
||||||
|
- ./var/log/* |
||||||
|
- ./web/app_dev.php |
||||||
|
hosts: |
||||||
|
- testhost |
||||||
|
pre-deploy: |
||||||
|
- git/update |
||||||
|
- composer/install |
||||||
|
- composer/generate-autoload |
||||||
|
on-deploy: |
||||||
|
- symfony/cache-warmup: { env: 'dev' } |
||||||
|
- symfony/assets-install: { env: 'dev' } |
||||||
|
- symfony/assetic-dump: { env: 'dev' } |
||||||
|
on-release: |
||||||
|
post-release: |
||||||
|
post-deploy: |
@ -0,0 +1,23 @@ |
|||||||
|
magephp: |
||||||
|
log_dir: /tmp |
||||||
|
environments: |
||||||
|
test: |
||||||
|
user: tester |
||||||
|
branch: test |
||||||
|
host_path: /var/www/test |
||||||
|
releases: 4 |
||||||
|
exclude: |
||||||
|
- ./var/cache/* |
||||||
|
- ./var/log/* |
||||||
|
- ./web/app_dev.php |
||||||
|
hosts: |
||||||
|
- testhost |
||||||
|
pre-deploy: |
||||||
|
- git/update |
||||||
|
- composer/install |
||||||
|
- composer/generate-autoload |
||||||
|
on-deploy: |
||||||
|
- deploy/rsync |
||||||
|
on-release: |
||||||
|
post-release: |
||||||
|
post-deploy: |
@ -0,0 +1,23 @@ |
|||||||
|
magephp: |
||||||
|
log_dir: /tmp |
||||||
|
environments: |
||||||
|
test: |
||||||
|
user: tester |
||||||
|
branch: test |
||||||
|
host_path: /var/www/test |
||||||
|
exclude: |
||||||
|
- ./var/cache/* |
||||||
|
- ./var/log/* |
||||||
|
- ./web/app_dev.php |
||||||
|
hosts: |
||||||
|
- testhost |
||||||
|
pre-deploy: |
||||||
|
- git/update |
||||||
|
- composer/install |
||||||
|
- composer/generate-autoload |
||||||
|
on-deploy: |
||||||
|
- deploy/rsync |
||||||
|
on-release: |
||||||
|
post-release: |
||||||
|
post-deploy: |
||||||
|
- deploy/targz/cleanup |
@ -0,0 +1,24 @@ |
|||||||
|
magephp: |
||||||
|
log_dir: /tmp |
||||||
|
environments: |
||||||
|
test: |
||||||
|
user: tester |
||||||
|
branch: test |
||||||
|
host_path: /var/www/test |
||||||
|
exclude: |
||||||
|
- ./var/cache/* |
||||||
|
- ./var/log/* |
||||||
|
- ./web/app_dev.php |
||||||
|
hosts: |
||||||
|
- testhost |
||||||
|
pre-deploy: |
||||||
|
- git/update |
||||||
|
- composer/install |
||||||
|
- composer/generate-autoload |
||||||
|
on-deploy: |
||||||
|
- symfony/cache-warmup: { env: 'dev' } |
||||||
|
- symfony/assets-install: { env: 'dev' } |
||||||
|
- symfony/assetic-dump: { env: 'dev' } |
||||||
|
on-release: |
||||||
|
post-release: |
||||||
|
post-deploy: |
@ -0,0 +1,25 @@ |
|||||||
|
magephp: |
||||||
|
log_dir: /tmp |
||||||
|
environments: |
||||||
|
test: |
||||||
|
user: tester |
||||||
|
branch: test |
||||||
|
host_path: /var/www/test |
||||||
|
releases: 4 |
||||||
|
exclude: |
||||||
|
- ./var/cache/* |
||||||
|
- ./var/log/* |
||||||
|
- ./web/app_dev.php |
||||||
|
hosts: |
||||||
|
- testhost |
||||||
|
pre-deploy: |
||||||
|
- git/update |
||||||
|
- composer/install |
||||||
|
- composer/generate-autoload |
||||||
|
on-deploy: |
||||||
|
- symfony/cache-warmup: { env: 'dev' } |
||||||
|
- symfony/assets-install: { env: 'dev' } |
||||||
|
- symfony/assetic-dump: { env: 'dev' } |
||||||
|
on-release: |
||||||
|
post-release: |
||||||
|
post-deploy: |
Loading…
Reference in new issue