Wed Feb 24 15:47:16 CET 2010 Paolo Molaro <lupus@ximian.com>
[mono.git] / mcs / class / System / Test / System.Net / WebRequestTest.cs
index 33e8be27bf74aa60776e27bde55c9f0495be511a..636a88d19b36094691cd6842e98626d48bab86af 100644 (file)
@@ -15,6 +15,8 @@ using System;
 using System.Net;\r
 using System.Collections;\r
 using System.Runtime.Serialization;\r
+using Socks = System.Net.Sockets;\r
+\r
 \r
 namespace MonoTests.System.Net {\r
 \r
@@ -44,8 +46,16 @@ namespace MonoTests.System.Net {
                [Test]\r
                public void SerializationConstructor ()\r
                {\r
+#if NET_2_0\r
                        NonAbstractWebRequest w = new NonAbstractWebRequest (null, new StreamingContext ());\r
                        Assert.IsNotNull (w);\r
+#else\r
+                       try {\r
+                               new NonAbstractWebRequest (null, new StreamingContext ());\r
+                               Assert.Fail ("#1");\r
+                       } catch (NotImplementedException) {\r
+                       }\r
+#endif\r
                }\r
 \r
                // properties (only test 'get'ter)\r
@@ -189,45 +199,170 @@ namespace MonoTests.System.Net {
                }\r
 \r
        [Test]\r
-        public void All ()\r
-        {\r
+       public void All ()\r
+       {\r
                WebRequest req = WebRequest.Create ("http://www.contoso.com");\r
-               Assertion.Assert ("#1", req is HttpWebRequest);\r
+               Assert.IsTrue (req is HttpWebRequest, "#1");\r
                req = WebRequest.Create ("https://www.contoso.com");\r
-               Assertion.Assert ("#2", req is HttpWebRequest);\r
+               Assert.IsTrue (req is HttpWebRequest, "#2");\r
                req = WebRequest.Create ("file://www.contoso.com");\r
-               Assertion.Assert ("#3", req is FileWebRequest);\r
-               \r
+               Assert.IsTrue (req is FileWebRequest, "#3");\r
+#if NET_2_0\r
+               req = WebRequest.Create ("ftp://www.contoso.com");\r
+               Assert.IsTrue (req is FtpWebRequest, "#4");\r
+#endif\r
                WebRequest.RegisterPrefix ("http://www.contoso.com", new TestWebRequestCreator ());\r
                bool ret = WebRequest.RegisterPrefix ("http://WWW.contoso.com", new TestWebRequestCreator ());\r
-               Assertion.AssertEquals ("#4a", false, ret);\r
+               Assert.AreEqual (false, ret, "#5a");\r
                ret = WebRequest.RegisterPrefix ("http://www.contoso.com/foo/bar", new TestWebRequestCreator2 ());\r
-               Assertion.AssertEquals ("#4b", true, ret);\r
+               Assert.AreEqual (true, ret, "#5b");\r
                ret = WebRequest.RegisterPrefix ("http://www", new TestWebRequestCreator3 ());\r
-               Assertion.AssertEquals ("#4c", true, ret);\r
+               Assert.AreEqual (true, ret, "#5c");\r
 \r
                req = WebRequest.Create ("http://WWW.contoso.com");\r
-               Assertion.Assert ("#5", req is TestWebRequest); \r
+               Assert.IsTrue (req is TestWebRequest, "#6"); \r
 \r
                req = WebRequest.Create ("http://WWW.contoso.com/foo/bar/index.html");\r
-               Assertion.Assert ("#6", req is TestWebRequest2); \r
+               Assert.IsTrue (req is TestWebRequest2, "#7"); \r
                \r
                req = WebRequest.Create ("http://WWW.x.com");\r
-               Assertion.Assert ("#7", req is TestWebRequest3); \r
+               Assert.IsTrue (req is TestWebRequest3, "#8"); \r
 \r
                req = WebRequest.Create ("http://WWW.c");\r
-               Assertion.Assert ("#8", req is TestWebRequest3); \r
+               Assert.IsTrue (req is TestWebRequest3, "#9"); \r
 \r
                req = WebRequest.CreateDefault (new Uri("http://WWW.contoso.com"));\r
-               Assertion.Assert ("#9", req is HttpWebRequest);\r
+               Assert.IsTrue (req is HttpWebRequest, "#10");\r
 \r
                try {\r
                        req = WebRequest.Create ("tcp://www.contoso.com");\r
-                       Assertion.Fail ("#10 should have failed with NotSupportedException");                   \r
-               } catch (NotSupportedException) {                       \r
-               }               \r
+                       Assert.Fail ("#11 should have failed with NotSupportedException");\r
+               } catch (NotSupportedException) {\r
+               }\r
        }\r
-       \r
+\r
+       [Test]\r
+       public void Create_RequestUriString_Null ()\r
+       {\r
+               try {\r
+                       WebRequest.Create ((string) null);\r
+                       Assert.Fail ("#1");\r
+               } catch (ArgumentNullException ex) {\r
+                       Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
+                       Assert.IsNull (ex.InnerException, "#3");\r
+                       Assert.IsNotNull (ex.Message, "#4");\r
+                       Assert.IsNotNull (ex.ParamName, "#5");\r
+                       Assert.AreEqual ("requestUriString", ex.ParamName, "#6");\r
+               }\r
+       }\r
+\r
+       [Test]\r
+       public void CreateDefault_RequestUri_Null ()\r
+       {\r
+               try {\r
+                       WebRequest.CreateDefault ((Uri) null);\r
+                       Assert.Fail ("#1");\r
+               } catch (ArgumentNullException ex) {\r
+                       Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
+                       Assert.IsNull (ex.InnerException, "#3");\r
+                       Assert.IsNotNull (ex.Message, "#4");\r
+                       Assert.IsNotNull (ex.ParamName, "#5");\r
+                       Assert.AreEqual ("requestUri", ex.ParamName, "#6");\r
+               }\r
+       }\r
+\r
+#if NET_2_0\r
+       [Test]\r
+       public void DefaultWebProxy ()\r
+       {\r
+               WebProxy proxy = new WebProxy ("proxy.intern.com", 83);\r
+\r
+               WebRequest.DefaultWebProxy = proxy;\r
+               Assert.IsNotNull (WebRequest.DefaultWebProxy, "#A1");\r
+               Assert.AreSame (proxy, WebRequest.DefaultWebProxy, "#A2");\r
+\r
+               HttpWebRequest req = (HttpWebRequest) WebRequest.CreateDefault (\r
+                       new Uri ("http://www.mono-project.com"));\r
+               Assert.IsNotNull (req.Proxy, "#B1");\r
+               Assert.AreSame (proxy, req.Proxy, "#B2");\r
+\r
+               WebRequest.DefaultWebProxy = null;\r
+               Assert.IsNull (WebRequest.DefaultWebProxy, "#C1");\r
+               Assert.IsNotNull (req.Proxy, "#C2");\r
+               Assert.AreSame (proxy, req.Proxy, "#C3");\r
+\r
+               req = (HttpWebRequest) WebRequest.CreateDefault (\r
+                       new Uri ("http://www.mono-project.com"));\r
+               Assert.IsNull (req.Proxy, "#D");\r
+       }\r
+#endif\r
+\r
+       [Test]\r
+       public void RegisterPrefix_Creator_Null ()\r
+       {\r
+               try {\r
+                       WebRequest.RegisterPrefix ("http://www.mono-project.com", (IWebRequestCreate) null);\r
+                       Assert.Fail ("#1");\r
+               } catch (ArgumentNullException ex) {\r
+                       Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
+                       Assert.IsNull (ex.InnerException, "#3");\r
+                       Assert.IsNotNull (ex.Message, "#4");\r
+                       Assert.IsNotNull (ex.ParamName, "#5");\r
+                       Assert.AreEqual ("creator", ex.ParamName, "#6");\r
+               }\r
+       }\r
+\r
+       [Test]\r
+       public void RegisterPrefix_Prefix_Null ()\r
+       {\r
+               try {\r
+                       WebRequest.RegisterPrefix ((string) null, new TestWebRequestCreator ());\r
+                       Assert.Fail ("#1");\r
+               } catch (ArgumentNullException ex) {\r
+                       Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
+                       Assert.IsNull (ex.InnerException, "#3");\r
+                       Assert.IsNotNull (ex.Message, "#4");\r
+                       Assert.IsNotNull (ex.ParamName, "#5");\r
+                       Assert.AreEqual ("prefix", ex.ParamName, "#6");\r
+               }\r
+       }\r
+\r
+       [Test] //BNC#323452\r
+       public void TestFailedConnection ()\r
+       {\r
+               try {\r
+                       WebRequest.Create ("http://127.0.0.1:0/non-existant.txt").GetResponse ();\r
+                       Assert.Fail ("Should have raised an exception");\r
+               } catch (Exception e) {\r
+                       Assert.IsTrue (e is WebException, "Got " + e.GetType ().Name + ": " + e.Message);\r
+                       //#if NET_2_0 e.Message == "Unable to connect to the remote server"\r
+                       //#if NET_1_1 e.Message == "The underlying connection was closed: Unable to connect to the remote server."\r
+\r
+                       Assert.AreEqual (((WebException)e).Status, WebExceptionStatus.ConnectFailure);\r
+\r
+                       //#if !NET_1_1 (this is not true in .NET 1.x)\r
+                       Assert.IsNotNull (e.InnerException);\r
+                       Assert.IsTrue (e.InnerException is Socks.SocketException, "InnerException should be SocketException");\r
+                       //e.Message == "The requested address is not valid in its context 127.0.0.1:0"\r
+                       //#endif\r
+               }\r
+       }\r
+\r
+       [Test] //BNC#323452\r
+       public void TestFailedResolution ()\r
+       {\r
+               try {\r
+                       WebRequest.Create ("http://thisdomaindoesnotexist.monotestcase.x/non-existant.txt").GetResponse ();\r
+                       Assert.Fail ("Should have raised an exception");\r
+               } catch (Exception e) {\r
+                       Assert.IsTrue (e is WebException);\r
+                       //#if NET_2_0 e.Message == "The underlying connection was closed: The remote name could not be resolved."\r
+                       //#if NET_1_1 e.Message == "The remote name could not be resolved: 'thisdomaindoesnotexist.monotestcase.x'"\r
+                       Assert.AreEqual (((WebException)e).Status, WebExceptionStatus.NameResolutionFailure);\r
+                       Assert.IsNull (e.InnerException);\r
+               }\r
+       }\r
+\r
        internal class TestWebRequestCreator : IWebRequestCreate\r
        {\r
                internal TestWebRequestCreator () { }\r