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))
 |