2 // HttpWebResponseTest.cs - NUnit Test Cases for System.Net.HttpWebResponse
5 // Gert Driesen (drieseng@users.sourceforge.net)
7 // Copyright (c) 2008 Gert Driesen
11 using System.Globalization;
14 using System.Net.Sockets;
17 using NUnit.Framework;
19 namespace MonoTests.System.Net
22 public class HttpWebResponseTest
25 public void CharacterSet_Disposed ()
27 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
28 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
30 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
33 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
36 req.ReadWriteTimeout = 2000;
37 req.KeepAlive = false;
39 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
40 ((IDisposable) resp).Dispose ();
43 string charset = resp.CharacterSet;
44 Assert.Fail ("#1:" + charset);
45 } catch (ObjectDisposedException ex) {
46 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
47 Assert.IsNull (ex.InnerException, "#3");
48 Assert.IsNotNull (ex.Message, "#4");
49 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
57 public void Close_Disposed ()
59 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
60 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
62 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
65 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
68 req.ReadWriteTimeout = 2000;
69 req.KeepAlive = false;
71 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
72 ((IDisposable) resp).Dispose ();
80 public void ContentEncoding_Disposed ()
82 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
83 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
85 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
88 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
91 req.ReadWriteTimeout = 2000;
92 req.KeepAlive = false;
94 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
95 ((IDisposable) resp).Dispose ();
98 string enc = resp.ContentEncoding;
99 Assert.Fail ("#1:" + enc);
100 } catch (ObjectDisposedException ex) {
101 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
102 Assert.IsNull (ex.InnerException, "#3");
103 Assert.IsNotNull (ex.Message, "#4");
104 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
112 public void ContentLength_Disposed ()
114 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
115 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
117 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
120 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
123 req.ReadWriteTimeout = 2000;
124 req.KeepAlive = false;
126 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
127 ((IDisposable) resp).Dispose ();
129 Assert.AreEqual (9, resp.ContentLength);
136 public void ContentType_Disposed ()
138 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
139 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
141 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
144 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
147 req.ReadWriteTimeout = 2000;
148 req.KeepAlive = false;
150 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
151 ((IDisposable) resp).Dispose ();
154 string contentType = resp.ContentType;
155 Assert.Fail ("#1:" + contentType);
156 } catch (ObjectDisposedException ex) {
157 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
158 Assert.IsNull (ex.InnerException, "#3");
159 Assert.IsNotNull (ex.Message, "#4");
160 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
168 public void Cookies_Disposed ()
170 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
171 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
173 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
176 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
179 req.ReadWriteTimeout = 2000;
180 req.KeepAlive = false;
182 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
183 ((IDisposable) resp).Dispose ();
186 CookieCollection cookies = resp.Cookies;
187 Assert.Fail ("#A1:" + cookies);
188 } catch (ObjectDisposedException ex) {
189 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#A2");
190 Assert.IsNull (ex.InnerException, "#A3");
191 Assert.IsNotNull (ex.Message, "#A4");
192 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#A5");
196 resp.Cookies = new CookieCollection ();
198 } catch (ObjectDisposedException ex) {
199 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#B2");
200 Assert.IsNull (ex.InnerException, "#B3");
201 Assert.IsNotNull (ex.Message, "#B4");
202 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#B5");
210 public void GetResponseHeader_Disposed ()
212 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
213 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
215 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
218 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
221 req.ReadWriteTimeout = 2000;
222 req.KeepAlive = false;
224 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
225 ((IDisposable) resp).Dispose ();
228 string server = resp.GetResponseHeader ("Server");
229 Assert.Fail ("#1:" + server);
230 } catch (ObjectDisposedException ex) {
231 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
232 Assert.IsNull (ex.InnerException, "#3");
233 Assert.IsNotNull (ex.Message, "#4");
234 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
242 public void GetResponseStream_Disposed ()
244 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
245 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
247 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
250 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
253 req.ReadWriteTimeout = 2000;
254 req.KeepAlive = false;
256 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
257 ((IDisposable) resp).Dispose ();
260 Stream s = resp.GetResponseStream ();
261 Assert.Fail ("#1:" + s);
262 } catch (ObjectDisposedException ex) {
263 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
264 Assert.IsNull (ex.InnerException, "#3");
265 Assert.IsNotNull (ex.Message, "#4");
266 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
274 public void Headers_Disposed ()
276 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
277 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
279 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
282 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
285 req.ReadWriteTimeout = 2000;
286 req.KeepAlive = false;
288 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
289 ((IDisposable) resp).Dispose ();
292 WebHeaderCollection headers = resp.Headers;
293 Assert.AreEqual (6, headers.Count, "#1");
294 Assert.AreEqual ("9", headers ["Content-Length"], "#2");
295 Assert.AreEqual ("utf-8", headers ["Content-Encoding"], "#3");
296 Assert.AreEqual ("text/xml; charset=UTF-8", headers ["Content-Type"], "#4");
297 Assert.AreEqual ("Wed, 08 Jan 2003 23:11:55 GMT", headers ["Last-Modified"], "#5");
298 Assert.AreEqual ("UserID=Miguel,StoreProfile=true", headers ["Set-Cookie"], "#6");
299 Assert.AreEqual ("Mono/Test", headers ["Server"], "#7");
302 WebHeaderCollection headers = resp.Headers;
303 Assert.Fail ("#1:" + headers);
304 } catch (ObjectDisposedException ex) {
305 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
306 Assert.IsNull (ex.InnerException, "#3");
307 Assert.IsNotNull (ex.Message, "#4");
308 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
317 public void LastModified_Disposed ()
319 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
320 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
322 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
325 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
328 req.ReadWriteTimeout = 2000;
329 req.KeepAlive = false;
331 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
332 ((IDisposable) resp).Dispose ();
335 DateTime lastMod = resp.LastModified;
336 Assert.Fail ("#1:" + lastMod);
337 } catch (ObjectDisposedException ex) {
338 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
339 Assert.IsNull (ex.InnerException, "#3");
340 Assert.IsNotNull (ex.Message, "#4");
341 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
349 public void Method_Disposed ()
351 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
352 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
354 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
357 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
360 req.ReadWriteTimeout = 2000;
361 req.KeepAlive = false;
363 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
364 ((IDisposable) resp).Dispose ();
367 string method = resp.Method;
368 Assert.Fail ("#1:" + method);
369 } catch (ObjectDisposedException ex) {
370 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
371 Assert.IsNull (ex.InnerException, "#3");
372 Assert.IsNotNull (ex.Message, "#4");
373 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
381 public void ProtocolVersion_Disposed ()
383 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
384 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
386 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
389 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
392 req.ReadWriteTimeout = 2000;
393 req.KeepAlive = false;
395 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
396 ((IDisposable) resp).Dispose ();
399 Version protocolVersion = resp.ProtocolVersion;
400 Assert.Fail ("#1:" + protocolVersion);
401 } catch (ObjectDisposedException ex) {
402 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
403 Assert.IsNull (ex.InnerException, "#3");
404 Assert.IsNotNull (ex.Message, "#4");
405 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
413 public void ResponseUri_Disposed ()
415 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
416 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
418 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
421 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
424 req.ReadWriteTimeout = 2000;
425 req.KeepAlive = false;
427 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
428 ((IDisposable) resp).Dispose ();
431 Uri respUri = resp.ResponseUri;
432 Assert.Fail ("#1:" + respUri);
433 } catch (ObjectDisposedException ex) {
434 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
435 Assert.IsNull (ex.InnerException, "#3");
436 Assert.IsNotNull (ex.Message, "#4");
437 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
445 public void Server_Disposed ()
447 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
448 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
450 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
453 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
456 req.ReadWriteTimeout = 2000;
457 req.KeepAlive = false;
459 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
460 ((IDisposable) resp).Dispose ();
463 string server = resp.Server;
464 Assert.Fail ("#1:" + server);
465 } catch (ObjectDisposedException ex) {
466 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
467 Assert.IsNull (ex.InnerException, "#3");
468 Assert.IsNotNull (ex.Message, "#4");
469 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
477 public void StatusCode_Disposed ()
479 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
480 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
482 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
485 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
488 req.ReadWriteTimeout = 2000;
489 req.KeepAlive = false;
491 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
492 ((IDisposable) resp).Dispose ();
494 Assert.AreEqual (HttpStatusCode.OK, resp.StatusCode);
501 public void StatusDescription_Disposed ()
503 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
504 string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
506 using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
509 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
512 req.ReadWriteTimeout = 2000;
513 req.KeepAlive = false;
515 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
516 ((IDisposable) resp).Dispose ();
519 string statusDesc = resp.StatusDescription;
520 Assert.Fail ("#1:" + statusDesc);
521 } catch (ObjectDisposedException ex) {
522 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
523 Assert.IsNull (ex.InnerException, "#3");
524 Assert.IsNotNull (ex.Message, "#4");
525 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
532 static byte [] FullResponseHandler (Socket socket)
534 StringWriter sw = new StringWriter ();
536 sw.WriteLine ("HTTP/1.0 200 OK");
537 sw.WriteLine ("Server: Mono/Test");
538 sw.WriteLine ("Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT");
539 sw.WriteLine ("Content-Encoding: " + Encoding.UTF8.WebName);
540 sw.WriteLine ("Content-Type: text/xml; charset=UTF-8");
541 sw.WriteLine ("Content-Length: 9");
542 sw.WriteLine ("Set-Cookie: UserID=Miguel");
543 sw.WriteLine ("Set-Cookie: StoreProfile=true");
545 sw.Write ("<dummy />");
548 return Encoding.UTF8.GetBytes (sw.ToString ());