-
Bug
-
Resolution: Fixed
-
Minor
-
2.9.3
-
MOODLE_29_STABLE
-
MOODLE_29_STABLE, MOODLE_30_STABLE
-
MDL-52913_master -
If a behat step is executed, and throws an exception inside a database transaction, the next scenario will timeout while trying to load the behat site. The following error is output:
[Guzzle\Http\Exception\CurlException]
|
Exception has been thrown in "beforeScenario" hook, defined in behat_hooks::before_scenario()
|
[curl] 28: Operation timed out after 30514 milliseconds with 29750 bytes received [url] http://127.0.0.1/ou-moodle2/
|
|
behat [--init] [-f|--format="..."] [--out="..."] [--lang="..."] [--[no-]ansi] [--[no-]time] [--[no-]paths] [--[no-]snippets] [--[no-]snippets-paths] [--[no-]multiline] [--[no-]expand] [--story-syntax] [-d|--definitions="..."] [--name="..."] [--tags="..."] [--cache="..."] [--strict] [--dry-run] [--stop-on-failure] [--rerun="..."] [--append-snippets] [--append-to="..."] [features]
|
|
|
Potential coding error - active database transaction detected during request shutdown:
|
* line 13 of \lib\tests\behat\behat_broken.php: call to moodle_database->start_delegated_transaction()
|
* line ? of unknownfile: call to behat_broken->i_throw_an_exception_within_a_database_transaction()
|
* line 155 of \vendor\behat\behat\src\Behat\Behat\Definition\Annotation\Definition.php: call to call_user_func_array()
|
* line 239 of \vendor\moodlehq\behat-extension\src\Moodle\BehatExtension\Tester\MoodleStepTester.php: call to Behat\Behat\Definition\Annotation\Definition->run()
|
* line 126 of \vendor\behat\behat\src\Behat\Behat\Tester\StepTester.php: call to Moodle\BehatExtension\Tester\MoodleStepTester->executeStepDefinition()
|
* line 177 of \vendor\moodlehq\behat-extension\src\Moodle\BehatExtension\Tester\MoodleStepTester.php: call to Behat\Behat\Tester\StepTester->executeStep()
|
* line 153 of \vendor\moodlehq\behat-extension\src\Moodle\BehatExtension\Tester\MoodleStepTester.php: call to Moodle\BehatExtension\Tester\MoodleStepTester->executeStep()
|
* line 42 of \vendor\behat\gherkin\src\Behat\Gherkin\Node\AbstractNode.php: call to Moodle\BehatExtension\Tester\MoodleStepTester->visit()
|
* line 76 of \vendor\moodlehq\behat-extension\src\Moodle\BehatExtension\Tester\MoodleScenarioTester.php: call to Behat\Gherkin\Node\AbstractNode->accept()
|
* line 87 of \vendor\behat\behat\src\Behat\Behat\Tester\ScenarioTester.php: call to Moodle\BehatExtension\Tester\MoodleScenarioTester->visitStep()
|
* line 42 of \vendor\behat\gherkin\src\Behat\Gherkin\Node\AbstractNode.php: call to Behat\Behat\Tester\ScenarioTester->visit()
|
* line 88 of \vendor\behat\behat\src\Behat\Behat\Tester\FeatureTester.php: call to Behat\Gherkin\Node\AbstractNode->accept()
|
* line 42 of \vendor\behat\gherkin\src\Behat\Gherkin\Node\AbstractNode.php: call to Behat\Behat\Tester\FeatureTester->visit()
|
* line 150 of \vendor\behat\behat\src\Behat\Behat\Console\Command\BehatCommand.php: call to Behat\Gherkin\Node\AbstractNode->accept()
|
* line 128 of \vendor\behat\behat\src\Behat\Behat\Console\Command\BehatCommand.php: call to Behat\Behat\Console\Command\BehatCommand->runFeatures()
|
* line 241 of \vendor\symfony\symfony\src\Symfony\Component\Console\Command\Command.php: call to Behat\Behat\Console\Command\BehatCommand->execute()
|
* line 887 of \vendor\symfony\symfony\src\Symfony\Component\Console\Application.php: call to Symfony\Component\Console\Command\Command->run()
|
* line 191 of \vendor\symfony\symfony\src\Symfony\Component\Console\Application.php: call to Symfony\Component\Console\Application->doRunCommand()
|
* line 68 of \vendor\behat\behat\src\Behat\Behat\Console\BehatApplication.php: call to Symfony\Component\Console\Application->doRun()
|
* line 121 of \vendor\symfony\symfony\src\Symfony\Component\Console\Application.php: call to Behat\Behat\Console\BehatApplication->doRun()
|
* line 32 of \vendor\behat\behat\bin\behat: call to Symfony\Component\Console\Application->run()
|
This happens because when the exception is caught by behat, the active database transactions are not closed.
Full steps to reproduce
- Place the attached behat_broken.php and broken.feature in lib/tests/behat
- Update your behat site
- Run the following command: vendor/bin/behat --config path/to/behat.yml --tags=broken_no_transaction,core /path/to/moodle/lib/tests/behat
- This will run action_menu.feature, one scenario from broken.feature and timezone.feature. action_menu.feature will complete, broken.feature will fail with a coding_exception, then timezone.feature will run.
- Now run the following command: vendor/bin/behat --config path/to/behat.yml --tags=broken_transaction,core /path/to/moodle/lib/tests/behat
- This will run the same files, but use a different scenario in broken.feature. action_menu.feature will complete, broken.feature will fail, then timezone.feature will hang. However, this should behave the same way as the previous command.