DrumkitContext::exec() fatal error with newer Symfony Process component
Edit: appears this is very out of date due to Aegir using a much older commit and has been fixed in #121 by switching to consensus/behat-terminal-context
and its Consensus\BehatTerminalContext\Context\TerminalContext
so will apply a band-aid fix and postpone this in favour of Aegir updating to a newer Drumkit later down the line.
While trying to run make tests
for aegir/aegir#173 (closed) I ran into this fatal error caused by DrumkitContext::exec()
:
[info] Drush bootstrap phase: bootstrapDrupalRoot()
[info] Change working directory to /var/www/html/web
[info] Initialized Drupal 10.2.0 root directory at /var/www/html/web
[info] Drush bootstrap phase: bootstrapDrupalSite()
[info] Initialized Drupal site aegir.ddev.site at sites/aegir.ddev.site
[info] Drush bootstrap phase: bootstrapDrupalConfiguration()
[info] Drush bootstrap phase: bootstrapDrupalDatabase()
[info] Successfully connected to the Drupal database.
[info] Drush bootstrap phase: bootstrapDrupalFull()
[info] Starting bootstrap to none
[info] Drush bootstrap phase 0
[info] Try to validate bootstrap phase 0
[notice] Already enabled: aegir_input_command_test, aegir_log_command_test
Feature: Add admin menu
In order to develop new features effectively,
as a developer,
I want to be able to efficiently navigate Drupal configuration settings.
@api
Scenario: Only administrators should have access to the admin menu. # features/admin_menu.feature:7
Given I am not logged in # AegirDrupalContext::assertAnonymousUser()
When I am on the homepage # Drupal\DrupalExtension\Context\MinkContext::iAmOnHomepage()
Then I should not see the link "Manage" # Drupal\DrupalExtension\Context\MinkContext::assertNotLinkVisible()
Given I am logged in as an "Authenticated user" # AegirDrupalContext::assertAuthenticatedByRole()
Then I should not see the link "Manage" # Drupal\DrupalExtension\Context\MinkContext::assertNotLinkVisible()
Given I am logged in as an "Administrator" # AegirDrupalContext::assertAuthenticatedByRole()
Then I should see the link "Manage" # Drupal\DrupalExtension\Context\MinkContext::assertLinkVisible()
Feature: Base settings and configuration
In order to deploy a complete Ægir system
as an Administrator,
I want to be able to enable a set of default functionality and configuration on install
TypeError: Symfony\Component\Process\Process::__construct(): Argument #1 ($command) must be of type array, string given, called in /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php on line 76 in /var/www/html/vendor/symfony/process/Process.php on line 143 #0 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(76): Symfony\Component\Process\Process->__construct('bash -c "rm -rf...')
#1 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(93): Drumkit\DrumkitContext->exec('rm -rf ')
#2 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(157): Drumkit\DrumkitContext->succeed('rm -rf ')
#3 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(127): Drumkit\DrumkitContext->iRun('rm -rf ')
#4 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(44): Drumkit\DrumkitContext->rmdir(NULL)
#5 /var/www/html/vendor/drupal/drupal-extension/src/Drupal/DrupalDriverManager.php(114): Drumkit\DrumkitContext->__destruct()
#6 /var/www/html/vendor/drupal/drupal-extension/src/Drupal/DrupalExtension/Listener/DriverListener.php(81): Drupal\DrupalDriverManager->setEnvironment(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment))
#7 /var/www/html/vendor/symfony/event-dispatcher/EventDispatcher.php(220): Drupal\DrupalExtension\Listener\DriverListener->prepareDefaultDrupalDriver(Object(Behat\Behat\EventDispatcher\Event\BeforeScenarioTested), 'tester.scenario...', Object(Behat\Testwork\EventDispatcher\TestworkEventDispatcher))
#8 /var/www/html/vendor/symfony/event-dispatcher/EventDispatcher.php(56): Symfony\Component\EventDispatcher\EventDispatcher->callListeners(Array, 'tester.scenario...', Object(Behat\Behat\EventDispatcher\Event\BeforeScenarioTested))
#9 /var/www/html/vendor/behat/behat/src/Behat/Testwork/EventDispatcher/TestworkEventDispatcher.php(64): Symfony\Component\EventDispatcher\EventDispatcher->dispatch(Object(Behat\Behat\EventDispatcher\Event\BeforeScenarioTested), 'tester.scenario...')
#10 /var/www/html/vendor/behat/behat/src/Behat/Testwork/EventDispatcher/TestworkEventDispatcher.php(48): Behat\Testwork\EventDispatcher\TestworkEventDispatcher->bcAwareDispatch(Object(Behat\Behat\EventDispatcher\Event\BeforeScenarioTested), 'tester.scenario...')
#11 /var/www/html/vendor/behat/behat/src/Behat/Behat/EventDispatcher/Tester/EventDispatchingScenarioTester.php(90): Behat\Testwork\EventDispatcher\TestworkEventDispatcher->dispatch(Object(Behat\Behat\EventDispatcher\Event\BeforeScenarioTested), 'tester.scenario...')
#12 /var/www/html/vendor/behat/behat/src/Behat/Behat/Tester/Runtime/IsolatingScenarioTester.php(67): Behat\Behat\EventDispatcher\Tester\EventDispatchingScenarioTester->setUp(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
#13 /var/www/html/vendor/behat/behat/src/Behat/Behat/Tester/Runtime/RuntimeFeatureTester.php(84): Behat\Behat\Tester\Runtime\IsolatingScenarioTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
#14 /var/www/html/vendor/behat/behat/src/Behat/Behat/Hook/Tester/HookableFeatureTester.php(72): Behat\Behat\Tester\Runtime\RuntimeFeatureTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), false)
#15 /var/www/html/vendor/behat/behat/src/Behat/Behat/EventDispatcher/Tester/EventDispatchingFeatureTester.php(74): Behat\Behat\Hook\Tester\HookableFeatureTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), false)
#16 /var/www/html/vendor/behat/behat/src/Behat/Testwork/Tester/Runtime/RuntimeSuiteTester.php(63): Behat\Behat\EventDispatcher\Tester\EventDispatchingFeatureTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), false)
#17 /var/www/html/vendor/behat/behat/src/Behat/Testwork/Hook/Tester/HookableSuiteTester.php(73): Behat\Testwork\Tester\Runtime\RuntimeSuiteTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Testwork\Specification\GroupedSpecificationIterator), false)
#18 /var/www/html/vendor/behat/behat/src/Behat/Testwork/EventDispatcher/Tester/EventDispatchingSuiteTester.php(75): Behat\Testwork\Hook\Tester\HookableSuiteTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Testwork\Specification\GroupedSpecificationIterator), false)
#19 /var/www/html/vendor/behat/behat/src/Behat/Testwork/Tester/Runtime/RuntimeExercise.php(71): Behat\Testwork\EventDispatcher\Tester\EventDispatchingSuiteTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Testwork\Specification\GroupedSpecificationIterator), false)
#20 /var/www/html/vendor/behat/behat/src/Behat/Testwork/EventDispatcher/Tester/EventDispatchingExercise.php(73): Behat\Testwork\Tester\Runtime\RuntimeExercise->test(Array, false)
#21 /var/www/html/vendor/behat/behat/src/Behat/Testwork/Ordering/OrderedExercise.php(80): Behat\Testwork\EventDispatcher\Tester\EventDispatchingExercise->test(Array, false)
#22 /var/www/html/vendor/behat/behat/src/Behat/Testwork/Tester/Cli/ExerciseController.php(149): Behat\Testwork\Ordering\OrderedExercise->test(Array, false)
#23 /var/www/html/vendor/behat/behat/src/Behat/Testwork/Tester/Cli/ExerciseController.php(108): Behat\Testwork\Tester\Cli\ExerciseController->testSpecifications(Object(Symfony\Component\Console\Input\ArgvInput), Array)
#24 /var/www/html/vendor/behat/behat/src/Behat/Testwork/Cli/Command.php(63): Behat\Testwork\Tester\Cli\ExerciseController->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#25 /var/www/html/vendor/symfony/console/Command/Command.php(326): Behat\Testwork\Cli\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#26 /var/www/html/vendor/symfony/console/Application.php(1078): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#27 /var/www/html/vendor/symfony/console/Application.php(324): Symfony\Component\Console\Application->doRunCommand(Object(Behat\Testwork\Cli\Command), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#28 /var/www/html/vendor/behat/behat/src/Behat/Testwork/Cli/Application.php(124): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#29 /var/www/html/vendor/symfony/console/Application.php(175): Behat\Testwork\Cli\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#30 /var/www/html/vendor/behat/behat/bin/behat(34): Symfony\Component\Console\Application->run()
#31 /var/www/html/bin/behat(119): include('/var/www/html/v...')
#32 {main}
TypeError: Symfony\Component\Process\Process::__construct(): Argument #1 ($command) must be of type array, string given, called in /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php on line 76 in Symfony\Component\Process\Process->__construct() (line 143 of /var/www/html/vendor/symfony/process/Process.php).
PHP Fatal error: Uncaught TypeError: Symfony\Component\Process\Process::__construct(): Argument #1 ($command) must be of type array, string given, called in /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php on line 76 and defined in /var/www/html/vendor/symfony/process/Process.php:143
Stack trace:
#0 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(76): Symfony\Component\Process\Process->__construct('bash -c "rm -rf...')
#1 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(93): Drumkit\DrumkitContext->exec('rm -rf ')
#2 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(157): Drumkit\DrumkitContext->succeed('rm -rf ')
#3 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(127): Drumkit\DrumkitContext->iRun('rm -rf ')
#4 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(44): Drumkit\DrumkitContext->rmdir(NULL)
#5 [internal function]: Drumkit\DrumkitContext->__destruct()
#6 {main}
thrown in /var/www/html/vendor/symfony/process/Process.php on line 143
Fatal error: Uncaught TypeError: Symfony\Component\Process\Process::__construct(): Argument #1 ($command) must be of type array, string given, called in /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php on line 76 and defined in /var/www/html/vendor/symfony/process/Process.php:143
Stack trace:
#0 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(76): Symfony\Component\Process\Process->__construct('bash -c "rm -rf...')
#1 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(93): Drumkit\DrumkitContext->exec('rm -rf ')
#2 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(157): Drumkit\DrumkitContext->succeed('rm -rf ')
#3 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(127): Drumkit\DrumkitContext->iRun('rm -rf ')
#4 /var/www/html/.mk/features/bootstrap/Drumkit/DrumkitContext.php(44): Drumkit\DrumkitContext->rmdir(NULL)
#5 [internal function]: Drumkit\DrumkitContext->__destruct()
#6 {main}
thrown in /var/www/html/vendor/symfony/process/Process.php on line 143
Failed to run behat --suite=default: exit status 255
make: *** [drumkit/mk.d/60_test.mk:8: run-behat] Error 1
It looks like at some point symfony/process
started requiring an array for the constructor's first parameter, meaning that the current
$this->process = new Process("bash -c \"{$command}\"");
is what's throw the error. If we want to keep passing a single string, this seems to work:
$this->process = Process::fromShellCommandline("bash -c \"{$command}\"");
See Using Features From the OS Shell. We could also try and split into any array, but these are the only ones I could get to work (without the escaped quotes):
this->process = new Process(["bash", "-c", "$command"]);
$this->process = new Process(['bash', '-c', $command]);
so that might fail if we're expecting $command
to be output in quotes, though it's possible the Process component wraps it in quotes for us (haven't checked) so that's worth investigating.