public override EndPoint Create(SocketAddress SockAddr) { if (SockAddr == null || SockAddr.Family != AF_HYPERV || SockAddr.Size != 34) { return null; } HyperVSocketEndPoint endpoint = new HyperVSocketEndPoint(SockAddr.Family, Guid.Empty, Guid.Empty); string sockAddress = SockAddr.ToString(); endpoint.VmId = new Guid(sockAddress.Substring(4, 16)); endpoint.ServiceId = new Guid(sockAddress.Substring(20, 16)); return endpoint; }
public MFTestResults NetTest6_SocketAddressBasic() { /// <summary> /// 1. Creates 30 Random IPs between 0.0.0.0 and 255.255.255.127 /// 2. Verifies that they can be constructed as SocketAddress /// 3. Verifies that they have the correct data (GetAddressBytes) /// 4. Verifies ToString and GetHashcode /// </summary> /// bool testResult = true; try { Random random = new Random(); for (int i = 0; i <= 30; i++) { int[] IPInts = { random.Next(256), random.Next(256), random.Next(256), random.Next(128) }; Log.Comment("Random IP " + IPInts[0] + "." + IPInts[1] + "." + IPInts[2] + "." + IPInts[3]); IPAddress address = new IPAddress((long)( IPInts[0] + IPInts[1] * 256 + IPInts[2] * 256 * 256 + IPInts[3] * 256 * 256 * 256)); int portInt = random.Next(65536); IPEndPoint ipEndpoint1 = new IPEndPoint(address, portInt); SocketAddress socketAddress1 = ipEndpoint1.Serialize(); SocketAddress socketAddress2 = ipEndpoint1.Serialize(); if (socketAddress1 == null) throw new Exception("socketAddress1 is null"); if (socketAddress2 == null) throw new Exception("socketAddress2 is null"); Type typeOfSocketAddress = socketAddress1.GetType(); if (typeOfSocketAddress != Type.GetType("System.Net.SocketAddress")) throw new Exception("socketAddress1 Type is incorrect"); typeOfSocketAddress = socketAddress2.GetType(); if (typeOfSocketAddress != Type.GetType("System.Net.SocketAddress")) throw new Exception("socketAddress2 Type is incorrect"); if (socketAddress1.ToString() != socketAddress2.ToString()) throw new Exception("ToString returns differently for same data"); //21295 GetHashCode returns differently for cloned data if (socketAddress1.GetHashCode() != socketAddress2.GetHashCode()) throw new Exception("GetHashCode returns differently for same data"); if (socketAddress1.Family != AddressFamily.InterNetwork) throw new Exception("socketAddress1 Family is incorrect"); if (socketAddress2.Family != AddressFamily.InterNetwork) throw new Exception("socketAddress2 Family is incorrect"); /* * Pending Resolution of 17428 * Log.Comment("Recreating socketAddress2 with new data"); int portInt2 = portInt % 2 + 1; long addressLong2 = (long)( (IPInts[0] % 2 + 1) + (IPInts[1] % 2 + 1) * 256 + (IPInts[2] % 2 + 1) * 256 * 256 + (IPInts[3] % 2 + 1) * 256 * 256 * 256); IPEndPoint ipEndpoint2 = new IPEndPoint(addressLong2, portInt2); socketAddress2 = ipEndpoint2.Serialize(); socketAddress2.Family = AddressFamily.Chaos; */ socketAddress2 = new SocketAddress(AddressFamily.Chaos, 8); if (socketAddress1.GetHashCode() == socketAddress2.GetHashCode()) throw new Exception("GetHashCode returns same for " + socketAddress1.ToString() + " as " + socketAddress2.ToString()); if (socketAddress1.ToString() == socketAddress2.ToString()) throw new Exception("ToString returns same for different data"); } } catch (Exception e) { Log.Comment("Caught exception: " + e.Message); testResult = false; } return (testResult ? MFTestResults.Pass : MFTestResults.KnownFailure); }