コード例 #1
0
def test_tcp_bind(my_tcp_server):
    server_addr = my_tcp_server
    time.sleep(1)
    io_engine = ioloop.get_ioloop("select")
    server = connection.TCPConnection(io_engine=io_engine)
    with pytest.raises(connection.BindException):
        server.bind(server_addr)
コード例 #2
0
def test_arecv_zero():
    server = socketserver.TCPServer(
        ("127.0.0.1", random.randint(20000, 30000)), TcpEchoHandler)
    server_addr = server.server_address
    pcs = Process(target=server.serve_forever)
    pcs.start()

    io_engine = ioloop.get_ioloop("select")
    client = connection.TCPConnection(io_engine=io_engine)

    def on_recved(_, data, err):
        client.close()
        client.stop()
        assert not data

    def on_sent(conn, err):
        assert err.errcode == connection.E_OK
        os.kill(pcs.pid, signal.SIGTERM)
        conn.arecv(2048, on_recved)
        pcs.join()

    def on_connected(conn, err):
        assert err.errcode == connection.E_OK
        conn.asend(b'x' * 2048, on_sent)

    time.sleep(1)
    client.aconnect(server_addr, on_connected)
    client.run()
コード例 #3
0
 def init_forwarder(self):
     io_engine = ioloop.get_ioloop(self.args.mode)
     h = self.args.handler
     upstreams = h.init(io_engine)
     if not upstreams:
         print("invalid upstreams")
         sys.exit(1)
     self.forwarder = forwarder.Forwarder(io_engine, upstreams,
                                          self.args.listen,
                                          self.args.timeout, h)
コード例 #4
0
def test_aconnect_fail():
    server_addr = ("127.0.0.1234", 2)
    io_engine = ioloop.get_ioloop("select")
    client = connection.TCPConnection(io_engine=io_engine)

    def on_connected(_, err):
        client.stop()
        assert err.errcode == connection.E_FAIL

    client.aconnect(server_addr, on_connected)
    client.run()
コード例 #5
0
 def init_forwarder(self):
     self.logger.info("GreenDNS %s", __version__)
     io_engine = ioloop.get_ioloop(self.args.mode)
     h = self.args.handler
     upstreams = h.init(io_engine)
     if not upstreams:
         print("invalid upstreams")
         sys.exit(1)
     self.forwarder = forwarder.Forwarder(io_engine, upstreams,
                                          self.args.listen,
                                          self.args.timeout, h)
コード例 #6
0
def test_forwarder_bind(forwarder):
    io_engine = ioloop.get_ioloop("select")
    addr1 = Addr("udp", "1.1.1.1", 53)
    addr2 = Addr("tcp", "2.2.2.2", 53)
    upstreams = [addr1, addr2]
    listen = "%s:%d" % (forwarder.listen_addr[0], forwarder.listen_addr[1])
    timeout = 1.0
    handler = QuickestHandler()
    handler.init(io_engine)
    with pytest.raises(SystemExit):
        f = Forwarder(io_engine, upstreams, listen, timeout, handler)
コード例 #7
0
def forwarder(udp_server_process):
    server_addr1, server_addr2 = udp_server_process
    io_engine = ioloop.get_ioloop("select")
    addr1 = Addr("udp", *server_addr1)
    addr2 = Addr("tcp", *server_addr2)
    upstreams = [addr1, addr2]
    listen = "127.0.0.1:0"
    timeout = 1.0
    handler = QuickestHandler()
    handler.init(io_engine)
    f = Forwarder(io_engine, upstreams, listen, timeout, handler)
    return f
コード例 #8
0
def test_udp_client_sent_err(udp_server_process):
    server_addr = udp_server_process
    io_engine = ioloop.get_ioloop("select")
    client = connection.UDPConnection(io_engine=io_engine)
    client.set_recv_buffer_size(2048)

    def on_sent_err(sock, _, err):
        client.close()
        client.stop()
        assert err.errcode == connection.E_FAIL

    length = 64 * 1024 + 1
    client.asend(server_addr, b'x' * length, on_sent_err)
    client.run()
コード例 #9
0
def test_udp_client(udp_server_process):
    server_addr = udp_server_process
    io_engine = ioloop.get_ioloop("select")
    client = connection.UDPConnection(io_engine=io_engine)
    client.set_recv_buffer_size(2048)

    def on_recved(sock, _, data, err):
        client.close()
        client.stop()
        assert data == b'x' * 2048
        assert err.errcode == connection.E_OK

    def on_sent(sock, _, err):
        client.arecv(on_recved)
        assert err.errcode == connection.E_OK

    client.asend(server_addr, b'x' * 2048, on_sent)
    client.run()
コード例 #10
0
def my_udp_server():
    io_engine = ioloop.get_ioloop("select")
    server = connection.UDPConnection(io_engine=io_engine)
    server.bind(("127.0.0.1", 0))
    server.set_recv_buffer_size(2048)

    def on_sent(sock, _, err):
        server.close()
        server.stop()
        assert err.errcode == connection.E_OK

    def on_recved(sock, remote_addr, data, err):
        assert err.errcode == connection.E_OK
        server.asend(remote_addr, data, on_sent)

    server.arecv(on_recved)
    p = Process(target=server.run)
    p.start()
    yield server.bind_addr
    os.kill(p.pid, signal.SIGINT)
    p.join()
コード例 #11
0
def test_tcp_client(tcp_server_process):
    server_addr = tcp_server_process
    io_engine = ioloop.get_ioloop("select")
    client = connection.TCPConnection(io_engine=io_engine)

    def on_recved(_, data, err):
        client.close()
        client.stop()
        assert data == b'x' * 2048
        assert err.errcode == connection.E_OK

    def on_sent(conn, err):
        assert err.errcode == connection.E_OK
        conn.arecv(2048, on_recved)

    def on_connected(conn, err):
        assert err.errcode == connection.E_OK
        conn.asend(b'x' * 2048, on_sent)

    client.aconnect(server_addr, on_connected)
    client.run()
コード例 #12
0
def start_tcp_server():
    io_engine = ioloop.get_ioloop("select")
    server = connection.TCPConnection(io_engine=io_engine)
    server.bind(("127.0.0.1", random.randint(20000, 30000)))

    def on_sent(_, err):
        server.close()
        server.stop()
        assert err.errcode == connection.E_OK

    def on_recved(conn, data, err):
        assert err.errcode == connection.E_OK
        conn.asend(data, on_sent)

    def on_connected(newconn, err):
        assert err.errcode == connection.E_OK
        newconn.arecv(2000, on_recved)

    server.accept(on_connected)
    pcs = Process(target=server.run)
    pcs.start()
    return (server.bind_addr, pcs)
コード例 #13
0
def test_udp_bind(my_udp_server):
    server_addr = my_udp_server
    io_engine = ioloop.get_ioloop("select")
    server = connection.UDPConnection(io_engine=io_engine)
    with pytest.raises(connection.BindException):
        server.bind(server_addr)
コード例 #14
0
ファイル: test_ioloop.py プロジェクト: yishaibeeri/greendns
def iol(request):
    return ioloop.get_ioloop(request.param)