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

Unified Diff: bin/cros_au_test_harness.py

Issue 3619009: Add ability to test machines with au test harness. (Closed) Base URL: http://git.chromium.org/git/crosutils.git
Patch Set: Add todo and disable test Created 10 years, 2 months 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 | bin/cros_run_vm_update » ('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 eef95b6f8b552008f3dbc49d8e89c81ed45dcb98..7646588ccf8adacd1c9a9dfb21a4547cdc0d5a0e 100755
--- a/bin/cros_au_test_harness.py
+++ b/bin/cros_au_test_harness.py
@@ -13,12 +13,13 @@ sys.path.append(os.path.join(os.path.dirname(__file__), '../lib'))
from cros_build_lib import RunCommand, Info, Warning, ReinterpretPathForChroot
_KVM_PID_FILE = '/tmp/harness_pid'
-_SCRIPTS_DIR = os.path.join(os.path.dirname(__file__), '..')
_FULL_VDISK_SIZE = 6072
_FULL_STATEFULFS_SIZE = 2048
+# Globals to communicate options to unit tests.
global base_image_path
global board
+global remote
global target_image_path
_VERIFY_SUITE = 'suite_Smoke'
@@ -26,6 +27,20 @@ _VERIFY_SUITE = 'suite_Smoke'
class AUTest(object):
"""Abstract interface that defines an Auto Update test."""
+ def setUp(self):
+ unittest.TestCase.setUp(self)
+ # Set these up as they are used often.
+ self.crosutils = os.path.join(os.path.dirname(__file__), '..')
+ self.crosutilsbin = os.path.join(os.path.dirname(__file__))
+
+ def GetStatefulChangeFlag(self, stateful_change):
+ """Returns the flag to pass to image_to_vm for the stateful change."""
+ stateful_change_flag = ''
+ if stateful_change:
+ stateful_change_flag = '--stateful_update_flag=%s' % stateful_change
+
+ return stateful_change_flag
+
def PrepareBase(self):
"""Prepares target with base_image_path."""
pass
@@ -48,6 +63,11 @@ class AUTest(object):
pass
def testFullUpdateKeepStateful(self):
+ """Tests if we can update normally.
+
+ This test checks that we can update by updating the stateful partition
+ rather than wiping it.
+ """
# Prepare and verify the base image has been prepared correctly.
self.PrepareBase()
self.VerifyImage()
@@ -62,7 +82,14 @@ class AUTest(object):
self.UpdateImage(base_image_path)
self.VerifyImage()
- def testFullUpdateWipeStateful(self):
+ # TODO(sosa): Re-enable once we have a good way of checking for version
+ # compatability.
+ def NotestFullUpdateWipeStateful(self):
+ """Tests if we can update after cleaning the stateful partition.
+
+ This test checks that we can update successfully after wiping the
+ stateful partition.
+ """
# Prepare and verify the base image has been prepared correctly.
self.PrepareBase()
self.VerifyImage()
@@ -78,6 +105,34 @@ class AUTest(object):
self.VerifyImage()
+class RealAUTest(unittest.TestCase, AUTest):
+ """Test harness for updating real images."""
+
+ def setUp(self):
+ AUTest.setUp(self)
+
+ def UpdateImage(self, image_path, stateful_change='old'):
+ """Updates a remote image using image_to_live.sh."""
+ stateful_change_flag = self.GetStatefulChangeFlag(stateful_change)
+
+ RunCommand([
+ '%s/image_to_live.sh' % self.crosutils,
+ '--image=%s' % image_path,
+ '--remote=%s' % remote,
+ stateful_change_flag,
+ '--verify',
+ ], enter_chroot=False)
+
+
+ def NotVerifyImage(self):
+ """Verifies an image using run_remote_tests.sh with verification suite."""
+ RunCommand([
+ '%s/run_remote_tests.sh' % self.crosutils,
+ '--remote=%s' % remote,
+ _VERIFY_SUITE,
+ ], error_ok=False, enter_chroot=False)
+
+
class VirtualAUTest(unittest.TestCase, AUTest):
"""Test harness for updating virtual machines."""
vm_image_path = None
@@ -95,7 +150,7 @@ class VirtualAUTest(unittest.TestCase, AUTest):
def setUp(self):
"""Unit test overriden method. Is called before every test."""
-
+ AUTest.setUp(self)
self._KillExistingVM(_KVM_PID_FILE)
def PrepareBase(self):
@@ -105,7 +160,7 @@ class VirtualAUTest(unittest.TestCase, AUTest):
base_image_path))
if not os.path.exists(self.vm_image_path):
Info('Qemu image not found, creating one.')
- RunCommand(['%s/image_to_vm.sh' % _SCRIPTS_DIR,
+ RunCommand(['%s/image_to_vm.sh' % self.crosutils,
'--full',
'--from %s' % ReinterpretPathForChroot(
os.path.dirname(base_image_path)),
@@ -120,12 +175,9 @@ class VirtualAUTest(unittest.TestCase, AUTest):
def UpdateImage(self, image_path, stateful_change='old'):
"""Updates VM image with image_path."""
+ stateful_change_flag = self.GetStatefulChangeFlag(stateful_change)
- stateful_change_flag = ''
- if stateful_change:
- stateful_change_flag = '--stateful_flags=%s' % stateful_change
-
- RunCommand(['%s/cros_run_vm_update' % os.path.dirname(__file__),
+ RunCommand(['%s/cros_run_vm_update' % self.crosutilsbin,
'--update_image_path=%s' % image_path,
'--vm_image_path=%s' % self.vm_image_path,
'--snapshot',
@@ -136,18 +188,15 @@ class VirtualAUTest(unittest.TestCase, AUTest):
def VerifyImage(self):
"""Runs vm smoke suite to verify image."""
-
# image_to_live already verifies lsb-release matching. This is just
# for additional steps.
-
- # TODO(sosa): Compare output with results of base image.
- RunCommand(['%s/cros_run_vm_test' % os.path.dirname(__file__),
+ RunCommand(['%s/cros_run_vm_test' % self.crosutilsbin,
'--image_path=%s' % self.vm_image_path,
'--snapshot',
'--persist',
'--kvm_pid=%s' % _KVM_PID_FILE,
'--test_case=%s' % _VERIFY_SUITE,
- ], error_ok=True, enter_chroot=False)
+ ], error_ok=False, enter_chroot=False)
if __name__ == '__main__':
@@ -155,9 +204,13 @@ if __name__ == '__main__':
parser.add_option('-b', '--base_image',
help='path to the base image.')
parser.add_option('-t', '--target_image',
- help='path to the target image')
+ help='path to the target image.')
parser.add_option('-r', '--board',
- help='board for the images')
+ 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.')
# Set the usage to include flags.
parser.set_usage(parser.format_help())
# Parse existing sys.argv so we can pass rest to unittest.main.
@@ -176,4 +229,17 @@ if __name__ == '__main__':
if not board:
parser.error('Need board to convert base image to vm.')
- unittest.main()
+ # Only run the test harness we care about.
+ if options.type == 'vm':
+ suite = unittest.TestLoader().loadTestsFromTestCase(VirtualAUTest)
+ 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
+
+ suite = unittest.TestLoader().loadTestsFromTestCase(RealAUTest)
+ unittest.TextTestRunner(verbosity=2).run(suite)
+ else:
+ parser.error('Could not parse harness type %s.' % options.type)
« no previous file with comments | « no previous file | bin/cros_run_vm_update » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698