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

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

Issue 9127009: Constrained Network test does not fail fast under fatal conditions. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Update comments. Created 8 years, 11 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
Index: chrome/test/functional/media/media_constrained_network_perf.py
diff --git a/chrome/test/functional/media/media_constrained_network_perf.py b/chrome/test/functional/media/media_constrained_network_perf.py
index 83a4583f2f7dc71349098e55bd17fc8391d11c0a..85a6eb7f67b122940c8ac899c6cc4b7c17a71c52 100755
--- a/chrome/test/functional/media/media_constrained_network_perf.py
+++ b/chrome/test/functional/media/media_constrained_network_perf.py
@@ -18,18 +18,19 @@ The CNS code is located under: <root>/src/media/tools/constrained_network_server
"""
import itertools
+import logging
import os
import Queue
import subprocess
import sys
import threading
+import urllib2
import pyauto_media
import pyauto
import pyauto_paths
import pyauto_utils
-
# Settings for each network constraint.
_BANDWIDTH_SETTINGS_KBPS = {'None': 0, 'Low': 256, 'Medium': 2000, 'High': 5000}
_LATENCY_SETTINGS_MS = {'None': 0, 'Low': 43, 'Medium': 105, 'High': 180}
@@ -92,6 +93,7 @@ class TestWorker(threading.Thread):
self._automation_lock = automation_lock
self._pyauto = pyauto_test
self._url = url
+ self._metrics = {}
self.start()
def _FindTabLocked(self, url):
@@ -103,18 +105,18 @@ class TestWorker(threading.Thread):
if tab['url'] == url:
return tab['index']
- def _HaveMetrics(self, unique_url):
- """Returns true if metrics are ready. Set self.{_epp,_ttp} < 0 pre-run."""
+ def _HaveMetric(self, var_name, unique_url):
+ """Checks if unique_url page has variable value ready. Set to < 0 pre-run.
+
+ Args:
+ var_name: The variable name to check the metric for.
+ unique_url: The url of the page to check for the variable's metric.
+ """
with self._automation_lock:
tab = self._FindTabLocked(unique_url)
-
- if self._epp < 0:
- self._epp = int(self._pyauto.GetDOMValue('extra_play_percentage',
- tab_index=tab))
- if self._ttp < 0:
- self._ttp = int(self._pyauto.GetDOMValue('time_to_playback',
- tab_index=tab))
- return self._epp >= 0 and self._ttp >= 0
+ self._metrics[var_name] = int(self._pyauto.GetDOMValue(var_name,
+ tab_index=tab))
+ return self._metrics[var_name] >= 0
def run(self):
"""Opens tab, starts HTML test, and records metrics for each queue entry.
@@ -153,16 +155,26 @@ class TestWorker(threading.Thread):
# Wait until the necessary metrics have been collected. Okay to not lock
# here since pyauto.WaitUntil doesn't call into Chrome.
- self._epp = self._ttp = -1
+ self._metrics['epp'] = self._metrics['ttp'] = -1
self._pyauto.WaitUntil(
- self._HaveMetrics, args=[unique_url], retry_sleep=2,
- timeout=_TEST_VIDEO_DURATION_SEC * 10)
+ self._HaveMetric, args=['ttp', unique_url], retry_sleep=1, timeout=10,
+ debug=False)
- # Record results.
- # TODO(dalecurtis): Support reference builds.
+ # Do not wait for epp if ttp is not available.
series_name = ''.join(name)
- pyauto_utils.PrintPerfResult('epp', series_name, self._epp, '%')
- pyauto_utils.PrintPerfResult('ttp', series_name, self._ttp, 'ms')
+ if self._metrics['ttp'] >= 0:
+ self._pyauto.WaitUntil(
+ self._HaveMetric, args=['epp', unique_url], retry_sleep=2,
+ timeout=_TEST_VIDEO_DURATION_SEC * 10, debug=False)
+
+ # Record results.
+ # TODO(dalecurtis): Support reference builds.
+ pyauto_utils.PrintPerfResult('epp', series_name, self._metrics['epp'],
+ '%')
+ pyauto_utils.PrintPerfResult('ttp', series_name, self._metrics['ttp'],
+ 'ms')
+ else:
+ logging.error('Test %s timed-out.', series_name)
# Close the tab.
with self._automation_lock:
@@ -173,6 +185,27 @@ class TestWorker(threading.Thread):
self._tasks.task_done()
+class ProcessLogger(threading.Thread):
+ """A thread to log a process's stderr output."""
+
+ def __init__(self, process):
+ """Starts the process logger thread.
+
+ Args:
+ process: The process to log.
+ """
+ threading.Thread.__init__(self)
+ self._process = process
+ self.start()
+
+ def run(self):
+ """Adds debug statements for the process's stderr output."""
+ line = True
+ while line:
+ line = self._process.stderr.readline()
+ logging.debug(line)
+
+
class MediaConstrainedNetworkPerfTest(pyauto.PyUITest):
"""PyAuto test container. See file doc string for more information."""
@@ -182,7 +215,8 @@ class MediaConstrainedNetworkPerfTest(pyauto.PyUITest):
'--port', str(_CNS_PORT),
'--interface', 'lo',
'--www-root', os.path.join(
- self.DataDir(), 'pyauto_private', 'media')]
+ self.DataDir(), 'pyauto_private', 'media'),
+ '-v']
process = subprocess.Popen(cmd, stderr=subprocess.PIPE)
@@ -190,12 +224,26 @@ class MediaConstrainedNetworkPerfTest(pyauto.PyUITest):
line = True
while line:
line = process.stderr.readline()
+ logging.debug(line)
if 'STARTED' in line:
self._server_pid = process.pid
pyauto.PyUITest.setUp(self)
- return
+ ProcessLogger(process)
+ if self._CanAccessServer():
+ return
+ # Need to call teardown since the server has already started.
+ self.tearDown()
self.fail('Failed to start CNS.')
+ def _CanAccessServer(self):
+ """Checks if the CNS server can serve a file with no network constraints."""
+ test_url = ''.join([_CNS_BASE_URL, 'f=', _TEST_VIDEO])
+ try:
+ return not urllib2.urlopen(test_url) is None
DaleCurtis 2012/01/10 00:20:18 Use "is not None", it's more readable.
shadi 2012/01/10 00:45:46 Done.
+ except BaseException as e:
DaleCurtis 2012/01/10 00:20:18 except Exception, e:
shadi 2012/01/10 00:45:46 Done.
+ logging.error(e)
DaleCurtis 2012/01/10 00:20:18 Use logging.exception.
shadi 2012/01/10 00:45:46 Done.
+ return False
+
def tearDown(self):
"""Stops the Constrained Network Server (CNS)."""
pyauto.PyUITest.tearDown(self)
« no previous file with comments | « chrome/test/data/media/html/media_constrained_network.html ('k') | media/tools/constrained_network_server/cn.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698