# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Module containing class that implements an au_worker for a test device.""" import unittest import cros_build_lib as cros_lib import au_worker class RealAUWorker(au_worker.AUWorker): """Test harness for updating real images.""" def __init__(self, options, test_results_root): """Processes non-vm-specific options.""" au_worker.AUWorker.__init__(self, options, test_results_root) self.remote = options.remote if not self.remote: cros_lib.Die('We require a remote address for tests.') def PrepareBase(self, image_path): """Auto-update to base image to prepare for test.""" self.PrepareRealBase(image_path) def UpdateImage(self, image_path, src_image_path='', stateful_change='old', proxy_port=None, private_key_path=None): """Updates a remote image using image_to_live.sh.""" stateful_change_flag = self.GetStatefulChangeFlag(stateful_change) cmd = ['%s/image_to_live.sh' % self.crosutils, '--remote=%s' % self.remote, stateful_change_flag, '--verify', ] self.AppendUpdateFlags(cmd, image_path, src_image_path, proxy_port, private_key_path) self.RunUpdateCmd(cmd) def UpdateUsingPayload(self, update_path, stateful_change='old', proxy_port=None): """Updates a remote image using image_to_live.sh.""" stateful_change_flag = self.GetStatefulChangeFlag(stateful_change) cmd = ['%s/image_to_live.sh' % self.crosutils, '--payload=%s' % update_path, '--remote=%s' % self.remote, stateful_change_flag, '--verify', ] if proxy_port: cmd.append('--proxy_port=%s' % proxy_port) self.RunUpdateCmd(cmd) def VerifyImage(self, unittest, percent_required_to_pass=100): """Verifies an image using run_remote_tests.sh with verification suite.""" test_directory = self.GetNextResultsPath('verify') output = cros_lib.RunCommand( ['%s/run_remote_tests.sh' % self.crosutils, '--remote=%s' % self.remote, '--results_dir_root=%s' % test_directory, self.verify_suite, ], error_ok=True, enter_chroot=False, redirect_stdout=True) return self.AssertEnoughTestsPassed(unittest, output, percent_required_to_pass)