Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3227)

Unified Diff: bin/cros_au_test_harness.py

Issue 5573007: Add some desired options to the au test harness. (Closed) Base URL: http://git.chromium.org/git/crosutils.git@master
Patch Set: Change exceptions Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | image_to_live.sh » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bin/cros_au_test_harness.py
diff --git a/bin/cros_au_test_harness.py b/bin/cros_au_test_harness.py
index 3ffdac53cc24a276a0ce69a9ceff8cf0c6730268..4cb6653d17a65a800c7b57008ed926071a5eab95 100755
--- a/bin/cros_au_test_harness.py
+++ b/bin/cros_au_test_harness.py
@@ -42,6 +42,7 @@ class AUTest(object):
"""Abstract interface that defines an Auto Update test."""
source_image = ''
use_delta_updates = False
+ verbose = False
def setUp(self):
unittest.TestCase.setUp(self)
@@ -80,7 +81,7 @@ class AUTest(object):
if self.use_delta_updates:
try:
self.source_image = src_image
- self.UpdateImage(image)
+ self._UpdateImageReportError(image)
except:
Warning('Delta update failed, disabling delta updates and retrying.')
self.use_delta_updates = False
@@ -110,9 +111,9 @@ class AUTest(object):
if re.search(re.escape(expected_msg), err.stdout, re.MULTILINE):
return
- Warning("Didn't find '%s' in:" % expected_msg)
- Warning(err.stdout)
- self.fail('We managed to update when failure was expected')
+ Warning("Didn't find '%s' in:" % expected_msg)
+ Warning(err.stdout)
+ self.fail('We managed to update when failure was expected')
def PrepareBase(self, image_path):
"""Prepares target with base_image_path."""
@@ -169,7 +170,8 @@ class AUTest(object):
percent that passed.
"""
Info('Output from VerifyImage():')
- print output
+ print >> sys.stderr, output
+ sys.stderr.flush()
percent_passed = self.ParseGenerateTestReportOutput(output)
Info('Percent passed: %d vs. Percent required: %d' % (
percent_passed, percent_required_to_pass))
@@ -237,7 +239,7 @@ class AUTest(object):
# Read from the URL and write to the local file
urllib.urlretrieve(url, payload)
- expected_msg='download_hash_data == update_check_response_hash failed'
+ expected_msg = 'download_hash_data == update_check_response_hash failed'
self._AttemptUpdateWithPayloadExpectedFailure(payload, expected_msg)
def testCorruptedUpdate(self):
@@ -255,7 +257,7 @@ class AUTest(object):
urllib.urlretrieve(url, payload)
# This update is expected to fail...
- expected_msg='zlib inflate() error:-3'
+ expected_msg = 'zlib inflate() error:-3'
self._AttemptUpdateWithPayloadExpectedFailure(payload, expected_msg)
class RealAUTest(unittest.TestCase, AUTest):
@@ -271,33 +273,43 @@ class RealAUTest(unittest.TestCase, AUTest):
def UpdateImage(self, image_path, stateful_change='old'):
"""Updates a remote image using image_to_live.sh."""
stateful_change_flag = self.GetStatefulChangeFlag(stateful_change)
-
- (code, stdout, stderr) = RunCommandCaptureOutput([
- '%s/image_to_live.sh' % self.crosutils,
- '--image=%s' % image_path,
- '--remote=%s' % remote,
- stateful_change_flag,
- '--verify',
- '--src_image=%s' % self.source_image
- ])
-
- if code != 0:
- raise UpdateException(code, stdout)
+ cmd = ['%s/image_to_live.sh' % self.crosutils,
+ '--image=%s' % image_path,
+ '--remote=%s' % remote,
+ stateful_change_flag,
+ '--verify',
+ '--src_image=%s' % self.source_image
+ ]
+
+ if self.verbose:
+ try:
+ RunCommand(cmd)
+ except Exception, e:
+ raise UpdateException(1, e.message)
+ else:
+ (code, stdout, stderr) = RunCommandCaptureOutput(cmd)
+ if code != 0:
+ raise UpdateException(code, stdout)
def UpdateUsingPayload(self, update_path, stateful_change='old'):
"""Updates a remote image using image_to_live.sh."""
stateful_change_flag = self.GetStatefulChangeFlag(stateful_change)
-
- (code, stdout, stderr) = RunCommandCaptureOutput([
- '%s/image_to_live.sh' % self.crosutils,
- '--payload=%s' % update_path,
- '--remote=%s' % remote,
- stateful_change_flag,
- '--verify',
- ])
-
- if code != 0:
- raise UpdateException(code, stdout)
+ cmd = ['%s/image_to_live.sh' % self.crosutils,
+ '--payload=%s' % update_path,
+ '--remote=%s' % remote,
+ stateful_change_flag,
+ '--verify',
+ ]
+
+ if self.verbose:
+ try:
+ RunCommand(cmd)
+ except Exception, e:
+ raise UpdateException(1, e.message)
+ else:
+ (code, stdout, stderr) = RunCommandCaptureOutput(cmd)
+ if code != 0:
+ raise UpdateException(code, stdout)
def VerifyImage(self, percent_required_to_pass):
"""Verifies an image using run_remote_tests.sh with verification suite."""
@@ -360,20 +372,25 @@ class VirtualAUTest(unittest.TestCase, AUTest):
if self.source_image == base_image_path:
self.source_image = self.vm_image_path
- (code, stdout, stderr) = RunCommandCaptureOutput([
- '%s/cros_run_vm_update' % self.crosutilsbin,
- '--update_image_path=%s' % image_path,
- '--vm_image_path=%s' % self.vm_image_path,
- '--snapshot',
- vm_graphics_flag,
- '--persist',
- '--kvm_pid=%s' % _KVM_PID_FILE,
- stateful_change_flag,
- '--src_image=%s' % self.source_image,
- ])
-
- if code != 0:
- raise UpdateException(code, stdout)
+ cmd = ['%s/cros_run_vm_update' % self.crosutilsbin,
+ '--update_image_path=%s' % image_path,
+ '--vm_image_path=%s' % self.vm_image_path,
+ '--snapshot',
+ vm_graphics_flag,
+ '--persist',
+ '--kvm_pid=%s' % _KVM_PID_FILE,
+ stateful_change_flag,
+ '--src_image=%s' % self.source_image,
+ ]
+ if self.verbose:
+ try:
+ RunCommand(cmd)
+ except Exception, e:
+ raise UpdateException(1, e.message)
+ else:
+ (code, stdout, stderr) = RunCommandCaptureOutput(cmd)
+ if code != 0:
+ raise UpdateException(code, stdout)
def UpdateUsingPayload(self, update_path, stateful_change='old'):
"""Updates a remote image using image_to_live.sh."""
@@ -381,20 +398,26 @@ class VirtualAUTest(unittest.TestCase, AUTest):
if self.source_image == base_image_path:
self.source_image = self.vm_image_path
- (code, stdout, stderr) = RunCommandCaptureOutput([
- '%s/cros_run_vm_update' % self.crosutilsbin,
- '--payload=%s' % update_path,
- '--vm_image_path=%s' % self.vm_image_path,
- '--snapshot',
- vm_graphics_flag,
- '--persist',
- '--kvm_pid=%s' % _KVM_PID_FILE,
- stateful_change_flag,
- '--src_image=%s' % self.source_image,
- ])
-
- if code != 0:
- raise UpdateException(code, stdout)
+ cmd = ['%s/cros_run_vm_update' % self.crosutilsbin,
+ '--payload=%s' % update_path,
+ '--vm_image_path=%s' % self.vm_image_path,
+ '--snapshot',
+ vm_graphics_flag,
+ '--persist',
+ '--kvm_pid=%s' % _KVM_PID_FILE,
+ stateful_change_flag,
+ '--src_image=%s' % self.source_image,
+ ]
+
+ if self.verbose:
+ try:
+ RunCommand(cmd)
+ except Exception, e:
+ raise UpdateException(1, e.message)
+ else:
+ (code, stdout, stderr) = RunCommandCaptureOutput(cmd)
+ if code != 0:
+ raise UpdateException(code, stdout)
def VerifyImage(self, percent_required_to_pass):
"""Runs vm smoke suite to verify image."""
@@ -421,26 +444,33 @@ if __name__ == '__main__':
parser = optparse.OptionParser()
parser.add_option('-b', '--base_image',
help='path to the base image.')
- parser.add_option('-t', '--target_image',
- help='path to the target image.')
parser.add_option('-r', '--board',
help='board for the images.')
- parser.add_option('-p', '--type', default='vm',
- help='type of test to run: [vm, real]. Default: vm.')
- parser.add_option('-m', '--remote',
- help='Remote address for real test.')
- parser.add_option('--no_graphics', action='store_true',
- help='Disable graphics for the vm test.')
parser.add_option('--no_delta', action='store_false', default=True,
dest='delta',
help='Disable using delta updates.')
+ parser.add_option('--no_graphics', action='store_true',
+ help='Disable graphics for the vm test.')
+ parser.add_option('-m', '--remote',
+ help='Remote address for real test.')
parser.add_option('-q', '--quick_test', default=False, action='store_true',
help='Use a basic test to verify image.')
+ parser.add_option('-t', '--target_image',
+ help='path to the target image.')
+ parser.add_option('--test_prefix', default='test',
+ help='Only runs tests with specific prefix i.e. '
+ 'testFullUpdateWipeStateful.')
+ parser.add_option('-p', '--type', default='vm',
+ help='type of test to run: [vm, real]. Default: vm.')
+ parser.add_option('--verbose', default=False, action='store_true',
+ help='Print out rather than capture output as much as '
+ 'possible.')
# Set the usage to include flags.
parser.set_usage(parser.format_help())
# Parse existing sys.argv so we can pass rest to unittest.main.
(options, sys.argv) = parser.parse_args(sys.argv)
+ AUTest.verbose = options.verbose
base_image_path = options.base_image
target_image_path = options.target_image
board = options.board
@@ -465,19 +495,15 @@ if __name__ == '__main__':
AUTest.use_delta_updates = options.delta
# Only run the test harness we care about.
- if options.type == 'vm':
- suite = unittest.TestLoader().loadTestsFromTestCase(VirtualAUTest)
- test_result = unittest.TextTestRunner(verbosity=2).run(suite)
- elif options.type == 'real':
- if not options.remote:
- parser.error('Real tests require a remote test machine.')
- else:
- remote = options.remote
+ test_loader = unittest.TestLoader()
+ test_loader.testMethodPrefix = options.test_prefix
+
+ if options.type == 'vm': test_class = VirtualAUTest
+ elif options.type == 'real': test_class = RealAUTest
+ else: parser.error('Could not parse harness type %s.' % options.type)
- suite = unittest.TestLoader().loadTestsFromTestCase(RealAUTest)
- test_result = unittest.TextTestRunner(verbosity=2).run(suite)
- else:
- parser.error('Could not parse harness type %s.' % options.type)
+ test_suite = test_loader.loadTestsFromTestCase(test_class)
+ test_result = unittest.TextTestRunner(verbosity=2).run(test_suite)
if not test_result.wasSuccessful():
Die('Test harness was not successful')
« no previous file with comments | « no previous file | image_to_live.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698