Example #1
0
 public static function connectToAws($host, $pemFile)
 {
     $key = new Crypt_RSA();
     $key->loadKey(file_get_contents($pemFile));
     $ssh = new Ssh($host);
     if (!$ssh->login('ubuntu', $key)) {
         $error = error_get_last();
         throw new \RuntimeException("Login to {$host} using {$pemFile} failed: " . $error['message']);
     }
     return $ssh;
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $testSuite = $this->getTestSuite($input);
     $arguments = $input->getArgument('arguments');
     $patchFile = $this->getPatchFile($input);
     $launchOnly = $input->getOption('launch-only');
     $updateOnly = $input->getOption('update-only');
     $gitHash = $input->getOption('checkout');
     $perTestsuite = $input->getOption('one-instance-per-testsuite');
     if (empty($testSuite) && empty($launchOnly) && empty($updateOnly)) {
         throw new \InvalidArgumentException('Either provide a testsuite argument or define <comment>--launch-only</comment> or <comment>--update-only</comment>');
     }
     $awsConfig = new Config();
     $awsConfig->validate();
     $host = $this->launchInstance($output, $perTestsuite, $awsConfig, $testSuite);
     if ($launchOnly) {
         return 0;
     }
     $ssh = Ssh::connectToAws($host, $awsConfig->getPemFile());
     $ssh->setOutput($output);
     $testRunner = new Remote($ssh);
     $testRunner->updatePiwik($gitHash);
     $testRunner->replaceConfigIni(PIWIK_INCLUDE_PATH . '/plugins/TestRunner/Aws/config.ini.php');
     if (!empty($patchFile)) {
         $testRunner->applyPatch($patchFile);
     }
     if ($updateOnly) {
         $ssh->disconnect();
         return 0;
     }
     $testRunner->runTests($host, $testSuite, $arguments);
     $message = $this->buildFinishedMessage($testSuite, $host);
     $output->writeln("\n{$message}\n");
     $ssh->disconnect();
 }