c5b146bd6f16dfc21a5a02ab4eadc39dac626714
[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 \r
19 namespace MonoTests.System.Net {\r
20 \r
21         // WebRequest is abstract\r
22 \r
23         public class NonAbstractWebRequest : WebRequest\r
24         {\r
25 \r
26                 public NonAbstractWebRequest ()\r
27                 {\r
28                 }\r
29 \r
30                 public NonAbstractWebRequest (SerializationInfo si, StreamingContext sc)\r
31                         : base (si, sc)\r
32                 {\r
33                 }\r
34         }\r
35 \r
36         [TestFixture]\r
37         public class WebRequestTest {\r
38 \r
39                 private void Callback (IAsyncResult ar)\r
40                 {\r
41                         Assert.Fail ("Callback");\r
42                 }\r
43 \r
44                 [Test]\r
45                 public void SerializationConstructor ()\r
46                 {\r
47 #if NET_2_0\r
48                         NonAbstractWebRequest w = new NonAbstractWebRequest (null, new StreamingContext ());\r
49                         Assert.IsNotNull (w);\r
50 #else\r
51                         try {\r
52                                 new NonAbstractWebRequest (null, new StreamingContext ());\r
53                                 Assert.Fail ("#1");\r
54                         } catch (NotImplementedException) {\r
55                         }\r
56 #endif\r
57                 }\r
58 \r
59                 // properties (only test 'get'ter)\r
60 \r
61                 [Test]\r
62                 [ExpectedException (typeof (NotImplementedException))]\r
63                 public void ConnectionGroupName ()\r
64                 {\r
65                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
66                         Assert.IsNull (w.ConnectionGroupName);\r
67                 }\r
68 \r
69                 [Test]\r
70                 [ExpectedException (typeof (NotImplementedException))]\r
71                 public void ContentLength ()\r
72                 {\r
73                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
74                         Assert.IsNull (w.ContentLength);\r
75                 }\r
76 \r
77                 [Test]\r
78                 [ExpectedException (typeof (NotImplementedException))]\r
79                 public void ContentType ()\r
80                 {\r
81                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
82                         Assert.IsNull (w.ContentType);\r
83                 }\r
84 \r
85                 [Test]\r
86                 [ExpectedException (typeof (NotImplementedException))]\r
87                 public void Credentials ()\r
88                 {\r
89                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
90                         Assert.IsNull (w.Credentials);\r
91                 }\r
92 \r
93                 [Test]\r
94                 [ExpectedException (typeof (NotImplementedException))]\r
95                 public void Headers ()\r
96                 {\r
97                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
98                         Assert.IsNull (w.Headers);\r
99                 }\r
100 \r
101                 [Test]\r
102                 [ExpectedException (typeof (NotImplementedException))]\r
103                 public void Method ()\r
104                 {\r
105                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
106                         Assert.IsNull (w.Method);\r
107                 }\r
108 \r
109                 [Test]\r
110                 [ExpectedException (typeof (NotImplementedException))]\r
111                 public void PreAuthenticate ()\r
112                 {\r
113                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
114                         Assert.IsTrue (w.PreAuthenticate);\r
115                 }\r
116 \r
117                 [Test]\r
118                 [ExpectedException (typeof (NotImplementedException))]\r
119                 public void Proxy ()\r
120                 {\r
121                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
122                         Assert.IsNull (w.Proxy);\r
123                 }\r
124 \r
125                 [Test]\r
126                 [ExpectedException (typeof (NotImplementedException))]\r
127                 public void RequestUri ()\r
128                 {\r
129                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
130                         Assert.IsNull (w.RequestUri);\r
131                 }\r
132 \r
133                 [Test]\r
134                 [ExpectedException (typeof (NotImplementedException))]\r
135                 public void Timeout ()\r
136                 {\r
137                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
138                         Assert.IsNull (w.Timeout);\r
139                 }\r
140 \r
141                 // methods\r
142 \r
143                 [Test]\r
144                 [ExpectedException (typeof (NotImplementedException))]\r
145                 public void Abort ()\r
146                 {\r
147                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
148                         w.Abort ();\r
149                 }\r
150 \r
151                 [Test]\r
152                 [ExpectedException (typeof (NotImplementedException))]\r
153                 public void BeginGetRequestStream ()\r
154                 {\r
155                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
156                         IAsyncResult r = w.BeginGetRequestStream (new AsyncCallback (Callback), w);\r
157                 }\r
158 \r
159                 [Test]\r
160                 [ExpectedException (typeof (NotImplementedException))]\r
161                 public void BeginGetResponse ()\r
162                 {\r
163                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
164                         IAsyncResult r = w.BeginGetResponse (new AsyncCallback (Callback), w);\r
165                 }\r
166 \r
167                 [Test]\r
168                 [ExpectedException (typeof (NotImplementedException))]\r
169                 public void EndGetRequestStream ()\r
170                 {\r
171                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
172                         w.EndGetRequestStream (null);\r
173                 }\r
174 \r
175                 [Test]\r
176                 [ExpectedException (typeof (NotImplementedException))]\r
177                 public void EndGetResponse ()\r
178                 {\r
179                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
180                         w.EndGetResponse (null);\r
181                 }\r
182 \r
183                 [Test]\r
184                 [ExpectedException (typeof (NotImplementedException))]\r
185                 public void GetRequestStream ()\r
186                 {\r
187                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
188                         w.GetRequestStream ();\r
189                 }\r
190 \r
191                 [Test]\r
192                 [ExpectedException (typeof (NotImplementedException))]\r
193                 public void GetResponse ()\r
194                 {\r
195                         NonAbstractWebRequest w = new NonAbstractWebRequest ();\r
196                         w.GetResponse ();\r
197                 }\r
198 \r
199         [Test]\r
200         public void All ()\r
201         {\r
202                 WebRequest req = WebRequest.Create ("http://www.contoso.com");\r
203                 Assertion.Assert ("#1", req is HttpWebRequest);\r
204                 req = WebRequest.Create ("https://www.contoso.com");\r
205                 Assertion.Assert ("#2", req is HttpWebRequest);\r
206                 req = WebRequest.Create ("file://www.contoso.com");\r
207                 Assertion.Assert ("#3", req is FileWebRequest);\r
208 #if NET_2_0\r
209                 req = WebRequest.Create ("ftp://www.contoso.com");\r
210                 Assertion.Assert ("#4", req is FtpWebRequest);\r
211 #endif\r
212                 WebRequest.RegisterPrefix ("http://www.contoso.com", new TestWebRequestCreator ());\r
213                 bool ret = WebRequest.RegisterPrefix ("http://WWW.contoso.com", new TestWebRequestCreator ());\r
214                 Assertion.AssertEquals ("#5a", false, ret);\r
215                 ret = WebRequest.RegisterPrefix ("http://www.contoso.com/foo/bar", new TestWebRequestCreator2 ());\r
216                 Assertion.AssertEquals ("#5b", true, ret);\r
217                 ret = WebRequest.RegisterPrefix ("http://www", new TestWebRequestCreator3 ());\r
218                 Assertion.AssertEquals ("#5c", true, ret);\r
219 \r
220                 req = WebRequest.Create ("http://WWW.contoso.com");\r
221                 Assertion.Assert ("#6", req is TestWebRequest); \r
222 \r
223                 req = WebRequest.Create ("http://WWW.contoso.com/foo/bar/index.html");\r
224                 Assertion.Assert ("#7", req is TestWebRequest2); \r
225                 \r
226                 req = WebRequest.Create ("http://WWW.x.com");\r
227                 Assertion.Assert ("#8", req is TestWebRequest3); \r
228 \r
229                 req = WebRequest.Create ("http://WWW.c");\r
230                 Assertion.Assert ("#9", req is TestWebRequest3); \r
231 \r
232                 req = WebRequest.CreateDefault (new Uri("http://WWW.contoso.com"));\r
233                 Assertion.Assert ("#10", req is HttpWebRequest);\r
234 \r
235                 try {\r
236                         req = WebRequest.Create ("tcp://www.contoso.com");\r
237                         Assertion.Fail ("#11 should have failed with NotSupportedException");\r
238                 } catch (NotSupportedException) {\r
239                 }\r
240         }\r
241 \r
242         [Test]\r
243         public void Create_RequestUriString_Null ()\r
244         {\r
245                 try {\r
246                         WebRequest.Create ((string) null);\r
247                         Assert.Fail ("#1");\r
248                 } catch (ArgumentNullException ex) {\r
249                         Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
250                         Assert.IsNull (ex.InnerException, "#3");\r
251                         Assert.IsNotNull (ex.Message, "#4");\r
252                         Assert.IsNotNull (ex.ParamName, "#5");\r
253                         Assert.AreEqual ("requestUriString", ex.ParamName, "#6");\r
254                 }\r
255         }\r
256 \r
257         [Test]\r
258         public void CreateDefault_RequestUri_Null ()\r
259         {\r
260                 try {\r
261                         WebRequest.CreateDefault ((Uri) null);\r
262                         Assert.Fail ("#1");\r
263                 } catch (ArgumentNullException ex) {\r
264                         Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
265                         Assert.IsNull (ex.InnerException, "#3");\r
266                         Assert.IsNotNull (ex.Message, "#4");\r
267                         Assert.IsNotNull (ex.ParamName, "#5");\r
268                         Assert.AreEqual ("requestUri", ex.ParamName, "#6");\r
269                 }\r
270         }\r
271 \r
272 #if NET_2_0\r
273         [Test]\r
274         public void DefaultWebProxy ()\r
275         {\r
276                 WebProxy proxy = new WebProxy ("proxy.intern.com", 83);\r
277 \r
278                 WebRequest.DefaultWebProxy = proxy;\r
279                 Assert.IsNotNull (WebRequest.DefaultWebProxy, "#A1");\r
280                 Assert.AreSame (proxy, WebRequest.DefaultWebProxy, "#A2");\r
281 \r
282                 HttpWebRequest req = (HttpWebRequest) WebRequest.CreateDefault (\r
283                         new Uri ("http://www.mono-project.com"));\r
284                 Assert.IsNotNull (req.Proxy, "#B1");\r
285                 Assert.AreSame (proxy, req.Proxy, "#B2");\r
286 \r
287                 WebRequest.DefaultWebProxy = null;\r
288                 Assert.IsNull (WebRequest.DefaultWebProxy, "#C1");\r
289                 Assert.IsNotNull (req.Proxy, "#C2");\r
290                 Assert.AreSame (proxy, req.Proxy, "#C3");\r
291 \r
292                 req = (HttpWebRequest) WebRequest.CreateDefault (\r
293                         new Uri ("http://www.mono-project.com"));\r
294                 Assert.IsNull (req.Proxy, "#D");\r
295         }\r
296 #endif\r
297 \r
298         [Test]\r
299         public void RegisterPrefix_Creator_Null ()\r
300         {\r
301                 try {\r
302                         WebRequest.RegisterPrefix ("http://www.mono-project.com", (IWebRequestCreate) null);\r
303                         Assert.Fail ("#1");\r
304                 } catch (ArgumentNullException ex) {\r
305                         Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
306                         Assert.IsNull (ex.InnerException, "#3");\r
307                         Assert.IsNotNull (ex.Message, "#4");\r
308                         Assert.IsNotNull (ex.ParamName, "#5");\r
309                         Assert.AreEqual ("creator", ex.ParamName, "#6");\r
310                 }\r
311         }\r
312 \r
313         [Test]\r
314         public void RegisterPrefix_Prefix_Null ()\r
315         {\r
316                 try {\r
317                         WebRequest.RegisterPrefix ((string) null, new TestWebRequestCreator ());\r
318                         Assert.Fail ("#1");\r
319                 } catch (ArgumentNullException ex) {\r
320                         Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
321                         Assert.IsNull (ex.InnerException, "#3");\r
322                         Assert.IsNotNull (ex.Message, "#4");\r
323                         Assert.IsNotNull (ex.ParamName, "#5");\r
324                         Assert.AreEqual ("prefix", ex.ParamName, "#6");\r
325                 }\r
326         }\r
327 \r
328         internal class TestWebRequestCreator : IWebRequestCreate\r
329         {\r
330                 internal TestWebRequestCreator () { }\r
331                 \r
332                 public WebRequest Create (Uri uri)\r
333                 {\r
334                         return new TestWebRequest ();\r
335                 }\r
336         }\r
337         \r
338         internal class TestWebRequest : WebRequest\r
339         {\r
340                 internal TestWebRequest () { }\r
341         }\r
342 \r
343         internal class TestWebRequestCreator2 : IWebRequestCreate\r
344         {\r
345                 internal TestWebRequestCreator2 () { }\r
346                 \r
347                 public WebRequest Create (Uri uri)\r
348                 {\r
349                         return new TestWebRequest2 ();\r
350                 }\r
351         }\r
352         \r
353         internal class TestWebRequest2 : WebRequest\r
354         {\r
355                 internal TestWebRequest2 () { }\r
356         }\r
357 \r
358         internal class TestWebRequestCreator3 : IWebRequestCreate\r
359         {\r
360                 internal TestWebRequestCreator3 () { }\r
361                 \r
362                 public WebRequest Create (Uri uri)\r
363                 {\r
364                         return new TestWebRequest3 ();\r
365                 }\r
366         }\r
367         \r
368         internal class TestWebRequest3 : WebRequest\r
369         {\r
370                 internal TestWebRequest3 () { }\r
371         }\r
372 }\r
373 \r
374 }\r
375 \r