public void Should_receive_512K_of_data() { _socksClient.WriteByte(1); // wait for approve test mode 1 var state = _socksClient.ReadByte(); Assert.AreEqual(1, state, "Test mode 1 should be ready"); var data = new byte[2048]; for (int i = 0; i < data.Length; i++) { data[i] = (byte)(i % 256); } int totalReported = 0; ThreadPool.QueueUserWorkItem(delegate { // reader try { while (true) { var buf = new byte[4]; _socksClient.Read(buf, 0, 4); var count = BitConverter.ToInt32(buf, 0); totalReported += count; } } catch { } }); for (int i = 0; i < 256; i++) { _socksClient.Write(data); } while (1024 * 512 != totalReported) { Console.WriteLine($"Waiting {1024 * 512} response: " + totalReported); Thread.Sleep(1000); } Assert.AreEqual(1024 * 512, totalReported, "State is good"); }