95 lines
3.6 KiB
Python
95 lines
3.6 KiB
Python
# Copyright 2017 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 gobject
|
|
import logging
|
|
import os
|
|
import time
|
|
|
|
from autotest_lib.client.bin import test
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.common_lib.cros import chrome, session_manager
|
|
from autotest_lib.client.cros import cryptohome
|
|
from autotest_lib.client.cros.graphics import graphics_utils
|
|
|
|
from dbus.mainloop.glib import DBusGMainLoop
|
|
|
|
|
|
class desktopui_ChromeSanity(test.test):
|
|
"""Performs basic integration testing for Chrome.
|
|
|
|
This test performs very basic tests to verify that Chrome is somewhat
|
|
usable in conjunction with the rest of the system.
|
|
"""
|
|
version = 1
|
|
|
|
_CHECK_CHROME_TIMEOUT_SEC = 30
|
|
_SESSION_START_TIMEOUT_SEC = 20
|
|
|
|
_TEST_FILENAME = 'test.html'
|
|
_TEST_CONTENT = 'Page loaded successfully.'
|
|
|
|
_SCREENSHOT_DIR = '/usr/local/autotest/results/default/' \
|
|
'desktopui_ChromeSanity/results/'
|
|
|
|
|
|
def initialize(self):
|
|
super(desktopui_ChromeSanity, self).initialize()
|
|
|
|
|
|
def run_once(self):
|
|
"""
|
|
Runs the test.
|
|
"""
|
|
dbus_loop = DBusGMainLoop(set_as_default=True)
|
|
listener = session_manager.SessionSignalListener(gobject.MainLoop())
|
|
listener.listen_for_session_state_change('started')
|
|
|
|
logging.info('Logging in...')
|
|
with chrome.Chrome(init_network_controller=True) as cr:
|
|
# Check that Chrome asks session_manager to start a session.
|
|
listener.wait_for_signals(
|
|
desc=('SessionStateChanged "started" D-Bus signal from '
|
|
'session_manager'),
|
|
timeout=self._SESSION_START_TIMEOUT_SEC)
|
|
logging.info('Successfully logged in as "%s"', cr.username)
|
|
|
|
# Check that the user's encrypted home directory was mounted.
|
|
if not cryptohome.is_vault_mounted(user=cr.username,
|
|
allow_fail=False):
|
|
raise error.TestFail(
|
|
'Didn\'t find mounted cryptohome for "%s"' %
|
|
cr.username)
|
|
|
|
# Check that Chrome is able to load a web page.
|
|
cr.browser.platform.SetHTTPServerDirectories(self.bindir)
|
|
url = cr.browser.platform.http_server.UrlOf(
|
|
os.path.join(self.bindir, self._TEST_FILENAME))
|
|
logging.info('Loading %s...', url)
|
|
|
|
try:
|
|
tab = cr.browser.tabs.New()
|
|
tab.Navigate(url)
|
|
tab.WaitForDocumentReadyStateToBeComplete()
|
|
content = tab.EvaluateJavaScript(
|
|
'document.documentElement.innerText')
|
|
if content != self._TEST_CONTENT:
|
|
raise error.TestFail(
|
|
'Expected page content "%s" but got "%s"' %
|
|
(self._TEST_CONTENT, content))
|
|
logging.info('Saw expected content')
|
|
except Exception as e:
|
|
prefix = 'screenshot-%s' % time.strftime('%Y%m%d-%H%M%S')
|
|
logging.info(
|
|
'Got exception; saving screenshot to %s/%s',
|
|
self._SCREENSHOT_DIR, prefix)
|
|
if not os.path.exists(self._SCREENSHOT_DIR):
|
|
os.makedirs(self._SCREENSHOT_DIR)
|
|
graphics_utils.take_screenshot(self._SCREENSHOT_DIR, prefix)
|
|
|
|
if isinstance(e, error.TestFail):
|
|
raise e
|
|
else:
|
|
raise error.TestFail(str(e))
|