Пример #1
0
class GelTestCase(unittest.TestCase):
    def setUp(self):
        self.reactor = Gel()

    def test_timeout_call(self):
        A = 1
        B = 2
        C = 3

        @gel_main(self.reactor)
        def timer():
            run_time = time.time()

            @gel_quit(self.reactor)
            def callback(a, b, c):
                cb_time = time.time()
                self.assertEqual(A, a)
                self.assertEqual(B, b)
                self.assertEqual(C, c)
                # check if the timer was dispared between 1 and 2 seconds
                # as we can't really tell if the time will be triggered exactly on time
                self.assertGreaterEqual(cb_time + .1, run_time)
                self.assertLessEqual(run_time, cb_time + 2)

            self.reactor.timeout_seconds_call(.1, callback, A, B, c=C)

        timer()

    def test_idle_call(self):

        A = 1
        B = 2
        C = 3

        @gel_main(self.reactor)
        def call_later():
            @gel_quit(self.reactor)
            def callback(a, b, c):
                self.assertEqual(A, a)
                self.assertEqual(B, b)
                self.assertEqual(C, c)

            self.reactor.idle_call(callback, A, B, c=C)

        call_later()

    def test_socket_accept(self):
        @gel_main(self.reactor)
        def actual_test():
            import socket
            port_generator = port_generator_helper()
            while True:
                s = socket.socket()
                try:
                    s.bind(("127.0.0.1", six.next(port_generator)))
                except socket.error:
                    continue
                s.listen(1)
                break

            @gel_quit(self.reactor)
            def callback(event):
                socket, addr = event.accept()
                self.assertIs(event, s)

            self.reactor.register_io(s, callback)
            client = socket.socket()
            client.connect(s.getsockname())

        actual_test()

    def test_main_iteration_with_block_false_should_return_True_with_no_events(
            self):
        self.assertTrue(self.reactor.main_iteration(block=False))

    def test_sleep(self):
        start = time.time()
        self.reactor.sleep(200)
        current = time.time()
        # assure that the sleep time is almost the sleep we asked for
        wait_time = current - start
        self.assertLessEqual(wait_time, .220)
        self.assertGreaterEqual(wait_time, .190)

    def test_wait_task(self):
        def threaded_task(a, b):
            return a * b

        ret = self.reactor.wait_task(threaded_task, 3, 4)
        self.assertEqual(ret, 3 * 4)

    def test_wait_task_throwns_an_exception_inside_thread_should_raises_that_exception_in_the_current_execution_flow(
            self):
        def threaded_task():
            return 0 / 0

        self.assertRaises(ZeroDivisionError, self.reactor.wait_task,
                          threaded_task)

    def test_threaded_wrapper(self):
        @self.reactor.threaded_wrapper
        def threaded_task():
            time.sleep(0.1)
            return 10

        self.assertEqual(10, threaded_task())

    def test_selector(self):
        @gel_main(self.reactor)
        def actual_test():

            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

            s.sendto(b"", ("", 1))
            _, port = s.getsockname()

            def timeout():
                s.sendto(b"\x00", s.getsockname())

            self.reactor.timeout_seconds_call(0.1, timeout)
            response = self.reactor.selector([s])

            self.assertEqual(s, response)
            self.assertEqual(s.recvfrom(1),
                             (b'\x00', ('127.0.0.1', s.getsockname()[1])))
            self.reactor.main_quit()

        actual_test()

    def test_selector_with_timeout_timed_out(self):
        @gel_main(self.reactor)
        def actual_test():

            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            s.sendto(b"", ("", 1))
            _, port = s.getsockname()

            def timeout():
                s.sendto(b"\x00", s.getsockname())

            self.reactor.timeout_seconds_call(0.3, timeout)
            response = self.reactor.selector([s], 0.1)

            self.assertIsNone(response)
            self.reactor.main_quit()

        actual_test()

    def test_selector_with_timeout(self):
        @gel_main(self.reactor)
        def actual_test():

            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

            s.sendto(b"", ("", 1))
            _, port = s.getsockname()

            def timeout():
                s.sendto(b"\x00", s.getsockname())

            self.reactor.timeout_seconds_call(0.01, timeout)
            response = self.reactor.selector([s], 0.2)

            self.assertEqual(s, response)
            self.assertEqual(s.recvfrom(1),
                             (b'\x00', ('127.0.0.1', s.getsockname()[1])))
            self.reactor.main_quit()

        actual_test()
Пример #2
0
class GelTestCase(unittest.TestCase):

    def setUp(self):
        self.reactor = Gel()

    def test_timeout_call(self):
        A = 1
        B = 2
        C = 3
        @gel_main(self.reactor)
        def timer():
            run_time = time.time()

            @gel_quit(self.reactor)
            def callback(a, b, c):
                cb_time = time.time()
                self.assertEqual(A, a)
                self.assertEqual(B, b)
                self.assertEqual(C, c)
                # check if the timer was dispared between 1 and 2 seconds
                # as we can't really tell if the time will be triggered exactly on time
                self.assertGreaterEqual(cb_time + .1, run_time)
                self.assertLessEqual(run_time, cb_time + 2)
            self.reactor.timeout_seconds_call(.1, callback, A, B, c=C)

        timer()

    def test_idle_call(self):

        A = 1
        B = 2
        C = 3
        @gel_main(self.reactor)
        def call_later():

            @gel_quit(self.reactor)
            def callback(a, b, c):
                self.assertEqual(A, a)
                self.assertEqual(B, b)
                self.assertEqual(C, c)
            self.reactor.idle_call(callback, A, B, c=C)

        call_later()

    def test_socket_accept(self):

        @gel_main(self.reactor)
        def actual_test():
            import socket
            port_generator = port_generator_helper()
            while True:
                s = socket.socket()
                try:
                    s.bind(("127.0.0.1", six.next(port_generator)))
                except socket.error:
                    continue
                s.listen(1)
                break

            @gel_quit(self.reactor)
            def callback(event):
                socket, addr = event.accept()
                self.assertIs(event, s)

            self.reactor.register_io(s, callback)
            client = socket.socket()
            client.connect(s.getsockname())

        actual_test()

    def test_main_iteration_with_block_false_should_return_True_with_no_events(self):
        self.assertTrue(self.reactor.main_iteration(block=False))

    def test_sleep(self):
        start = time.time()
        self.reactor.sleep(200)
        current = time.time()
        # assure that the sleep time is almost the sleep we asked for
        wait_time = current - start
        self.assertLessEqual(wait_time, .220)
        self.assertGreaterEqual(wait_time, .190)

    def test_wait_task(self):

        def threaded_task(a, b):
            return a * b

        ret = self.reactor.wait_task(threaded_task, 3, 4)
        self.assertEqual(ret, 3 * 4)

    def test_wait_task_throwns_an_exception_inside_thread_should_raises_that_exception_in_the_current_execution_flow(self):
        def threaded_task():
            return 0/0
        self.assertRaises(ZeroDivisionError, self.reactor.wait_task, threaded_task)

    def test_threaded_wrapper(self):

        @self.reactor.threaded_wrapper
        def threaded_task():
            time.sleep(0.1)
            return 10

        self.assertEqual(10, threaded_task())

    def test_selector(self):

        @gel_main(self.reactor)
        def actual_test():

            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

            s.sendto(b"", ("", 1))
            _, port = s.getsockname()

            def timeout():
                s.sendto(b"\x00", s.getsockname())

            self.reactor.timeout_seconds_call(0.1, timeout)
            response = self.reactor.selector([s])

            self.assertEqual(s, response)
            self.assertEqual(s.recvfrom(1), (b'\x00', ('127.0.0.1', s.getsockname()[1])))
            self.reactor.main_quit()

        actual_test()

    def test_selector_with_timeout_timed_out(self):
        @gel_main(self.reactor)
        def actual_test():

            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            s.sendto(b"", ("", 1))
            _, port = s.getsockname()

            def timeout():
                s.sendto(b"\x00", s.getsockname())

            self.reactor.timeout_seconds_call(0.3, timeout)
            response = self.reactor.selector([s], 0.1)

            self.assertIsNone(response)
            self.reactor.main_quit()

        actual_test()

    def test_selector_with_timeout(self):
        @gel_main(self.reactor)
        def actual_test():

            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

            s.sendto(b"", ("", 1))
            _, port = s.getsockname()

            def timeout():
                s.sendto(b"\x00", s.getsockname())

            self.reactor.timeout_seconds_call(0.01, timeout)
            response = self.reactor.selector([s], 0.2)

            self.assertEqual(s, response)
            self.assertEqual(s.recvfrom(1), (b'\x00', ('127.0.0.1', s.getsockname()[1])))
            self.reactor.main_quit()

        actual_test()