From 8d714a5575d5054ac93e363fc61f7ffc8aa76b8d Mon Sep 17 00:00:00 2001
From: Daira Hopwood <daira@jacaranda.org>
Date: Thu, 5 Sep 2013 17:46:17 +0100
Subject: [PATCH] Thu Jun 14 20:18:35 BST 2012  Brian Warner
 <warner@lothar.com>   * test/common.py: fix race condition waiting for the
 helper connection

  The wait_for_connections() method, which is used at the start of
  test_system to make sure that all the clients are connected to all the
  servers, did not also wait for clients to be connected to their Helpers.
  Every once in a while, the helper connection would take a bit longer,
  and then
  test_system.SystemTest.test_filesystem._test_web._got_welcome_helper
  would fail, because we'd check for a helper connection before it was
  ready.

  The fix is to modify wait_for_connections's polling predicate to look
  for helper connections (if configured) as well as the regular
  introducer- and server- connections.

  Tested by temporarily adding a large (30s) delay to the connectTo() call
  in Uploader.startService, simulating a long helper
  connection-establishment delay. This makes the test fail consistently.
  Then I fixed wait_for_connections(), and the test passed (slowly). Then
  I removed the delay.

  Closes #1467
---
 src/allmydata/test/common.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/allmydata/test/common.py b/src/allmydata/test/common.py
index 871163ee..948ef846 100644
--- a/src/allmydata/test/common.py
+++ b/src/allmydata/test/common.py
@@ -696,12 +696,12 @@ class SystemTestMixin(pollmixin.PollMixin, testutil.StallMixin):
             sb = c.get_storage_broker()
             if len(sb.get_connected_servers()) != self.numclients:
                 return False
+            up = c.getServiceNamed("uploader")
+            if up._helper_furl and not up._helper:
+                return False
         return True
 
     def wait_for_connections(self, ignored=None):
-        # TODO: replace this with something that takes a list of peerids and
-        # fires when they've all been heard from, instead of using a count
-        # and a threshold
         return self.poll(self._check_connections, timeout=200)
 
 
-- 
2.45.2