2009-06-12 Bill Holmes <billholmes54@gmail.com>
[mono.git] / mcs / class / System / Test / System.Net / WebRequestTest.cs
1 //\r
2 // WebRequestTest.cs - NUnit Test Cases for System.Net.WebRequest\r
3 //\r
4 // Authors:\r
5 //      Lawrence Pit (loz@cable.a2000.nl)\r
6 //      Martin Willemoes Hansen (mwh@sysrq.dk)\r
7 //      Sebastien Pouliot  <sebastien@ximian.com>\r
8 //\r
9 // (C) 2003 Martin Willemoes Hansen\r
10 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)\r
11 //\r
12 \r
13 using NUnit.Framework;\r
14 using System;\r
15 using System.Net;\r
16 using System.Collections;\r
17 using System.Runtime.Serialization;\r
18 using Socks = System.Net.Sockets;\r
19 \r
20 \r
21 namespace MonoTests.System.Net {\r
22 \r
23         // WebRequest is abstract\r
24 \r
25         public class NonAbstractWebRequest : WebRequest\r
26         {\r
27 \r
28                 public NonAbstractWebRequest ()\r
29                 {\r
30                 }\r
31 \r
32                 public NonAbstractWebRequest (SerializationInfo si, StreamingContext sc)\r
33                         : base (si, sc)\r
34                 {\r
35                 }\r
36         }\r
37 \r
38         [TestFixture]\r
39         public class WebRequestTest {\r
40 \r
41                 private void Callback (IAsyncResult ar)\r
42                 {\r
43                         Assert.Fail ("Callback");\r
44                 }\r
45 \r
46                 [Test]\r
47                 public void SerializationConstructor ()\r
48                 {\r
49 #if NET_2_0\r
50                         NonAbstractWebRequest w = new NonAbstractWebRequest (null, new StreamingContext ());\r
51                         Assert.IsNotNull (w);\r
52 #else\r
53                         try {\r
54                                 new NonAbstractWebRequest (null, new StreamingContext ());\r
55                                 Assert.Fail ("#1");\r
56                         } catch (NotImplementedException) {\r
57                         }\r
58 #endif\r
59                 }\r
60 \r
61                 // properties (only test 'get'ter)\r
62 \r
63                 [Test]\r
64                 [ExpectedException (typeof (NotImplementedException))]\r
65                 public void ConnectionGroupName ()\r
66                 {\r
67                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
68                         Assert.IsNull (w.ConnectionGroupName);\r
69                 }\r
70 \r
71                 [Test]\r
72                 [ExpectedException (typeof (NotImplementedException))]\r
73                 public void ContentLength ()\r
74                 {\r
75                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
76                         Assert.IsNull (w.ContentLength);\r
77                 }\r
78 \r
79                 [Test]\r
80                 [ExpectedException (typeof (NotImplementedException))]\r
81                 public void ContentType ()\r
82                 {\r
83                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
84                         Assert.IsNull (w.ContentType);\r
85                 }\r
86 \r
87                 [Test]\r
88                 [ExpectedException (typeof (NotImplementedException))]\r
89                 public void Credentials ()\r
90                 {\r
91                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
92                         Assert.IsNull (w.Credentials);\r
93                 }\r
94 \r
95                 [Test]\r
96                 [ExpectedException (typeof (NotImplementedException))]\r
97                 public void Headers ()\r
98                 {\r
99                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
100                         Assert.IsNull (w.Headers);\r
101                 }\r
102 \r
103                 [Test]\r
104                 [ExpectedException (typeof (NotImplementedException))]\r
105                 public void Method ()\r
106                 {\r
107                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
108                         Assert.IsNull (w.Method);\r
109                 }\r
110 \r
111                 [Test]\r
112                 [ExpectedException (typeof (NotImplementedException))]\r
113                 public void PreAuthenticate ()\r
114                 {\r
115                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
116                         Assert.IsTrue (w.PreAuthenticate);\r
117                 }\r
118 \r
119                 [Test]\r
120                 [ExpectedException (typeof (NotImplementedException))]\r
121                 public void Proxy ()\r
122                 {\r
123                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
124                         Assert.IsNull (w.Proxy);\r
125                 }\r
126 \r
127                 [Test]\r
128                 [ExpectedException (typeof (NotImplementedException))]\r
129                 public void RequestUri ()\r
130                 {\r
131                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
132                         Assert.IsNull (w.RequestUri);\r
133                 }\r
134 \r
135                 [Test]\r
136                 [ExpectedException (typeof (NotImplementedException))]\r
137                 public void Timeout ()\r
138                 {\r
139                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
140                         Assert.IsNull (w.Timeout);\r
141                 }\r
142 \r
143                 // methods\r
144 \r
145                 [Test]\r
146                 [ExpectedException (typeof (NotImplementedException))]\r
147                 public void Abort ()\r
148                 {\r
149                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
150                         w.Abort ();\r
151                 }\r
152 \r
153                 [Test]\r
154                 [ExpectedException (typeof (NotImplementedException))]\r
155                 public void BeginGetRequestStream ()\r
156                 {\r
157                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
158                         IAsyncResult r = w.BeginGetRequestStream (new AsyncCallback (Callback), w);\r
159                 }\r
160 \r
161                 [Test]\r
162                 [ExpectedException (typeof (NotImplementedException))]\r
163                 public void BeginGetResponse ()\r
164                 {\r
165                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
166                         IAsyncResult r = w.BeginGetResponse (new AsyncCallback (Callback), w);\r
167                 }\r
168 \r
169                 [Test]\r
170                 [ExpectedException (typeof (NotImplementedException))]\r
171                 public void EndGetRequestStream ()\r
172                 {\r
173                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
174                         w.EndGetRequestStream (null);\r
175                 }\r
176 \r
177                 [Test]\r
178                 [ExpectedException (typeof (NotImplementedException))]\r
179                 public void EndGetResponse ()\r
180                 {\r
181                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
182                         w.EndGetResponse (null);\r
183                 }\r
184 \r
185                 [Test]\r
186                 [ExpectedException (typeof (NotImplementedException))]\r
187                 public void GetRequestStream ()\r
188                 {\r
189                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
190                         w.GetRequestStream ();\r
191                 }\r
192 \r
193                 [Test]\r
194                 [ExpectedException (typeof (NotImplementedException))]\r
195                 public void GetResponse ()\r
196                 {\r
197                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
198                         w.GetResponse ();\r
199                 }\r
200 \r
201         [Test]\r
202         public void All ()\r
203         {\r
204                 WebRequest req = WebRequest.Create ("http://www.contoso.com");\r
205                 Assertion.Assert ("#1", req is HttpWebRequest);\r
206                 req = WebRequest.Create ("https://www.contoso.com");\r
207                 Assertion.Assert ("#2", req is HttpWebRequest);\r
208                 req = WebRequest.Create ("file://www.contoso.com");\r
209                 Assertion.Assert ("#3", req is FileWebRequest);\r
210 #if NET_2_0\r
211                 req = WebRequest.Create ("ftp://www.contoso.com");\r
212                 Assertion.Assert ("#4", req is FtpWebRequest);\r
213 #endif\r
214                 WebRequest.RegisterPrefix ("http://www.contoso.com", new TestWebRequestCreator ());\r
215                 bool ret = WebRequest.RegisterPrefix ("http://WWW.contoso.com", new TestWebRequestCreator ());\r
216                 Assertion.AssertEquals ("#5a", false, ret);\r
217                 ret = WebRequest.RegisterPrefix ("http://www.contoso.com/foo/bar", new TestWebRequestCreator2 ());\r
218                 Assertion.AssertEquals ("#5b", true, ret);\r
219                 ret = WebRequest.RegisterPrefix ("http://www", new TestWebRequestCreator3 ());\r
220                 Assertion.AssertEquals ("#5c", true, ret);\r
221 \r
222                 req = WebRequest.Create ("http://WWW.contoso.com");\r
223                 Assertion.Assert ("#6", req is TestWebRequest); \r
224 \r
225                 req = WebRequest.Create ("http://WWW.contoso.com/foo/bar/index.html");\r
226                 Assertion.Assert ("#7", req is TestWebRequest2); \r
227                 \r
228                 req = WebRequest.Create ("http://WWW.x.com");\r
229                 Assertion.Assert ("#8", req is TestWebRequest3); \r
230 \r
231                 req = WebRequest.Create ("http://WWW.c");\r
232                 Assertion.Assert ("#9", req is TestWebRequest3); \r
233 \r
234                 req = WebRequest.CreateDefault (new Uri("http://WWW.contoso.com"));\r
235                 Assertion.Assert ("#10", req is HttpWebRequest);\r
236 \r
237                 try {\r
238                         req = WebRequest.Create ("tcp://www.contoso.com");\r
239                         Assertion.Fail ("#11 should have failed with NotSupportedException");\r
240                 } catch (NotSupportedException) {\r
241                 }\r
242         }\r
243 \r
244         [Test]\r
245         public void Create_RequestUriString_Null ()\r
246         {\r
247                 try {\r
248                         WebRequest.Create ((string) null);\r
249                         Assert.Fail ("#1");\r
250                 } catch (ArgumentNullException ex) {\r
251                         Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
252                         Assert.IsNull (ex.InnerException, "#3");\r
253                         Assert.IsNotNull (ex.Message, "#4");\r
254                         Assert.IsNotNull (ex.ParamName, "#5");\r
255                         Assert.AreEqual ("requestUriString", ex.ParamName, "#6");\r
256                 }\r
257         }\r
258 \r
259         [Test]\r
260         public void CreateDefault_RequestUri_Null ()\r
261         {\r
262                 try {\r
263                         WebRequest.CreateDefault ((Uri) null);\r
264                         Assert.Fail ("#1");\r
265                 } catch (ArgumentNullException ex) {\r
266                         Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
267                         Assert.IsNull (ex.InnerException, "#3");\r
268                         Assert.IsNotNull (ex.Message, "#4");\r
269                         Assert.IsNotNull (ex.ParamName, "#5");\r
270                         Assert.AreEqual ("requestUri", ex.ParamName, "#6");\r
271                 }\r
272         }\r
273 \r
274 #if NET_2_0\r
275         [Test]\r
276         public void DefaultWebProxy ()\r
277         {\r
278                 WebProxy proxy = new WebProxy ("proxy.intern.com", 83);\r
279 \r
280                 WebRequest.DefaultWebProxy = proxy;\r
281                 Assert.IsNotNull (WebRequest.DefaultWebProxy, "#A1");\r
282                 Assert.AreSame (proxy, WebRequest.DefaultWebProxy, "#A2");\r
283 \r
284                 HttpWebRequest req = (HttpWebRequest) WebRequest.CreateDefault (\r
285                         new Uri ("http://www.mono-project.com"));\r
286                 Assert.IsNotNull (req.Proxy, "#B1");\r
287                 Assert.AreSame (proxy, req.Proxy, "#B2");\r
288 \r
289                 WebRequest.DefaultWebProxy = null;\r
290                 Assert.IsNull (WebRequest.DefaultWebProxy, "#C1");\r
291                 Assert.IsNotNull (req.Proxy, "#C2");\r
292                 Assert.AreSame (proxy, req.Proxy, "#C3");\r
293 \r
294                 req = (HttpWebRequest) WebRequest.CreateDefault (\r
295                         new Uri ("http://www.mono-project.com"));\r
296                 Assert.IsNull (req.Proxy, "#D");\r
297         }\r
298 #endif\r
299 \r
300         [Test]\r
301         public void RegisterPrefix_Creator_Null ()\r
302         {\r
303                 try {\r
304                         WebRequest.RegisterPrefix ("http://www.mono-project.com", (IWebRequestCreate) null);\r
305                         Assert.Fail ("#1");\r
306                 } catch (ArgumentNullException ex) {\r
307                         Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
308                         Assert.IsNull (ex.InnerException, "#3");\r
309                         Assert.IsNotNull (ex.Message, "#4");\r
310                         Assert.IsNotNull (ex.ParamName, "#5");\r
311                         Assert.AreEqual ("creator", ex.ParamName, "#6");\r
312                 }\r
313         }\r
314 \r
315         [Test]\r
316         public void RegisterPrefix_Prefix_Null ()\r
317         {\r
318                 try {\r
319                         WebRequest.RegisterPrefix ((string) null, new TestWebRequestCreator ());\r
320                         Assert.Fail ("#1");\r
321                 } catch (ArgumentNullException ex) {\r
322                         Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
323                         Assert.IsNull (ex.InnerException, "#3");\r
324                         Assert.IsNotNull (ex.Message, "#4");\r
325                         Assert.IsNotNull (ex.ParamName, "#5");\r
326                         Assert.AreEqual ("prefix", ex.ParamName, "#6");\r
327                 }\r
328         }\r
329 \r
330         [Test] //BNC#323452\r
331         [Category ("NotWorking")]\r
332         public void TestFailedConnection ()\r
333         {\r
334                 try {\r
335                         WebRequest.Create ("http://127.0.0.1:0/non-existant.txt").GetResponse ();\r
336                         Assert.Fail ("Should have raised an exception");\r
337                 } catch (Exception e) {\r
338                         Assert.IsTrue (e is WebException);\r
339                         //#if NET_2_0 e.Message == "Unable to connect to the remote server"\r
340                         //#if NET_1_1 e.Message == "The underlying connection was closed: Unable to connect to the remote server."\r
341 \r
342                         //#if !NET_1_1 (this is not true in .NET 1.x)\r
343                         Assert.IsTrue (e.InnerException is Socks.SocketException, "InnerException should be SocketException");\r
344                         //e.Message == "The requested address is not valid in its context 127.0.0.1:0"\r
345                         //#endif\r
346                 }\r
347         }\r
348 \r
349         [Test] //BNC#323452\r
350         public void TestFailedResolution ()\r
351         {\r
352                 string domain = "thisdomaindoesnotexist.monotestcase.x";\r
353                 try {\r
354                         WebRequest.Create ("http://" + domain + "/non-existant.txt").GetResponse ();\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.IsNull (e.InnerException);\r
361                 }\r
362         }\r
363 \r
364         internal class TestWebRequestCreator : IWebRequestCreate\r
365         {\r
366                 internal TestWebRequestCreator () { }\r
367                 \r
368                 public WebRequest Create (Uri uri)\r
369                 {\r
370                         return new TestWebRequest ();\r
371                 }\r
372         }\r
373         \r
374         internal class TestWebRequest : WebRequest\r
375         {\r
376                 internal TestWebRequest () { }\r
377         }\r
378 \r
379         internal class TestWebRequestCreator2 : IWebRequestCreate\r
380         {\r
381                 internal TestWebRequestCreator2 () { }\r
382                 \r
383                 public WebRequest Create (Uri uri)\r
384                 {\r
385                         return new TestWebRequest2 ();\r
386                 }\r
387         }\r
388         \r
389         internal class TestWebRequest2 : WebRequest\r
390         {\r
391                 internal TestWebRequest2 () { }\r
392         }\r
393 \r
394         internal class TestWebRequestCreator3 : IWebRequestCreate\r
395         {\r
396                 internal TestWebRequestCreator3 () { }\r
397                 \r
398                 public WebRequest Create (Uri uri)\r
399                 {\r
400                         return new TestWebRequest3 ();\r
401                 }\r
402         }\r
403         \r
404         internal class TestWebRequest3 : WebRequest\r
405         {\r
406                 internal TestWebRequest3 () { }\r
407         }\r
408 }\r
409 \r
410 }\r
411 \r