Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10147)

Unified Diff: chrome/test/functional/media/worker_thread.py

Issue 222873002: Remove pyauto tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: sync Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/functional/media/pyauto_media.py ('k') | chrome/test/functional/memory.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/functional/media/worker_thread.py
===================================================================
--- chrome/test/functional/media/worker_thread.py (revision 261231)
+++ chrome/test/functional/media/worker_thread.py (working copy)
@@ -1,154 +0,0 @@
-# Copyright (c) 2012 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.
-
-"""Worker thread base class.
-
-Worker threads are used to run multiple PyUITests simultaneously. They
-synchronize calls to the browser."""
-
-import itertools
-import threading
-import pyauto
-
-
-# A static lock used to synchronize worker threads access to the browser.
-__lock = threading.RLock()
-
-def synchronized(fn):
- """A decorator to wrap a lock around function calls."""
- def syncFun(*args, **kwargs):
- with __lock:
- return fn(*args, **kwargs)
-
- return syncFun
-
-
-def RunWorkerThreads(pyauto_test, test_worker_class, tasks, num_threads,
- test_path):
- """Creates a matrix of tasks and starts test worker threads to run them.
-
- Args:
- pyauto_test: Reference to a pyauto.PyUITest instance.
- test_worker_class: WorkerThread class reference.
- tasks: Queue of tasks to run by the worker threads.
- num_threads: Number of threads to run simultaneously.
- test_path: Path to HTML/JavaScript test code.
- """
- # Convert relative test path into an absolute path.
- test_url = pyauto_test.GetFileURLForDataPath(test_path)
-
- # Add shutdown magic to end of queue.
- for _ in xrange(num_threads):
- tasks.put(None)
-
- threads = []
- for _ in xrange(num_threads):
- threads.append(test_worker_class(pyauto_test, tasks, test_url))
-
- # Wait for threads to exit, gracefully or otherwise.
- for thread in threads:
- thread.join()
-
- return sum(thread.failures for thread in threads)
-
-
-class WorkerThread(threading.Thread):
- """Thread which for each queue task: opens tab, runs task, closes tab."""
-
- # Atomic, monotonically increasing task identifier. Used to ID tabs.
- _task_id = itertools.count()
-
- def __init__(self, pyauto_test, tasks, url):
- """Sets up WorkerThread class variables.
-
- Args:
- pyauto_test: Reference to a pyauto.PyUITest instance.
- tasks: Queue containing task tuples used by RunTest().
- url: File URL to HTML/JavaScript test code.
- """
- threading.Thread.__init__(self)
- self.__pyauto = pyauto_test
- self.__tasks = tasks
- self.__url = url
- self.failures = 0
- self.start()
-
- def RunTask(self, unique_url, task):
- """Runs the specific task on the url test page.
-
- This method should be overridden to start the test on the unique_url page.
-
- Args:
- unique_url: A unique identifier of the test page.
- task: A tuple with information needed to run the test.
- Returns:
- True if the task finished as expected.
- """
- raise NotImplementedError('RunTask should be defined in a subclass.')
-
- def run(self):
- """For each task in queue: opens new tab, calls RunTask(), then closes tab.
-
- No exception handling is done to make sure the main thread exits properly
- during Chrome crashes or other failures.
-
- For a clean shutdown, put the magic exit value None in the queue.
- """
- while True:
- task = self.__tasks.get()
- # Check for magic exit values.
- if task is None:
- break
- # Make the test URL unique so we can figure out our tab index later.
- unique_url = '%s?%d' % (self.__url, WorkerThread._task_id.next())
- self.AppendTab(unique_url)
- if not self.RunTask(unique_url, task):
- self.failures += 1
- self.CloseTabByURL(unique_url)
- self.__tasks.task_done()
-
- def __FindTabLocked(self, url):
- """Returns the tab index for the tab belonging to this url.
-
- __lock must be owned by caller.
- """
- if url is None:
- return 0
- for tab in self.__pyauto.GetBrowserInfo()['windows'][0]['tabs']:
- if tab['url'] == url:
- return tab['index']
-
- # The following are wrappers to pyauto.PyUITest functions. They are wrapped
- # with an internal lock to avoid problems when more than one thread edits the
- # state of the browser.
- #
- # We limit access of subclasses to the following functions. If subclasses
- # access other PyUITest functions, then there is no guarantee of thread
- # safety.
- #
- # For details on the args check pyauto.PyUITest class.
- @synchronized
- def AppendTab(self, url):
- self.__pyauto.AppendTab(pyauto.GURL(url))
-
- @synchronized
- def CallJavascriptFunc(self, fun_name, fun_args=[], url=None):
- return self.__pyauto.CallJavascriptFunc(fun_name, fun_args,
- tab_index=self.__FindTabLocked(url))
-
- @synchronized
- def CloseTabByURL(self, url):
- """Closes the tab with the given url."""
- self.__pyauto.CloseTab(tab_index=self.__FindTabLocked(url))
-
- @synchronized
- def GetDOMValue(self, name, url=None):
- return self.__pyauto.GetDOMValue(name, tab_index=self.__FindTabLocked(url))
-
- def WaitUntil(self, *args, **kwargs):
- """We do not need to lock WaitUntil since it does not call into Chrome.
-
- Ensure that the function passed in the args is thread safe.
- """
- return self.__pyauto.WaitUntil(*args, **kwargs)
« no previous file with comments | « chrome/test/functional/media/pyauto_media.py ('k') | chrome/test/functional/memory.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698