Пример #1
0
        public void First_client_throws_exception_when_second_connected()
        {
            byte[] message = new byte[] { 1, 2, 3 };
            var server = new PercistentTCPServer(14000);
            server.ClientConnected += ClientConnected;
            var exceptionHandled = false;
            Exception exception = null;
            Exception secondClientException = null;
            var serverThread = new Thread(() => server.StartThread());
            var clientThread = new Thread(() =>
                {
                    try
                    {
                        var client = new TcpClient();
                        client.Connect("127.0.0.1", 14000);
                        Thread.Sleep(30); //ждем, пока другой клиент подсоединится.
                        client.Client.Send(message); //где-то тут сервер должен разорвать соединение.
                        client.Client.Receive(message);
                    }
                    catch (Exception e)
                    {
                        exceptionHandled = true;
                        exception = e;
                    }
                });
            clientThread.IsBackground = true;
            serverThread.IsBackground = true;
            serverThread.Start();
            Thread.Sleep(10);

            clientThread.Start();
            Thread.Sleep(10);

            if (exceptionHandled)
                throw exception; //на этот момент не должно быть эксепшна, первый должен к этому моменту успешно подключиться и ждать в слипе.

            clientThread = new Thread(() =>
                {
                    try
                    {
                        new TcpClient().Connect("127.0.0.1", 14000);
                    }
                    catch (Exception e)
                    {
                        secondClientException = e;
                    }
                });
            clientThread.IsBackground = true;
            clientThread.Start();

            Thread.Sleep(50);

            if (secondClientException != null)
                throw secondClientException; //второй не должен кидать эксепшн, а должен успешно подключиться.

            if (!exceptionHandled) // первый должен кинуть эксепшн после подключения второго
                Assert.Fail();
        }
Пример #2
0
        public void Second_can_connect_when_first_correct_close()
        {
            byte[] message = new byte[] { 1, 2, 3 };
            var exceptionHandled = false;
            Exception exception = null;
            var server = new PercistentTCPServer(14000);
            server.ClientConnected += ClientConnected;

            var serverThread = new Thread(() => server.StartThread());
            serverThread.IsBackground = true;
            serverThread.Start();

            var clientThread = new Thread(() =>
            {
                try
                {
                    var client = new TcpClient();
                    client.Connect("127.0.0.1", 14000);
                    client.Client.Close();
                }
                catch (Exception e)
                {
                    exceptionHandled = true;
                    exception = e;
                }
            });
            clientThread.Start();
            clientThread.Join();

            if (exceptionHandled)
                throw exception;

            clientThread = new Thread(() =>
            {
                try
                {
                    var client = new TcpClient();
                    client.Connect("127.0.0.1", 14000);
                    //client.Client.Send(message); //с этими строчками работает по отдельности, но не работает когда жмешь Ран Олл
                    //client.Client.Receive(message);
                }
                catch (Exception e)
                {
                    exceptionHandled = true;
                    exception = e;
                }
            });
            clientThread.Start();
            clientThread.Join();

            if (exceptionHandled)
                throw exception;
        }