// WebRequestTest.cs - NUnit Test Cases for System.Net.WebRequest\r
//\r
// Authors:\r
-// Lawrence Pit (loz@cable.a2000.nl)\r
-// Martin Willemoes Hansen (mwh@sysrq.dk)\r
+// Lawrence Pit (loz@cable.a2000.nl)\r
+// Martin Willemoes Hansen (mwh@sysrq.dk)\r
+// Sebastien Pouliot <sebastien@ximian.com>\r
//\r
// (C) 2003 Martin Willemoes Hansen\r
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)\r
//\r
\r
using NUnit.Framework;\r
using System;\r
using System.Net;\r
using System.Collections;\r
-using System.Security;\r
-using System.Security.Permissions;\r
-\r
-namespace MonoTests.System.Net\r
-{\r
-\r
-[TestFixture]\r
-public class WebRequestTest\r
-{\r
- [Test]\r
- public void All ()\r
- {\r
+using System.Runtime.Serialization;\r
+using Socks = System.Net.Sockets;\r
+\r
+\r
+namespace MonoTests.System.Net {\r
+\r
+ // WebRequest is abstract\r
+\r
+ public class NonAbstractWebRequest : WebRequest\r
+ {\r
+\r
+ public NonAbstractWebRequest ()\r
+ {\r
+ }\r
+\r
+ public NonAbstractWebRequest (SerializationInfo si, StreamingContext sc)\r
+ : base (si, sc)\r
+ {\r
+ }\r
+ }\r
+\r
+ [TestFixture]\r
+ public class WebRequestTest {\r
+\r
+ private void Callback (IAsyncResult ar)\r
+ {\r
+ Assert.Fail ("Callback");\r
+ }\r
+\r
+ [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
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void ConnectionGroupName ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ Assert.IsNull (w.ConnectionGroupName);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void ContentLength ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ Assert.IsNull (w.ContentLength);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void ContentType ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ Assert.IsNull (w.ContentType);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void Credentials ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ Assert.IsNull (w.Credentials);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void Headers ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ Assert.IsNull (w.Headers);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void Method ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ Assert.IsNull (w.Method);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void PreAuthenticate ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ Assert.IsTrue (w.PreAuthenticate);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void Proxy ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ Assert.IsNull (w.Proxy);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void RequestUri ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ Assert.IsNull (w.RequestUri);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void Timeout ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ Assert.IsNull (w.Timeout);\r
+ }\r
+\r
+ // methods\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void Abort ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ w.Abort ();\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void BeginGetRequestStream ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ IAsyncResult r = w.BeginGetRequestStream (new AsyncCallback (Callback), w);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void BeginGetResponse ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ IAsyncResult r = w.BeginGetResponse (new AsyncCallback (Callback), w);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void EndGetRequestStream ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ w.EndGetRequestStream (null);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void EndGetResponse ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ w.EndGetResponse (null);\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void GetRequestStream ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ w.GetRequestStream ();\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException (typeof (NotImplementedException))]\r
+ public void GetResponse ()\r
+ {\r
+ NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
+ w.GetResponse ();\r
+ }\r
+\r
+ [Test]\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