David Haddock | dd35fb5e | 2018-05-03 14:52:33 -0700 | [diff] [blame] | 1 | # Copyright 2018 The Chromium OS Authors. All rights reserved. |
| 2 | # Use of this source code is governed by a BSD-style license that can be |
| 3 | # found in the LICENSE file. |
| 4 | |
| 5 | import logging |
| 6 | |
| 7 | from autotest_lib.client.common_lib import error |
| 8 | from autotest_lib.client.common_lib.cros import tpm_utils |
| 9 | from autotest_lib.server import autotest |
| 10 | from autotest_lib.server import test |
| 11 | from autotest_lib.server import utils |
| 12 | |
| 13 | |
| 14 | class rlz_CheckPing(test.test): |
| 15 | """ Tests we are sending the CAF and CAI RLZ pings for first user.""" |
| 16 | version = 1 |
| 17 | |
| 18 | _CLIENT_TEST = 'desktopui_CheckRlzPingSent' |
| 19 | |
| 20 | def _check_rlz_brand_code(self): |
| 21 | """Checks that we have an rlz brand code.""" |
| 22 | try: |
Greg Edelston | 7cea0c4 | 2019-11-26 15:17:22 -0700 | [diff] [blame] | 23 | self._host.run('cros_config / brand-code') |
David Haddock | 7d2e052 | 2018-12-04 19:59:11 -0800 | [diff] [blame] | 24 | except error.AutoservRunError as e: |
| 25 | raise error.TestFail('DUT is missing brand_code: %s.' % |
| 26 | e.result_obj.stderr) |
David Haddock | dd35fb5e | 2018-05-03 14:52:33 -0700 | [diff] [blame] | 27 | |
| 28 | |
David Haddock | b87c65e | 2018-11-20 15:53:09 -0800 | [diff] [blame] | 29 | def _set_vpd_values(self, retries=3): |
| 30 | """ |
| 31 | Sets the required vpd values for the test. |
| 32 | |
| 33 | @param retries: number of times to retry to write to vpd. |
| 34 | |
| 35 | """ |
| 36 | for i in range(retries): |
| 37 | try: |
| 38 | self._host.run('vpd -i RW_VPD -s should_send_rlz_ping=1') |
| 39 | break |
David Haddock | 7d2e052 | 2018-12-04 19:59:11 -0800 | [diff] [blame] | 40 | except error.AutoservRunError as e: |
David Haddock | b87c65e | 2018-11-20 15:53:09 -0800 | [diff] [blame] | 41 | logging.exception('Failed to write should_send_rlz_ping to vpd') |
| 42 | if i == retries-1: |
| 43 | raise error.TestFail('Failed to set should_send_rlz_ping ' |
David Haddock | 7d2e052 | 2018-12-04 19:59:11 -0800 | [diff] [blame] | 44 | 'VPD value on the DUT: %s' % |
| 45 | e.result_obj.stderr) |
David Haddock | b87c65e | 2018-11-20 15:53:09 -0800 | [diff] [blame] | 46 | for i in range(retries): |
| 47 | try: |
| 48 | self._host.run('dump_vpd_log --force') |
| 49 | break |
David Haddock | 7d2e052 | 2018-12-04 19:59:11 -0800 | [diff] [blame] | 50 | except error.AutoservRunError as e: |
David Haddock | b87c65e | 2018-11-20 15:53:09 -0800 | [diff] [blame] | 51 | logging.exception('Failed to dump vpd log') |
| 52 | if i == retries - 1: |
David Haddock | 0d3afe9 | 2018-12-03 13:00:21 -0800 | [diff] [blame] | 53 | raise error.TestFail('Failed to dump vpd log: ' |
David Haddock | 7d2e052 | 2018-12-04 19:59:11 -0800 | [diff] [blame] | 54 | '%s' % e.result_obj.stderr) |
David Haddock | dd35fb5e | 2018-05-03 14:52:33 -0700 | [diff] [blame] | 55 | |
| 56 | |
David Haddock | dd35fb5e | 2018-05-03 14:52:33 -0700 | [diff] [blame] | 57 | def _check_rlz_vpd_settings_post_ping(self): |
| 58 | """Checks that rlz related vpd settings are correct after the test.""" |
| 59 | def should_send_rlz_ping(): |
Greg Edelston | 7cea0c4 | 2019-11-26 15:17:22 -0700 | [diff] [blame] | 60 | """Ask vpd (on the DUT) whether we are ready to send rlz ping""" |
David Haddock | dd35fb5e | 2018-05-03 14:52:33 -0700 | [diff] [blame] | 61 | return int(self._host.run('vpd -i RW_VPD -g ' |
| 62 | 'should_send_rlz_ping').stdout) |
| 63 | |
| 64 | utils.poll_for_condition(lambda: should_send_rlz_ping() == 0, |
| 65 | timeout=60) |
| 66 | |
| 67 | result = self._host.run('vpd -i RW_VPD -g rlz_embargo_end_date', |
| 68 | ignore_status=True) |
| 69 | if result.exit_status == 0: |
| 70 | raise error.TestFail('rlz_embargo_end_date still present in vpd.') |
| 71 | |
| 72 | |
David Haddock | dd35fb5e | 2018-05-03 14:52:33 -0700 | [diff] [blame] | 73 | def run_once(self, host, ping_timeout=30, logged_in=True): |
Greg Edelston | 7cea0c4 | 2019-11-26 15:17:22 -0700 | [diff] [blame] | 74 | """Main test logic""" |
David Haddock | dd35fb5e | 2018-05-03 14:52:33 -0700 | [diff] [blame] | 75 | self._host = host |
David Haddock | b87c65e | 2018-11-20 15:53:09 -0800 | [diff] [blame] | 76 | if 'veyron_rialto' in self._host.get_board(): |
| 77 | raise error.TestNAError('Skipping test on rialto device.') |
| 78 | |
David Haddock | dd35fb5e | 2018-05-03 14:52:33 -0700 | [diff] [blame] | 79 | self._check_rlz_brand_code() |
| 80 | |
| 81 | # Clear TPM owner so we have no users on DUT. |
| 82 | tpm_utils.ClearTPMOwnerRequest(self._host) |
| 83 | |
| 84 | # Setup DUT to send rlz ping after a short timeout. |
| 85 | self._set_vpd_values() |
David Haddock | dd35fb5e | 2018-05-03 14:52:33 -0700 | [diff] [blame] | 86 | self._host.reboot() |
| 87 | |
| 88 | # Login, do a Google search, check for CAF event in RLZ Data file. |
| 89 | client_at = autotest.Autotest(self._host) |
| 90 | client_at.run_test(self._CLIENT_TEST, ping_timeout=ping_timeout, |
| 91 | logged_in=logged_in) |
| 92 | client_at._check_client_test_result(self._host, self._CLIENT_TEST) |
| 93 | |
| 94 | self._check_rlz_vpd_settings_post_ping() |