blob: b25a350afddd425f38ac834a6cc1255b57e4f230 [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2011 The Chromium 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 logging
import time
import pyauto_functional
import pyauto
import pyauto_utils
import timer_queue
class ChromeOSLongTerm(pyauto.PyUITest):
"""Set of long running tests for ChromeOS.
This class is comprised of several tests that perform long term tests.
"""
def _ActivateTabWithURL(self, url):
"""Activates the window that has the given tab url.
Args:
url: The url of the tab to find.
Returns:
An array of the index values of the tab and window. Returns None if the
tab connot be found.
"""
info = self.GetBrowserInfo()
windows = info['windows']
for window_index, window in enumerate(windows):
tabs = window['tabs']
for tab_index, tab in enumerate(tabs):
tab['url'] = tab['url'].strip('/')
if tab['url'] == url:
self.ActivateTab(tab_index, window_index)
return [tab_index, window_index]
return None
def _SetupLongTermWindow(self, long_term_pages):
"""Appends a list of tab to the current active window.
Args:
long_term_pages: The list of urls to open.
"""
for url in long_term_pages:
self.AppendTab(pyauto.GURL(url))
def _RefreshLongTermWindow(self, long_term_pages):
""" Refreshes all of the tabs from the given list.
Args:
long_term_pages: The list of urls to refresh.
"""
for page in long_term_pages:
long_index = self._ActivateTabWithURL(page)
if not long_index:
logging.info('Unable to find page with url: %s.')
else:
self.ActivateTab(long_index[0], long_index[1])
self.ReloadActiveTab(long_index[1])
def _ConfigureNewWindow(self, pages, incognito=False):
"""Setups a windows with multiple tabs running.
This method acts as a state machine. If a window containing a tab with the
url of the first item of pages it closes that window. If that window
cannot be found then a new window with the urls in pages is opened.
Args:
pages: The list of urls to load.
"""
page_index = self._ActivateTabWithURL(pages[0])
if not page_index:
# This means the pages do not exist, load them
if incognito:
self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW)
else:
self.OpenNewBrowserWindow(True)
for url in pages:
self.AppendTab(pyauto.GURL(url), self.GetBrowserWindowCount() - 1)
# Cycle through the pages to make sure they render
win = self.GetBrowserInfo()['windows'][self.GetBrowserWindowCount() - 1]
for tab in win['tabs']:
self.ActivateTab(tab['index'], self.GetBrowserWindowCount() - 1)
# Give the plugin time to activate
time.sleep(1.5)
else:
self.CloseBrowserWindow(page_index[1])
def testLongTerm(self):
"""Main entry point for the long term tests.
This method will spin in a while loop forever until it encounters a keyboard
interrupt. Other worker methods will be managed by the TimerQueue.
"""
long_term_pages = ['http://news.google.com', 'http://www.engadget.com',
'http://www.washingtonpost.com']
flash_pages = [
'http://www.craftymind.com/factory/guimark2/FlashChartingTest.swf',
'http://www.craftymind.com/factory/guimark2/FlashGamingTest.swf',
'http://www.craftymind.com/factory/guimark2/FlashTextTest.swf']
incognito_pages = ['http://www.msn.com', 'http://www.ebay.com',
'http://www.bu.edu', 'http://www.youtube.com']
start_time = time.time()
self._SetupLongTermWindow(long_term_pages)
timers = timer_queue.TimerQueue()
timers.AddTimer(self._ConfigureNewWindow, 90, args=(flash_pages,))
timers.AddTimer(self._RefreshLongTermWindow, 30, args=(long_term_pages,))
timers.AddTimer(self._ConfigureNewWindow, 15, args=(incognito_pages, True))
timers.start()
try:
while True:
if not timers.is_alive():
logging.error('Timer queue died, shutting down.')
return
time.sleep(1)
except KeyboardInterrupt:
# Kill the timers
timers.Stop()
if __name__ == '__main__':
pyauto_functional.Main()