Example #1
0
 public void CanStart()
 {
     using (CompletionThread worker = new CompletionThread())
     {
         worker.Start();
     }
 }
Example #2
0
        public MetashareFixture()
        {
            pipeline = new PipelineSimulator();

            completion = new CompletionThread();
            completion.Start();

            files = new FileFactory(completion);
        }
Example #3
0
        public RepositoryFixture()
        {
            pipeline = new LeakPipeline();
            pipeline.Start();

            completion = new CompletionThread();
            completion.Start();

            files = new FileFactory(completion);
        }
Example #4
0
        public void CanCreateNewTcpSocket()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                SocketFactory factory = new SocketFactory(worker);
                TcpSocket     socket  = factory.Tcp();

                Assert.That(socket, Is.Not.Null);
            }
        }
Example #5
0
        public void CanDisposeNewUdpSocket()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                SocketFactory factory = new SocketFactory(worker);
                UdpSocket     socket  = factory.Udp();

                socket.Dispose();
            }
        }
Example #6
0
        public void CanBindSocket()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                SocketFactory factory = new SocketFactory(worker);
                TcpSocket     socket  = factory.Tcp();

                socket.Bind();
            }
        }
Example #7
0
        public void CanProceedWithNewLength()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                string      path    = Path.Combine(sandbox.Directory, "abc.txt");
                FileFactory factory = new FileFactory(worker);

                using (File file = factory.OpenOrCreate(path))
                {
                    Assert.That(file.SetLength(10), Is.True);
                }
            }
        }
Example #8
0
        public async Task CanHandleNotBoundSocket()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                SocketFactory factory = new SocketFactory(worker);

                using (TcpSocket socket = factory.Tcp())
                {
                    TcpSocketAccept accepted = await socket.Accept();

                    Assert.That(accepted.Status, Is.Not.EqualTo(SocketStatus.OK));
                }
            }
        }
Example #9
0
        public void CanFailOnNotFoundFile()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                string      path    = Path.Combine(sandbox.Directory, "abc.txt");
                FileFactory factory = new FileFactory(worker);

                using (File file = factory.Open(path))
                {
                    Assert.That(file, Is.Null);
                }

                Assert.That(System.IO.File.Exists(path), Is.False);
            }
        }
Example #10
0
        public void CanCreateRussianFile()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                string      path    = Path.Combine(sandbox.Directory, "абг.txt");
                FileFactory factory = new FileFactory(worker);

                using (File file = factory.OpenOrCreate(path))
                {
                }

                Assert.That(System.IO.File.Exists(path), Is.True);
                Assert.That(new FileInfo(path).Length, Is.Zero);
            }
        }
Example #11
0
        public async Task CanHandleNotBoundSocket()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                SocketFactory factory = new SocketFactory(worker);

                using (TcpSocket socket = factory.Tcp())
                {
                    byte[]        buffer = new byte[10];
                    TcpSocketSend sent   = await socket.Send(buffer);

                    Assert.That(sent.Status, Is.Not.EqualTo(SocketStatus.OK));
                }
            }
        }
Example #12
0
        public void CanSetNewLength()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                string      path    = Path.Combine(sandbox.Directory, "abc.txt");
                FileFactory factory = new FileFactory(worker);

                using (File file = factory.OpenOrCreate(path))
                {
                    file.SetLength(10);
                }

                Assert.That(new FileInfo(path).Length, Is.EqualTo(10));
            }
        }
Example #13
0
        public async Task CanHandleNotBoundSocket()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                SocketFactory factory = new SocketFactory(worker);

                using (TcpSocket socket = factory.Tcp())
                {
                    IPEndPoint       endpoint  = new IPEndPoint(IPAddress.Loopback, 80);
                    TcpSocketConnect connected = await socket.Connect(endpoint);

                    Assert.That(connected.Status, Is.Not.EqualTo(SocketStatus.OK));
                }
            }
        }
Example #14
0
        public void Stop()
        {
            lock (this)
            {
                if (worker != null)
                {
                    worker.Dispose();
                    worker = null;
                }

                if (pipeline != null)
                {
                    pipeline?.Stop();
                    pipeline = null;
                }
            }
        }
Example #15
0
        public ConnectorFixture()
        {
            pipeline = new LeakPipeline();
            pipeline.Start();

            worker = new CompletionThread();
            worker.Start();

            pool =
                new NetworkPoolBuilder()
                .WithPipeline(pipeline)
                .WithWorker(worker)
                .WithMemory(new ConnectorMemory())
                .Build();

            pool.Start();

            hooks = new PeerConnectorHooks();
        }
Example #16
0
        public async Task CanHandleRequest()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                SocketFactory factory = new SocketFactory(worker);
                EchoClient    client  = new EchoClient(factory);

                using (EchoServer server = new EchoServer(factory))
                {
                    worker.Start();
                    server.Start();

                    string payload  = "abc";
                    string response = await client.Send(server.Endpoint, payload);

                    Assert.That(response, Is.EqualTo(payload));
                }
            }
        }
Example #17
0
        public void CanReceiveDataUsingCallbackToExampleSite()
        {
            TimeSpan         timeout = TimeSpan.FromSeconds(2);
            ManualResetEvent check   = new ManualResetEvent(false);

            IPAddress[] addresses = Dns.GetHostAddresses("www.example.com");
            IPEndPoint  endpoint  = new IPEndPoint(addresses[0], 80);

            string request = "GET /index.html HTTP/1.1\r\nHost: www.example.com\r\n\r\n";

            byte[] data = Encoding.ASCII.GetBytes(request);

            using (CompletionThread worker = new CompletionThread())
            {
                SocketFactory factory = new SocketFactory(worker);
                TcpSocket     socket  = factory.Tcp();

                socket.Bind();
                worker.Start();

                TcpSocketReceiveCallback onReceived = result =>
                {
                    check.Set();
                };

                TcpSocketSendCallback onSent = result =>
                {
                    socket.Receive(data, onReceived);
                };

                TcpSocketConnectCallback onConnected = result =>
                {
                    socket.Send(data, onSent);
                };

                socket.Connect(endpoint, onConnected);
                bool completed = check.WaitOne(timeout);

                Assert.That(completed, Is.True);
                socket.Dispose();
            }
        }
Example #18
0
        public static void Main(string[] args)
        {
            using (CompletionThread worker = new CompletionThread())
            {
                EchoOptions   options = Argument.Parse <EchoOptions>(args);
                SocketFactory factory = new SocketFactory(worker);

                worker.Start();

                if (options.Server != null)
                {
                    EchoServerStarter.Start(options.Server, factory);
                }

                if (options.Benchmark != null)
                {
                    EchoBenchmarkStarter.Start(options.Benchmark, factory);
                }
            }
        }
Example #19
0
        public LoopFixture()
        {
            pipeline = new LeakPipeline();
            pipeline.Start();

            worker = new CompletionThread();
            worker.Start();

            pool =
                new NetworkPoolBuilder()
                .WithPipeline(pipeline)
                .WithWorker(worker)
                .WithMemory(new LoopMemory())
                .Build();

            pool.Start();

            hooks   = new ReceiverHooks();
            samples = new LoopSamples();
        }
Example #20
0
        public async Task CanConnectUsingTasksToNotAvailableSite()
        {
            IPAddress[] addresses = Dns.GetHostAddresses("www.example.com");
            IPEndPoint  endpoint  = new IPEndPoint(addresses[0], 8123);

            using (CompletionThread worker = new CompletionThread())
            {
                SocketFactory factory = new SocketFactory(worker);
                TcpSocket     socket  = factory.Tcp();

                socket.Bind();
                worker.Start();

                TcpSocketConnect connect = await socket.Connect(endpoint);

                SocketStatus expected = SocketStatus.TimedOut;

                Assert.That(connect.Status, Is.EqualTo(expected));
            }
        }
Example #21
0
        public void CanOpenExistingFile()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                string      path    = Path.Combine(sandbox.Directory, "abc.txt");
                FileFactory factory = new FileFactory(worker);

                using (FileStream stream = System.IO.File.Create(path))
                {
                    stream.Write(new byte[10], 0, 10);
                    stream.Flush(true);
                }

                using (File file = factory.OpenOrCreate(path))
                {
                }

                Assert.That(System.IO.File.Exists(path), Is.True);
                Assert.That(new FileInfo(path).Length, Is.EqualTo(10));
            }
        }
Example #22
0
        public void CanTransferDataUsingUdpSockets()
        {
            using (CompletionThread worker = new CompletionThread())
            {
                worker.Start();

                using (ManualResetEvent sync = new ManualResetEvent(false))
                {
                    IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 44556);
                    byte[]     data     = Encoding.ASCII.GetBytes("abc");

                    SocketBuffer  buffer  = new SocketBuffer(data);
                    SocketFactory factory = new SocketFactory(worker);

                    using (UdpSocket sender = factory.Udp())
                        using (UdpSocket receiver = factory.Udp())
                        {
                            sender.Bind();
                            receiver.Bind(endpoint.Port);

                            receiver.Receive(new SocketBuffer(10), received =>
                            {
                                Assert.That(received.Status, Is.EqualTo(SocketStatus.OK));
                                Assert.That(received.Count, Is.EqualTo(3));
                                Assert.That(received.Buffer.Data.Take(3), Is.EqualTo(data));

                                sync.Set();
                            });

                            sender.Send(endpoint, buffer, sent =>
                            {
                                Assert.That(sent.Status, Is.EqualTo(SocketStatus.OK));
                                Assert.That(sent.Count, Is.EqualTo(3));
                            });
                        }

                    Assert.That(sync.WaitOne(200), Is.True);
                }
            }
        }
Example #23
0
        public async Task CanSendDataUsingAsyncToExampleSite()
        {
            IPAddress[] addresses = Dns.GetHostAddresses("www.example.com");
            IPEndPoint  endpoint  = new IPEndPoint(addresses[0], 80);

            string request = "GET /index.html HTTP/1.1\r\nHost: www.example.com\r\n\r\n";

            byte[] data = Encoding.ASCII.GetBytes(request);

            using (CompletionThread worker = new CompletionThread())
            {
                SocketFactory factory = new SocketFactory(worker);
                TcpSocket     socket  = factory.Tcp();

                socket.Bind();
                worker.Start();

                await socket.Connect(endpoint);

                await socket.Send(data);
            }
        }
Example #24
0
        public void Start()
        {
            lock (this)
            {
                if (pipeline == null)
                {
                    pipeline = new LeakPipeline();
                    pipeline.Start();
                }

                if (worker == null)
                {
                    worker = new CompletionThread();
                    worker.Start();
                }

                if (files == null)
                {
                    files = new FileFactory(worker);
                }
            }
        }
Example #25
0
        public NegotiatorFixture()
        {
            pipeline = new LeakPipeline();
            pipeline.Start();

            worker = new CompletionThread();
            worker.Start();

            pool =
                new NetworkPoolBuilder()
                .WithPipeline(pipeline)
                .WithWorker(worker)
                .WithMemory(new NegotiatorMemory())
                .Build();

            pool.Start();

            hooks      = new HandshakeNegotiatorHooks();
            negotiator =
                new HandshakeNegotiatorBuilder()
                .WithNetwork(pool)
                .Build(hooks);
        }
Example #26
0
        public async Task CanReceiveDataUsingTasksToHostedEchoServerInTwoPieces()
        {
            string request = "GET /index.html HTTP/1.1\r\nHost: www.example.com\r\n\r\n";

            byte[] input  = Encoding.ASCII.GetBytes(request);
            byte[] output = new byte[input.Length];

            byte[] part1 = new byte[input.Length / 2];
            byte[] part2 = new byte[input.Length - part1.Length];

            using (CompletionThread worker = new CompletionThread())
            {
                SocketFactory factory = new SocketFactory(worker);
                TcpSocket     socket  = factory.Tcp();

                using (EchoServer server = new EchoServer(factory))
                {
                    socket.Bind();
                    worker.Start();
                    server.Start();

                    await socket.Connect(server.Endpoint);

                    await socket.Send(input);

                    TcpSocketReceive received1 = await socket.Receive(part1);

                    TcpSocketReceive received2 = await socket.Receive(part2);

                    Array.Copy(part1, 0, output, 0, received1.Count);
                    Array.Copy(part2, 0, output, received1.Count, received2.Count);

                    Assert.That(input, Is.EqualTo(output));
                }
            }
        }