Add BaseComputeTest.wait_for and use it to fix bug 1017932.

Change-Id: I3c197f098591f827200f333dc4efe3aa816ef8b1
diff --git a/tempest/tests/compute/base.py b/tempest/tests/compute/base.py
index 120de01..7ceefb5 100644
--- a/tempest/tests/compute/base.py
+++ b/tempest/tests/compute/base.py
@@ -15,6 +15,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+import time
 import unittest2 as unittest
 
 from tempest import exceptions
@@ -115,3 +116,18 @@
         self.servers_client.wait_for_server_status(server['id'], 'ACTIVE')
         self.servers.append(server)
         return server
+
+    def wait_for(self, condition):
+        """Repeatedly calls condition() until a timeout"""
+        start_time = int(time.time())
+        while True:
+            try:
+                condition()
+            except:
+                pass
+            else:
+                return
+            if int(time.time()) - start_time >= self.build_timeout:
+                condition()
+                return
+            time.sleep(self.build_interval)
diff --git a/tempest/tests/compute/test_console_output.py b/tempest/tests/compute/test_console_output.py
index c258779..9bae812 100644
--- a/tempest/tests/compute/test_console_output.py
+++ b/tempest/tests/compute/test_console_output.py
@@ -43,11 +43,13 @@
 
     @attr(type='positive')
     def test_get_console_output(self):
+        def get_output():
             resp, output = self.client.get_console_output(self.server_id, 10)
             self.assertEqual(200, resp.status)
             self.assertNotEqual(output, None)
             lines = len(output.split('\n'))
             self.assertEqual(lines, 10)
+        self.wait_for(get_output)
 
     @attr(type='negative')
     def test_get_console_output_invalid_server_id(self):