/** * {@inheritDoc} * * Starts the connection */ public function _reconfigure($config = array()) { parent::_reconfigure($config); if (!isset($this->config['username'])) { throw new \Exception("Sauce Connect Extension requires a username."); } if (!isset($this->config['accesskey'])) { throw new \Exception("Sauce Connect Extension requires a accesskey."); } $connect = __DIR__ . '/../../../bin/sauce_connect'; if (!file_exists($connect)) { $connect = __DIR__ . '/../../../../bin/sauce_connect'; } if (!file_exists($connect)) { throw new \Exception("Couldnt find the bin directory... Make sure its in ./bin or ./vendor/bin/"); } $processBuilder = new ProcessBuilder([$connect]); $processBuilder->addEnvironmentVariables(['SAUCE_USERNAME' => $this->config['username'], 'SAUCE_ACCESS_KEY' => $this->config['accesskey']]); $timeout = isset($this->config['timeout']) ? $this->config['timeout'] : 60; $this->process = $processBuilder->getProcess(); $this->process->setTimeout(0); $this->process->start(function ($type, $buffer) { $buffer = explode("\n", $buffer); foreach ($buffer as $line) { if (strpos($line, 'Press any key to see more output') === false) { file_put_contents(codecept_output_dir() . 'sauce_connect.log', $line . "\n", FILE_APPEND); } } }); $timer = 0; $connected = false; $this->writeln(["", "----------------------------------------------------------------------------", "Attempting to connect to SauceLabs. Waiting {$timeout} seconds."]); while ($this->process->isRunning() && $timer < $timeout) { $output = $this->process->getOutput(); if (strpos($output, 'Connected! You may start your tests.') !== false) { $connected = true; break; } sleep(1); $timer++; if ($timer % 5 === 0) { $this->write('.'); } } if (false === $connected) { $this->process->stop(); throw new \Exception(sprintf("Could not start tunnel. Check %ssauce_connect.log for more information.", codecept_output_dir())); } $this->writeln(["", "Connected to SauceLabs", "----------------------------------------------------------------------------", ""]); }