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

Unified Diff: tools/telemetry/telemetry/core/backends/chrome_inspector/tracing_backend_unittest.py

Issue 942113004: Telemetry: Refactor inspector_websocket to create cleaner interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments from slamm. Created 5 years, 10 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 | « tools/telemetry/telemetry/core/backends/chrome_inspector/tracing_backend.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/core/backends/chrome_inspector/tracing_backend_unittest.py
diff --git a/tools/telemetry/telemetry/core/backends/chrome_inspector/tracing_backend_unittest.py b/tools/telemetry/telemetry/core/backends/chrome_inspector/tracing_backend_unittest.py
index 48d8650fe8fc3616c104fdaf47826866a42e5ff0..115d7dec2d9c8486d272e68343e82594cabde998 100644
--- a/tools/telemetry/telemetry/core/backends/chrome_inspector/tracing_backend_unittest.py
+++ b/tools/telemetry/telemetry/core/backends/chrome_inspector/tracing_backend_unittest.py
@@ -8,12 +8,62 @@ import unittest
from telemetry import decorators
from telemetry.core import util
+from telemetry.core.backends.chrome_inspector import inspector_websocket
+from telemetry.core.backends.chrome_inspector import tracing_backend
+from telemetry.core.backends.chrome_inspector import websocket
from telemetry.core.platform import tracing_category_filter
from telemetry.core.platform import tracing_options
from telemetry.timeline import model as model_module
from telemetry.timeline import trace_data as trace_data_module
+from telemetry.unittest_util import simple_mock
from telemetry.unittest_util import tab_test_case
+util.AddDirToPythonPath(util.GetTelemetryDir(), 'third_party', 'mock')
+import mock
+
+
+class FakeInspectorWebsocket(object):
+ """A fake InspectorWebsocket.
+
+ A fake that allows tests to send pregenerated data. Normal
+ InspectorWebsockets allow for any number of domain handlers. This fake only
+ allows up to 1 domain handler, and assumes that the domain of the response
+ always matches that of the handler.
+ """
+ def __init__(self, mock_timer):
+ self._mock_timer = mock_timer
+ self._responses = []
+ self._handler = None
+
+ def RegisterDomain(self, _, handler):
+ self._handler = handler
+
+ def AddResponse(self, method, value, time):
+ if self._responses:
+ assert self._responses[-1][1] < time, (
+ 'Current response is scheduled earlier than previous response.')
+ params = {'value': value}
+ response = {'method': method, 'params': params}
+ self._responses.append((response, time))
+
+ def Connect(self, _):
+ pass
+
+ def DispatchNotifications(self, timeout):
+ current_time = self._mock_timer.time()
+ if not self._responses:
+ self._mock_timer.SetTime(current_time + timeout + 1)
+ raise websocket.WebSocketTimeoutException()
+
+ response, time = self._responses[0]
+ if time - current_time > timeout:
+ self._mock_timer.SetTime(current_time + timeout + 1)
+ raise websocket.WebSocketTimeoutException()
+
+ self._responses.pop(0)
+ self._mock_timer.SetTime(time + 1)
+ self._handler(response)
+
class TracingBackendTest(tab_test_case.TabTestCase):
@@ -53,3 +103,44 @@ class TracingBackendTest(tab_test_case.TabTestCase):
self.assertFalse(self._tracing_controller.is_tracing_running)
# Calling stop again will raise exception
self.assertRaises(Exception, self._tracing_controller.Stop)
+
+
+class TracingBackendUnitTest(unittest.TestCase):
+ def setUp(self):
+ self._mock_timer = simple_mock.MockTimer(tracing_backend)
+
+ def tearDown(self):
+ self._mock_timer.Restore()
+
+ def testCollectTracingDataTimeout(self):
+ inspector = FakeInspectorWebsocket(self._mock_timer)
+ inspector.AddResponse('Tracing.dataCollected', 'asdf1', 9)
+ inspector.AddResponse('Tracing.dataCollected', 'asdf2', 19)
+ inspector.AddResponse('Tracing.tracingComplete', 'asdf3', 35)
+
+ with mock.patch('telemetry.core.backends.chrome_inspector.'
+ 'inspector_websocket.InspectorWebsocket') as mock_class:
+ mock_class.return_value = inspector
+ backend = tracing_backend.TracingBackend(devtools_port=65000)
+
+ # The third response is 16 seconds after the second response, so we expect
+ # a TracingTimeoutException.
+ with self.assertRaises(tracing_backend.TracingTimeoutException):
+ backend._CollectTracingData(10)
+ self.assertEqual(2, len(backend._trace_events))
+ self.assertFalse(backend._has_received_all_tracing_data)
+
+ def testCollectTracingDataNoTimeout(self):
+ inspector = FakeInspectorWebsocket(self._mock_timer)
+ inspector.AddResponse('Tracing.dataCollected', 'asdf1', 9)
+ inspector.AddResponse('Tracing.dataCollected', 'asdf2', 14)
+ inspector.AddResponse('Tracing.tracingComplete', 'asdf3', 19)
+
+ with mock.patch('telemetry.core.backends.chrome_inspector.'
+ 'inspector_websocket.InspectorWebsocket') as mock_class:
+ mock_class.return_value = inspector
+ backend = tracing_backend.TracingBackend(devtools_port=65000)
+
+ backend._CollectTracingData(10)
+ self.assertEqual(2, len(backend._trace_events))
+ self.assertTrue(backend._has_received_all_tracing_data)
« no previous file with comments | « tools/telemetry/telemetry/core/backends/chrome_inspector/tracing_backend.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698