public void TerminateFromOtherThread() { var started = _server.Start(); Assert.True(started, "Could not start server"); Thread.Sleep(100); _client = new SocketCommandClient("localhost", _testServerPort, _ => { }); var connected = _client.Connect(); Assert.True(connected, "Could not connect to server: " + _client.LastResult); Thread.Sleep(100); Assert.Single(_server.Clients); var terminator = new Thread(() => _server.Terminate()); terminator.Start(); while (terminator.IsAlive) { Thread.Sleep(100); } Thread.Sleep(100); Assert.Empty(_server.Clients); }
public void ConnectAndDisposeOneClientShouldBeTrackedByServer() { var started = _server.Start(); Assert.True(started, "Could not start server"); Assert.Empty(_server.Clients); var reportConnected = false; _server.ClientConnected += _ => { reportConnected = true; }; var reportDisconnected = false; _server.ClientDisconnected += _ => { reportDisconnected = true; }; _client = new SocketCommandClient("localhost", _testServerPort, _ => { }); var connected = _client.Connect(); Assert.True(connected, "LastResult: " + _client.LastResult); Thread.Sleep(100); Assert.True(reportConnected); Assert.Single(_server.Clients); _client.Dispose(); Thread.Sleep(100); Assert.True(reportDisconnected); Assert.Empty(_server.Clients); }
public void ClientConnectShouldTimeoutIfServerNotRunning() { _client = new SocketCommandClient("localhost", _testServerPort, _ => { }); var connected = _client.Connect(); Assert.False(connected, "LastResult: " + _client.LastResult); }
public SmtpBasicTests() { _testServer = new SmtpServer(25); _testServer.Start(); _testServer.NewMail += mailMessage => _receivedMessage = mailMessage; _receivedMessage = null; _testClient = new SocketCommandClient("localhost", 25, s => { _receivedData = s; }); _testClient.Connect(); _receivedData = null; }
public void DisconnectCommandShouldSucceed() { var started = _server.Start(); Assert.True(started, "Could not start server"); _client = new SocketCommandClient("localhost", _testServerPort, _ => { }); var connected = _client.Connect(); Assert.True(connected, "LastResult: " + _client.LastResult); _client.Disconnect(); Assert.False(_client.IsConnected); }
public void DoCommandShouldAutoConnectToServer() { var started = _server.Start(); Assert.True(started, "Could not start server"); _server.HandleCommand += (socket, line) => socket.Send(Encoding.ASCII.GetBytes(line)); _client = new SocketCommandClient("localhost", _testServerPort, _ => { }); const string cmd = "TEST*TEST"; var response = _client.DoCommand(cmd + _server.Eoc.First()); Assert.True(_client.IsConnected); Assert.Equal(cmd, response); }
public void Dispose() { _cancel?.Cancel(); if (_task != null) { if (_task.Wait(1000)) { _task?.Dispose(); } _task = null; } _client?.Dispose(); _client = null; _server.Terminate(); }
public void IncompleteCommandShouldNotTimeoutIfNotSpecified() { var started = _server.Start(); Assert.True(started, "Could not start server"); _client = new SocketCommandClient("localhost", _testServerPort, _ => { }); var connected = _client.Connect(); Assert.True(connected, "LastResult: " + _client.LastResult); _cancel = new CancellationTokenSource(); _task = Task.Run(() => _client.DoCommand("TEST"), _cancel.Token); var completedInTime = Task.WaitAll(new[] { _task }, 5000, _cancel.Token); _cancel.Cancel(); Assert.False(completedInTime, "Should NOT timeout"); }
public void IncompleteCommandShouldTimeoutInTimeIfSpecified() { var started = _server.Start(); Assert.True(started, "Could not start server"); _client = new SocketCommandClient("localhost", _testServerPort, _ => { }) { ConnectTimeout = 1000, CommandRetryCount = 0 }; _client.Connect(); _client.SetReceiveTimeout(1000); _cancel = new CancellationTokenSource(); _task = Task.Run(() => _client.DoCommand("TEST"), _cancel.Token); var completedInTime = Task.WaitAll(new[] { _task }, 6000, _cancel.Token); _cancel.Cancel(); Assert.True(completedInTime, "Should timeout"); }
public void DisconnectFromThisAndOtherThread() { const int clientCount = 400; var started = _server.Start(); Assert.True(started, "Could not start server"); Thread.Sleep(100); Assert.Empty(_server.Clients); var clients1 = new List <SocketCommandClient>(); for (var cx = 1; cx <= (clientCount / 2); cx++) { var client = new SocketCommandClient("localhost", _testServerPort, _ => { }); var connected = client.Connect(); Assert.True(connected, "[1] Could not connect to server: " + client.LastResult); clients1.Add(client); } var clients2 = new List <SocketCommandClient>(); for (var cx = 1; cx <= (clientCount / 2); cx++) { var client = new SocketCommandClient("localhost", _testServerPort, _ => { }); var connected = client.Connect(); Assert.True(connected, "[2] Could not connect to server: " + client.LastResult); clients2.Add(client); } Assert.Equal(clientCount / 2, clients1.Count); Assert.Equal(clientCount / 2, clients2.Count); var waitConnected = new PassiveTimer(TimeSpan.FromSeconds(10)); while (!waitConnected.Timeout) { if (_server.Clients.Count == clientCount) { break; } Thread.Sleep(10); } Assert.Equal(clientCount, _server.Clients.Count); // ReSharper disable once IdentifierTypo var disconnector = new Thread(() => { Thread.Sleep(100); while (clients1.Count > 0) { clients1[0].Disconnect(); clients1.RemoveAt(0); Thread.Sleep(0); } }); disconnector.Start(); Thread.Sleep(100); while (clients2.Count > 0) { clients2[0].Disconnect(); clients2.RemoveAt(0); Thread.Sleep(0); } while (disconnector.IsAlive) { Thread.Sleep(10); } Thread.Sleep(100); Assert.Empty(clients1); Assert.Empty(clients2); Assert.Empty(_server.Clients); }