def testGetEvents(self):
        self._log.debug( "\ntestGetEvents" )
        self._router = myDummyRouter()
        self.udpRx = WebbrickUdpEventReceiver( self._router )
        self.udpRx.start()

        # Not really a unit test as it just waits to log events.

        self._sendUdpEvents( testEvents1 )
        self.assertEqual( self._router._seen, allEvents )
class TestWebBrickUdpEventReceiver(unittest.TestCase):

    def setUp(self):
        self._log = logging.getLogger( "TestWebBrickUdpEventReceiver" )
        self._log.debug( "\n\nsetUp" )
        self.loader = None
        self._router = None
        self.udpRx = None
        return

    def tearDown(self):
        self._log.debug( "tearDown" )
        if self.udpRx:
            self.udpRx.stop()
            self.udpRx = None
            time.sleep(3)   # ensure closed down.
        if self.loader:
            self.loader.stop()  # all tasks
            self.loader = None
            time.sleep(3)   # ensure closed down.

        return

    def _sendUdpEvents(self, events ):
        # open socket
        testSkt = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        # generate some UDP event packets
        for pkt in events:
            self._log.debug( "send %s", str(pkt) )
            time.sleep(0.1)
            testSkt.sendto( pkt, ("localhost", 2552) )
        time.sleep(1)
        testSkt.close()

    # Actual tests follow
    def testGetEvents(self):
        self._log.debug( "\ntestGetEvents" )
        self._router = myDummyRouter()
        self.udpRx = WebbrickUdpEventReceiver( self._router )
        self.udpRx.start()

        # Not really a unit test as it just waits to log events.

        self._sendUdpEvents( testEvents1 )
        self.assertEqual( self._router._seen, allEvents )

    def testUdpEvent(self):
        self._log.debug( "\ntestUdpEvent" )

        self.loader = EventRouterLoader()
        self.loader.loadHandlers( getDictFromXmlString(testConfigUdp) )

        self.loader.start()  # all tasks

        self._router = self.loader.getEventRouter()

        self._sendUdpEvents( testEvents2 )
        time.sleep(1)

        TestEventLogger.logEvents()
        #needs updating t handle real webbrick also on network.
        self.assertEqual( len(TestEventLogger._events), 2)
        self.assertEqual( TestEventLogger._events[0].getType(), "http://id.webbrick.co.uk/events/webbrick/TD" )
        self.assertEqual( TestEventLogger._events[0].getSource(), "webbrick/100/TD/0" )
        self.assertEqual( TestEventLogger._events[1].getType(), "http://id.webbrick.co.uk/events/webbrick/TD" )
        self.assertEqual( TestEventLogger._events[1].getSource(), "webbrick/100/TD/1" )

    def testUdpTempEvent(self):
        self._log.debug( "\ntestUdpTempEvent" )

        self.loader = EventRouterLoader()
        self.loader.loadHandlers( getDictFromXmlString(testConfigUdp) )

        self.loader.start()  # all tasks

        self._router = self.loader.getEventRouter()

        self._sendUdpEvents( testEvents3 )
        time.sleep(1)

        TestEventLogger.logEvents()
        #needs updating t handle real webbrick also on network.
        self.assertEqual( len(TestEventLogger._events), 2)
        self.assertEqual( TestEventLogger._events[0].getType(), "http://id.webbrick.co.uk/events/webbrick/CT" )
        self.assertEqual( TestEventLogger._events[0].getSource(), "webbrick/100/CT/1" )
        self.assertEqual( TestEventLogger._events[1].getType(), "http://id.webbrick.co.uk/events/webbrick/ET" )
        self.assertEqual( TestEventLogger._events[1].getSource(), "webbrick/100/ET/1" )        

    def testLotsOfEvents(self):
        self._log.debug( "\n\ntestLotsOfEvents" )
        self.loader = EventRouterLoader()
        self.loader.loadHandlers( getDictFromXmlString(testConfigUdp) )

        self.loader.start()  # all tasks

        self._router = self.loader.getEventRouter()

        NumEvents = 4096

        # open socket
        testSkt = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

        # generate some UDP event packets
        pkt = "\012GTa\001\000\004\100\101\001\000\000\000"
        for i in range(NumEvents):
            testSkt.sendto( pkt+chr(i%256), ("localhost", 2552) )
        testSkt.close()

        time.sleep(5)

        self.failUnless( len(TestEventLogger._events) >= NumEvents, "NumEvents %i, received %i" % (NumEvents, len(TestEventLogger._events) ) )

    def testDummy(self):
        return