using System; using System.Threading; using Xunit; using ZeroLevel.Services.Applications; using ZeroLevel.Services.Network.Proxies; namespace ZeroLevel.Network { public class NetworkTest : BaseZeroService { [Fact] public void ClientServerTest() { // Arrange var server = UseHost(8181); Exchange.RoutesStorage.Set("test", NetUtils.CreateIPEndPoint("127.0.0.1:8181")); bool got_message_no_request = false; bool got_message_with_request = false; bool got_response_message_no_request = false; bool got_response_message_with_request = false; server.RegisterInbox("empty", (_) => { got_message_no_request = true; }); server.RegisterInbox((_, ___) => { got_message_with_request = true; }); server.RegisterInbox("get_response", (_) => "Hello"); server.RegisterInbox("convert", (__, num) => num.ToString()); Thread.Sleep(200); Assert.True(Exchange.Peek("test", "empty")); Assert.True(Exchange.Send("test", "hello")); int repeat = 10; while (!got_message_no_request || !got_message_with_request) { Thread.Sleep(200); repeat--; if (repeat == 0) break; } // Assert Assert.True(got_message_no_request, "No signal for no request default inbox"); Assert.True(got_message_with_request, "No signal for default inbox"); for (int i = 0; i < 100; i++) { got_response_message_no_request = Exchange.Request("test", "get_response") .Equals("Hello", StringComparison.Ordinal); got_response_message_with_request = Exchange.Request("test", "convert", 10) .Equals("10", StringComparison.Ordinal); Assert.True(got_response_message_no_request, "No response without request"); Assert.True(got_response_message_with_request, "No response with request"); } } [Fact] public void ProxyTest() { bool got_message_no_request = false; bool got_message_with_request = false; using (var proxy = new Proxy(NetUtils.CreateIPEndPoint("127.0.0.1:92"))) { proxy.AppendServer(NetUtils.CreateIPEndPoint("127.0.0.1:93")); proxy.Run(); var server = Exchange.UseHost(NetUtils.CreateIPEndPoint("127.0.0.1:93")); server.RegisterInbox("empty", (_) => { got_message_no_request = true; }); server.RegisterInbox((_, ___) => { got_message_with_request = true; }); var client = Exchange.GetConnection(NetUtils.CreateIPEndPoint("127.0.0.1:92")); int repeat = 10; Assert.True(client.Send("empty")); Assert.True(client.Send(true)); while (!got_message_no_request || !got_message_with_request) { Thread.Sleep(200); repeat--; if (repeat == 0) break; } } Assert.True(got_message_no_request, "No signal for no request default inbox"); Assert.True(got_message_with_request, "No signal for default inbox"); } protected override void StartAction() { throw new NotImplementedException(); } protected override void StopAction() { throw new NotImplementedException(); } } }