[System][tests] Tweak Dns unit tests so it does not fail on an IPv6 only network
authorSebastien Pouliot <sebastien@xamarin.com>
Wed, 11 May 2016 13:11:17 +0000 (09:11 -0400)
committerSebastien Pouliot <sebastien@xamarin.com>
Wed, 11 May 2016 13:11:17 +0000 (09:11 -0400)
Some existing tests only works when IPv4 is available, which was fine as
it match how we historically ran those tests.

Apple has a new requirement [1] to test under an "IPv6 only network" and
the change facilitate this.

[1] https://developer.apple.com/news/?id=05042016a

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

index fe3769fd5455e49f1795d6cd89d16be27f12fc1a..6487e11784658ff8d6cb1b677432f47a284445b2 100644 (file)
@@ -55,8 +55,9 @@ namespace MonoTests.System.Net
 \r
                        IAsyncResult async = Dns.BeginResolve (site1Dot, null, null);\r
                        IPHostEntry entry = Dns.EndResolve (async);\r
-                       SubTestValidIPHostEntry (entry);\r
-                       Assert.AreEqual (site1Dot, entry.AddressList [0].ToString ());\r
+                       SubTestValidIPHostEntry (entry);
+                       var ip = GetNonIPv6Address (entry);\r
+                       Assert.AreEqual (site1Dot, ip.ToString ());\r
                }\r
 \r
                void ResolveCallback (IAsyncResult ar)\r
@@ -205,12 +206,21 @@ namespace MonoTests.System.Net
                        }\r
                }\r
 \r
+               static IPAddress GetNonIPv6Address (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
+               }\r
+\r
                void SubTestGetHostByName (string siteName, string siteDot)\r
                {\r
                        IPHostEntry h = Dns.GetHostByName (siteName);\r
                        SubTestValidIPHostEntry (h);\r
                        Assert.AreEqual (siteName, h.HostName, "siteName");\r
-                       Assert.AreEqual (siteDot, h.AddressList [0].ToString (), "siteDot");\r
+                       var ip = GetNonIPv6Address (h);\r
+                       Assert.AreEqual (siteDot, ip.ToString (), "siteDot");\r
                }\r
 \r
                [Test]\r
@@ -287,7 +297,8 @@ namespace MonoTests.System.Net
                        IPAddress addr = new IPAddress (IPAddress.NetworkToHostOrder ((int) site1IP));\r
                        IPHostEntry h = Dns.GetHostByAddress (addr);\r
                        SubTestValidIPHostEntry (h);\r
-                       Assert.AreEqual (addr.ToString (), h.AddressList [0].ToString ());\r
+                       var ip = GetNonIPv6Address (h);\r
+                       Assert.AreEqual (addr.ToString (), ip.ToString ());\r
                }\r
 \r
                [Test]\r
@@ -295,8 +306,9 @@ namespace MonoTests.System.Net
                {\r
                        IPAddress addr = new IPAddress (IPAddress.NetworkToHostOrder ((int) site2IP));\r
                        IPHostEntry h = Dns.GetHostByAddress (addr);\r
-                       SubTestValidIPHostEntry (h);\r
-                       Assert.AreEqual (addr.ToString (), h.AddressList [0].ToString ());\r
+                       SubTestValidIPHostEntry (h);
+                       var ip = GetNonIPv6Address (h);\r
+                       Assert.AreEqual (addr.ToString (), ip.ToString ());\r
                }\r
 \r
                [Test]\r