Ejemplo n.º 1
0
    def testGetRidOfBadFileDescriptors(self):
        reactor = Reactor()

        class BadSocket(object):
            def fileno(self):
                return 88

            def close(self):
                raise Exception('hell breaks loose')

        self.timeout = False

        def timeout():
            self.timeout = True

        reactor.addReader(99, lambda: None)  # broken
        reactor.addWriter(99, lambda: None)  # broken
        reactor.addReader(BadSocket(), lambda: None)  # even more broken
        reactor.addTimer(0.01, timeout)
        with self.stderr_replaced() as s:
            for i in range(10):
                if self.timeout:
                    break
                reactor.step()
            self.assertTrue("Bad file descriptor" in s.getvalue(),
                            s.getvalue())
        self.assertTrue(self.timeout)
        self.assertEquals({}, reactor._readers)
        self.assertEquals({}, reactor._writers)
        self.assertEquals([], reactor._timers)
Ejemplo n.º 2
0
    def testConnect(self):
        self.req = False
        serverResponse = 'Hello World'
        def onRequest(**kwargs):
            yield 'HTTP/1.0 200 OK\r\n\r\n' + serverResponse
            self.req = True

        port = randint(15000, 16000)
        reactor = Reactor()
        try:
            server = HttpsServer(reactor, port, onRequest, keyfile='ssl/server.pkey', certfile='ssl/server.cert')
            server.listen()

            p = Popen('wget -O - --no-check-certificate --quiet https://localhost:%s' % port, shell=True, stdout=PIPE)

            popenStdout = []
            def readPopenStdout():
                popenStdout.append(p.stdout.read())
            reactor.addReader(p.stdout, readPopenStdout)

            while not self.req:
               reactor.step()

            reactor.step()
            self.assertEquals(1, len(popenStdout))
            self.assertEquals(serverResponse, popenStdout[0])
        finally:
            server.shutdown()
Ejemplo n.º 3
0
    def testReaderOrWriterDoesNotMaskSystemExit(self):
        fd, path = mkstemp()
        reactor = Reactor()

        def raiser():
            raise SystemExit('shutdown...')

        reactor.addReader(sok=fd, sink=raiser)
        self.assertEquals([raiser],
                          [c.callback for c in reactor._readers.values()])
        try:
            reactor.step()
            self.fail('step() must raise SystemExit')
        except SystemExit:
            self.assertEquals([],
                              [c.callback for c in reactor._readers.values()])

        fd, path = mkstemp()
        reactor = Reactor()
        reactor.addWriter(sok=fd, source=raiser)
        try:
            reactor.step()
            self.fail('step() must raise SystemExit')
        except SystemExit:
            self.assertEquals([],
                              [c.callback for c in reactor._readers.values()])
Ejemplo n.º 4
0
    def testReaderOrWriterDoesNotMaskKeyboardInterrupt(self):
        fd, path = mkstemp()
        reactor = Reactor()

        def raiser():
            raise KeyboardInterrupt('Ctrl-C')

        reactor.addReader(sok=fd, sink=raiser)
        self.assertEquals([raiser],
                          [c.callback for c in reactor._readers.values()])
        try:
            reactor.step()
            self.fail('step() must raise KeyboardInterrupt')
        except KeyboardInterrupt:
            self.assertEquals([],
                              [c.callback for c in reactor._readers.values()])

        fd, path = mkstemp()
        reactor = Reactor()
        reactor.addWriter(sok=fd, source=raiser)
        try:
            reactor.step()
            self.fail('step() must raise KeyboardInterrupt')
        except KeyboardInterrupt:
            self.assertEquals([],
                              [c.callback for c in reactor._readers.values()])
Ejemplo n.º 5
0
 def testAddSocketRaisesException(self):
     class Sok: # raise exception when put into set
         def __hash__(self): raise Exception('aap')
     reactor = Reactor()
     try:
         reactor.addReader(Sok(), None)
         self.fail()
     except Exception, e:
         self.assertEquals('aap', str(e))
Ejemplo n.º 6
0
 def testAddSocketReading(self):
     class Sok:
         def __hash__(self): return 1
     reactor = Reactor()
     mockSok = Sok()
     self.assertTrue(mockSok not in reactor._readers)
     reactor.addReader(mockSok, lambda: None)
     self.assertTrue(mockSok in reactor._readers)
     reactor.removeReader(mockSok)
     self.assertFalse(mockSok in reactor._readers)
Ejemplo n.º 7
0
 def testDoNotDieButLogOnProgrammingErrors(self):
     reactor = Reactor()
     reactor.addReader('not a sok', lambda: None)
     try:
         sys.stderr = StringIO()
         reactor.step()
         sys.stderr.seek(0)
         self.assertTrue('TypeError: argument must be an int' in sys.stderr.getvalue())
         sys.stderr = sys.__stderr__
     except TypeError:
         self.fail('must not fail')
Ejemplo n.º 8
0
 def testWriteFollowsRead(self):
     reactor = Reactor(lambda r,w,o,t: (r,w,o))
     t = []
     def read():
         t.append('t1')
     def write():
         t.append('t2')
     reactor.addWriter('sok1', write)
     reactor.addReader('sok1', read)
     reactor.step()
     self.assertEquals(['t1', 't2'], t)
Ejemplo n.º 9
0
    def testAddSocketRaisesException(self):
        class Sok:  # raise exception when put into set
            def __hash__(self):
                raise Exception('aap')

        reactor = Reactor()
        try:
            reactor.addReader(Sok(), None)
            self.fail()
        except Exception, e:
            self.assertEquals('aap', str(e))
Ejemplo n.º 10
0
 def testReadFollowsTimer(self):
     reactor = Reactor(lambda r,w,o,t: (r,w,o))
     t = []
     def timer():
         t.append('t1')
     def read():
         t.append('t2')
     reactor.addTimer(0, timer)
     reactor.addReader('sok1', read)
     reactor.step()
     self.assertEquals(['t1', 't2'], t)
Ejemplo n.º 11
0
 def testDoNotDieButLogOnProgrammingErrors(self):
     reactor = Reactor()
     reactor.addReader('not a sok', lambda: None)
     try:
         sys.stderr = StringIO()
         reactor.step()
         sys.stderr.seek(0)
         self.assertTrue(
             'TypeError: argument must be an int' in sys.stderr.getvalue())
         sys.stderr = sys.__stderr__
     except TypeError:
         self.fail('must not fail')
Ejemplo n.º 12
0
    def testAddSocketReading(self):
        class Sok:
            def __hash__(self):
                return 1

        reactor = Reactor()
        mockSok = Sok()
        self.assertTrue(mockSok not in reactor._readers)
        reactor.addReader(mockSok, lambda: None)
        self.assertTrue(mockSok in reactor._readers)
        reactor.removeReader(mockSok)
        self.assertFalse(mockSok in reactor._readers)
Ejemplo n.º 13
0
 def testReadDeletesWrite(self):
     reactor = Reactor(lambda r,w,o,t: (r,w,o))
     self.read = self.write = False
     def read():
         self.read = True
         reactor.removeWriter('sok1')
     def write():
         self.write = True
     reactor.addWriter('sok1', write)
     reactor.addReader('sok1', read)
     reactor.step()
     self.assertTrue(self.read)
     self.assertFalse(self.write)
Ejemplo n.º 14
0
 def testTimerDeletesRead(self):
     reactor = Reactor(lambda r,w,o,t: (r,w,o))
     self.read = self.timer = False
     def read():
         self.read = True
     def timer():
         self.timer = True
         reactor.removeReader('sok1')
     reactor.addTimer(0, timer)
     reactor.addReader('sok1', read)
     reactor.step()
     self.assertTrue(self.timer)
     self.assertFalse(self.read)
Ejemplo n.º 15
0
 def testAssertionErrorInReadCallback(self):
     sys.stderr = StringIO()
     try:
         def callback(): raise AssertionError('here is the assertion')
         reactor = Reactor(lambda r, w, o, t: (r,w,o))
         reactor.addReader(9, callback)
         try:
             reactor.step()
             self.fail('must raise exception')
         except AssertionError, e:
             self.assertEquals('here is the assertion', str(e))
     finally:
         sys.stderr = sys.__stderr__
Ejemplo n.º 16
0
    def testWriteFollowsRead(self):
        reactor = Reactor(lambda r, w, o, t: (r, w, o))
        t = []

        def read():
            t.append('t1')

        def write():
            t.append('t2')

        reactor.addWriter('sok1', write)
        reactor.addReader('sok1', read)
        reactor.step()
        self.assertEquals(['t1', 't2'], t)
Ejemplo n.º 17
0
    def testReadFollowsTimer(self):
        reactor = Reactor(lambda r, w, o, t: (r, w, o))
        t = []

        def timer():
            t.append('t1')

        def read():
            t.append('t2')

        reactor.addTimer(0, timer)
        reactor.addReader('sok1', read)
        reactor.step()
        self.assertEquals(['t1', 't2'], t)
Ejemplo n.º 18
0
 def testReactorResumeReader(self):
     handle = ['initial value']
     reactor = Reactor(select_func=mockselect)
     def callback():
         handle[0] = reactor.suspend()
         yield
         yield
     sok = MockSocket()
     reactor.addReader(sok, callback().next)
     reactor.step()
     reactor.resumeReader(handle[0])
     reactor.step()
     self.assertFalse(sok in reactor._writers)
     self.assertTrue(sok in reactor._readers)
     self.assertRaises(KeyError, reactor.resumeReader, handle[0])
Ejemplo n.º 19
0
 def testReadFile(self):
     reactor = Reactor()
     fd, path = mkstemp()
     os.write(fd, 'some data')
     os.close(fd)
     try:
         f = open(path)
         def readable():
             self.readable = True
         reactor.addReader(f, readable)
         reactor.step()
         self.assertTrue(self.readable)
     finally:
         f.close()
         os.remove(path)
Ejemplo n.º 20
0
 def testGetRidOfClosedSocket(self):
     reactor = Reactor()
     sok = socket()
     sok.close()
     callbacks = []
     def callback():
         callbacks.append(True)
     reactor.addReader(sok, callback)
     reactor.addWriter(sok, callback)
     with self.stderr_replaced() as s:
         reactor.step()
         reactor.step()
         self.assertTrue("Bad file descriptor" in s.getvalue(), s.getvalue())
     self.assertEquals({}, reactor._readers)
     self.assertEquals([True, True], callbacks)
Ejemplo n.º 21
0
    def testAssertionErrorInReadCallback(self):
        sys.stderr = StringIO()
        try:

            def callback():
                raise AssertionError('here is the assertion')

            reactor = Reactor(lambda r, w, o, t: (r, w, o))
            reactor.addReader(9, callback)
            try:
                reactor.step()
                self.fail('must raise exception')
            except AssertionError, e:
                self.assertEquals('here is the assertion', str(e))
        finally:
            sys.stderr = sys.__stderr__
Ejemplo n.º 22
0
    def testReadDeletesWrite(self):
        reactor = Reactor(lambda r, w, o, t: (r, w, o))
        self.read = self.write = False

        def read():
            self.read = True
            reactor.removeWriter('sok1')

        def write():
            self.write = True

        reactor.addWriter('sok1', write)
        reactor.addReader('sok1', read)
        reactor.step()
        self.assertTrue(self.read)
        self.assertFalse(self.write)
Ejemplo n.º 23
0
    def testTimerDeletesRead(self):
        reactor = Reactor(lambda r, w, o, t: (r, w, o))
        self.read = self.timer = False

        def read():
            self.read = True

        def timer():
            self.timer = True
            reactor.removeReader('sok1')

        reactor.addTimer(0, timer)
        reactor.addReader('sok1', read)
        reactor.step()
        self.assertTrue(self.timer)
        self.assertFalse(self.read)
Ejemplo n.º 24
0
    def testReadFile(self):
        reactor = Reactor()
        fd, path = mkstemp()
        os.write(fd, 'some data')
        os.close(fd)
        try:
            f = open(path)

            def readable():
                self.readable = True

            reactor.addReader(f, readable)
            reactor.step()
            self.assertTrue(self.readable)
        finally:
            f.close()
            os.remove(path)
Ejemplo n.º 25
0
    def testGetRidOfClosedSocket(self):
        reactor = Reactor()
        sok = socket()
        sok.close()
        callbacks = []

        def callback():
            callbacks.append(True)

        reactor.addReader(sok, callback)
        reactor.addWriter(sok, callback)
        with self.stderr_replaced() as s:
            reactor.step()
            reactor.step()
            self.assertTrue("Bad file descriptor" in s.getvalue(),
                            s.getvalue())
        self.assertEquals({}, reactor._readers)
        self.assertEquals([True, True], callbacks)
Ejemplo n.º 26
0
 def testCleanUp(self):
     reactor = Reactor(select_func=mockselect)
     def handler():
         reactor.suspend()
         yield
     reactor.addWriter(1, lambda: None)
     reactor.addReader(2, lambda: None)
     reactor.addReader(3, handler().next)
     reactor.step()
     self.assertTrue(1 in reactor._writers)
     reactor.cleanup(1)
     self.assertFalse(1 in reactor._writers)
     self.assertTrue(2 in reactor._readers)
     reactor.cleanup(2)
     self.assertFalse(2 in reactor._readers)
     self.assertTrue(3 in reactor._suspended)
     reactor.cleanup(3)
     self.assertFalse(3 in reactor._suspended)
Ejemplo n.º 27
0
    def testReactorSuspend(self):
        handle = ['initial value']
        reactor = Reactor(select_func=mockselect)
        def callback():
            handle[0] = reactor.suspend()
        sok = MockSocket()
        reactor.addReader(sok, callback)
        self.assertTrue(sok in reactor._readers)
        reactor.step()
        self.assertTrue(sok not in reactor._readers)

        sok = MockSocket()
        reactor.addWriter(sok, callback)
        self.assertTrue(sok in reactor._writers)
        reactor.step()
        self.assertTrue(sok not in reactor._writers)
        self.assertTrue(handle[0] != None)
        self.assertTrue(handle[0] != 'initial value')
Ejemplo n.º 28
0
    def testReaderOrWriterDoesNotMaskSystemExit(self):
        fd, path = mkstemp()
        reactor = Reactor()
        def raiser():
            raise SystemExit('shutdown...')
        reactor.addReader(sok=fd, sink=raiser)
        self.assertEquals([raiser], [c.callback for c in reactor._readers.values()])
        try:
            reactor.step()
            self.fail('step() must raise SystemExit')
        except SystemExit:
            self.assertEquals([], [c.callback for c in reactor._readers.values()])

        fd, path = mkstemp()
        reactor = Reactor()
        reactor.addWriter(sok=fd, source=raiser)
        try:
            reactor.step()
            self.fail('step() must raise SystemExit')
        except SystemExit:
            self.assertEquals([], [c.callback for c in reactor._readers.values()])
Ejemplo n.º 29
0
    def testReaderOrWriterDoesNotMaskKeyboardInterrupt(self):
        fd, path = mkstemp()
        reactor = Reactor()
        def raiser():
            raise KeyboardInterrupt('Ctrl-C')
        reactor.addReader(sok=fd, sink=raiser)
        self.assertEquals([raiser], [c.callback for c in reactor._readers.values()])
        try:
            reactor.step()
            self.fail('step() must raise KeyboardInterrupt')
        except KeyboardInterrupt:
            self.assertEquals([], [c.callback for c in reactor._readers.values()])

        fd, path = mkstemp()
        reactor = Reactor()
        reactor.addWriter(sok=fd, source=raiser)
        try:
            reactor.step()
            self.fail('step() must raise KeyboardInterrupt')
        except KeyboardInterrupt:
            self.assertEquals([], [c.callback for c in reactor._readers.values()])
Ejemplo n.º 30
0
 def testShutdownReactor(self):
     reactor = Reactor()
     sok1 = MockSocket()
     sok2 = MockSocket()
     sok3 = MockSocket()
     def callback():
         reactor.suspend()
     reactor.addReader(sok1, lambda: None)
     reactor.addWriter(sok2, lambda: None)
     reactor.addWriter(sok3, callback)
     reactor.step()
     self.assertFalse(sok3.fileno() in reactor._fds)
     self.assertFalse(sok3.fileno() in reactor._fds)
     with self.stdout_replaced() as s:
         reactor.shutdown()
         self.assertTrue(str(sok1) in s.getvalue(), s.getvalue())
         self.assertTrue(str(sok2) in s.getvalue(), s.getvalue())
     self.assertTrue(str(sok3) in s.getvalue())
     self.assertTrue(sok1.closed)
     self.assertTrue(sok2.closed)
     self.assertTrue(sok3.closed)
Ejemplo n.º 31
0
 def testGetRidOfBadFileDescriptors(self):
     reactor = Reactor()
     class BadSocket(object):
         def fileno(self): return 88
         def close(self): raise Exception('hell breaks loose')
     self.timeout = False
     def timeout():
         self.timeout = True
     reactor.addReader(99, lambda: None) # broken
     reactor.addWriter(99, lambda: None) # broken
     reactor.addReader(BadSocket(), lambda: None) # even more broken
     reactor.addTimer(0.01, timeout)
     with self.stderr_replaced() as s:
         for i in range(10):
             if self.timeout:
                 break
             reactor.step()
         self.assertTrue("Bad file descriptor" in s.getvalue(), s.getvalue())
     self.assertTrue(self.timeout)
     self.assertEquals({}, reactor._readers)
     self.assertEquals({}, reactor._writers)
     self.assertEquals([], reactor._timers)
Ejemplo n.º 32
0
    def testShutdownReactor(self):
        reactor = Reactor()
        sok1 = MockSocket()
        sok2 = MockSocket()
        sok3 = MockSocket()

        def callback():
            reactor.suspend()

        reactor.addReader(sok1, lambda: None)
        reactor.addWriter(sok2, lambda: None)
        reactor.addWriter(sok3, callback)
        reactor.step()
        self.assertFalse(sok3.fileno() in reactor._fds)
        self.assertFalse(sok3.fileno() in reactor._fds)
        with self.stdout_replaced() as s:
            reactor.shutdown()
            self.assertTrue(str(sok1) in s.getvalue(), s.getvalue())
            self.assertTrue(str(sok2) in s.getvalue(), s.getvalue())
        self.assertTrue(str(sok3) in s.getvalue())
        self.assertTrue(sok1.closed)
        self.assertTrue(sok2.closed)
        self.assertTrue(sok3.closed)