| OLD | NEW |
| 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import os | 5 import os |
| 6 import time | |
| 7 | 6 |
| 8 from autotest_lib.client.bin import factory | 7 from autotest_lib.client.bin import factory |
| 9 from autotest_lib.client.bin import factory_ui_lib as ful | |
| 10 from autotest_lib.client.bin import test, utils | 8 from autotest_lib.client.bin import test, utils |
| 11 from autotest_lib.client.common_lib import error | 9 from autotest_lib.client.common_lib import error |
| 12 | 10 |
| 13 | 11 |
| 14 GPIO_ROOT = '/home/gpio' | |
| 15 GOOGLE_REQUIRED_TESTS = [ 'hardware_Components', 'hardware_DeveloperRecovery' ] | |
| 16 | |
| 17 | |
| 18 def init_gpio(gpio_root=GPIO_ROOT): | |
| 19 """ initializes GPIO in GPIO_ROOT """ | |
| 20 if os.path.exists(gpio_root): | |
| 21 utils.system("rm -rf '%s'" % gpio_root) | |
| 22 utils.system("mkdir '%s'" % (gpio_root)) | |
| 23 utils.system("/usr/sbin/gpio_setup") | |
| 24 | |
| 25 | |
| 26 class factory_Wipe(test.test): | 12 class factory_Wipe(test.test): |
| 27 version = 2 | 13 version = 3 |
| 28 | 14 |
| 29 def wipe_stateful_partition(self, secure_wipe): | 15 def wipe_stateful_partition(self, secure_wipe): |
| 30 # Stub test to switch to boot from the release image, | 16 # Stub test to switch to boot from the release image, |
| 31 # and tag stateful partition to indicate wipe on reboot. | 17 # and tag stateful partition to indicate wipe on reboot. |
| 32 os.chdir(self.srcdir) | 18 os.chdir(self.srcdir) |
| 33 | 19 |
| 34 factory.log('switch to boot from release image and prepare wipe') | 20 factory.log('switch to boot from release image and prepare wipe') |
| 35 | 21 |
| 36 # Tag the current image to be wiped according to preference | 22 # Tag the current image to be wiped according to preference |
| 37 # (secure or fast). | 23 # (secure or fast). |
| 38 tag_filename = '/mnt/stateful_partition/factory_install_reset' | 24 tag_filename = '/mnt/stateful_partition/factory_install_reset' |
| 39 if secure_wipe: | 25 if secure_wipe: |
| 40 utils.run('touch %s' % tag_filename) | 26 utils.run('touch %s' % tag_filename) |
| 41 else: | 27 else: |
| 42 utils.run('echo "fast" > %s' % tag_filename) | 28 utils.run('echo "fast" > %s' % tag_filename) |
| 43 | 29 |
| 44 # Copy the wipe splash image to state partition. | 30 # Copy the wipe splash image to state partition. |
| 45 utils.run('cp -f wipe_splash.png /mnt/stateful_partition/') | 31 utils.run('cp -f wipe_splash.png /mnt/stateful_partition/') |
| 46 # Switch to the release image. | 32 # Switch to the release image. |
| 47 utils.run('./switch_partitions.sh') | 33 utils.run('./switch_partitions.sh') |
| 48 # Time for reboot. | 34 # Time for reboot. |
| 49 utils.run('shutdown -r now') | 35 utils.run('shutdown -r now') |
| 50 | 36 |
| 51 def check_developer_switch(self, do_check): | |
| 52 if not do_check: | |
| 53 factory.log('WARNING: DEVELOPER SWITCH BUTTON ' + | |
| 54 'IS NOT TESTED/ENABLED!'); | |
| 55 return True | |
| 56 | |
| 57 init_gpio() | |
| 58 status = open(os.path.join(GPIO_ROOT, "developer_switch")).read() | |
| 59 status_val = int(status) | |
| 60 if status_val != 0: | |
| 61 raise error.TestFail('Developer Switch Button is enabled') | |
| 62 | |
| 63 def flashrom_write_protect(self, do_check): | |
| 64 # enable write protection (and test it) for flashrom | |
| 65 | |
| 66 if not do_check: | |
| 67 factory.log('WARNING: FLASHROM WRITE PROTECTION ' + | |
| 68 'IS NOT TESTED/ENABLED!'); | |
| 69 return True | |
| 70 | |
| 71 factory.log('enable write protect (factory_EnableWriteProtect)') | |
| 72 self.job.run_test('factory_EnableWriteProtect') | |
| 73 | |
| 74 # verify if write protection range is properly fixed, | |
| 75 # and all bits in RW is writable. | |
| 76 factory.log('verify write protect (hardware_EepromWriteProtect)') | |
| 77 if not self.job.run_test('hardware_EepromWriteProtect'): | |
| 78 raise error.TestFail('Flashrom write protection test failed.') | |
| 79 | |
| 80 def run_once(self, | 37 def run_once(self, |
| 81 secure_wipe, | 38 secure_wipe, |
| 82 write_protect=True, | |
| 83 check_developer_switch=True, | |
| 84 status_file_path=None, | 39 status_file_path=None, |
| 85 test_list=None, | 40 test_list=None, |
| 86 force_skip_required_test_check=False): | 41 only_run_from_factory_finalize_unless_testing=True): |
| 87 | 42 |
| 88 if force_skip_required_test_check: | 43 test_name = factory.FINAL_VERIFY_TEST_NAME |
| 89 # alert user what he is doing | 44 if only_run_from_factory_finalize_unless_testing: |
| 90 alert_seconds = 3 | 45 if factory.lookup_status_by_unique_name( |
| 91 for i in range(alert_seconds): | 46 test_name, test_list, status_file_path) != factory.PASSED: |
| 92 factory.log('WARNING: REQUIRED TEST CHECK IS BYPASSED. ' + | 47 raise error.TestFail('You need to pass %s first.' % test_name) |
| 93 'THIS DEVICE CANNOT BE QUALIFIED.') | |
| 94 factory.log("Waiting %d seconds before test start." % alert_seconds) | |
| 95 for i in range(alert_seconds, 0, -1): | |
| 96 factory.log(">> wipe test will start in %d seconds..." % i) | |
| 97 time.sleep(1) | |
| 98 else: | 48 else: |
| 99 # first, check if all previous tests are passed. | 49 factory.log('WARNING: Final Verification is bypassed.\n' + |
| 100 status_map = ful.StatusMap(test_list, status_file_path) | 50 'THIS DEVICE CANNOT BE QUALIFIED.') |
| 101 failed = status_map.filter(ful.FAILED) | |
| 102 if failed: | |
| 103 raise error.TestFail('Some tests were failed. ' + | |
| 104 'Cannot start wipe.') | |
| 105 | 51 |
| 106 # check if all Google Required Tests are passed | |
| 107 passed = [t.formal_name for t in status_map.filter(ful.PASSED)] | |
| 108 if not set(GOOGLE_REQUIRED_TESTS).issubset(passed): | |
| 109 missing = list(set(GOOGLE_REQUIRED_TESTS).difference(passed)) | |
| 110 raise error.TestFail('You need to execute following ' + | |
| 111 'Google Required Tests: %s' % | |
| 112 (','.join(missing))) | |
| 113 | |
| 114 # apply each final tests | |
| 115 self.check_developer_switch(check_developer_switch) | |
| 116 self.flashrom_write_protect(write_protect) | |
| 117 self.wipe_stateful_partition(secure_wipe) | 52 self.wipe_stateful_partition(secure_wipe) |
| OLD | NEW |