public Dictionary <string, string> getEndpointInfoAsContext(Current current) { Debug.Assert(current.Connection != null); Dictionary <string, string> ctx = new Dictionary <string, string>(); Ice.EndpointInfo info = current.Connection.Endpoint.GetInfo(); ctx["timeout"] = info.Timeout.ToString(); ctx["compress"] = info.Compress ? "true" : "false"; ctx["datagram"] = info.Datagram() ? "true" : "false"; ctx["secure"] = info.Datagram() ? "true" : "false"; ctx["type"] = info.Type().ToString(); IPEndpointInfo?ipinfo = getIPEndpointInfo(info); Debug.Assert(ipinfo != null); ctx["host"] = ipinfo.Host; ctx["port"] = ipinfo.Port.ToString(); if (ipinfo is UDPEndpointInfo) { UDPEndpointInfo udp = (UDPEndpointInfo)ipinfo; ctx["mcastInterface"] = udp.McastInterface; ctx["mcastTtl"] = udp.McastTtl.ToString(); } return(ctx); }
public static void allTests(global::Test.TestHelper helper) { Communicator communicator = helper.communicator(); var output = helper.getWriter(); output.Write("testing proxy endpoint information... "); output.Flush(); { var p1 = IObjectPrx.Parse( "test -t:default -h tcphost -p 10000 -t 1200 -z --sourceAddress 10.10.10.10:" + "udp -h udphost -p 10001 --interface eth0 --ttl 5 --sourceAddress 10.10.10.10:" + "opaque -e 1.8 -t 100 -v ABCD", communicator); IEndpoint[] endps = p1.Endpoints; EndpointInfo info = endps[0].GetInfo(); TCPEndpointInfo tcpEndpoint = getTCPEndpointInfo(info); test(tcpEndpoint.Host.Equals("tcphost")); test(tcpEndpoint.Port == 10000); test(tcpEndpoint.SourceAddress.Equals("10.10.10.10")); test(tcpEndpoint.Timeout == 1200); test(tcpEndpoint.Compress); test(!tcpEndpoint.Datagram()); test(tcpEndpoint.Type() == TCPEndpointType.Value && !tcpEndpoint.Secure() || tcpEndpoint.Type() == SSLEndpointType.Value && tcpEndpoint.Secure() || tcpEndpoint.Type() == WSEndpointType.Value && !tcpEndpoint.Secure() || tcpEndpoint.Type() == WSSEndpointType.Value && tcpEndpoint.Secure()); test(tcpEndpoint.Type() == TCPEndpointType.Value && info is TCPEndpointInfo || tcpEndpoint.Type() == SSLEndpointType.Value && info is IceSSL.EndpointInfo || tcpEndpoint.Type() == WSEndpointType.Value && info is WSEndpointInfo || tcpEndpoint.Type() == WSSEndpointType.Value && info is WSEndpointInfo); UDPEndpointInfo udpEndpoint = (UDPEndpointInfo)endps[1].GetInfo(); test(udpEndpoint.Host.Equals("udphost")); test(udpEndpoint.Port == 10001); test(udpEndpoint.McastInterface.Equals("eth0")); test(udpEndpoint.McastTtl == 5); test(udpEndpoint.SourceAddress.Equals("10.10.10.10")); test(udpEndpoint.Timeout == -1); test(!udpEndpoint.Compress); test(!udpEndpoint.Secure()); test(udpEndpoint.Datagram()); test(udpEndpoint.Type() == 3); OpaqueEndpointInfo opaqueEndpoint = (OpaqueEndpointInfo)endps[2].GetInfo(); test(opaqueEndpoint.RawBytes.Length > 0); test(opaqueEndpoint.RawEncoding.Equals(new EncodingVersion(1, 8))); } output.WriteLine("ok"); ObjectAdapter adapter; output.Write("test object adapter endpoint information... "); output.Flush(); { string host = communicator.GetPropertyAsInt("Ice.IPv6") != 0 ? "::1" : "127.0.0.1"; communicator.SetProperty("TestAdapter.Endpoints", "tcp -h \"" + host + "\" -t 15000:udp -h \"" + host + "\""); System.Console.WriteLine(communicator.GetProperty("TestAdapter.Endpoints")); adapter = communicator.CreateObjectAdapter("TestAdapter"); IEndpoint[] endpoints = adapter.GetEndpoints(); test(endpoints.Length == 2); IEndpoint[] publishedEndpoints = adapter.GetPublishedEndpoints(); test(global::Test.Collections.Equals(endpoints, publishedEndpoints)); TCPEndpointInfo tcpEndpoint = getTCPEndpointInfo(endpoints[0].GetInfo()); test(tcpEndpoint.Type() == TCPEndpointType.Value || tcpEndpoint.Type() == SSLEndpointType.Value || tcpEndpoint.Type() == WSEndpointType.Value || tcpEndpoint.Type() == WSSEndpointType.Value); test(tcpEndpoint.Host.Equals(host)); test(tcpEndpoint.Port > 0); test(tcpEndpoint.Timeout == 15000); UDPEndpointInfo udpEndpoint = (UDPEndpointInfo)endpoints[1].GetInfo(); test(udpEndpoint.Host.Equals(host)); test(udpEndpoint.Datagram()); test(udpEndpoint.Port > 0); endpoints = new IEndpoint[] { endpoints[0] }; test(endpoints.Length == 1); adapter.SetPublishedEndpoints(endpoints); publishedEndpoints = adapter.GetPublishedEndpoints(); test(global::Test.Collections.Equals(endpoints, publishedEndpoints)); adapter.Destroy(); int port = helper.getTestPort(1); communicator.SetProperty("TestAdapter.Endpoints", $"default -h * -p {port}"); communicator.SetProperty("TestAdapter.PublishedEndpoints", helper.getTestEndpoint(1)); adapter = communicator.CreateObjectAdapter("TestAdapter"); endpoints = adapter.GetEndpoints(); test(endpoints.Length >= 1); publishedEndpoints = adapter.GetPublishedEndpoints(); test(publishedEndpoints.Length == 1); foreach (var endpoint in endpoints) { tcpEndpoint = getTCPEndpointInfo(endpoint.GetInfo()); test(tcpEndpoint.Port == port); } tcpEndpoint = getTCPEndpointInfo(publishedEndpoints[0].GetInfo()); test(tcpEndpoint.Host == "127.0.0.1"); test(tcpEndpoint.Port == port); adapter.Destroy(); } output.WriteLine("ok"); int endpointPort = helper.getTestPort(0); var @base = IObjectPrx.Parse("test:" + helper.getTestEndpoint(0) + ":" + helper.getTestEndpoint(0, "udp"), communicator); var testIntf = Test.ITestIntfPrx.CheckedCast(@base); string defaultHost = communicator.GetProperty("Ice.Default.Host") ?? ""; output.Write("test connection endpoint information... "); output.Flush(); { EndpointInfo info = @base.GetConnection().Endpoint.GetInfo(); TCPEndpointInfo tcpinfo = getTCPEndpointInfo(info); test(tcpinfo.Port == endpointPort); test(!tcpinfo.Compress); test(tcpinfo.Host.Equals(defaultHost)); Dictionary <string, string> ctx = testIntf.getEndpointInfoAsContext(); test(ctx["host"].Equals(tcpinfo.Host)); test(ctx["compress"].Equals("false")); int port = int.Parse(ctx["port"]); test(port > 0); info = @base.Clone(invocationMode: InvocationMode.Datagram).GetConnection().Endpoint.GetInfo(); UDPEndpointInfo udp = (UDPEndpointInfo)info; test(udp.Port == endpointPort); test(udp.Host.Equals(defaultHost)); } output.WriteLine("ok"); output.Write("testing connection information... "); output.Flush(); { Connection connection = @base.GetConnection(); connection.SetBufferSize(1024, 2048); ConnectionInfo info = connection.GetConnectionInfo(); TCPConnectionInfo ipInfo = getTCPConnectionInfo(info); test(!info.Incoming); test(info.AdapterName.Length == 0); test(ipInfo.RemotePort == endpointPort); test(ipInfo.LocalPort > 0); if (defaultHost.Equals("127.0.0.1")) { test(ipInfo.LocalAddress.Equals(defaultHost)); test(ipInfo.RemoteAddress.Equals(defaultHost)); } test(ipInfo.RcvSize >= 1024); test(ipInfo.SndSize >= 2048); Dictionary <string, string> ctx = testIntf.getConnectionInfoAsContext(); test(ctx["incoming"].Equals("true")); test(ctx["adapterName"].Equals("TestAdapter")); test(ctx["remoteAddress"].Equals(ipInfo.LocalAddress)); test(ctx["localAddress"].Equals(ipInfo.RemoteAddress)); test(ctx["remotePort"].Equals(ipInfo.LocalPort.ToString())); test(ctx["localPort"].Equals(ipInfo.RemotePort.ToString())); if (@base.GetConnection().Type().Equals("ws") || @base.GetConnection().Type().Equals("wss")) { Dictionary <string, string> headers = ((WSConnectionInfo)info).Headers; test(headers["Upgrade"].Equals("websocket")); test(headers["Connection"].Equals("Upgrade")); test(headers["Sec-WebSocket-Protocol"].Equals("ice.zeroc.com")); test(headers["Sec-WebSocket-Accept"] != null); test(ctx["ws.Upgrade"].Equals("websocket")); test(ctx["ws.Connection"].Equals("Upgrade")); test(ctx["ws.Sec-WebSocket-Protocol"].Equals("ice.zeroc.com")); test(ctx["ws.Sec-WebSocket-Version"].Equals("13")); test(ctx["ws.Sec-WebSocket-Key"] != null); } connection = @base.Clone(invocationMode: InvocationMode.Datagram).GetConnection(); connection.SetBufferSize(2048, 1024); UDPConnectionInfo udpInfo = (UDPConnectionInfo)connection.GetConnectionInfo(); test(!udpInfo.Incoming); test(udpInfo.AdapterName.Length == 0); test(udpInfo.LocalPort > 0); test(udpInfo.RemotePort == endpointPort); if (defaultHost.Equals("127.0.0.1")) { test(udpInfo.RemoteAddress.Equals(defaultHost)); test(udpInfo.LocalAddress.Equals(defaultHost)); } test(udpInfo.RcvSize >= 2048); test(udpInfo.SndSize >= 1024); } output.WriteLine("ok"); testIntf.shutdown(); communicator.Shutdown(); communicator.WaitForShutdown(); }