public void SendAndReceive() { using (var front = new RouterSocket()) using (var back = new DealerSocket()) { front.Bind("inproc://frontend"); back.Bind("inproc://backend"); var proxy = new Proxy(front, back); Task.Factory.StartNew(proxy.Start); using (var client = new RequestSocket()) using (var server = new ResponseSocket()) { client.Connect("inproc://frontend"); server.Connect("inproc://backend"); client.SendFrame("hello"); Assert.AreEqual("hello", server.ReceiveFrameString()); server.SendFrame("reply"); Assert.AreEqual("reply", client.ReceiveFrameString()); } proxy.Stop(); } }
public void ControlSocketObservedMessages() { using (var front = new RouterSocket()) using (var back = new DealerSocket()) using (var controlPush = new PushSocket()) using (var controlPull = new PullSocket()) { front.Bind("inproc://frontend"); back.Bind("inproc://backend"); controlPush.Bind("inproc://control"); controlPull.Connect("inproc://control"); var proxy = new Proxy(front, back, controlPush); Task.Factory.StartNew(proxy.Start); using (var client = new RequestSocket()) using (var server = new ResponseSocket()) { client.Connect("inproc://frontend"); server.Connect("inproc://backend"); client.SendFrame("hello"); Assert.AreEqual("hello", server.ReceiveFrameString()); server.SendFrame("reply"); Assert.AreEqual("reply", client.ReceiveFrameString()); } Assert.IsNotNull(controlPull.ReceiveFrameBytes()); // receive identity Assert.IsEmpty(controlPull.ReceiveFrameString()); // pull terminator Assert.AreEqual("hello", controlPull.ReceiveFrameString()); Assert.IsNotNull(controlPull.ReceiveFrameBytes()); // receive identity Assert.IsEmpty(controlPull.ReceiveFrameString()); // pull terminator Assert.AreEqual("reply", controlPull.ReceiveFrameString()); proxy.Stop(); } }
public void ReconnectOnRouterBug() { { using (var dealer = new DealerSocket()) { dealer.Options.Identity = Encoding.ASCII.GetBytes("dealer"); dealer.Bind("tcp://localhost:6667"); using (var router = new RouterSocket()) { router.Options.RouterMandatory = true; router.Connect("tcp://localhost:6667"); Thread.Sleep(100); router.SendMoreFrame("dealer").SendFrame("Hello"); var message = dealer.ReceiveFrameString(); Assert.That(message == "Hello"); router.Disconnect("tcp://localhost:6667"); Thread.Sleep(1000); router.Connect("tcp://localhost:6667"); Thread.Sleep(100); router.SendMoreFrame("dealer").SendFrame("Hello"); message = dealer.ReceiveFrameString(); Assert.That(message == "Hello"); } } } }
public void Unbind(string protocol) { using (var server = new DealerSocket()) { string address1, address2; // just making sure can bind on both addresses using (var client1 = new DealerSocket()) using (var client2 = new DealerSocket()) { if (protocol == "tcp") { var port1 = server.BindRandomPort("tcp://localhost"); var port2 = server.BindRandomPort("tcp://localhost"); address1 = "tcp://localhost:" + port1; address2 = "tcp://localhost:" + port2; client1.Connect(address1); client2.Connect(address2); } else { Debug.Assert(protocol == "inproc"); address1 = "inproc://localhost1"; address2 = "inproc://localhost2"; server.Bind(address1); server.Bind(address2); client1.Connect(address1); client2.Connect(address2); } Thread.Sleep(100); // we should be connected to both server client1.SendFrame("1"); client2.SendFrame("2"); // the server receive from both server.SkipFrame(); server.SkipFrame(); } // unbind second address server.Unbind(address2); Thread.Sleep(100); using (var client1 = new DealerSocket()) using (var client2 = new DealerSocket()) { client1.Options.DelayAttachOnConnect = true; client1.Connect(address1); client2.Options.DelayAttachOnConnect = true; if (protocol == "tcp") { client2.Connect(address2); client1.SendFrame("1"); server.SkipFrame(); Assert.IsFalse(client2.TrySendFrame(TimeSpan.FromSeconds(2), "2")); } else { Assert.Throws<EndpointNotFoundException>(() => { client2.Connect(address2); }); } } } }
public void Disconnect(string protocol) { using (var server1 = new DealerSocket()) using (var server2 = new DealerSocket()) using (var client = new DealerSocket()) { string address2; if (protocol == "tcp") { var port1 = server1.BindRandomPort("tcp://localhost"); var port2 = server2.BindRandomPort("tcp://localhost"); client.Connect("tcp://localhost:" + port1); client.Connect("tcp://localhost:" + port2); address2 = "tcp://localhost:" + port2; } else { server1.Bind("inproc://localhost1"); server2.Bind("inproc://localhost2"); client.Connect("inproc://localhost1"); client.Connect("inproc://localhost2"); address2 = "inproc://localhost2"; } Thread.Sleep(100); // we should be connected to both server client.SendFrame("1"); client.SendFrame("2"); // make sure client is connected to both servers server1.SkipFrame(); server2.SkipFrame(); // disconnect from server2, server 1 should receive all messages client.Disconnect(address2); Thread.Sleep(100); client.SendFrame("1"); client.SendFrame("2"); server1.SkipFrame(); server1.SkipFrame(); } }
public void TestProxySendAndReceiveWithExternalPoller() { using (var front = new RouterSocket()) using (var back = new DealerSocket()) using (var poller = new NetMQPoller { front, back }) { front.Bind("inproc://frontend"); back.Bind("inproc://backend"); var proxy = new Proxy(front, back, null, poller); proxy.Start(); poller.RunAsync(); using (var client = new RequestSocket()) using (var server = new ResponseSocket()) { client.Connect("inproc://frontend"); server.Connect("inproc://backend"); client.SendFrame("hello"); Assert.AreEqual("hello", server.ReceiveFrameString()); server.SendFrame("reply"); Assert.AreEqual("reply", client.ReceiveFrameString()); // Now stop the external poller poller.Stop(); client.SendFrame("anyone there?"); // Should no longer receive any messages Assert.IsFalse(server.TrySkipFrame(TimeSpan.FromMilliseconds(50))); } } }
public void StoppingProxyDisengagesFunctionality() { using (var front = new RouterSocket()) using (var back = new DealerSocket()) { front.Bind("inproc://frontend"); back.Bind("inproc://backend"); var proxy = new Proxy(front, back); Task.Factory.StartNew(proxy.Start); // Send a message through to ensure the proxy has started using (var client = new RequestSocket()) using (var server = new ResponseSocket()) { client.Connect("inproc://frontend"); server.Connect("inproc://backend"); client.SendFrame("hello"); Assert.AreEqual("hello", server.ReceiveFrameString()); server.SendFrame("reply"); Assert.AreEqual("reply", client.ReceiveFrameString()); proxy.Stop(); // blocks until stopped using (var poller = new NetMQPoller { front, back }) { poller.RunAsync(); client.SendFrame("anyone there?"); // Should no longer receive any messages Assert.IsFalse(server.TrySkipFrame(TimeSpan.FromMilliseconds(50))); } } } }
public void StartAgainAfterStop() { using (var front = new RouterSocket()) using (var back = new DealerSocket()) { front.Bind("inproc://frontend"); back.Bind("inproc://backend"); var proxy = new Proxy(front, back); Task.Factory.StartNew(proxy.Start); // Send a message through to ensure the proxy has started using (var client = new RequestSocket()) using (var server = new ResponseSocket()) { client.Connect("inproc://frontend"); server.Connect("inproc://backend"); client.SendFrame("hello"); Assert.AreEqual("hello", server.ReceiveFrameString()); server.SendFrame("reply"); Assert.AreEqual("reply", client.ReceiveFrameString()); } proxy.Stop(); // blocks until stopped // Start it again Task.Factory.StartNew(proxy.Start); // Send a message through to ensure the proxy has started using (var client = new RequestSocket()) using (var server = new ResponseSocket()) { client.Connect("inproc://frontend"); server.Connect("inproc://backend"); client.SendFrame("hello"); Assert.AreEqual("hello", server.ReceiveFrameString()); server.SendFrame("reply"); Assert.AreEqual("reply", client.ReceiveFrameString()); } proxy.Stop(); // blocks until stopped } }
public void StartAndStopStateValidation() { using (var front = new RouterSocket()) using (var back = new DealerSocket()) { front.Bind("inproc://frontend"); back.Bind("inproc://backend"); var proxy = new Proxy(front, back); Task.Factory.StartNew(proxy.Start); // Send a message through to ensure the proxy has started using (var client = new RequestSocket()) using (var server = new ResponseSocket()) { client.Connect("inproc://frontend"); server.Connect("inproc://backend"); client.SendFrame("hello"); Assert.AreEqual("hello", server.ReceiveFrameString()); server.SendFrame("reply"); Assert.AreEqual("reply", client.ReceiveFrameString()); } Assert.Throws<InvalidOperationException>(proxy.Start); Assert.Throws<InvalidOperationException>(proxy.Start); Assert.Throws<InvalidOperationException>(proxy.Start); proxy.Stop(); // blocks until stopped Assert.Throws<InvalidOperationException>(proxy.Stop); } }
public void RouterMandatoryTrueThrowsHostUnreachableException() { { using (var dealer = new DealerSocket()) { dealer.Options.Identity = Encoding.ASCII.GetBytes("dealer"); dealer.Bind("tcp://localhost:6667"); using (var router = new RouterSocket()) { router.Options.RouterMandatory = true; router.Connect("tcp://localhost:8889"); Assert.Throws<HostUnreachableException>(() => router.SendMoreFrame("dealer").SendFrame("Hello")); } } } }
public void RouterMandatoryFalseDiscardsMessageSilently() { { using (var dealer = new DealerSocket()) { dealer.Options.Identity = Encoding.ASCII.GetBytes("dealer"); dealer.Bind("tcp://localhost:6667"); using (var router = new RouterSocket()) { router.Connect("tcp://localhost:8889"); Assert.DoesNotThrow(() => router.SendMoreFrame("dealer").SendFrame("Hello")); } } } }