public static Response Exec(this ClacksClient c, string command, Action <Request> callback = null) { var request = Request.Create(command); if (callback != null) { callback(request); } return(c.Exec(request)); }
public void Creating_client_does_not_get_socket_from_pool() { // Arrange var pool = new ConnectionPool(_factory.Create); // Act var client = new ClacksClient(pool); // Assert Assert.AreEqual(0, _factory.Sockets.Count); }
public void Disposing_client_returns_socket_to_pool() { // Arrange var pool = new ConnectionPool(_factory.Create); // Act var client = new ClacksClient(pool); client.Dispose(); var s = pool.GetSocket(); // Assert Assert.AreEqual(1, _factory.Sockets.Count); }
public void Making_client_request_gets_socket_from_pool() { // Arrange var pool = new ConnectionPool(_factory.Create); var socket = new FakeSocket { ReceiveCallback = (buffer, size, offset) => { var bytes = Encoding.ASCII.GetBytes("OK\r\n"); Array.Copy(bytes, buffer, bytes.Length); return bytes.Length; } }; _factory.Builder = () => socket; // Act var client = new ClacksClient(pool); client.Exec(Request.Create("HI")); // Assert Assert.AreEqual(1, _factory.Sockets.Count); }
public Client() { _client = new ClacksClient("127.0.0.1", 12345); }
public void Reconnecting_client_retries_request_on_failure() { // Arrange var pool = new ConnectionPool(_factory.Create); var failSocket = new FakeSocket(); failSocket.ReceiveCallback = (buffer, size, offset) => { failSocket.Connected = false; throw new SocketException(42); }; var successSocket = new FakeSocket { ReceiveCallback = (buffer, size, offset) => { var bytes = Encoding.ASCII.GetBytes("OK\r\n"); Array.Copy(bytes, buffer, bytes.Length); return bytes.Length; } }; _factory.Builder = () => _factory.Sockets.Any() ? successSocket : failSocket; // Act var client = new ClacksClient(pool); var response = client.Exec(Request.Create("HI")); // Assert Assert.AreEqual(2, _factory.Sockets.Count); Assert.AreEqual(1, failSocket.ReceiveCalled); Assert.AreEqual(1, successSocket.ReceiveCalled); Assert.AreEqual("OK", response.Status); }
public void Client_recovers_if_connection_is_closed_by_remote_host() { // Arrange var pool = new ConnectionPool(_factory.Create); var failSocket = new FakeSocket(); failSocket.ReceiveCallback = (buffer, size, offset) => { // This happens when the other side hangs up the phone while we are still reading data failSocket.Connected = true; throw new SocketException((int)SocketError.ConnectionReset); }; var successSocket = new FakeSocket { ReceiveCallback = (buffer, size, offset) => { var bytes = Encoding.ASCII.GetBytes("OK\r\n"); Array.Copy(bytes, buffer, bytes.Length); return bytes.Length; } }; _factory.Builder = () => _factory.Sockets.Any() ? successSocket : failSocket; // Act var client = new ClacksClient(pool); var response = client.Exec(Request.Create("HI")); // Assert Assert.AreEqual(2, _factory.Sockets.Count); Assert.AreEqual(1, failSocket.ReceiveCalled); Assert.AreEqual(1, successSocket.ReceiveCalled); Assert.AreEqual("OK", response.Status); }
public void Non_reconnecting_client_only_issues_request_once_if_not_failing() { // Arrange var pool = new ConnectionPool(_factory.Create); var successSocket = new FakeSocket { ReceiveCallback = (buffer, size, offset) => { var bytes = Encoding.ASCII.GetBytes("OK\r\n"); Array.Copy(bytes, buffer, bytes.Length); return bytes.Length; } }; _factory.Builder = () => successSocket; // Act var client = new ClacksClient(pool, attemptReconnect: false); var response = client.Exec(Request.Create("HI")); // Assert Assert.AreEqual(1, _factory.Sockets.Count); Assert.AreEqual(1, successSocket.ReceiveCalled); Assert.AreEqual("OK", response.Status); }
public void Non_reconnecting_client_does_not_retry_failed_request() { // Arrange var pool = new ConnectionPool(_factory.Create); var failSocket = new FakeSocket(); failSocket.ReceiveCallback = (buffer, size, offset) => { failSocket.Connected = false; throw new SocketException(42); }; var successSocket = new FakeSocket { ReceiveCallback = (buffer, size, offset) => { var bytes = Encoding.ASCII.GetBytes("OK\r\n"); Array.Copy(bytes, buffer, bytes.Length); return bytes.Length; } }; _factory.Builder = () => _factory.Sockets.Any() ? successSocket : failSocket; // Act var client = new ClacksClient(pool, attemptReconnect: false); try { client.Exec(Request.Create("HI")); Assert.Fail("call should not have succeeded"); } catch { } // Assert Assert.AreEqual(1, _factory.Sockets.Count); Assert.AreEqual(1, failSocket.ReceiveCalled); Assert.AreEqual(0, successSocket.ReceiveCalled); }
public RemotePlayer(string name, IPEndPoint addr) { _client = new ClacksClient(addr); _name = Encoding.ASCII.GetString(_client.Exec("JOIN", r => r.WithData(name).ExpectData("OK")).Data); }