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

Unified Diff: tools/telemetry/telemetry/core/backends/chrome/inspector_websocket_unittest.py

Issue 729833002: Move RegisterDomain/UnregisterDomain and its handling to inspector_websocket. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove try-except in domain notification handler. Created 6 years, 1 month 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: tools/telemetry/telemetry/core/backends/chrome/inspector_websocket_unittest.py
diff --git a/tools/telemetry/telemetry/core/backends/chrome/inspector_websocket_unittest.py b/tools/telemetry/telemetry/core/backends/chrome/inspector_websocket_unittest.py
index 0d03ac199825b1371c92955af43ab5044bf7bcc0..64757e86349bc38b45be7c3b1fa855c1755ba5a7 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/inspector_websocket_unittest.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/inspector_websocket_unittest.py
@@ -4,57 +4,46 @@
import unittest
-from telemetry.unittest_util import simple_mock
from telemetry.core.backends.chrome import inspector_websocket
from telemetry.core.backends.chrome import websocket
+from telemetry.unittest_util import simple_mock
class FakeSocket(object):
- """ A fake socket that:
- + Receives first package of data after 10 second in the first recv().
- + Receives second package of data after 10 second in the second recv().
- + Raises a websocket.WebSocketTimeoutException after 15 seconds in the
- third recv().
- + Raises a websocket.WebSocketTimeoutException after 15 seconds in the
- fourth recv().
- + Receives third package of data after 10 second in the fifth recv().
- + Receives last package of data (containing 'method') after 10 second
- in the last recv().
- """
+ """A fake websocket that allows test to send random data."""
def __init__(self, mock_timer):
self._mock_timer = mock_timer
- self._recv_counter = 0
+ self._responses = []
+ self._timeout = None
+
+ def AddResponse(self, response, time):
+ if self._responses:
+ assert self._responses[-1][1] < time, (
+ 'Current response is scheduled earlier than previous response.')
+ self._responses.append((response, time))
def recv(self):
- self._recv_counter += 1
- if self._recv_counter == 1:
- self._mock_timer.SetTime(10)
- return '["foo"]'
- elif self._recv_counter == 2:
- self._mock_timer.SetTime(20)
- return '["bar"]'
- elif self._recv_counter == 3:
- self._mock_timer.SetTime(35)
- raise websocket.WebSocketTimeoutException()
- elif self._recv_counter == 4:
- self._mock_timer.SetTime(50)
+ if not self._responses:
+ raise Exception('No more recorded responses.')
+
+ response, time = self._responses.pop(0)
+ current_time = self._mock_timer.time()
+ if self._timeout is not None and time - current_time > self._timeout:
+ self._mock_timer.SetTime(current_time + self._timeout + 1)
raise websocket.WebSocketTimeoutException()
- elif self._recv_counter == 5:
- self._mock_timer.SetTime(60)
- return '["baz"]'
- elif self._recv_counter == 6:
- self._mock_timer.SetTime(70)
- return '["method"]'
+
+ self._mock_timer.SetTime(time)
+ return response
def settimeout(self, timeout):
- pass
+ self._timeout = timeout
def _ReraiseExceptionErrorHandler(_elapsed_time):
raise
-def _DoNothingExceptionErrorHandler(_elapsed_time):
+def _DoNothingHandler(_elapsed_time):
pass
@@ -66,41 +55,155 @@ class InspectorWebsocketUnittest(unittest.TestCase):
def tearDown(self):
self._mock_timer.Restore()
- def testDispatchNotificationUntilDoneTimedOutOne(self):
+ def testDispatchNotification(self):
+ inspector = inspector_websocket.InspectorWebsocket(
+ error_handler=_ReraiseExceptionErrorHandler)
+ fake_socket = FakeSocket(self._mock_timer)
+ # pylint: disable=protected-access
+ inspector._socket = fake_socket
+
+ results = []
+ def OnTestEvent(result):
+ results.append(result)
+
+ inspector.RegisterDomain('Test', OnTestEvent, _DoNothingHandler)
+ fake_socket.AddResponse('{"method": "Test.foo"}', 5)
+ inspector.DispatchNotifications()
+ self.assertEqual(1, len(results))
+ self.assertEqual('Test.foo', results[0]['method'])
+
+ def testDispatchNotificationTimedOut(self):
inspector = inspector_websocket.InspectorWebsocket(
- notification_handler=lambda data: True,
- error_handler=_ReraiseExceptionErrorHandler)
+ error_handler=_ReraiseExceptionErrorHandler)
+ fake_socket = FakeSocket(self._mock_timer)
# pylint: disable=protected-access
- inspector._socket = FakeSocket(self._mock_timer)
+ inspector._socket = fake_socket
+
+ results = []
+ def OnTestEvent(result):
+ results.append(result)
+
+ inspector.RegisterDomain('Test', OnTestEvent, _DoNothingHandler)
+ fake_socket.AddResponse('{"method": "Test.foo"}', 11)
+ with self.assertRaises(
+ websocket.WebSocketTimeoutException):
+ inspector.DispatchNotifications(timeout=10)
+ self.assertEqual(0, len(results))
+
+ def testDispatchNotificationUntilDoneTimedOut2(self):
+ inspector = inspector_websocket.InspectorWebsocket(
+ error_handler=_ReraiseExceptionErrorHandler)
+ fake_socket = FakeSocket(self._mock_timer)
+ inspector._socket = fake_socket # pylint: disable=W0212
+
+ results = []
+ def OnTestEvent(result):
+ results.append(result)
+
+ inspector.RegisterDomain('Test', OnTestEvent, _DoNothingHandler)
# The third call to socket.recv() will take 15 seconds without any data
# received, hence the below call will raise a
# DispatchNotificationsUntilDoneTimeoutException.
+ fake_socket.AddResponse('{"method": "Test.foo"}', 10)
+ fake_socket.AddResponse('{"method": "Test.bar"}', 20)
+ fake_socket.AddResponse('{"method": "Test.baz"}', 35)
with self.assertRaises(
- inspector_websocket.DispatchNotificationsUntilDoneTimeoutException):
+ inspector_websocket.DispatchNotificationsUntilDoneTimeoutException):
inspector.DispatchNotificationsUntilDone(12)
+ self.assertEqual(2, len(results))
- def testDispatchNotificationUntilDoneTimedOutTwo(self):
+ def testDispatchNotificationsUntilDone(self):
inspector = inspector_websocket.InspectorWebsocket(
- notification_handler=lambda data: True,
- error_handler=_DoNothingExceptionErrorHandler)
+ error_handler=_ReraiseExceptionErrorHandler)
+ fake_socket = FakeSocket(self._mock_timer)
# pylint: disable=protected-access
- inspector._socket = FakeSocket(self._mock_timer)
- # The third and forth calls to socket.recv() will take 30 seconds without
- # any data received, hence the below call will raise a
- # DispatchNotificationsUntilDoneTimeoutException.
- with self.assertRaises(
- inspector_websocket.DispatchNotificationsUntilDoneTimeoutException):
- inspector.DispatchNotificationsUntilDone(29)
+ inspector._socket = fake_socket
- def testDispatchNotificationUntilDoneNotTimedOut(self):
- inspector = inspector_websocket.InspectorWebsocket(
- notification_handler=lambda data: True,
- # pylint: disable=protected-access
- error_handler=_ReraiseExceptionErrorHandler)
- # pylint: disable=protected-access
- inspector._socket = FakeSocket(self._mock_timer)
+ results = []
+ def OnTestEvent(result):
+ results.append(result)
+ return len(results) > 2
+
+ inspector.RegisterDomain('Test', OnTestEvent, _DoNothingHandler)
# Even though it takes 70 seconds to receive all the data, the call below
# will succeed since there are no interval which the previous data package
# received and the next failed data receiving attempt was greater than
# 30 seconds.
+ fake_socket.AddResponse('{"method": "Test.foo"}', 10)
+ fake_socket.AddResponse('{"method": "Test.bar"}', 20)
+ fake_socket.AddResponse('{"method": "Test.baz"}', 35)
+ fake_socket.AddResponse('{"method": "Test.qux"}', 50)
+ fake_socket.AddResponse('{"method": "Test.baz"}', 60)
+ fake_socket.AddResponse('{"method": "Test.foo"}', 70)
inspector.DispatchNotificationsUntilDone(31)
+ self.assertEqual(3, len(results))
+ self.assertEqual('Test.baz', results[2]['method'])
+
+ def testDispatchNotificationsUntilDoneTimedOut(self):
+ inspector = inspector_websocket.InspectorWebsocket(
+ error_handler=_ReraiseExceptionErrorHandler)
+ fake_socket = FakeSocket(self._mock_timer)
+ # pylint: disable=protected-access
+ inspector._socket = fake_socket
+
+ results = []
+ def OnTestEvent(result):
+ results.append(result)
+
+ inspector.RegisterDomain('Test', OnTestEvent, _DoNothingHandler)
+ fake_socket.AddResponse('{"method": "Test.foo"}', 5)
+ fake_socket.AddResponse('{"method": "Test.bar"}', 16)
+ fake_socket.AddResponse('{"method": "Test.baz"}', 20)
+ with self.assertRaises(
+ inspector_websocket.DispatchNotificationsUntilDoneTimeoutException):
+ inspector.DispatchNotificationsUntilDone(10)
+ self.assertEqual(1, len(results))
+
+ def testUnregisterDomain(self):
+ inspector = inspector_websocket.InspectorWebsocket(
+ error_handler=_ReraiseExceptionErrorHandler)
+ fake_socket = FakeSocket(self._mock_timer)
+ # pylint: disable=protected-access
+ inspector._socket = fake_socket
+
+ results = []
+ def OnTestEvent(result):
+ results.append(result)
+
+ inspector.RegisterDomain('Test', OnTestEvent, _DoNothingHandler)
+ inspector.RegisterDomain('Test2', OnTestEvent, _DoNothingHandler)
+ inspector.UnregisterDomain('Test')
+
+ fake_socket.AddResponse('{"method": "Test.foo"}', 5)
+ fake_socket.AddResponse('{"method": "Test2.foo"}', 10)
+
+ inspector.DispatchNotifications()
+ self.assertEqual(0, len(results))
+
+ inspector.DispatchNotifications()
+ self.assertEqual(1, len(results))
+ self.assertEqual('Test2.foo', results[0]['method'])
+
+ def testUnregisterDomainWithUnregisteredDomain(self):
+ inspector = inspector_websocket.InspectorWebsocket(
+ error_handler=_ReraiseExceptionErrorHandler)
+ with self.assertRaises(AssertionError):
+ inspector.UnregisterDomain('Test')
+
+ def testRegisterDomainWillCloseHandler(self):
+ inspector = inspector_websocket.InspectorWebsocket(
+ error_handler=_ReraiseExceptionErrorHandler)
+
+ results = []
+ def OnClose():
+ results.append(1)
+ results2 = []
+ def OnClose2():
+ results2.append(1)
+
+ inspector.RegisterDomain('Test', _DoNothingHandler, OnClose)
+ inspector.RegisterDomain('Test2', _DoNothingHandler, OnClose2)
+ inspector.RegisterDomain('Test3', _DoNothingHandler)
+ inspector.Disconnect()
+ self.assertEqual(1, len(results))
+ self.assertEqual(1, len(results2))

Powered by Google App Engine
This is Rietveld 408576698