2 // WebRequestTest.cs - NUnit Test Cases for System.Net.WebRequest
\r
5 // Lawrence Pit (loz@cable.a2000.nl)
\r
6 // Martin Willemoes Hansen (mwh@sysrq.dk)
\r
7 // Sebastien Pouliot <sebastien@ximian.com>
\r
9 // (C) 2003 Martin Willemoes Hansen
\r
10 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
\r
13 using NUnit.Framework;
\r
16 using System.Collections;
\r
17 using System.Runtime.Serialization;
\r
18 using Socks = System.Net.Sockets;
\r
21 namespace MonoTests.System.Net {
\r
23 // WebRequest is abstract
\r
25 public class NonAbstractWebRequest : WebRequest
\r
28 public NonAbstractWebRequest ()
\r
32 public NonAbstractWebRequest (SerializationInfo si, StreamingContext sc)
\r
39 public class WebRequestTest {
\r
41 private void Callback (IAsyncResult ar)
\r
43 Assert.Fail ("Callback");
\r
47 public void SerializationConstructor ()
\r
49 NonAbstractWebRequest w = new NonAbstractWebRequest (null, new StreamingContext ());
\r
50 Assert.IsNotNull (w);
\r
53 // properties (only test 'get'ter)
\r
56 [ExpectedException (typeof (NotImplementedException))]
\r
57 public void ConnectionGroupName ()
\r
59 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
60 Assert.IsNull (w.ConnectionGroupName);
\r
64 [ExpectedException (typeof (NotImplementedException))]
\r
65 public void ContentLength ()
\r
67 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
68 Assert.IsNull (w.ContentLength);
\r
72 [ExpectedException (typeof (NotImplementedException))]
\r
73 public void ContentType ()
\r
75 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
76 Assert.IsNull (w.ContentType);
\r
80 [ExpectedException (typeof (NotImplementedException))]
\r
81 public void Credentials ()
\r
83 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
84 Assert.IsNull (w.Credentials);
\r
88 [ExpectedException (typeof (NotImplementedException))]
\r
89 public void Headers ()
\r
91 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
92 Assert.IsNull (w.Headers);
\r
96 [ExpectedException (typeof (NotImplementedException))]
\r
97 public void Method ()
\r
99 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
100 Assert.IsNull (w.Method);
\r
104 [ExpectedException (typeof (NotImplementedException))]
\r
105 public void PreAuthenticate ()
\r
107 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
108 Assert.IsTrue (w.PreAuthenticate);
\r
112 [ExpectedException (typeof (NotImplementedException))]
\r
113 public void Proxy ()
\r
115 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
116 Assert.IsNull (w.Proxy);
\r
120 [ExpectedException (typeof (NotImplementedException))]
\r
121 public void RequestUri ()
\r
123 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
124 Assert.IsNull (w.RequestUri);
\r
128 [ExpectedException (typeof (NotImplementedException))]
\r
129 public void Timeout ()
\r
131 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
132 Assert.IsNull (w.Timeout);
\r
138 [ExpectedException (typeof (NotImplementedException))]
\r
139 public void Abort ()
\r
141 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
146 [ExpectedException (typeof (NotImplementedException))]
\r
147 public void BeginGetRequestStream ()
\r
149 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
150 IAsyncResult r = w.BeginGetRequestStream (new AsyncCallback (Callback), w);
\r
154 [ExpectedException (typeof (NotImplementedException))]
\r
155 public void BeginGetResponse ()
\r
157 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
158 IAsyncResult r = w.BeginGetResponse (new AsyncCallback (Callback), w);
\r
162 [ExpectedException (typeof (NotImplementedException))]
\r
163 public void EndGetRequestStream ()
\r
165 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
166 w.EndGetRequestStream (null);
\r
170 [ExpectedException (typeof (NotImplementedException))]
\r
171 public void EndGetResponse ()
\r
173 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
174 w.EndGetResponse (null);
\r
178 [ExpectedException (typeof (NotImplementedException))]
\r
179 public void GetRequestStream ()
\r
181 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
182 w.GetRequestStream ();
\r
186 [ExpectedException (typeof (NotImplementedException))]
\r
187 public void GetResponse ()
\r
189 NonAbstractWebRequest w = new NonAbstractWebRequest ();
\r
196 WebRequest req = WebRequest.Create ("http://www.contoso.com");
\r
197 Assert.IsTrue (req is HttpWebRequest, "#1");
\r
198 req = WebRequest.Create ("https://www.contoso.com");
\r
199 Assert.IsTrue (req is HttpWebRequest, "#2");
\r
200 req = WebRequest.Create ("file://www.contoso.com");
\r
201 Assert.IsTrue (req is FileWebRequest, "#3");
\r
202 req = WebRequest.Create ("ftp://www.contoso.com");
\r
203 Assert.IsTrue (req is FtpWebRequest, "#4");
\r
204 WebRequest.RegisterPrefix ("http://www.contoso.com", new TestWebRequestCreator ());
\r
205 bool ret = WebRequest.RegisterPrefix ("http://WWW.contoso.com", new TestWebRequestCreator ());
\r
206 Assert.AreEqual (false, ret, "#5a");
\r
207 ret = WebRequest.RegisterPrefix ("http://www.contoso.com/foo/bar", new TestWebRequestCreator2 ());
\r
208 Assert.AreEqual (true, ret, "#5b");
\r
209 ret = WebRequest.RegisterPrefix ("http://www", new TestWebRequestCreator3 ());
\r
210 Assert.AreEqual (true, ret, "#5c");
\r
212 req = WebRequest.Create ("http://WWW.contoso.com");
\r
213 Assert.IsTrue (req is TestWebRequest, "#6");
\r
215 req = WebRequest.Create ("http://WWW.contoso.com/foo/bar/index.html");
\r
216 Assert.IsTrue (req is TestWebRequest2, "#7");
\r
218 req = WebRequest.Create ("http://WWW.x.com");
\r
219 Assert.IsTrue (req is TestWebRequest3, "#8");
\r
221 req = WebRequest.Create ("http://WWW.c");
\r
222 Assert.IsTrue (req is TestWebRequest3, "#9");
\r
224 req = WebRequest.CreateDefault (new Uri("http://WWW.contoso.com"));
\r
225 Assert.IsTrue (req is HttpWebRequest, "#10");
\r
228 req = WebRequest.Create ("tcp://www.contoso.com");
\r
229 Assert.Fail ("#11 should have failed with NotSupportedException");
\r
230 } catch (NotSupportedException) {
\r
235 public void Create_RequestUriString_Null ()
\r
238 WebRequest.Create ((string) null);
\r
239 Assert.Fail ("#1");
\r
240 } catch (ArgumentNullException ex) {
\r
241 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
242 Assert.IsNull (ex.InnerException, "#3");
\r
243 Assert.IsNotNull (ex.Message, "#4");
\r
244 Assert.IsNotNull (ex.ParamName, "#5");
\r
245 Assert.AreEqual ("requestUriString", ex.ParamName, "#6");
\r
250 public void CreateDefault_RequestUri_Null ()
\r
253 WebRequest.CreateDefault ((Uri) null);
\r
254 Assert.Fail ("#1");
\r
255 } catch (ArgumentNullException ex) {
\r
256 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
257 Assert.IsNull (ex.InnerException, "#3");
\r
258 Assert.IsNotNull (ex.Message, "#4");
\r
259 Assert.IsNotNull (ex.ParamName, "#5");
\r
260 Assert.AreEqual ("requestUri", ex.ParamName, "#6");
\r
265 public void DefaultWebProxy ()
\r
267 WebProxy proxy = new WebProxy ("proxy.intern.com", 83);
\r
269 WebRequest.DefaultWebProxy = proxy;
\r
270 Assert.IsNotNull (WebRequest.DefaultWebProxy, "#A1");
\r
271 Assert.AreSame (proxy, WebRequest.DefaultWebProxy, "#A2");
\r
273 HttpWebRequest req = (HttpWebRequest) WebRequest.CreateDefault (
\r
274 new Uri ("http://www.mono-project.com"));
\r
275 Assert.IsNotNull (req.Proxy, "#B1");
\r
276 Assert.AreSame (proxy, req.Proxy, "#B2");
\r
278 WebRequest.DefaultWebProxy = null;
\r
279 Assert.IsNull (WebRequest.DefaultWebProxy, "#C1");
\r
280 Assert.IsNotNull (req.Proxy, "#C2");
\r
281 Assert.AreSame (proxy, req.Proxy, "#C3");
\r
283 req = (HttpWebRequest) WebRequest.CreateDefault (
\r
284 new Uri ("http://www.mono-project.com"));
\r
285 Assert.IsNull (req.Proxy, "#D");
\r
289 public void RegisterPrefix_Creator_Null ()
\r
292 WebRequest.RegisterPrefix ("http://www.mono-project.com", (IWebRequestCreate) null);
\r
293 Assert.Fail ("#1");
\r
294 } catch (ArgumentNullException ex) {
\r
295 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
296 Assert.IsNull (ex.InnerException, "#3");
\r
297 Assert.IsNotNull (ex.Message, "#4");
\r
298 Assert.IsNotNull (ex.ParamName, "#5");
\r
299 Assert.AreEqual ("creator", ex.ParamName, "#6");
\r
304 public void RegisterPrefix_Prefix_Null ()
\r
307 WebRequest.RegisterPrefix ((string) null, new TestWebRequestCreator ());
\r
308 Assert.Fail ("#1");
\r
309 } catch (ArgumentNullException ex) {
\r
310 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
311 Assert.IsNull (ex.InnerException, "#3");
\r
312 Assert.IsNotNull (ex.Message, "#4");
\r
313 Assert.IsNotNull (ex.ParamName, "#5");
\r
314 Assert.AreEqual ("prefix", ex.ParamName, "#6");
\r
318 [Test] //BNC#323452
\r
319 public void TestFailedConnection ()
\r
322 WebRequest.Create ("http://127.0.0.1:0/non-existant.txt").GetResponse ();
\r
323 Assert.Fail ("Should have raised an exception");
\r
324 } catch (Exception e) {
\r
325 Assert.IsTrue (e is WebException, "Got " + e.GetType ().Name + ": " + e.Message);
\r
326 //#if NET_2_0 e.Message == "Unable to connect to the remote server"
\r
327 //#if NET_1_1 e.Message == "The underlying connection was closed: Unable to connect to the remote server."
\r
329 Assert.AreEqual (((WebException)e).Status, WebExceptionStatus.ConnectFailure);
\r
331 //#if !NET_1_1 (this is not true in .NET 1.x)
\r
332 Assert.IsNotNull (e.InnerException);
\r
333 Assert.IsTrue (e.InnerException is Socks.SocketException, "InnerException should be SocketException");
\r
334 //e.Message == "The requested address is not valid in its context 127.0.0.1:0"
\r
339 [Test] //BNC#323452
\r
340 public void TestFailedResolution ()
\r
343 var req = WebRequest.Create ("http://thisdomaindoesnotexist.monotestcase.x/non-existant.txt").GetResponse ();
\r
345 * Work around broken t-online.de DNS Server.
\r
347 * T-Online's DNS Server for DSL Customers resolves
\r
348 * non-exisitng domain names to
\r
349 * http://navigationshilfe1.t-online.de/dnserror?url=....
\r
350 * instead of reporting an error.
\r
352 if (req.ResponseUri.DnsSafeHost.Equals ("navigationshilfe1.t-online.de"))
\r
353 Assert.Ignore ("Misbehaving DNS server.");
\r
355 Assert.Fail ("Should have raised an exception");
\r
356 } catch (Exception e) {
\r
357 Assert.IsTrue (e is WebException);
\r
358 //#if NET_2_0 e.Message == "The underlying connection was closed: The remote name could not be resolved."
\r
359 //#if NET_1_1 e.Message == "The remote name could not be resolved: 'thisdomaindoesnotexist.monotestcase.x'"
\r
360 Assert.AreEqual (((WebException)e).Status, WebExceptionStatus.NameResolutionFailure);
\r
361 Assert.IsNull (e.InnerException);
\r
365 internal class TestWebRequestCreator : IWebRequestCreate
\r
367 internal TestWebRequestCreator () { }
\r
369 public WebRequest Create (Uri uri)
\r
371 return new TestWebRequest ();
\r
375 internal class TestWebRequest : WebRequest
\r
377 internal TestWebRequest () { }
\r
380 internal class TestWebRequestCreator2 : IWebRequestCreate
\r
382 internal TestWebRequestCreator2 () { }
\r
384 public WebRequest Create (Uri uri)
\r
386 return new TestWebRequest2 ();
\r
390 internal class TestWebRequest2 : WebRequest
\r
392 internal TestWebRequest2 () { }
\r
395 internal class TestWebRequestCreator3 : IWebRequestCreate
\r
397 internal TestWebRequestCreator3 () { }
\r
399 public WebRequest Create (Uri uri)
\r
401 return new TestWebRequest3 ();
\r
405 internal class TestWebRequest3 : WebRequest
\r
407 internal TestWebRequest3 () { }
\r