[tests] Avoid "Address already in use"
[mono.git] / mcs / class / System / Test / System.Net / WebClientTest.cs
index 9917fa9a441b49b185509681aedbd0445f2c5898..133d293271e74d8da5d4c3f1ed28e8030bd78f8c 100644 (file)
@@ -16,6 +16,8 @@ using System.Text;
 using System.Threading;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.Net
 {
        [TestFixture]
@@ -63,7 +65,6 @@ namespace MonoTests.System.Net
                        try {
                                wc.DownloadData ((string) null);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -71,24 +72,6 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("address", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
-                       }
-#endif
                }
 
                [Test] // DownloadData (string)
@@ -114,7 +97,6 @@ namespace MonoTests.System.Net
                        }
                }
 
-#if NET_2_0
                [Test] // DownloadData (Uri)
                public void DownloadData2_Address_Null ()
                {
@@ -153,7 +135,6 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (inner.Message, "#9");
                        }
                }
-#endif
 
                [Test]
                public void DownloadFile1_Address_Null ()
@@ -162,7 +143,6 @@ namespace MonoTests.System.Net
                        try {
                                wc.DownloadFile ((string) null, "tmp.out");
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -170,33 +150,15 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("address", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
-                       }
-#endif
                }
 
                [Test] // DownloadFile (string, string)
                public void DownloadFile1_Address_SchemeNotSupported ()
                {
+                       string file = Path.Combine (Path.GetTempPath (), "tmp.out");
                        WebClient wc = new WebClient ();
                        try {
-                               wc.DownloadFile ("tp://scheme.notsupported",
-                                       "tmp.out");
+                               wc.DownloadFile ("tp://scheme.notsupported", file);
                                Assert.Fail ("#1");
                        } catch (WebException ex) {
                                // An error occurred performing a WebClient request
@@ -212,6 +174,10 @@ namespace MonoTests.System.Net
                                Assert.IsNull (inner.InnerException, "#8");
                                Assert.IsNotNull (inner.Message, "#9");
                        }
+                       finally {
+                               if (File.Exists (file))
+                                       File.Delete (file);
+                       }
                }
 
                [Test] // DownloadFile (string, string)
@@ -222,7 +188,6 @@ namespace MonoTests.System.Net
                                wc.DownloadFile ("tp://scheme.notsupported",
                                        (string) null);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -230,27 +195,8 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("fileName", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("path", inner.ParamName, "#11");
-                       }
-#endif
                }
 
-#if NET_2_0
                [Test] // DownloadFile (Uri, string)
                public void DownloadFile2_Address_Null ()
                {
@@ -270,10 +216,10 @@ namespace MonoTests.System.Net
                [Test] // DownloadFile (Uri, string)
                public void DownloadFile2_Address_SchemeNotSupported ()
                {
+                       string file = Path.Combine (Path.GetTempPath (), "tmp.out");
                        WebClient wc = new WebClient ();
                        try {
-                               wc.DownloadFile (new Uri ("tp://scheme.notsupported"),
-                                       "tmp.out");
+                               wc.DownloadFile (new Uri ("tp://scheme.notsupported"), file);
                                Assert.Fail ("#1");
                        } catch (WebException ex) {
                                // An error occurred performing a WebClient request
@@ -289,6 +235,10 @@ namespace MonoTests.System.Net
                                Assert.IsNull (inner.InnerException, "#8");
                                Assert.IsNotNull (inner.Message, "#9");
                        }
+                       finally {
+                               if (File.Exists (file))
+                                       File.Delete (file);
+                       }
                }
 
                [Test] // DownloadFile (Uri, string)
@@ -409,7 +359,6 @@ namespace MonoTests.System.Net
                                Assert.AreEqual ("Encoding", ex.ParamName, "#6");
                        }
                }
-#endif
 
                [Test] // OpenRead (string)
                public void OpenRead1_Address_Null ()
@@ -418,7 +367,6 @@ namespace MonoTests.System.Net
                        try {
                                wc.OpenRead ((string) null);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -426,24 +374,6 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("address", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
-                       }
-#endif
                }
 
                [Test] // OpenRead (string)
@@ -469,7 +399,6 @@ namespace MonoTests.System.Net
                        }
                }
 
-#if NET_2_0
                [Test] // OpenRead (Uri)
                public void OpenRead2_Address_Null ()
                {
@@ -508,7 +437,6 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (inner.Message, "#9");
                        }
                }
-#endif
 
                [Test] // OpenWrite (string)
                public void OpenWrite1_Address_Null ()
@@ -517,7 +445,6 @@ namespace MonoTests.System.Net
                        try {
                                wc.OpenWrite ((string) null);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -525,24 +452,6 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("address", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
-                       }
-#endif
                }
 
                [Test] // OpenWrite (string)
@@ -575,7 +484,6 @@ namespace MonoTests.System.Net
                        try {
                                wc.OpenWrite ((string) null, "PUT");
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -583,24 +491,6 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("address", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
-                       }
-#endif
                }
 
                [Test] // OpenWrite (string, string)
@@ -626,7 +516,6 @@ namespace MonoTests.System.Net
                        }
                }
 
-#if NET_2_0
                [Test] // OpenWrite (Uri)
                public void OpenWrite3_Address_Null ()
                {
@@ -705,7 +594,6 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (inner.Message, "#9");
                        }
                }
-#endif
 
                [Test] // UploadData (string, byte [])
                public void UploadData1_Address_Null ()
@@ -714,7 +602,6 @@ namespace MonoTests.System.Net
                        try {
                                wc.UploadData ((string) null, new byte [] { 0x1a });
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -722,24 +609,6 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("address", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
-                       }
-#endif
                }
 
                [Test] // UploadData (string, byte [])
@@ -766,9 +635,6 @@ namespace MonoTests.System.Net
                }
 
                [Test] // UploadData (string, byte [])
-#if ONLY_1_1
-               [Category ("NotDotNet")] // On MS, there's a nested NotImplementedException
-#endif
                public void UploadData1_Data_Null ()
                {
                        WebClient wc = new WebClient ();
@@ -776,7 +642,6 @@ namespace MonoTests.System.Net
                                wc.UploadData ("http://www.mono-project.com",
                                        (byte []) null);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -784,27 +649,8 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("data", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("data", inner.ParamName, "#11");
-                       }
-#endif
                }
 
-#if NET_2_0
                [Test] // UploadData (Uri, byte [])
                public void UploadData2_Address_Null ()
                {
@@ -861,7 +707,6 @@ namespace MonoTests.System.Net
                                Assert.AreEqual ("data", ex.ParamName, "#6");
                        }
                }
-#endif
 
                [Test] // UploadData (string, string, byte [])
                public void UploadData3_Address_Null ()
@@ -871,7 +716,6 @@ namespace MonoTests.System.Net
                                wc.UploadData ((string) null, "POST",
                                        new byte [] { 0x1a });
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -879,24 +723,6 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("address", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
-                       }
-#endif
                }
 
                [Test] // UploadData (string, string, byte [])
@@ -924,9 +750,6 @@ namespace MonoTests.System.Net
                }
 
                [Test] // UploadData (string, string, byte [])
-#if ONLY_1_1
-               [Category ("NotDotNet")] // On MS, there's a nested NotImplementedException
-#endif
                public void UploadData3_Data_Null ()
                {
                        WebClient wc = new WebClient ();
@@ -934,7 +757,6 @@ namespace MonoTests.System.Net
                                wc.UploadData ("http://www.mono-project.com",
                                        "POST", (byte []) null);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -942,27 +764,8 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("data", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("data", inner.ParamName, "#11");
-                       }
-#endif
                }
 
-#if NET_2_0
                [Test] // UploadData (Uri, string, byte [])
                public void UploadData4_Address_Null ()
                {
@@ -1019,7 +822,6 @@ namespace MonoTests.System.Net
                                Assert.AreEqual ("data", ex.ParamName, "#6");
                        }
                }
-#endif
 
                [Test] // UploadFile (string, string)
                public void UploadFile1_Address_Null ()
@@ -1031,7 +833,6 @@ namespace MonoTests.System.Net
                        try {
                                wc.UploadFile ((string) null, tempFile);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -1039,24 +840,6 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("address", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
-                       }
-#endif
                }
 
                [Test] // UploadFile (string, string)
@@ -1123,7 +906,6 @@ namespace MonoTests.System.Net
                                wc.UploadFile ("tp://scheme.notsupported",
                                        (string) null);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -1131,27 +913,8 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("fileName", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("path", inner.ParamName, "#11");
-                       }
-#endif
                }
 
-#if NET_2_0
                [Test] // UploadFile (Uri, string)
                public void UploadFile2_Address_Null ()
                {
@@ -1242,7 +1005,6 @@ namespace MonoTests.System.Net
                                Assert.AreEqual ("fileName", ex.ParamName, "#6");
                        }
                }
-#endif
 
                [Test] // UploadFile (string, string, string)
                public void UploadFile3_Address_Null ()
@@ -1254,7 +1016,6 @@ namespace MonoTests.System.Net
                        try {
                                wc.UploadFile ((string) null, "POST", tempFile);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -1262,24 +1023,6 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("path", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
-                       }
-#endif
                }
 
                [Test] // UploadFile (string, string, string)
@@ -1346,7 +1089,6 @@ namespace MonoTests.System.Net
                                wc.UploadFile ("tp://scheme.notsupported",
                                        "POST", (string) null);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -1354,27 +1096,8 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("fileName", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("path", inner.ParamName, "#11");
-                       }
-#endif
                }
 
-#if NET_2_0
                [Test] // UploadFile (Uri, string, string)
                public void UploadFile4_Address_Null ()
                {
@@ -1692,21 +1415,18 @@ namespace MonoTests.System.Net
                                Assert.AreEqual ("data", ex.ParamName, "#6");
                        }
                }
-#endif
 
                [Test]
                public void UploadValues1 ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
-                       string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
+                       string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
                                responder.Start ();
 
                                WebClient wc = new WebClient ();
-#if NET_2_0
                                wc.Encoding = Encoding.ASCII;
-#endif
 
                                NameValueCollection nvc = new NameValueCollection ();
                                nvc.Add ("Name", "\u0041\u2262\u0391\u002E");
@@ -1725,7 +1445,6 @@ namespace MonoTests.System.Net
                        try {
                                wc.UploadValues ((string) null, new NameValueCollection ());
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -1733,24 +1452,6 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("address", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
-                       }
-#endif
                }
 
                [Test] // UploadValues (string, NameValueCollection)
@@ -1778,9 +1479,6 @@ namespace MonoTests.System.Net
                }
 
                [Test] // UploadValues (string, NameValueCollection)
-#if ONLY_1_1
-               [Category ("NotDotNet")] // On MS, there's a nested NotImplementedException
-#endif
                public void UploadValues1_Data_Null ()
                {
                        WebClient wc = new WebClient ();
@@ -1788,7 +1486,6 @@ namespace MonoTests.System.Net
                                wc.UploadValues ("http://www.mono-project.com",
                                        (NameValueCollection) null);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -1796,27 +1493,8 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("data", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("data", inner.ParamName, "#11");
-                       }
-#endif
                }
 
-#if NET_2_0
                [Test] // UploadValues (Uri, NameValueCollection)
                public void UploadValues2_Address_Null ()
                {
@@ -1873,7 +1551,6 @@ namespace MonoTests.System.Net
                                Assert.AreEqual ("data", ex.ParamName, "#6");
                        }
                }
-#endif
 
                [Test] // UploadValues (string, string, NameValueCollection)
                public void UploadValues3_Address_Null ()
@@ -1883,7 +1560,6 @@ namespace MonoTests.System.Net
                                wc.UploadValues ((string) null, "POST",
                                        new NameValueCollection ());
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -1891,24 +1567,6 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("address", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
-                       }
-#endif
                }
 
                [Test] // UploadValues (string, string, NameValueCollection)
@@ -1936,9 +1594,6 @@ namespace MonoTests.System.Net
                }
 
                [Test] // UploadValues (string, string, NameValueCollection)
-#if ONLY_1_1
-               [Category ("NotDotNet")] // On MS, there's a nested NotImplementedException
-#endif
                public void UploadValues3_Data_Null ()
                {
                        WebClient wc = new WebClient ();
@@ -1946,7 +1601,6 @@ namespace MonoTests.System.Net
                                wc.UploadValues ("http://www.mono-project.com",
                                        "POST", (NameValueCollection) null);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (ArgumentNullException ex) {
                                Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
                                Assert.IsNull (ex.InnerException, "#3");
@@ -1954,27 +1608,8 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (ex.ParamName, "#5");
                                Assert.AreEqual ("data", ex.ParamName, "#6");
                        }
-#else
-                       } catch (WebException ex) {
-                               // An error occurred performing a WebClient request
-                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
-                               Assert.IsNotNull (ex.Message, "#3");
-                               Assert.IsNull (ex.Response, "#4");
-                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
-
-                               ArgumentNullException inner = ex.InnerException
-                                       as ArgumentNullException;
-                               Assert.IsNotNull (inner, "#6");
-                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
-                               Assert.IsNull (inner.InnerException, "#8");
-                               Assert.IsNotNull (inner.Message, "#9");
-                               Assert.IsNotNull (inner.ParamName, "#10");
-                               Assert.AreEqual ("data", inner.ParamName, "#11");
-                       }
-#endif
                }
 
-#if NET_2_0
                [Test] // UploadValues (Uri, string, NameValueCollection)
                public void UploadValues4_Address_Null ()
                {
@@ -2032,9 +1667,7 @@ namespace MonoTests.System.Net
                                Assert.AreEqual ("data", ex.ParamName, "#6");
                        }
                }
-#endif
 
-#if NET_2_0
                [Test]
                public void GetWebRequestOverriding ()
                {
@@ -2053,7 +1686,6 @@ namespace MonoTests.System.Net
                                return base.GetWebRequest (address);
                        }
                }
-#endif
 
                static byte [] EchoRequestHandler (Socket socket)
                {
@@ -2148,5 +1780,119 @@ namespace MonoTests.System.Net
                        // and return the same instance as WebRequest.DefaultWebProxy
                        Assert.AreSame (wc.Proxy, WebRequest.DefaultWebProxy);
                }
+                
+#if NET_4_5
+               [Test]
+               public void UploadStringAsyncCancelEvent ()
+               {
+                       UploadAsyncCancelEventTest (9301, (webClient, uri, cancelEvent) =>
+                       {
+
+                               webClient.UploadStringCompleted += (sender, args) =>
+                               {
+                                       if (args.Cancelled)
+                                               cancelEvent.Set ();
+                               };
+
+                               webClient.UploadStringAsync (uri, "PUT", "text");
+                       });
+               }
+
+               [Test]
+               public void UploadDataAsyncCancelEvent ()
+               {
+                       UploadAsyncCancelEventTest (9302, (webClient, uri, cancelEvent) =>
+                       {
+                               webClient.UploadDataCompleted += (sender, args) =>
+                               {
+                                       if (args.Cancelled)
+                                               cancelEvent.Set ();
+                               };
+
+                               webClient.UploadDataAsync (uri, "PUT", new byte[] { });
+                       });
+               }
+               
+               [Test]
+               public void UploadValuesAsyncCancelEvent ()
+               {
+                       UploadAsyncCancelEventTest (9303, (webClient, uri, cancelEvent) =>
+                       {
+                               webClient.UploadValuesCompleted += (sender, args) =>
+                               {
+                                       if (args.Cancelled)
+                                               cancelEvent.Set ();
+                               };
+
+                               webClient.UploadValuesAsync (uri, "PUT", new NameValueCollection ());
+                       });
+               }
+
+               [Test]
+               public void UploadFileAsyncCancelEvent ()
+               {
+                       UploadAsyncCancelEventTest (9304,(webClient, uri, cancelEvent) =>
+                       {
+                               string tempFile = Path.Combine (_tempFolder, "upload.tmp");
+                               File.Create (tempFile).Close ();
+
+                               webClient.UploadFileCompleted += (sender, args) =>
+                               {
+                                       if (args.Cancelled)
+                                               cancelEvent.Set ();
+                               };
+
+                               webClient.UploadFileAsync (uri, "PUT", tempFile);
+                       });
+               }
+
+               [Test]
+               public void UploadFileAsyncContentType ()
+               {
+                       var serverUri = "http://localhost:13370/";
+                       var filename = Path.GetTempFileName ();
+
+                       HttpListener listener = new HttpListener ();
+                       listener.Prefixes.Add (serverUri);
+                       listener.Start ();
+
+                       using (var client = new WebClient ())
+                       {
+                               client.UploadFileTaskAsync (new Uri (serverUri), filename);
+                               var request = listener.GetContext ().Request;
+
+                               var expected = "multipart/form-data; boundary=---------------------";
+                               Assert.AreEqual (expected.Length + 15, request.ContentType.Length);
+                               Assert.AreEqual (expected, request.ContentType.Substring (0, expected.Length));
+                       }
+                       listener.Close ();
+               }
+#endif
+
+#if NET_4_0
+               public void UploadAsyncCancelEventTest (int port, Action<WebClient, Uri, EventWaitHandle> uploadAction)
+               {
+                       var ep = NetworkHelpers.LocalEphemeralEndPoint ();
+                       string url = "http://" + ep.ToString() + "/test/";
+
+                       using (var responder = new SocketResponder (ep, EchoRequestHandler))
+                       {
+                               responder.Start ();
+
+                               var webClient = new WebClient ();
+
+                               var cancellationTokenSource = new CancellationTokenSource ();
+                               cancellationTokenSource.Token.Register (webClient.CancelAsync);
+
+                               var cancelEvent = new ManualResetEvent (false);
+
+                               uploadAction.Invoke (webClient, new Uri (url), cancelEvent);
+
+                               cancellationTokenSource.Cancel ();
+
+                               Assert.IsTrue (cancelEvent.WaitOne (1000));
+                       }
+               }
+#endif
        }
 }