tests finally can works over pure novaclient/ssh
diff --git a/rally_runner.py b/rally_runner.py
index e9c4caa..093ae12 100644
--- a/rally_runner.py
+++ b/rally_runner.py
@@ -5,6 +5,7 @@
 import warnings
 import functools
 import contextlib
+import multiprocessing
 
 from rally import exceptions
 from rally.cmd import cliutils
@@ -13,11 +14,8 @@
 from rally.benchmark.scenarios.vm.vmtasks import VMTasks
 
 import itest
-from utils import get_barrier
-
-
-def log(x):
-    pass
+from log import log
+from utils import get_barrier, wait_on_barrier
 
 
 @contextlib.contextmanager
@@ -75,25 +73,13 @@
             raise exceptions.ScriptError("monkeypatch code fails on "
                                          "ssh._client.open_sftp()")
 
-        test_iter = itest.run_test_iter(test_obj, ssh)
+        test_iter = itest.run_test_iter(test_obj, ssh._get_client())
 
         next(test_iter)
 
         log("Start io test")
 
-        if barrier is not None:
-            if latest_start_time is not None:
-                timeout = latest_start_time - time.time()
-            else:
-                timeout = None
-
-            if timeout is not None and timeout > 0:
-                msg = "Ready and waiting on barrier. " + \
-                      "Will wait at most {0} seconds"
-                log(msg.format(int(timeout)))
-
-                if not barrier(timeout):
-                    log("Barrier timeouted")
+        wait_on_barrier(barrier, latest_start_time)
 
         try:
             code, out, err = next(test_iter)
@@ -120,10 +106,6 @@
         VMScenario.run_action = orig
 
 
-def run_rally(rally_args):
-    return cliutils.run(['rally', "--rally-debug"] + rally_args, categories)
-
-
 def prepare_files(files_dir):
 
     # we do need temporary named files
@@ -164,7 +146,7 @@
             with do_patch1(obj, barrier, max_release_time):
                 opts = ['task', 'start', yaml_file] + list(rally_extra_opts)
                 log("Start rally with opts '{0}'".format(" ".join(opts)))
-                run_rally(opts)
+                cliutils.run(['rally', "--rally-debug"] + opts, categories)
     finally:
         if not keep_temp_files:
             os.unlink(yaml_file)
@@ -176,9 +158,18 @@
                      keep_temp_files):
 
     def closure(obj):
+        result_queue = multiprocessing.Queue()
+        obj.set_result_cb(result_queue.put)
+
         run_tests_using_rally(obj,
                               files_dir,
                               max_preparation_time,
                               rally_extra_opts,
                               keep_temp_files)
+
+        test_result = []
+        while not result_queue.empty():
+            test_result.append(result_queue.get())
+
+        return test_result
     return closure