=== modified file 'lava_dispatcher/actions/launch_control.py'
@@ -25,11 +25,12 @@
import shutil
import tarfile
from lava_dispatcher.actions import BaseAction
-from lava_dispatcher.client import NetworkError
+from lava_dispatcher.client import OperationFailed
from lava_dispatcher.utils import download
from tempfile import mkdtemp
import time
import xmlrpclib
+import traceback
class cmd_submit_results_on_host(BaseAction):
def run(self, server, stream):
@@ -89,39 +90,56 @@
client.run_cmd_master(
'tar czf /tmp/lava_results.tgz -C /tmp/%s .' % self.context.lava_result_dir)
+ # start gather_result job, status
+ status = 'pass'
+ err_msg = ''
master_ip = client.get_master_ip()
- if master_ip == None:
- raise NetworkError("Getting master image IP address failed")
- # Set 80 as server port
- client.run_cmd_master('python -m SimpleHTTPServer 80 &> /dev/null &')
- time.sleep(3)
-
- result_tarball = "http://%s/lava_results.tgz" % master_ip
- tarball_dir = mkdtemp(dir=self.context.lava_image_tmpdir)
- os.chmod(tarball_dir, 0755)
-
- # download test result with a retry mechanism
- # set retry timeout to 2mins
- now = time.time()
- timeout = 120
- while time.time() < now+timeout:
- try:
- result_path = download(result_tarball, tarball_dir)
- except:
- if time.time() >= now+timeout:
- raise
-
- client.run_cmd_master('kill %1')
-
- tar = tarfile.open(result_path)
- for tarinfo in tar:
- if os.path.splitext(tarinfo.name)[1] == ".bundle":
- f = tar.extractfile(tarinfo)
- content = f.read()
- f.close()
- self.all_bundles.append(json.loads(content))
- tar.close()
- shutil.rmtree(tarball_dir)
+ if master_ip != None:
+ # Set 80 as server port
+ client.run_cmd_master('python -m SimpleHTTPServer 80 &> /dev/null &')
+ time.sleep(3)
+
+ result_tarball = "http://%s/lava_results.tgz" % master_ip
+ tarball_dir = mkdtemp(dir=self.context.lava_image_tmpdir)
+ os.chmod(tarball_dir, 0755)
+
+ # download test result with a retry mechanism
+ # set retry timeout to 2mins
+ now = time.time()
+ timeout = 120
+ try:
+ while time.time() < now+timeout:
+ try:
+ result_path = download(result_tarball, tarball_dir)
+ except:
+ if time.time() >= now+timeout:
+ raise
+ except:
+ print traceback.format_exc()
+ status = 'fail'
+ err_msg = err_msg + " Can't retrieve test case results."
+
+ client.run_cmd_master('kill %1')
+
+ try:
+ tar = tarfile.open(result_path)
+ for tarinfo in tar:
+ if os.path.splitext(tarinfo.name)[1] == ".bundle":
+ f = tar.extractfile(tarinfo)
+ content = f.read()
+ f.close()
+ self.all_bundles.append(json.loads(content))
+ tar.close()
+ except:
+ print traceback.format_exc()
+ status = 'fail'
+ err_msg = err_msg + " Some test case result appending failed."
+ finally:
+ shutil.rmtree(tarball_dir)
+ else:
+ status = 'fail'
+ err_msg = err_msg + "Getting master image IP address failed, \
+no test case result retrived."
#flush the serial log
client.run_shell_command("")
@@ -129,12 +147,8 @@
main_bundle = self.combine_bundles()
self.context.test_data.add_seriallog(
self.context.client.get_seriallog())
- # add submit_results failure info if no available network to get test
- # case result
- if master_ip == None:
- err_msg = "Getting master image IP address failed, \
-no test case result retrived."
- self.context.test_data.add_result('submit_results', 'fail', err_msg)
+ # add gather_results result
+ self.context.test_data.add_result('gather_results', status, err_msg)
main_bundle['test_runs'].append(self.context.test_data.get_test_run())
for test_run in main_bundle['test_runs']:
attributes = test_run.get('attributes',{})
@@ -144,8 +158,8 @@
print >> self.context.oob_file, 'dashboard-put-result:', \
srv.put_ex(json_bundle, 'lava-dispatcher.bundle', stream)
- if master_ip == None:
- raise NetworkError(err_msg)
+ if status == 'fail':
+ raise OperationFailed(err_msg)
def combine_bundles(self):
if not self.all_bundles:
=== modified file 'lava_dispatcher/client.py'
@@ -22,6 +22,7 @@
import sys
import time
from cStringIO import StringIO
+import traceback
from utils import string_to_list
class LavaClient(object):
@@ -171,7 +172,11 @@
def get_master_ip(self):
#get master image ip address
- self.wait_network_up()
+ try:
+ self.wait_network_up()
+ except:
+ print traceback.format_exc()
+ return None
#tty device uses minimal match, see pexpect wiki
#pattern1 = ".*\n(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
pattern1 = "(\d?\d?\d?\.\d?\d?\d?\.\d?\d?\d?\.\d?\d?\d?)"