blob: 6a3cf1e9ef0c7fce438b748cd5c2f8c1beba1900 [file] [log] [blame]
# Copyright 2018 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.
import json
import logging
import time
from autotest_lib.client.bin import test
from autotest_lib.client.bin import utils
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib.cros import chrome
from autotest_lib.client.cros import cryptohome
from autotest_lib.client.cros.input_playback import input_playback
class desktopui_CheckRlzPingSent(test.test):
"""Tests creating a new user, doing a google search, checking RLZ Data."""
version = 1
_RLZ_DATA_FILE = "/home/chronos/user/RLZ Data"
def _verify_rlz_data(self):
"""Checks that the CAF event is in the RLZ Data file."""
def rlz_data_exists():
"""Check rlz data exists."""
rlz_data = json.loads(utils.run('cat "%s"' %
self._RLZ_DATA_FILE).stdout)
logging.debug('rlz data: %s', rlz_data)
if 'stateful_events' in rlz_data:
return 'CAF' in rlz_data['stateful_events']['C']['_']
return False
utils.poll_for_condition(rlz_data_exists, timeout=120)
def _check_url_for_rlz(self, cr):
"""
Does a Google search and ensures there is an rlz parameter.
@param cr: Chrome instance.
"""
timeout_minutes = 2
timeout = time.time() + 60 * timeout_minutes
# Setup a keyboard emulator to open new tabs and type a search.
with input_playback.InputPlayback() as player:
player.emulate(input_type='keyboard')
player.find_connected_inputs()
while True:
# Open a new tab, search in the omnibox.
player.blocking_playback_of_default_file(
input_type='keyboard', filename='keyboard_ctrl+t')
player.blocking_playback_of_default_file(
input_type='keyboard', filename='keyboard_b+a+d+enter')
logging.info(cr.browser.tabs[-1].url)
if 'rlz=' in cr.browser.tabs[-1].url:
break
else:
if time.time() > timeout:
raise error.TestFail('RLZ ping did not send in %d '
'minutes.' % timeout_minutes)
time.sleep(10)
def _wait_for_rlz_lock(self):
"""Waits for the DUT to get into locked state after login."""
def get_install_lockbox_finalized_status():
status = cryptohome.get_tpm_more_status()
return status.get('install_lockbox_finalized')
try:
utils.poll_for_condition(
lambda: get_install_lockbox_finalized_status(),
exception=utils.TimeoutError(),
timeout=120)
except utils.TimeoutError:
raise error.TestFail('Timed out trying to lock the device')
def run_once(self, logged_in=True):
"""
Main entry to the test.
@param logged_in: True for real login or guest mode.
"""
# If we are testing the ping is sent in guest mode (logged_in=False),
# we need to first do a real login and wait for the DUT to become
# 'locked' for rlz. Then logout and enter guest mode.
if not logged_in:
with chrome.Chrome(logged_in=True):
self._wait_for_rlz_lock()
with chrome.Chrome(logged_in=logged_in) as cr:
self._check_url_for_rlz(cr)
self._verify_rlz_data()