[Neo-report] r1875 gregory - /trunk/neo/tests/testConnection.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Mar 1 11:54:55 CET 2010
Author: gregory
Date: Mon Mar 1 11:54:54 2010
New Revision: 1875
Log:
Add tests for HandlerSwitcher.
Modified:
trunk/neo/tests/testConnection.py
Modified: trunk/neo/tests/testConnection.py
==============================================================================
--- trunk/neo/tests/testConnection.py [iso-8859-1] (original)
+++ trunk/neo/tests/testConnection.py [iso-8859-1] Mon Mar 1 11:54:54 2010
@@ -17,7 +17,8 @@
import unittest
from mock import Mock
from neo.connection import BaseConnection, ListeningConnection, Connection, \
- ClientConnection, ServerConnection, MTClientConnection, MTServerConnection
+ ClientConnection, ServerConnection, MTClientConnection, \
+ MTServerConnection, HandlerSwitcher
from neo.connector import getConnectorHandler, registerConnectorHandler
from neo.handler import EventHandler
from neo.tests import DoNothingConnector
@@ -40,7 +41,7 @@
# no connector
bc = BaseConnection(em, handler)
self.assertNotEqual(bc.em, None)
- self.assertEqual(bc.handler, handler)
+ self.assertEqual(bc.getHandler(), handler)
self.assertNotEqual(bc.getEventManager(), None)
self.assertEqual(bc.getHandler(), handler)
self.assertEqual(bc.getUUID(), None)
@@ -1120,6 +1121,156 @@
# XXX check locking ???
+class HandlerSwitcherTests(NeoTestBase):
+
+ def setUp(self):
+ self._handler = handler = Mock({
+ '__repr__': 'initial handler',
+ })
+ self._connection = connection = Mock({
+ '__repr__': 'connection',
+ 'getAddress': ('127.0.0.1', 10000),
+ })
+ self._handlers = HandlerSwitcher(connection, handler)
+
+ def _makeNotification(self, msg_id):
+ packet = Packets.StartOperation()
+ packet.setId(msg_id)
+ return packet
+
+ def _makeRequest(self, msg_id):
+ packet = Packets.AskBeginTransaction(self.getNextTID())
+ packet.setId(msg_id)
+ return packet
+
+ def _makeAnswer(self, msg_id):
+ packet = Packets.AnswerBeginTransaction(self.getNextTID())
+ packet.setId(msg_id)
+ return packet
+
+ def _makeHandler(self):
+ return Mock({'__repr__': 'handler'})
+
+ def _checkPacketReceived(self, handler, packet, index=0):
+ calls = handler.mockGetNamedCalls('packetReceived')
+ self.assertEqual(len(calls), index + 1)
+
+ def _checkCurrentHandler(self, handler):
+ self.assertTrue(self._handlers.getHandler() is handler)
+
+ def testInit(self):
+ self._checkCurrentHandler(self._handler)
+ self.assertFalse(self._handlers.isPending())
+
+ def testEmit(self):
+ self.assertFalse(self._handlers.isPending())
+ request = self._makeRequest(1)
+ self._handlers.emit(request)
+ self.assertTrue(self._handlers.isPending())
+
+ def testHandleNotification(self):
+ # handle with current handler
+ notif1 = self._makeNotification(1)
+ self._handlers.handle(notif1)
+ self._checkPacketReceived(self._handler, notif1)
+ # emit a request and delay an handler
+ request = self._makeRequest(2)
+ self._handlers.emit(request)
+ handler = self._makeHandler()
+ self._handlers.setHandler(handler)
+ # next notification fall into the current handler
+ notif2 = self._makeNotification(3)
+ self._handlers.handle(notif2)
+ self._checkPacketReceived(self._handler, notif2, index=1)
+ # handle with new handler
+ answer = self._makeAnswer(2)
+ self._handlers.handle(answer)
+ notif3 = self._makeNotification(4)
+ self._handlers.handle(notif3)
+ self._checkPacketReceived(handler, notif2)
+
+ def testHandleAnswer1(self):
+ # handle with current handler
+ request = self._makeRequest(1)
+ self._handlers.emit(request)
+ answer = self._makeAnswer(1)
+ self._handlers.handle(answer)
+ self._checkPacketReceived(self._handler, answer)
+
+ def testHandleAnswer2(self):
+ # handle with blocking handler
+ request = self._makeRequest(1)
+ self._handlers.emit(request)
+ handler = self._makeHandler()
+ self._handlers.setHandler(handler)
+ answer = self._makeAnswer(1)
+ self._handlers.handle(answer)
+ self._checkPacketReceived(self._handler, answer)
+ self._checkCurrentHandler(handler)
+
+ def testHandleAnswer3(self):
+ # multiple setHandler
+ r1 = self._makeRequest(1)
+ r2 = self._makeRequest(2)
+ r3 = self._makeRequest(3)
+ a1 = self._makeAnswer(1)
+ a2 = self._makeAnswer(2)
+ a3 = self._makeAnswer(3)
+ h1 = self._makeHandler()
+ h2 = self._makeHandler()
+ h3 = self._makeHandler()
+ # emit all requests and setHandleres
+ self._handlers.emit(r1)
+ self._handlers.setHandler(h1)
+ self._handlers.emit(r2)
+ self._handlers.setHandler(h2)
+ self._handlers.emit(r3)
+ self._handlers.setHandler(h3)
+ self._checkCurrentHandler(self._handler)
+ self.assertTrue(self._handlers.isPending())
+ # process answers
+ self._handlers.handle(a1)
+ self._checkCurrentHandler(h1)
+ self._handlers.handle(a2)
+ self._checkCurrentHandler(h2)
+ self._handlers.handle(a3)
+ self._checkCurrentHandler(h3)
+
+ def testHandleAnswer4(self):
+ # process in disorder
+ r1 = self._makeRequest(1)
+ r2 = self._makeRequest(2)
+ r3 = self._makeRequest(3)
+ a1 = self._makeAnswer(1)
+ a2 = self._makeAnswer(2)
+ a3 = self._makeAnswer(3)
+ h = self._makeHandler()
+ # emit all requests
+ self._handlers.emit(r1)
+ self._handlers.emit(r2)
+ self._handlers.emit(r3)
+ self._handlers.setHandler(h)
+ # process answers
+ self._handlers.handle(a1)
+ self._checkCurrentHandler(self._handler)
+ self._handlers.handle(a2)
+ self._checkCurrentHandler(self._handler)
+ self._handlers.handle(a3)
+ self._checkCurrentHandler(h)
+
+ def testHandleUnexpected(self):
+ # process in disorder
+ r1 = self._makeRequest(1)
+ r2 = self._makeRequest(2)
+ a2 = self._makeAnswer(2)
+ h = self._makeHandler()
+ # emit requests aroung state setHandler
+ self._handlers.emit(r1)
+ self._handlers.setHandler(h)
+ self._handlers.emit(r2)
+ # process answer for next state
+ self._handlers.handle(a2)
+ self.checkAborted(self._connection)
if __name__ == '__main__':
More information about the Neo-report
mailing list