MDL-52913 behat: Abort database transactions on exception.
authorMark Johnson <mark.johnson@open.ac.uk>
Thu, 28 Jan 2016 09:52:27 +0000 (09:52 +0000)
committerMark Johnson <mark.johnson@open.ac.uk>
Fri, 29 Jan 2016 11:54:56 +0000 (11:54 +0000)
lib/tests/behat/behat_hooks.php

index 78ea809..9a17b23 100644 (file)
@@ -375,13 +375,22 @@ class behat_hooks extends behat_base {
      * @AfterStep
      */
     public function after_step(StepEvent $event) {
-        global $CFG;
+        global $CFG, $DB;
 
         // Save the page content if the step failed.
         if (!empty($CFG->behat_faildump_path) &&
                 $event->getResult() === StepEvent::FAILED) {
             $this->take_contentdump($event);
         }
+
+        // Abort any open transactions to prevent subsequent tests hanging.
+        // This does the same as abort_all_db_transactions(), but doesn't call error_log() as we don't
+        // want to see a message in the behat output.
+        if ($event->hasException()) {
+            if ($DB && $DB->is_transaction_started()) {
+                $DB->force_transaction_rollback();
+            }
+        }
     }
 
     /**