Ejemplo n.º 1
0
        public void Dispose_disposes_created_proxies()
        {
            var stream = new LoopbackTcpStream(
                5,
                1,
                0,
                5,
                (byte)CommandType.Connect,
                0,
                (byte)AddressType.Ipv4,
                1,
                2,
                3,
                4,
                0,
                255);

            var proxyFactory = new FakeProxyFactory();
            var proxy        = new FakeProxy();

            proxyFactory.NextTcpProxyToReturn = proxy;

            using (var connection = new SocksConnection(
                       stream,
                       proxyFactory,
                       ArrayPool <byte> .Shared,
                       new NullLoggerFactory()))
            {
                connection.StartHandlingClient();
                proxy.WaitForRunAsyncCall();
            }

            proxy.IsDisposed.Should().BeTrue();
        }
Ejemplo n.º 2
0
        public void Proxy_terminates_with_dispose()
        {
            using (var clientStream = new LoopbackTcpStream())
            {
                var boundUdpClient    = new FakeUdpClient();
                var relayingUdpClient = new FakeUdpClient();
                var timerFactory      = new ManuallyInvokedTimerFactory();
                var bufferPool        = new DebugArrayPool <byte>();
                var interceptor       = A.Fake <IDatagramInterceptor>();

                using (var proxy = new UdpProxy(
                           clientStream,
                           new FakeUdpClientFactory(boundUdpClient, relayingUdpClient),
                           interceptor,
                           bufferPool,
                           timerFactory,
                           new NullLoggerFactory()))
                {
                    var task = proxy.RunAsync(CancellationToken.None);
                    proxy.Dispose();

                    task.Awaiting(x => x).Should().Throw <Exception>();
                }

                A.CallTo(() => interceptor.Dispose()).MustHaveHappenedOnceExactly();
            }
        }
        public void Dispose_aborts_pending_read()
        {
            var stream   = new LoopbackTcpStream();
            var readTask = stream.ReadAsync(new byte[1], 0, 1);

            stream.Dispose();
            readTask.Awaiting(t => t).Should().Throw <Exception>();
        }
        public async Task Written_bytes_can_be_retrieved()
        {
            using (var stream = new LoopbackTcpStream())
            {
                var bytes = new byte[] { 1, 2, 3, 4, 5 };
                await stream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(true);

                stream.GetAllWrittenBytes().Should().Equal(1, 2, 3, 4, 5);
            }
        }
 public void Staging_bytes_makes_them_available_in_sync_read()
 {
     using (var stream = new LoopbackTcpStream())
     {
         stream.StageReadBytes(1, 2, 3);
         var buffer = new byte[10];
         stream.Read(buffer, 0, 3).Should().Be(3);
         buffer.Take(3).Should().Equal(1, 2, 3);
     }
 }
        public async Task Staging_bytes_makes_them_available_in_async_read()
        {
            using (var stream = new LoopbackTcpStream())
            {
                stream.StageReadBytes(1, 2, 3);
                var buffer    = new byte[10];
                var readBytes = await stream.ReadAsync(buffer, 0, 3).ConfigureAwait(true);

                readBytes.Should().Be(3);
                buffer.Take(3).Should().Equal(1, 2, 3);
            }
        }
Ejemplo n.º 7
0
 public void Responds_to_unsupported_authentication_method_with_failure()
 {
     using (var stream = new LoopbackTcpStream(5, 1, 254))
         using (var connection = new SocksConnection(
                    stream,
                    new FakeProxyFactory(),
                    ArrayPool <byte> .Shared,
                    new NullLoggerFactory()))
         {
             connection.StartHandlingClient();
             stream.WaitForWrittenBytes(2).Should().Equal(5, 255);
         }
 }
Ejemplo n.º 8
0
        public void Assumes_ownership_of_stream_and_disposes_it()
        {
            var stream = new LoopbackTcpStream(5, 1, 254);

            using (var connection = new SocksConnection(
                       stream,
                       new FakeProxyFactory(),
                       ArrayPool <byte> .Shared,
                       new NullLoggerFactory()))
            {
                connection.StartHandlingClient();
                stream.WaitForWrittenBytes(2).Should().Equal(5, 255);
            }

            stream.IsDisposed.Should().BeTrue();
        }
Ejemplo n.º 9
0
        public void Proxy_terminates_with_client_stream_termination()
        {
            using (var clientStream = new LoopbackTcpStream())
            {
                var boundUdpClient    = new FakeUdpClient();
                var relayingUdpClient = new FakeUdpClient();
                var timerFactory      = new ManuallyInvokedTimerFactory();
                var bufferPool        = new DebugArrayPool <byte>();
                using (var proxy = new UdpProxy(
                           clientStream,
                           new FakeUdpClientFactory(boundUdpClient, relayingUdpClient),
                           new PassthroughInterceptor(),
                           bufferPool,
                           timerFactory,
                           new NullLoggerFactory()))
                {
                    var task = proxy.RunAsync(CancellationToken.None);
                    clientStream.Dispose();

                    task.Awaiting(x => x).Should().Throw <Exception>();
                }
            }
        }
Ejemplo n.º 10
0
 public void Responds_to_invalid_address_type_with_failure()
 {
     using (var stream = new LoopbackTcpStream(
                5,
                1,
                0,
                5,
                (byte)CommandType.Connect,
                0,
                254,
                1,
                2,
                3,
                4,
                0,
                255))
         using (var connection = new SocksConnection(
                    stream,
                    new FakeProxyFactory(),
                    ArrayPool <byte> .Shared,
                    new NullLoggerFactory()))
         {
             connection.StartHandlingClient();
             stream.WaitForWrittenBytes(2).Should().Equal(5, 0);
             stream.WaitForWrittenBytes(10).Should().Equal(
                 5,
                 (byte)CommandReplyType.AddressTypeNotSupported,
                 0,
                 1,
                 0,
                 0,
                 0,
                 0,
                 0,
                 0);
         }
 }
Ejemplo n.º 11
0
        public async Task Proxy_streams_in_both_directions()
        {
            using (var clientStream = new LoopbackTcpStream(1, 2, 3, 4, 5))
                using (var remoteStream = new LoopbackTcpStream(10, 9, 8, 7, 6))
                {
                    var connector = remoteStream.GetConnector();
                    clientStream.Write(200, 199, 198, 197, 196);
                    remoteStream.Write(100, 99, 98, 97, 96);
                    clientStream.CloseStagedBytesSender();
                    remoteStream.CloseStagedBytesSender();

                    using (var proxy = new TcpProxy(
                               clientStream,
                               FakeEndPoints.CreateRemote(),
                               connector,
                               this._bufferPool))
                    {
                        await proxy.RunAsync(CancellationToken.None).ConfigureAwait(true);
                    }

                    clientStream.GetAllWrittenBytes().Should().Equal(200, 199, 198, 197, 196, 10, 9, 8, 7, 6);
                    remoteStream.GetAllWrittenBytes().Should().Equal(100, 99, 98, 97, 96, 1, 2, 3, 4, 5);
                }
        }