public void TestStreamingTransportServer() { BlockingCollection<string> queue = new BlockingCollection<string>(); List<string> events = new List<string>(); IStreamingCodec<string> stringCodec = _injector.GetInstance<StringStreamingCodec>(); IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0); var remoteHandler = Observer.Create<TransportEvent<string>>(tEvent => queue.Add(tEvent.Data)); using (var server = new StreamingTransportServer<string>(endpoint.Address, remoteHandler, _tcpPortProvider, stringCodec)) { server.Run(); IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), server.LocalEndpoint.Port); using (var client = new StreamingTransportClient<string>(remoteEndpoint, stringCodec)) { client.Send("Hello"); client.Send(", "); client.Send("World!"); events.Add(queue.Take()); events.Add(queue.Take()); events.Add(queue.Take()); } } Assert.Equal(3, events.Count); Assert.Equal(events[0], "Hello"); Assert.Equal(events[1], ", "); Assert.Equal(events[2], "World!"); }
public void TestStreamingTransportSenderStage() { IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0); List <string> events = new List <string>(); BlockingCollection <string> queue = new BlockingCollection <string>(); IStreamingCodec <string> stringCodec = _injector.GetInstance <StringStreamingCodec>(); // Server echoes the message back to the client var remoteHandler = Observer.Create <TransportEvent <string> >(tEvent => tEvent.Link.Write(tEvent.Data)); using (var server = new StreamingTransportServer <string>(endpoint.Address, remoteHandler, _tcpPortProvider, stringCodec)) { server.Run(); var clientHandler = Observer.Create <TransportEvent <string> >(tEvent => queue.Add(tEvent.Data)); IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), server.LocalEndpoint.Port); using (var client = new StreamingTransportClient <string>(remoteEndpoint, clientHandler, stringCodec)) { client.Send("Hello"); client.Send(", "); client.Send(" World"); events.Add(queue.Take()); events.Add(queue.Take()); events.Add(queue.Take()); } } Assert.Equal(3, events.Count); Assert.Equal(events[0], "Hello"); Assert.Equal(events[1], ", "); Assert.Equal(events[2], " World"); }
public void TestStreamingTransportServer() { BlockingCollection <string> queue = new BlockingCollection <string>(); List <string> events = new List <string>(); IStreamingCodec <string> stringCodec = _injector.GetInstance <StringStreamingCodec>(); IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0); var remoteHandler = Observer.Create <TransportEvent <string> >(tEvent => queue.Add(tEvent.Data)); using ( var server = new StreamingTransportServer <string>(endpoint.Address, remoteHandler, _tcpPortProvider, stringCodec)) { server.Run(); IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), server.LocalEndpoint.Port); using (var client = new StreamingTransportClient <string>(remoteEndpoint, stringCodec, _tcpClientFactory)) { client.Send("TestStreamingTransportServer - 1"); client.Send("TestStreamingTransportServer - 2"); client.Send("TestStreamingTransportServer - 3"); events.Add(queue.Take()); events.Add(queue.Take()); events.Add(queue.Take()); } } Assert.Equal(3, events.Count); Assert.Equal("TestStreamingTransportServer - 1", events[0]); Assert.Equal("TestStreamingTransportServer - 2", events[1]); Assert.Equal("TestStreamingTransportServer - 3", events[2]); }
public void TestStreamingRaceCondition() { BlockingCollection <string> queue = new BlockingCollection <string>(); List <string> events = new List <string>(); IStreamingCodec <string> stringCodec = _injector.GetInstance <StringStreamingCodec>(); int numEventsExpected = 150; IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0); var remoteHandler = Observer.Create <TransportEvent <string> >(tEvent => queue.Add(tEvent.Data)); using ( var server = new StreamingTransportServer <string>(endpoint.Address, remoteHandler, _tcpPortProvider, stringCodec)) { server.Run(); int counter = 0; for (int i = 0; i < numEventsExpected / 3; i++) { Task.Run(() => { IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), server.LocalEndpoint.Port); using ( var client = new StreamingTransportClient <string>(remoteEndpoint, stringCodec, _tcpClientFactory)) { for (int j = 0; j < 3; j++) { client.Send("TestStreamingRaceCondition - " + counter++); } } }); } for (int i = 0; i < numEventsExpected; i++) { string e; do { e = queue.Take(); }while (e == null); events.Add(e); } } Assert.Equal(numEventsExpected, events.Count); foreach (var e in events) { Assert.True(e.StartsWith("TestStreamingRaceCondition - "), "Unexpected event [" + e + "]"); } }
public void TestStreamingRaceCondition() { BlockingCollection <string> queue = new BlockingCollection <string>(); List <string> events = new List <string>(); IStreamingCodec <string> stringCodec = _injector.GetInstance <StringStreamingCodec>(); int numEventsExpected = 150; IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0); var remoteHandler = Observer.Create <TransportEvent <string> >(tEvent => queue.Add(tEvent.Data)); using ( var server = new StreamingTransportServer <string>(endpoint.Address, remoteHandler, _tcpPortProvider, stringCodec)) { server.Run(); for (int i = 0; i < numEventsExpected / 3; i++) { Task.Run(() => { IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), server.LocalEndpoint.Port); using ( var client = new StreamingTransportClient <string>(remoteEndpoint, stringCodec, _tcpClientFactory)) { client.Send("Hello"); client.Send(", "); client.Send("World!"); } }); } for (int i = 0; i < numEventsExpected; i++) { events.Add(queue.Take()); } } Assert.Equal(numEventsExpected, events.Count); }
public void TestStreamingRaceCondition() { BlockingCollection<string> queue = new BlockingCollection<string>(); List<string> events = new List<string>(); IStreamingCodec<string> stringCodec = _injector.GetInstance<StringStreamingCodec>(); int numEventsExpected = 150; IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0); var remoteHandler = Observer.Create<TransportEvent<string>>(tEvent => queue.Add(tEvent.Data)); using (var server = new StreamingTransportServer<string>(endpoint.Address, remoteHandler, _tcpPortProvider, stringCodec)) { server.Run(); for (int i = 0; i < numEventsExpected / 3; i++) { Task.Run(() => { IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), server.LocalEndpoint.Port); using (var client = new StreamingTransportClient<string>(remoteEndpoint, stringCodec)) { client.Send("Hello"); client.Send(", "); client.Send("World!"); } }); } for (int i = 0; i < numEventsExpected; i++) { events.Add(queue.Take()); } } Assert.Equal(numEventsExpected, events.Count); }