[System][tests] Make sure Dns tests works in a mixed IPv4/IPv6 network too
authorSebastien Pouliot <sebastien@xamarin.com>
Wed, 11 May 2016 21:50:01 +0000 (17:50 -0400)
committerSebastien Pouliot <sebastien@xamarin.com>
Wed, 11 May 2016 21:50:01 +0000 (17:50 -0400)
Previous tweak could disable some tests in a mixed network, e.g.
if an IPv6 address was first but an IPv4 address was available.

mcs/class/System/Test/System.Net/DnsTest.cs

index 6487e11784658ff8d6cb1b677432f47a284445b2..a1b5f51cdd2ec37df3ae8037cfc242a9986c4ecb 100644 (file)
@@ -9,7 +9,7 @@
 // \r
 \r
 using System;\r
-using System.Collections;\r
+using System.Linq;\r
 using System.Net;\r
 using System.Net.Sockets;\r
 using System.Threading;\r
@@ -56,7 +56,7 @@ namespace MonoTests.System.Net
                        IAsyncResult async = Dns.BeginResolve (site1Dot, null, null);\r
                        IPHostEntry entry = Dns.EndResolve (async);\r
                        SubTestValidIPHostEntry (entry);
-                       var ip = GetNonIPv6Address (entry);\r
+                       var ip = GetIPv4Address (entry);\r
                        Assert.AreEqual (site1Dot, ip.ToString ());\r
                }\r
 \r
@@ -206,12 +206,12 @@ namespace MonoTests.System.Net
                        }\r
                }\r
 \r
-               static IPAddress GetNonIPv6Address (IPHostEntry h)\r
+               static IPAddress GetIPv4Address (IPHostEntry h)\r
                {\r
-                       var al0 = h.AddressList [0];\r
-                       if (al0.AddressFamily == AddressFamily.InterNetworkV6)\r
-                               Assert.Ignore ("Resolve address is incompatible, e.g. running on an IPv6 only network");\r
-                       return al0;\r
+                       var al = h.AddressList.FirstOrDefault (x => x.AddressFamily == AddressFamily.InterNetwork);\r
+                       if (al == null)\r
+                               Assert.Ignore ("Could not resolve an IPv4 address as required by this test case, e.g. running on an IPv6 only network");\r
+                       return al;\r
                }\r
 \r
                void SubTestGetHostByName (string siteName, string siteDot)\r
@@ -219,7 +219,7 @@ namespace MonoTests.System.Net
                        IPHostEntry h = Dns.GetHostByName (siteName);\r
                        SubTestValidIPHostEntry (h);\r
                        Assert.AreEqual (siteName, h.HostName, "siteName");\r
-                       var ip = GetNonIPv6Address (h);\r
+                       var ip = GetIPv4Address (h);\r
                        Assert.AreEqual (siteDot, ip.ToString (), "siteDot");\r
                }\r
 \r
@@ -297,7 +297,7 @@ namespace MonoTests.System.Net
                        IPAddress addr = new IPAddress (IPAddress.NetworkToHostOrder ((int) site1IP));\r
                        IPHostEntry h = Dns.GetHostByAddress (addr);\r
                        SubTestValidIPHostEntry (h);\r
-                       var ip = GetNonIPv6Address (h);\r
+                       var ip = GetIPv4Address (h);\r
                        Assert.AreEqual (addr.ToString (), ip.ToString ());\r
                }\r
 \r
@@ -307,7 +307,7 @@ namespace MonoTests.System.Net
                        IPAddress addr = new IPAddress (IPAddress.NetworkToHostOrder ((int) site2IP));\r
                        IPHostEntry h = Dns.GetHostByAddress (addr);\r
                        SubTestValidIPHostEntry (h);
-                       var ip = GetNonIPv6Address (h);\r
+                       var ip = GetIPv4Address (h);\r
                        Assert.AreEqual (addr.ToString (), ip.ToString ());\r
                }\r
 \r