Index: call_script.py |
diff --git a/call_script.py b/call_script.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..bd31cf286d3420738df2c2791af72788672d5c95 |
--- /dev/null |
+++ b/call_script.py |
@@ -0,0 +1,135 @@ |
+#!/usr/bin/python |
kmixter1
2011/01/13 01:52:52
High level comment is that, as we discussed, this
|
+ |
+# Copyright (c) 2009 The Chromium OS Authors. All rights reserved. |
kmixter1
2011/01/13 01:52:52
2011
ruchic
2011/01/18 23:52:31
Done.
|
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""Script to run client or server tests on a live remote image. |
kmixter1
2011/01/13 01:52:52
call_script.py is a little too generic. How about
ruchic
2011/01/18 23:52:31
Done. Changed the name to call_autoserv.py Thanks!
|
+ |
+This script can be used to save results of each test run in timestamped |
+unique results directory. |
+ |
+""" |
+ |
+import os |
+import sys |
+import glob |
+import datetime |
kmixter1
2011/01/13 01:52:52
abc order
ruchic
2011/01/18 23:52:31
Done.
|
+ |
+class ArgumentError(Exception): |
+ def __init__(self, value): |
+ self.value = value |
+ def __str__(self): |
+ return repr(self.value) |
+ |
+def connectRemoteMachine(machine_ip): |
+ os.system('ssh-add testing_rsa') |
+ os.system('echo $USER > /tmp/user_name') |
kmixter1
2011/01/13 01:52:52
username = os.environ['USER']?
ruchic
2011/01/18 23:52:31
Done. Thanks for the tip
|
+ username = open('/tmp/user_name', 'r').readline().strip() |
+ |
+ # Removing the machine IP entry from known hosts to avoid identity clash. |
+ print "Removing machine IP entry from known hosts to avoid identity clash." |
+ host_list = open('/home/%s/.ssh/known_hosts' % username, 'r').readlines() |
+ index = 0 |
+ for host in host_list: |
+ if machine_ip in host: |
+ del host_list[index] |
+ break |
+ index += 1 |
+ |
+ open('/home/%s/.ssh/known_hosts' % username, 'w').writelines(host_list) |
+ |
+ # Starting ssh connection to remote test machine. |
+ print "Starting ssh connection to remote test machine." |
+ os.system('ssh root@%s true; echo $? > ssh_result_file' % machine_ip) |
+ ssh_result = open('ssh_result_file', 'r').read() |
+ print "Status of ssh connection to remote machine : %s" % ssh_result |
+ |
+ if ssh_result.strip() != '0': |
+ print "Ssh connection to remote test machine FAILED. Exiting the test." |
+ sys.exit() |
+ |
+def checkTestResult(result_path): |
+ # Checking the results for any FAIL or ERROR messages in status log. |
+ status_file = open('%s/status' % result_path, 'r').readlines() |
+ for line in status_file: |
+ if ("FAIL" in line) or ("ERROR" in line): |
kmixter1
2011/01/13 01:52:52
Suggest running generate_test_report and using its
ruchic
2011/01/18 23:52:31
Done.
|
+ # Grabbing the results directory. |
+ log_name = "%s.tar.bz2" % result_path |
+ os.system('tar cjf %s %s' % (log_name, result_path)) |
+ print "INFO : Logs for the failed test at : %s" % log_name |
+ break |
+ |
+def triggerTest(test_name, machine_ip): |
+ test_path = "" |
+ # Creating unique time stamped result folder name. |
+ current_time = datetime.datetime.now() |
+ result_name = "results." + test_name + \ |
+ current_time.strftime("_%d-%m-%y_%H:%M") |
+ |
+ # Setting the test path location based on the test_name. |
+ suite_path = "./autotest/client/site_tests/suite_HWQual" |
+ filenames = glob.glob(os.path.join(suite_path, "control.%s" % test_name)) |
+ for filename in filenames: |
+ if filename == "%s/control.%s" % (suite_path, test_name): |
+ test_path = filename |
+ break |
+ |
+ # Looking for test_name under site_tests if not present under suite_HWQual |
+ if test_path == "": |
+ test_path = "./autotest/client/site_tests/%s/control" % test_name |
+ |
+ # Making the call to HWQual test. |
+ print "INFO : Starting the HWQual test : %s" % test_path |
kmixter1
2011/01/13 01:52:52
May want to consider import logging for these.
ruchic
2011/01/18 23:52:31
Done.
|
+ os.system('./autotest/server/autoserv -r ./autotest/%s -m %s -c %s' % \ |
kmixter1
2011/01/13 01:52:52
-c assumes the test is a client test. Probably wo
ruchic
2011/01/18 23:52:31
Changed the code to support server tests also.
On
|
+ (result_name, machine_ip, test_path)) |
+ |
+ # Displaying results on test completion. |
+ os.system('./generate_test_report ./autotest/%s' % result_name) |
+ |
+ # Checking test results and grabbing logs for failing tests. |
+ checkTestResult("./autotest/%s" % result_name) |
+ print "INFO : Results of test run at : ./autotest/%s" % result_name |
+ |
+def main(argv): |
+ arg_ip, arg_testname = "", "" |
+ # Checking the arguments for help, machine ip and test name. |
+ try: |
+ for i in argv: |
+ if i in ["-h", "--help", "-?"]: |
kmixter1
2011/01/13 01:52:52
I would suggest using import optparse for arg pars
ruchic
2011/01/18 23:52:31
Done.
|
+ raise ArgumentError(-1) |
+ elif i.startswith("test="): |
+ arg_testname = i[5:] |
+ if not arg_testname: |
+ raise ArgumentError(1) |
+ print "HWQual test to trigger : %s" % arg_testname |
+ elif i.startswith("ip="): |
+ arg_ip = i[3:] |
+ if not arg_ip: |
+ raise ArgumentError(1) |
+ print "Remote test machine IP : %s" % arg_ip |
+ |
+ # Checking for presence of both ip and test parameters. |
+ if (arg_ip == "") or (arg_testname == ""): |
+ raise ArgumentError(0) |
+ |
+ # Setting up ssh connection to remote machine. |
+ connectRemoteMachine(arg_ip) |
+ |
+ # Triggerring the HWQual test and result handling. |
+ triggerTest(arg_testname, arg_ip) |
+ |
+ except ArgumentError as e: |
+ if e.value == 0: |
+ print "FAIL : Argument missing" |
+ elif e.value == 1: |
+ print "FAIL : Blank values are not accepted for arguments." |
+ print "To execute this script, pass 'ip' of remote machine to run test" \ |
+ " on and 'test' name-" |
+ print " python callscript.py ip=<IP address of machine> test=<test name>" |
+ sys.exit() |
+ |
+ |
+if __name__ == '__main__': |
+ main(sys.argv) |
+ |