follow up to #2830882: Introduce Drupal.offCanvas, mirrored after Drupal.dialog, to avoid Settings Tray using Drupal.Dialog in unintended ways

We tried to fix random fails with #2901626: CSS animations cause \Drupal\Tests\outside_in\FunctionalJavascript\OutsideInBlockFormTest random fails

But #2830882-99: Introduce Drupal.offCanvas, mirrored after Drupal.dialog, to avoid Settings Tray using Drupal.Dialog in unintended ways seems to prove that even with the animation fix this random failure could still happen

We need to determine a fix.

Is it a code problem in \Drupal\Tests\settings_tray\FunctionalJavascript\SettingsTrayBlockFormTest::testBlocks maybe we aren't waiting for some event that usually happens quick enough we don't have to wait?

Or maybe it is actually a DrupalCI infrastructure problem that will never be able to be fixed with a test code fix

CommentFileSizeAuthor
#40 interdiff-patches-37-40.txt7.89 KBAnonymous (not verified)
#40 2902191-40-no_whitespace.txt6.62 KBAnonymous (not verified)
#40 2902191-40.patch14.88 KBAnonymous (not verified)
#37 interdiff-patches-31-37.txt2.98 KBAnonymous (not verified)
#37 2902191-37-no_whitespace.txt6.56 KBAnonymous (not verified)
#37 2902191-37.patch14.78 KBAnonymous (not verified)
#31 2902191-31.patch14.78 KBtedbow
#31 interdiff-27-31.txt2.46 KBtedbow
#27 2902191-27-no_whitespace.diff6.54 KBtedbow
#27 2902191-27.patch14.76 KBtedbow
#23 interdiff-21-23.txt831 bytesAnonymous (not verified)
#23 2902191-23.patch12.62 KBAnonymous (not verified)
#21 2902191-21.patch12.63 KBtedbow
#21 interdiff-15-21.txt1.89 KBtedbow
#18 interdiff-14-w.txt5.27 KBAnonymous (not verified)
#15 2902191-14-no_whitespace.txt5.28 KBtedbow
#14 2902191-14-slow_drupal.patch13.2 KBtedbow
#14 2902191-14.patch12.35 KBtedbow
#13 2902191-slow_drupal_13.patch13.66 KBtedbow
#13 interdiff-12-13.txt3.1 KBtedbow
#12 2902191-12-no_whitespace.txt3.01 KBtedbow
#12 2902191-12-slow_drupal-no_loop.patch11.39 KBtedbow
#11 2902191-10-slow-random_site_name.patch4.69 KBtedbow
#9 2902191-9-slow_drupal_with_fix-FAIL.patch3.98 KBtedbow
#9 interdiff-6-9.txt1.29 KBtedbow
#6 interdiff-2902191-5-6.txt878 bytestedbow
#6 2902191-6-slow_drupal_with_fix.patch4.01 KBtedbow
#6 2902191-6-slow_drupal_no_fix.patch878 bytestedbow
#5 2902191-5-x30.patch3.71 KBtedbow
#5 2902191-5.patch3.16 KBtedbow
#4 2902191-1-no_real_changes-4.patch932 bytesxjm
#2 2902191-1-revert-2830882.patch24.21 KBtedbow
#2 2902191-1-no_real_changes.patch2.87 KBtedbow

Comments

tedbow created an issue. See original summary.

tedbow’s picture

Status: Active » Needs review
StatusFileSize
new2.87 KB
new24.21 KB

Ok here is test to see if #2830882: Introduce Drupal.offCanvas, mirrored after Drupal.dialog, to avoid Settings Tray using Drupal.Dialog in unintended ways cause the random failure.

2 patches that will run \Drupal\Tests\outside_in\FunctionalJavascript\OutsideInBlockFormTest::testBlocks() only 30x. 1 reverts #2830882 also

xjm’s picture

+++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php
@@ -251,7 +251,7 @@ protected function openBlockForm($block_selector, $contextual_link_container = '
-  public function testQuickEditLinks() {
+  public function xtestQuickEditLinks() {

@@ -335,7 +335,7 @@ public function testQuickEditLinks() {
-  public function testEditModeEnableDisable() {
+  public function xtestEditModeEnableDisable() {

@@ -468,7 +468,7 @@ protected function createBlockContentType($label, $create_body = FALSE) {
-  public function testCustomBlockLinks() {
+  public function xtestCustomBlockLinks() {

I wouldn't do this because it actually could affect the test passing or failing when files weren't successfully cleaned up, etc.

This did fail again overnight: https://www.drupal.org/pift-ci-job/739411 Although that commit hash is before the critical was committed.

xjm’s picture

StatusFileSize
new932 bytes
tedbow’s picture

StatusFileSize
new3.16 KB
new3.71 KB

I think I might have found the random fail point

 if (isset($new_page_text)) {
        $page->pressButton($button_text);
        // Make sure the changes are present.
        $new_page_text_locator = "$block_selector $label_selector:contains($new_page_text)";
        $this->assertElementVisibleAfterWait('css', $new_page_text_locator);
        // The page is loaded with the new change but make sure page is
        // completely loaded.
        $this->assertPageLoadComplete();
      }

The new part is assertPageLoadComplete(). Basically it makes sure all contextual links have been loaded.
I think what was happening:

  1. $page->pressButton($button_text); Submitted the form which did an ajax submit and ajax redirect
  2. $this->assertElementVisibleAfterWait('css', $new_page_text_locator); assert the page was redirected. But it is possible the page was not completely ready. Contextual links could have not finished loading. Because when the page gets loaded the [data-contextual-id] elements are empty and then contextual js loads the links either through ajax call or local storage.

So we need to actually wait for all contextual links to be loaded.

I also added assertPageLoadComplete to the overridden version of drupalGet() because this should happen everytime the page is loaded not just redirects.

But also added

 // If setup() is complete then all all page loads need extra checks.
    if ($this->setupComplete) {
      $this->assertPageLoadComplete();;
    }

Because in setup() when logging in this won't be true.

tedbow’s picture

I was going to try to figure out how I could emulate slow testbots to make the random error happen all the time which I think would prove the fix.

But then I realized the slow testbots could just slowing down Drupal response which cause this error.

So these 2 patches simply add a .25 second sleep to index.php.

I am not running the whole test suite because I just want to prove the .25 second pause will make HEAD fail consistently on OutsideInBlockFormTest and that the fix in #5 passes even with the pause.

This is behavior I am seeing locally when I run these tests.

So 1 patch has the fix and1 doesn't. Running OutsideInBlockFormTest 5x.

The last submitted patch, 6: 2902191-6-slow_drupal_no_fix.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

GrandmaGlassesRopeMan’s picture

Status: Needs review » Needs work
  1. +++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
    @@ -9,17 +9,40 @@
    +    $this->getSession()->wait(500);
    

    Do we still need this?

  2. +++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
    @@ -72,6 +95,7 @@ protected function getTray() {
    +    $this->assertJsCondition("window.hasOwnProperty('jQuery')", 1000);
    

    Curious if you can just use window.jQuery

tedbow’s picture

Status: Needs work » Needs review
StatusFileSize
new1.29 KB
new3.98 KB

1. 😱 Actually leaving that there was mistake and actually my patch fails without it. So the contextual links aren't the problem but I think they should be added to the final patch because I still see them as a possible cause for random failure. I will remove this from the next patch just to prove the other fix that will come fixes it without it though.

2. I think that will not work it the JS condition needs to return a TRUE.

Status: Needs review » Needs work

The last submitted patch, 9: 2902191-9-slow_drupal_with_fix-FAIL.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

tedbow’s picture

Status: Needs work » Needs review
StatusFileSize
new4.69 KB

After fixing #8.1 I looked for another possible problem.

Looking that error was happening in the random fails and with patch 2902191-6-slow_drupal_no_fix.patch I realized that OutsideInBlockFormTest::testBlocks() actually loops through all core themes except Seven and I didn't know which theme was causing the error. @see

foreach ($this->getTestThemes() as $theme) {
    $this->enableTheme($theme);

So put a simple print $theme line in the test locally to determine which theme was breaking it. It turned out to be Stark.

But then I tried

foreach (['stark', 'bartik'] as $theme) {

And then it failed on Bartik. Basically it wasn't failing because of Stark or Bartik it always failed on the 2nd theme in the loop.

So I looked at this code chunk again where it failed.

switch ($block_plugin) {
        case 'system_powered_by_block':
          // Confirm "Display Title" is not checked.
          $web_assert->checkboxNotChecked('settings[label_display]');
          // Confirm Title is not visible.
          $this->assertEquals($this->isLabelInputVisible(), FALSE, 'Label is not visible');
          $page->checkField('settings[label_display]');
          $this->assertEquals($this->isLabelInputVisible(), TRUE, 'Label is visible');
          // Fill out form, save the form.
          $page->fillField('settings[label]', $new_page_text);

          break;

        case 'system_branding_block':
          // Fill out form, save the form.
          $page->fillField('settings[site_information][site_name]', $new_page_text);
          break;
      }

      if (isset($new_page_text)) {
        $page->pressButton($button_text);
        // Make sure the changes are present.
        $new_page_text_locator = "$block_selector $label_selector:contains($new_page_text)";
        $this->assertElementVisibleAfterWait('css', $new_page_text_locator);
        $web_assert->assertWaitOnAjaxRequest();
      }

      $this->openBlockForm($block_selector);

The test was failing when $block_plugin == 'system_branding_block'.
So what happens in that case is the Branding blocks is opened the site name is changed and form is submitted.

Then the intention of this line
$this->assertElementVisibleAfterWait('css', $new_page_text_locator);
is to wait for the new text, the site name, from the form submit to take effect on the site. That should mean that the form has been saved and the page has been redirected.

So for the first time through this is true but for the second time through the site name has already been changed to $new_page_text!
So essentially after the first iteration of the loop there is not a wait after the form is submitted which means the next line
$this->openBlockForm($block_selector);
could happen either before the ajax redirect. This seems to be happening when testbots are slow.

So the quick fix to this problem is to use a random site name in every iteration of the loop. That way it will truly wait for the form to be submitted and the new site name to be on the page.

This patch provides that fix without the previous fixes. I still think the previous fixes could have also been the cause of the problem under different timing conditions. We should not interact with the page until all the contextual links are loaded.

I will though provide another patch after this to hopefully make the test less confusing..........

tedbow’s picture

So #11 passes it and we could use that fix.

I think though the fact that it took me this long to figure out that loop would cause problems with the site name and nobody else has ever found this potential problem when review this test points to the fact that looping and doing the same sequence for each theme in the same method is confusing for this method because is complex user interaction.

So this patch removes the loop and adds $theme parameter to the testBlocks() function. It then used getTestThemes() in providerTestBlocks() to provide a test case for every block and theme combination. This changes the test cases from 3 to 15.

For me running locally this changes running the testBlocks() only from 3.41 minutes(slow I know running in VM) to 7.4 minutes. So not 5x as long because of test setup I guess.

For me the simpler test is more important than the faster test time. I also think before this patch is finished we should add back changes in #6 because assertPageLoadComplete() still could help stop other random failures.

UPDATE: Actually Test time difference
2902191-12-slow_drupal-no_loop.patch

12:30:53 Drupal\Tests\outside_in\FunctionalJavascript\OutsideInBlockF 16 passes
12:35:43 Drupal\Tests\outside_in\FunctionalJavascript\OutsideInBlockF 16 passes
12:40:32 Drupal\Tests\outside_in\FunctionalJavascript\OutsideInBlockF 16 passes
12:45:23 Drupal\Tests\outside_in\FunctionalJavascript\OutsideInBlockF 16 passes
12:50:13 Drupal\Tests\outside_in\FunctionalJavascript\OutsideInBlockF 16 passes
12:50:13
12:50:13 Test run duration: 24 min 11 sec

2902191-10-slow-random_site_name.patch

10:54:53 Drupal\Tests\outside_in\FunctionalJavascript\OutsideInBlockF 7 passes
10:58:43 Drupal\Tests\outside_in\FunctionalJavascript\OutsideInBlockF 7 passes
11:02:33 Drupal\Tests\outside_in\FunctionalJavascript\OutsideInBlockF 7 passes
11:06:24 Drupal\Tests\outside_in\FunctionalJavascript\OutsideInBlockF 7 passes
11:10:13 Drupal\Tests\outside_in\FunctionalJavascript\OutsideInBlockF 7 passes
11:10:13
11:10:14 Test run duration: 19 min 12 sec

tedbow’s picture

StatusFileSize
new3.1 KB
new13.66 KB

Adding back the changes from #9 that waits for all contextual links to be loaded on page loaded. These changes don't fix the current random failure but it is an extra check that hopefully will avoid unknown random failures in the future.

Important This still has the usleep() call in index.php to simulate slow testbots and only runs OutsideInBlockFormTest

tedbow’s picture

Issue summary: View changes
StatusFileSize
new12.35 KB
new13.2 KB

I removed the var $setupComplete because it confusing.

All I had to do was check for the permission access contextual links before calling assertAllContextualLinksLoaded()

I think this is clearer.

This includes a "slow_drupal" patch with the usleep() command and the runs the 5x times.

2902191-14.patch removes these changes and would be commit ready if RTBC'ed

tedbow’s picture

StatusFileSize
new5.28 KB

Here is a no whitespace patch for #14 to make it easier to review because removing the loop adds a bunch of lines to the patch that are just indentation changes.

tedbow’s picture

Priority: Normal » Major

Changing to "major"

If we look at 2902191-6-slow_drupal_no_fix.patch in #6 this patch demonstrates in a "slow drupal" situation, simulated by add like usleep to index.ph might happen in slow testbot HEAD will still likely fail.

So I think this is "major" in the sense the sooner or later if not fixed it will almost certainly break head.

tedbow’s picture

Issue summary: View changes

Removing text I meant to add to #14

Anonymous’s picture

@tedbow, excellent investigation!

Added #14 patch with diff -w, for ease of comparison changes.

Small review:

  1. @@ -142,17 +143,17 @@ public function testBlocks($block_plugin, $new_page_text, $element_selector, $la
    -      // Delete the block that was placed for the current theme.
    -      $block->delete();
    -    }
       }

    It is ok, because end of test now :)

  2. +++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php
    @@ -63,10 +63,9 @@ protected function setUp() {
    -  public function testBlocks($block_plugin, $new_page_text, $element_selector, $label_selector, $button_text, $toolbar_item) {
    +  public function testBlocks($theme, $block_plugin, $new_page_text, $element_selector, $label_selector, $button_text, $toolbar_item) {
    
    @@ -142,17 +143,17 @@ public function testBlocks($block_plugin, $new_page_text, $element_selector, $la
    -    $blocks = [
    -      'block-powered' => [
    +    $blocks = [];
    

    +1. Change is good even in itself. Now test more flat, and it is a pleasant.

  3. +++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
    @@ -14,12 +14,26 @@
    +    $this->assertPageLoadComplete();
    ...
    -    // After the page loaded we need to additionally wait until the settings
    -    // tray Ajax activity is done.
    

    assertPageLoadComplete - a self-speaking name, but can we partially explain the reasons for waiting via keeping the comment?

  4. +++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
    @@ -14,12 +14,26 @@
    +  protected function assertPageLoadComplete() {
    ...
    +  protected function assertAllContextualLinksLoaded() {
    

    Look quite useful for general use, not only for OutsideInJavascriptTestBase (follow-up?).

  5. +++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
    @@ -14,12 +14,26 @@
    +  protected function assertPageLoadComplete() {
    +    $web_assert = $this->assertSession();
    +    if ($this->loggedInUser && $this->loggedInUser->hasPermission('access contextual links')) {
    +      $this->assertAllContextualLinksLoaded();
    +    }
    +    $web_assert->assertWaitOnAjaxRequest();
    +  }
    

    Maybe first assertWaitOnAjaxRequest() and than assertAllContextualLinksLoaded(), for cases Where after ajax new links appear?

  6. +++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
    @@ -72,6 +86,7 @@ protected function getTray() {
    +    $this->assertJsCondition("window.hasOwnProperty('jQuery')", 1000);
    

    Do we still need it? If yes, what about jQuery.isReady or typeof jQuery === 'function' (something like in assertWaitOnAjaxRequest())

Anonymous’s picture

Priority: Major » Critical
Related issues: +#2902968: How many random fails due to slow bots?

#16, fair. It is even critical per #2829040: [meta] Known intermittent, random, and environment-specific test failures. Also added issue about testing 'slow bot' for all tests #2902968: How many random fails due to slow bots?.

Anonymous’s picture

+++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInBlockFormTest.php
@@ -142,17 +143,17 @@ public function testBlocks($block_plugin, $new_page_text, $element_selector, $la
+        "$theme--block-powered" => [

@@ -160,7 +161,8 @@ public function providerTestBlocks() {
+        "$theme--block-branding" => [

@@ -168,7 +170,8 @@ public function providerTestBlocks() {
+        "$theme--block-search" => [

I forgot to say, that these changes also look nice when running tests.

tedbow’s picture

StatusFileSize
new1.89 KB
new12.63 KB

@vaplas thanks for the review!
#18
1. yep
2. Good point
3. Added a comment
4. Added a @todo about existing issue #2821724: Create Javascript Tests for Contextual Links
5. fixed
6. added "typeof jQuery !== 'undefined'" and made all 1 condition.
#19 Thanks for making #2902968: How many random fails due to slow bots? look like this is the only test that fail 😅
#20 Yes will make debugging easier.

Anonymous’s picture

#21: looks perfect! And #6 + #14 confirm the fixation of fail. +1 to RTBC. Thanks!

+++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
@@ -72,7 +94,7 @@ protected function getTray() {
+    $condition = "(typeof jQuery !== 'undefined' && jQuery('$selector').length == 0)";

Nit: jQuery('$selector').length === 0 ( '===' )


#19: Yes, I thought I hit the jackpot on this 😉, but on the other side, the absence of other falls is also not bad 👌 (but we can rerun this test in any time, @Mr. Bot).
Anonymous’s picture

StatusFileSize
new12.62 KB
new831 bytes

#22: done :)

tedbow’s picture

@vaplas thanks for finishing this up. It looks good to me for RTBC. But since I did most of the patch I shouldn't RTBC.

@vaplas since you provided most of the reviews and your patch on #23 was just 1 character difference I think you could RTBC, if you think it is good.

Anonymous’s picture

Status: Needs review » Reviewed & tested by the community

I am glad to do this! Thank you for this blow on the random fails, @tedbow.

Status: Reviewed & tested by the community » Needs work

The last submitted patch, 23: 2902191-23.patch, failed testing. View results

tedbow’s picture

Status: Needs work » Needs review
StatusFileSize
new14.76 KB
new6.54 KB

@vaplas thanks for RTBC! Patch needed reroll. Here it is

Status: Needs review » Needs work

The last submitted patch, 27: 2902191-27-no_whitespace.diff, failed testing. View results

tedbow’s picture

Status: Needs work » Needs review

I meant to upload the "no_whitespace" file as a ".txt" so the tests would not run

Anonymous’s picture

Indeed, needed reroll after #2782891: The Page Title block's title behaves in a confusing way with Settings Tray and the Help block incorrectly has Settings Tray styling.

I also compared #23 and #27. And I found no changes except one:

-+        "$theme--block-powered" => [
++        "$theme--powered" => [
...
-+        "$theme--block-branding" => [
++        "$theme--branding" => [
...
-+        "$theme--block-search" => [
++        "$theme--search" => [

It seems this is an unintentional changes, right?

Maybe even replace key format? Like:

"$theme: block-name"
"$theme: " . ClassName::class 

Because 'bartik--Drupal\outside_in_test\Plugin\Block\OffCanvasFormAnnotationIsClassBlock' it's an acquired taste :)

tedbow’s picture

StatusFileSize
new2.46 KB
new14.78 KB

@vaplas good catch yes that was a mistake.
Also fixing the keys as you suggested.

Anonymous’s picture

Status: Needs review » Reviewed & tested by the community

@tedbow, thank you for nice work! Back to RTBC again.

star-szr’s picture

Issue tags: +Triaged D8 critical

Discussed with @xjm @effulgentsia @cilefen and we agreed this issue is critical because it's causing a non-trivial amount of random fails.

droplet’s picture

I didn't look into this issue deeply but I think the actual problem on waitForOffCanvasToOpen. #drupal-off-canvas opened before the content rendering inside the dialog.

I trying to sort out of these problems in global:
#2903300: Dispatch an event to indicate the element is anmiated/loaded

Anonymous’s picture

Issue summary: View changes

Now the stability of the test is provided by the fact that assertElementVisibleAfterWait() works with different values (#11). @tedbow found a great way to implement this through refactoring instead of random-value generation.

In addition, @tedbow has been offered two more stability enhancements:

+++ b/core/modules/outside_in/tests/src/FunctionalJavascript/OutsideInJavascriptTestBase.php
@@ -14,12 +14,34 @@
+  protected function assertAllContextualLinksLoaded() {

@@ -72,7 +94,7 @@ protected function getTray() {
+    $condition = "(typeof jQuery !== 'undefined' && jQuery('$selector').length === 0)";

#34 good point! Maybe we can strengthen waitForOffCanvasToOpen, as part of this issue too. But how to make it better?

I did not find a class that says content is loaded. Should we add some class in afterCreate (off-canvas.es6.js)?

Maybe some known elements inside content? But not all content has known elements (like [type="submit"]). Example off_canvas_test module add only one simple div. Or is it an unsuccessful for OffCanvasTest?

The only sign that I found is the resizing, after which the attribute style appears. Therefore, we can do so:

- $this->assertElementVisibleAfterWait('css', '#drupal-off-canvas');
+ $this->assertElementVisibleAfterWait('css', '#drupal-off-canvas[style]');

We can also move this quest to separate issue, since the current patch is sufficient for the stability of this test (imho). Therefore, I did not change the status of issue. But you can do it, if you think otherwise.

Status: Reviewed & tested by the community » Needs work

The last submitted patch, 31: 2902191-31.patch, failed testing. View results

Anonymous’s picture

lendude’s picture

Title: Determine cause and fix random fail in \Drupal\Tests\outside_inOutsideInBlockFormTest::testBlocks » Determine cause and fix random fail in \Drupal\Tests\settings_tray\FunctionalJavascript\SettingsTrayBlockFormTest::testBlocks
Issue summary: View changes
Status: Needs review » Needs work
Issue tags: +Needs reroll

Needs a reroll now that #2803375: Rename Outside-in module to "Settings Tray" for real is in.

Updated references in the IS to the new test name. New name, same fails : https://www.drupal.org/pift-ci-job/751715

tedbow’s picture

Component: outside_in.module » settings_tray.module

Changing to new settings_tray.module component. @drpal thanks for script help!

Anonymous’s picture

Status: Needs work » Needs review
Issue tags: -Needs reroll
StatusFileSize
new14.88 KB
new6.62 KB
new7.89 KB

#38: Rerolled.

tedbow’s picture

Status: Needs review » Reviewed & tested by the community

@vaplas thanks for the rerolls!!

Setting back to RTBC since it has just been rerolls since it was RTBC confirm the reroll in #40

@droplet #34 that could be problem but this problem because of where it is failing in SettingsTrayBlockFormTest.php:130(seen recently here https://www.drupal.org/pift-ci-job/763335) is because of the problem described in #11 because the site name text already being on the page. waitForOffCanvasToOpen() is called 7 times directly and openBlockForm() which contains it is called 7 times also but the random fail has been consistent on SettingsTrayBlockFormTest.php:130 so I think we should commit this issue before worrying about other problems.

droplet’s picture

@tedbow,

Yeah we could always refactor that so it's not a reason to block it move forward :)

  • catch committed 1f62833 on 8.5.x
    Issue #2902191 by tedbow, vaplas, xjm, droplet, drpal: Determine cause...

  • catch committed d005304 on 8.4.x
    Issue #2902191 by tedbow, vaplas, xjm, droplet, drpal: Determine cause...

catch credited catch.

catch’s picture

Status: Reviewed & tested by the community » Fixed

Committed/pushed to 8.5.x and cherry-picked to 8.4.x. Thanks!

tedbow’s picture

@catch thanks for committing and thanks everyone who worked on this issue.

Hopefully we just avoided HEAD breaking in a way this test has done in past and causing a major pain for everyone!

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.

xjm’s picture