예제 #1
0
def test_tunnel_handshake_start(tctx: Context, success):
    server = Server(("proxy", 1234))
    server.state = ConnectionState.OPEN

    tl = TTunnelLayer(tctx, server, tctx.server)
    tl.child_layer = TChildLayer(tctx)
    assert repr(tl)

    playbook = Playbook(tl, logs=True)
    (playbook << SendData(server, b"handshake-hello") >> DataReceived(
        tctx.client, b"client-hello") >> DataReceived(
            server, b"handshake-" + success.encode()) << SendData(
                server, b"handshake-" + success.encode()))
    if success == "success":
        playbook << Log("Got start. Server state: OPEN")
    else:
        playbook << CloseConnection(server)
        playbook << Log("Got start. Server state: CLOSED")

    playbook << SendData(tctx.client, b"client-hello-reply")
    if success == "success":
        playbook >> DataReceived(server, b"tunneled-server-hello")
        playbook << SendData(server, b"tunneled-server-hello-reply")

    assert playbook
예제 #2
0
def test_disconnect_during_handshake_start(tctx: Context, disconnect):
    server = Server(("proxy", 1234))
    server.state = ConnectionState.OPEN

    tl = TTunnelLayer(tctx, server, tctx.server)
    tl.child_layer = TChildLayer(tctx)

    playbook = Playbook(tl, logs=True)

    assert (playbook << SendData(server, b"handshake-hello"))
    if disconnect == "client":
        assert (playbook >> ConnectionClosed(tctx.client) >> ConnectionClosed(
            server)  # proxyserver will cancel all other connections as well.
                << CloseConnection(server) <<
                Log("Got start. Server state: CLOSED") <<
                Log("Got client close.") << CloseConnection(tctx.client))
    else:
        assert (playbook >> ConnectionClosed(server) << CloseConnection(server)
                << Log("Got start. Server state: CLOSED"))
예제 #3
0
def test_tunnel_default_impls(tctx: Context):
    """
    Some tunnels don't need certain features, so the default behaviour
    should be to be transparent.
    """
    server = Server(None)
    server.state = ConnectionState.OPEN
    tl = tunnel.TunnelLayer(tctx, server, tctx.server)
    tl.child_layer = TChildLayer(tctx)
    playbook = Playbook(tl, logs=True)
    assert (playbook << Log("Got start. Server state: OPEN") >> DataReceived(
        server, b"server-hello") << SendData(server, b"server-hello-reply"))
    assert tl.tunnel_state is tunnel.TunnelState.OPEN
    assert (playbook >> ConnectionClosed(server) << Log("Got server close.") <<
            CloseConnection(server))
    assert tl.tunnel_state is tunnel.TunnelState.CLOSED

    assert (
        playbook >> DataReceived(
            tctx.client, b"open") << OpenConnection(server) >> reply(None) <<
        Log("Opened: err=None. Server state: OPEN") >> DataReceived(
            server, b"half-close") << CloseConnection(server, half_close=True))