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 MonoTests.Helpers;
19 using NUnit.Framework;
21 namespace MonoTests.System.Net
24 public class HttpWebResponseTest
27 #if FEATURE_NO_BSD_SOCKETS
28 [ExpectedException (typeof (PlatformNotSupportedException))]
30 public void CharacterSet_Disposed ()
32 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
33 string url = "http://" + ep.ToString () + "/test/";
35 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
36 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
39 req.ReadWriteTimeout = 2000;
40 req.KeepAlive = false;
42 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
43 ((IDisposable) resp).Dispose ();
46 string charset = resp.CharacterSet;
47 Assert.Fail ("#1:" + charset);
48 } catch (ObjectDisposedException ex) {
49 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
50 Assert.IsNull (ex.InnerException, "#3");
51 Assert.IsNotNull (ex.Message, "#4");
52 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
58 #if FEATURE_NO_BSD_SOCKETS
59 [ExpectedException (typeof (PlatformNotSupportedException))]
61 public void Close_Disposed ()
63 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
64 string url = "http://" + ep.ToString () + "/test/";
66 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
67 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
70 req.ReadWriteTimeout = 2000;
71 req.KeepAlive = false;
73 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
74 ((IDisposable) resp).Dispose ();
80 #if FEATURE_NO_BSD_SOCKETS
81 [ExpectedException (typeof (PlatformNotSupportedException))]
83 public void ContentEncoding_Disposed ()
85 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
86 string url = "http://" + ep.ToString () + "/test/";
88 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
89 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
92 req.ReadWriteTimeout = 2000;
93 req.KeepAlive = false;
95 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
96 ((IDisposable) resp).Dispose ();
99 string enc = resp.ContentEncoding;
100 Assert.Fail ("#1:" + enc);
101 } catch (ObjectDisposedException ex) {
102 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
103 Assert.IsNull (ex.InnerException, "#3");
104 Assert.IsNotNull (ex.Message, "#4");
105 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
111 #if FEATURE_NO_BSD_SOCKETS
112 [ExpectedException (typeof (PlatformNotSupportedException))]
114 public void ContentLength_Disposed ()
116 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
117 string url = "http://" + ep.ToString () + "/test/";
119 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
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);
134 #if FEATURE_NO_BSD_SOCKETS
135 [ExpectedException (typeof (PlatformNotSupportedException))]
137 public void ContentType_Disposed ()
139 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
140 string url = "http://" + ep.ToString () + "/test/";
142 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
143 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
146 req.ReadWriteTimeout = 2000;
147 req.KeepAlive = false;
149 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
150 ((IDisposable) resp).Dispose ();
153 string contentType = resp.ContentType;
154 Assert.Fail ("#1:" + contentType);
155 } catch (ObjectDisposedException ex) {
156 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
157 Assert.IsNull (ex.InnerException, "#3");
158 Assert.IsNotNull (ex.Message, "#4");
159 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
165 #if FEATURE_NO_BSD_SOCKETS
166 [ExpectedException (typeof (PlatformNotSupportedException))]
168 public void Cookies_Disposed ()
170 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
171 string url = "http://" + ep.ToString () + "/test/";
173 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
174 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
177 req.ReadWriteTimeout = 2000;
178 req.KeepAlive = false;
180 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
181 ((IDisposable) resp).Dispose ();
184 CookieCollection cookies = resp.Cookies;
185 Assert.Fail ("#A1:" + cookies);
186 } catch (ObjectDisposedException ex) {
187 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#A2");
188 Assert.IsNull (ex.InnerException, "#A3");
189 Assert.IsNotNull (ex.Message, "#A4");
190 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#A5");
194 resp.Cookies = new CookieCollection ();
196 } catch (ObjectDisposedException ex) {
197 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#B2");
198 Assert.IsNull (ex.InnerException, "#B3");
199 Assert.IsNotNull (ex.Message, "#B4");
200 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#B5");
206 #if FEATURE_NO_BSD_SOCKETS
207 [ExpectedException (typeof (PlatformNotSupportedException))]
209 public void GetResponseHeader_Disposed ()
211 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
212 string url = "http://" + ep.ToString () + "/test/";
214 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
215 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
218 req.ReadWriteTimeout = 2000;
219 req.KeepAlive = false;
221 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
222 ((IDisposable) resp).Dispose ();
225 string server = resp.GetResponseHeader ("Server");
226 Assert.Fail ("#1:" + server);
227 } catch (ObjectDisposedException ex) {
228 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
229 Assert.IsNull (ex.InnerException, "#3");
230 Assert.IsNotNull (ex.Message, "#4");
231 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
237 #if FEATURE_NO_BSD_SOCKETS
238 [ExpectedException (typeof (PlatformNotSupportedException))]
240 public void GetResponseStream_Disposed ()
242 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
243 string url = "http://" + ep.ToString () + "/test/";
245 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
246 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
249 req.ReadWriteTimeout = 2000;
250 req.KeepAlive = false;
252 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
253 ((IDisposable) resp).Dispose ();
256 Stream s = resp.GetResponseStream ();
257 Assert.Fail ("#1:" + s);
258 } catch (ObjectDisposedException ex) {
259 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
260 Assert.IsNull (ex.InnerException, "#3");
261 Assert.IsNotNull (ex.Message, "#4");
262 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
268 #if FEATURE_NO_BSD_SOCKETS
269 [ExpectedException (typeof (PlatformNotSupportedException))]
271 public void Headers_Disposed ()
273 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
274 string url = "http://" + ep.ToString () + "/test/";
276 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
277 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
280 req.ReadWriteTimeout = 2000;
281 req.KeepAlive = false;
283 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
284 ((IDisposable) resp).Dispose ();
286 WebHeaderCollection headers = resp.Headers;
287 Assert.AreEqual (6, headers.Count, "#1");
288 Assert.AreEqual ("9", headers ["Content-Length"], "#2");
289 Assert.AreEqual ("identity", headers ["Content-Encoding"], "#3");
290 Assert.AreEqual ("text/xml; charset=UTF-8", headers ["Content-Type"], "#4");
291 Assert.AreEqual ("Wed, 08 Jan 2003 23:11:55 GMT", headers ["Last-Modified"], "#5");
292 Assert.AreEqual ("UserID=Miguel,StoreProfile=true", headers ["Set-Cookie"], "#6");
293 Assert.AreEqual ("Mono/Test", headers ["Server"], "#7");
298 #if FEATURE_NO_BSD_SOCKETS
299 [ExpectedException (typeof (PlatformNotSupportedException))]
301 public void LastModified_Disposed ()
303 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
304 string url = "http://" + ep.ToString () + "/test/";
306 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
307 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
310 req.ReadWriteTimeout = 2000;
311 req.KeepAlive = false;
313 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
314 ((IDisposable) resp).Dispose ();
317 DateTime lastMod = resp.LastModified;
318 Assert.Fail ("#1:" + lastMod);
319 } catch (ObjectDisposedException ex) {
320 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
321 Assert.IsNull (ex.InnerException, "#3");
322 Assert.IsNotNull (ex.Message, "#4");
323 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
329 #if FEATURE_NO_BSD_SOCKETS
330 [ExpectedException (typeof (PlatformNotSupportedException))]
332 public void Method_Disposed ()
334 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
335 string url = "http://" + ep.ToString () + "/test/";
337 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
338 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
341 req.ReadWriteTimeout = 2000;
342 req.KeepAlive = false;
344 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
345 ((IDisposable) resp).Dispose ();
348 string method = resp.Method;
349 Assert.Fail ("#1:" + method);
350 } catch (ObjectDisposedException ex) {
351 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
352 Assert.IsNull (ex.InnerException, "#3");
353 Assert.IsNotNull (ex.Message, "#4");
354 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
360 #if FEATURE_NO_BSD_SOCKETS
361 [ExpectedException (typeof (PlatformNotSupportedException))]
363 public void ProtocolVersion_Disposed ()
365 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
366 string url = "http://" + ep.ToString () + "/test/";
368 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
369 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
372 req.ReadWriteTimeout = 2000;
373 req.KeepAlive = false;
375 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
376 ((IDisposable) resp).Dispose ();
379 Version protocolVersion = resp.ProtocolVersion;
380 Assert.Fail ("#1:" + protocolVersion);
381 } catch (ObjectDisposedException ex) {
382 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
383 Assert.IsNull (ex.InnerException, "#3");
384 Assert.IsNotNull (ex.Message, "#4");
385 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
391 #if FEATURE_NO_BSD_SOCKETS
392 [ExpectedException (typeof (PlatformNotSupportedException))]
394 public void ResponseUri_Disposed ()
396 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
397 string url = "http://" + ep.ToString () + "/test/";
399 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
400 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
403 req.ReadWriteTimeout = 2000;
404 req.KeepAlive = false;
406 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
407 ((IDisposable) resp).Dispose ();
410 Uri respUri = resp.ResponseUri;
411 Assert.Fail ("#1:" + respUri);
412 } catch (ObjectDisposedException ex) {
413 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
414 Assert.IsNull (ex.InnerException, "#3");
415 Assert.IsNotNull (ex.Message, "#4");
416 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
422 #if FEATURE_NO_BSD_SOCKETS
423 [ExpectedException (typeof (PlatformNotSupportedException))]
425 public void Server_Disposed ()
427 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
428 string url = "http://" + ep.ToString () + "/test/";
430 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
431 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
434 req.ReadWriteTimeout = 2000;
435 req.KeepAlive = false;
437 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
438 ((IDisposable) resp).Dispose ();
441 string server = resp.Server;
442 Assert.Fail ("#1:" + server);
443 } catch (ObjectDisposedException ex) {
444 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
445 Assert.IsNull (ex.InnerException, "#3");
446 Assert.IsNotNull (ex.Message, "#4");
447 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
453 #if FEATURE_NO_BSD_SOCKETS
454 [ExpectedException (typeof (PlatformNotSupportedException))]
456 public void StatusCode_Disposed ()
458 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
459 string url = "http://" + ep.ToString () + "/test/";
461 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
462 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
465 req.ReadWriteTimeout = 2000;
466 req.KeepAlive = false;
468 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
469 ((IDisposable) resp).Dispose ();
471 Assert.AreEqual (HttpStatusCode.OK, resp.StatusCode);
476 #if FEATURE_NO_BSD_SOCKETS
477 [ExpectedException (typeof (PlatformNotSupportedException))]
479 public void StatusDescription_Disposed ()
481 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
482 string url = "http://" + ep.ToString () + "/test/";
484 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
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 ();
495 string statusDesc = resp.StatusDescription;
496 Assert.Fail ("#1:" + statusDesc);
497 } catch (ObjectDisposedException ex) {
498 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
499 Assert.IsNull (ex.InnerException, "#3");
500 Assert.IsNotNull (ex.Message, "#4");
501 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
506 internal static byte [] FullResponseHandler (Socket socket)
508 StringWriter sw = new StringWriter ();
510 sw.WriteLine ("HTTP/1.0 200 OK");
511 sw.WriteLine ("Server: Mono/Test");
512 sw.WriteLine ("Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT");
513 sw.WriteLine ("Content-Encoding: identity");
514 sw.WriteLine ("Content-Type: text/xml; charset=UTF-8");
515 sw.WriteLine ("Content-Length: 9");
516 sw.WriteLine ("Set-Cookie: UserID=Miguel");
517 sw.WriteLine ("Set-Cookie: StoreProfile=true");
519 sw.Write ("<dummy />");
522 return Encoding.UTF8.GetBytes (sw.ToString ());
525 internal static byte [] GzipResponseHandler (Socket socket)
527 StringWriter sw = new StringWriter ();
529 sw.WriteLine ("HTTP/1.0 200 OK");
530 sw.WriteLine ("Server: Mono/Test");
531 sw.WriteLine ("Content-Encoding: gzip");
532 sw.WriteLine ("Content-Type: text/xml; charset=UTF-8");
536 var gzipDummyXml = new byte[] {
537 0x1f, 0x8b, 0x08, 0x08, 0xb6, 0xb1, 0xd3, 0x58, 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x67, 0x7a,
538 0x00, 0xb3, 0x49, 0x29, 0xcd, 0xcd, 0xad, 0x54, 0xd0, 0xb7, 0x03, 0x00, 0xed, 0x55, 0x32, 0xec,
539 0x09, 0x00, 0x00, 0x00 };
540 var header = Encoding.UTF8.GetBytes (sw.ToString ());
542 var response = new byte[gzipDummyXml.Length + header.Length];
543 header.CopyTo(response, 0);
544 gzipDummyXml.CopyTo(response, header.Length);
551 public class HttpResponseStreamTest
554 #if FEATURE_NO_BSD_SOCKETS
555 [ExpectedException (typeof (PlatformNotSupportedException))]
557 public void BeginRead_Buffer_Null ()
559 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
560 string url = "http://" + ep.ToString () + "/test/";
562 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
563 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
566 req.ReadWriteTimeout = 2000;
567 req.KeepAlive = false;
569 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
570 Stream rs = resp.GetResponseStream ();
571 byte [] buffer = null;
574 rs.BeginRead (buffer, 0, 0, null, null);
576 } catch (ArgumentNullException ex) {
577 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
578 Assert.IsNull (ex.InnerException, "#A3");
579 Assert.IsNotNull (ex.Message, "#A4");
580 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
583 // read full response
584 buffer = new byte [24];
585 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
589 rs.BeginRead (buffer, 0, 0, null, null);
591 } catch (ArgumentNullException ex) {
592 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
593 Assert.IsNull (ex.InnerException, "#B3");
594 Assert.IsNotNull (ex.Message, "#B4");
595 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
606 #if FEATURE_NO_BSD_SOCKETS
607 [ExpectedException (typeof (PlatformNotSupportedException))]
609 public void BeginWrite ()
611 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
612 string url = "http://" + ep.ToString () + "/test/";
614 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
615 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
618 req.ReadWriteTimeout = 2000;
619 req.KeepAlive = false;
621 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
622 Stream rs = resp.GetResponseStream ();
623 byte [] buffer = new byte [5];
625 rs.BeginWrite (buffer, 0, buffer.Length, null, null);
627 } catch (NotSupportedException ex) {
628 // The stream does not support writing
629 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
630 Assert.IsNull (ex.InnerException, "#3");
631 Assert.IsNotNull (ex.Message, "#4");
641 [Category ("NotWorking")]
642 public void CanRead ()
644 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
645 string url = "http://" + ep.ToString () + "/test/";
647 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
648 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
651 req.ReadWriteTimeout = 2000;
652 req.KeepAlive = false;
654 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
655 Stream rs = resp.GetResponseStream ();
657 Assert.IsTrue (rs.CanRead, "#1");
659 Assert.IsFalse (rs.CanRead, "#2");
669 #if FEATURE_NO_BSD_SOCKETS
670 [ExpectedException (typeof (PlatformNotSupportedException))]
672 public void CanSeek ()
674 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
675 string url = "http://" + ep.ToString () + "/test/";
677 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
678 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
681 req.ReadWriteTimeout = 2000;
682 req.KeepAlive = false;
684 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
685 Stream rs = resp.GetResponseStream ();
687 Assert.IsFalse (rs.CanSeek, "#1");
689 Assert.IsFalse (rs.CanSeek, "#2");
698 [Test] // bug #324182
699 #if FEATURE_NO_BSD_SOCKETS
700 [ExpectedException (typeof (PlatformNotSupportedException))]
702 public void CanTimeout ()
704 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
705 string url = "http://" + ep.ToString () + "/test/";
707 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
708 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
711 req.ReadWriteTimeout = 2000;
712 req.KeepAlive = false;
714 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
715 Stream rs = resp.GetResponseStream ();
717 Assert.IsTrue (rs.CanTimeout, "#1");
719 Assert.IsTrue (rs.CanTimeout, "#2");
729 #if FEATURE_NO_BSD_SOCKETS
730 [ExpectedException (typeof (PlatformNotSupportedException))]
732 public void CanWrite ()
734 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
735 string url = "http://" + ep.ToString () + "/test/";
737 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
738 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
741 req.ReadWriteTimeout = 2000;
742 req.KeepAlive = false;
744 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
745 Stream rs = resp.GetResponseStream ();
747 Assert.IsFalse (rs.CanWrite, "#1");
749 Assert.IsFalse (rs.CanWrite, "#2");
759 #if FEATURE_NO_BSD_SOCKETS
760 [ExpectedException (typeof (PlatformNotSupportedException))]
764 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
765 string url = "http://" + ep.ToString () + "/test/";
767 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
768 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
771 req.ReadWriteTimeout = 2000;
772 req.KeepAlive = false;
774 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
775 Stream rs = resp.GetResponseStream ();
776 byte [] buffer = new byte [5];
778 Assert.AreEqual (1, rs.Read (buffer, 4, 1), "#A1");
779 Assert.AreEqual (new byte [] { 0x00, 0x00, 0x00, 0x00, 0x3c }, buffer, "#A2");
780 Assert.AreEqual (2, rs.Read (buffer, 0, 2), "#B1");
781 Assert.AreEqual (new byte [] { 0x64, 0x75, 0x00, 0x00, 0x3c }, buffer, "#B2");
782 Assert.AreEqual (4, rs.Read (buffer, 1, 4), "#C1");
783 Assert.AreEqual (new byte [] { 0x64, 0x6d, 0x6d, 0x79, 0x20 }, buffer, "#C2");
784 Assert.AreEqual (2, rs.Read (buffer, 0, 3), "#D1");
785 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#D2");
786 Assert.AreEqual (0, rs.Read (buffer, 1, 3), "#E1");
787 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#E2");
788 Assert.AreEqual (0, rs.Read (buffer, buffer.Length, 0), "#G1");
789 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#G2");
799 #if FEATURE_NO_BSD_SOCKETS
800 [ExpectedException (typeof (PlatformNotSupportedException))]
802 public void Read_Buffer_Null ()
804 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
805 string url = "http://" + ep.ToString () + "/test/";
807 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
808 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
811 req.ReadWriteTimeout = 2000;
812 req.KeepAlive = false;
814 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
815 Stream rs = resp.GetResponseStream ();
816 byte [] buffer = null;
819 rs.Read (buffer, 0, 0);
821 } catch (ArgumentNullException ex) {
822 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
823 Assert.IsNull (ex.InnerException, "#A3");
824 Assert.IsNotNull (ex.Message, "#A4");
825 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
828 // read full response
829 buffer = new byte [24];
830 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
834 rs.Read (buffer, 0, 0);
836 } catch (ArgumentNullException ex) {
837 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
838 Assert.IsNull (ex.InnerException, "#B3");
839 Assert.IsNotNull (ex.Message, "#B4");
840 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
851 #if FEATURE_NO_BSD_SOCKETS
852 [ExpectedException (typeof (PlatformNotSupportedException))]
854 public void Read_Count_Negative ()
856 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
857 string url = "http://" + ep.ToString () + "/test/";
859 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
860 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
863 req.ReadWriteTimeout = 2000;
864 req.KeepAlive = false;
866 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
867 Stream rs = resp.GetResponseStream ();
868 byte [] buffer = new byte [5];
871 rs.Read (buffer, 1, -1);
873 } catch (ArgumentOutOfRangeException ex) {
874 // Specified argument was out of the range of valid values
875 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
876 Assert.IsNull (ex.InnerException, "#A3");
877 Assert.IsNotNull (ex.Message, "#A4");
878 Assert.AreEqual ("size", ex.ParamName, "#A5");
881 // read full response
882 buffer = new byte [24];
883 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
886 rs.Read (buffer, 1, -1);
888 } catch (ArgumentOutOfRangeException ex) {
889 // Specified argument was out of the range of valid values
890 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
891 Assert.IsNull (ex.InnerException, "#B3");
892 Assert.IsNotNull (ex.Message, "#B4");
893 Assert.AreEqual ("size", ex.ParamName, "#B5");
904 #if FEATURE_NO_BSD_SOCKETS
905 [ExpectedException (typeof (PlatformNotSupportedException))]
907 public void Read_Count_Overflow ()
909 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
910 string url = "http://" + ep.ToString () + "/test/";
912 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
913 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
916 req.ReadWriteTimeout = 2000;
917 req.KeepAlive = false;
919 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
920 Stream rs = resp.GetResponseStream ();
921 byte [] buffer = new byte [5];
924 rs.Read (buffer, buffer.Length - 2, 3);
926 } catch (ArgumentOutOfRangeException ex) {
927 // Specified argument was out of the range of valid values
928 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
929 Assert.IsNull (ex.InnerException, "#A3");
930 Assert.IsNotNull (ex.Message, "#A4");
931 Assert.AreEqual ("size", ex.ParamName, "#A5");
934 // read full response
935 buffer = new byte [24];
936 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
939 rs.Read (buffer, buffer.Length - 2, 3);
941 } catch (ArgumentOutOfRangeException ex) {
942 // Specified argument was out of the range of valid values
943 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
944 Assert.IsNull (ex.InnerException, "#B3");
945 Assert.IsNotNull (ex.Message, "#B4");
946 Assert.AreEqual ("size", ex.ParamName, "#B5");
957 #if FEATURE_NO_BSD_SOCKETS
958 [ExpectedException (typeof (PlatformNotSupportedException))]
960 public void Read_Offset_Negative ()
962 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
963 string url = "http://" + ep.ToString () + "/test/";
965 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
966 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
969 req.ReadWriteTimeout = 2000;
970 req.KeepAlive = false;
972 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
973 Stream rs = resp.GetResponseStream ();
974 byte [] buffer = new byte [5];
977 rs.Read (buffer, -1, 0);
979 } catch (ArgumentOutOfRangeException ex) {
980 // Specified argument was out of the range of valid values
981 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
982 Assert.IsNull (ex.InnerException, "#A3");
983 Assert.IsNotNull (ex.Message, "#A4");
984 Assert.AreEqual ("offset", ex.ParamName, "#A5");
987 // read full response
988 buffer = new byte [24];
989 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
992 rs.Read (buffer, -1, 0);
994 } catch (ArgumentOutOfRangeException ex) {
995 // Specified argument was out of the range of valid values
996 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
997 Assert.IsNull (ex.InnerException, "#B3");
998 Assert.IsNotNull (ex.Message, "#B4");
999 Assert.AreEqual ("offset", ex.ParamName, "#B5");
1010 #if FEATURE_NO_BSD_SOCKETS
1011 [ExpectedException (typeof (PlatformNotSupportedException))]
1013 public void Read_Offset_Overflow ()
1015 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1016 string url = "http://" + ep.ToString () + "/test/";
1018 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1019 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1022 req.ReadWriteTimeout = 2000;
1023 req.KeepAlive = false;
1025 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1026 Stream rs = resp.GetResponseStream ();
1027 byte [] buffer = new byte [5];
1030 rs.Read (buffer, buffer.Length + 1, 0);
1031 Assert.Fail ("#A1");
1032 } catch (ArgumentOutOfRangeException ex) {
1033 // Specified argument was out of the range of valid values
1034 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
1035 Assert.IsNull (ex.InnerException, "#A3");
1036 Assert.IsNotNull (ex.Message, "#A4");
1037 Assert.AreEqual ("offset", ex.ParamName, "#A5");
1040 // read full response
1041 buffer = new byte [24];
1042 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
1045 rs.Read (buffer, buffer.Length + 1, 0);
1046 Assert.Fail ("#B1");
1047 } catch (ArgumentOutOfRangeException ex) {
1048 // Specified argument was out of the range of valid values
1049 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
1050 Assert.IsNull (ex.InnerException, "#B3");
1051 Assert.IsNotNull (ex.Message, "#B4");
1052 Assert.AreEqual ("offset", ex.ParamName, "#B5");
1063 [Category ("NotWorking")]
1064 public void Read_Stream_Closed ()
1066 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1067 string url = "http://" + ep.ToString () + "/test/";
1069 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1072 req = (HttpWebRequest) WebRequest.Create (url);
1075 req.ReadWriteTimeout = 2000;
1076 req.KeepAlive = false;
1078 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1079 Stream rs = resp.GetResponseStream ();
1082 rs.Read (new byte [0], 0, 0);
1083 Assert.Fail ("#A1");
1084 } catch (WebException ex) {
1085 // The request was aborted: The connection was closed unexpectedly
1086 Assert.AreEqual (typeof (WebException), ex.GetType (), "#A2");
1087 Assert.IsNull (ex.InnerException, "#A3");
1088 Assert.IsNotNull (ex.Message, "#A4");
1089 Assert.IsNull (ex.Response, "#A5");
1090 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#A6");
1097 req = (HttpWebRequest) WebRequest.Create (url);
1100 req.ReadWriteTimeout = 2000;
1101 req.KeepAlive = false;
1103 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1104 Stream rs = resp.GetResponseStream ();
1105 byte [] buffer = new byte [24];
1106 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
1109 rs.Read (new byte [0], 0, 0);
1110 Assert.Fail ("#B1");
1111 } catch (WebException ex) {
1112 // The request was aborted: The connection was closed unexpectedly
1113 Assert.AreEqual (typeof (WebException), ex.GetType (), "#B2");
1114 Assert.IsNull (ex.InnerException, "#B3");
1115 Assert.IsNotNull (ex.Message, "#B4");
1116 Assert.IsNull (ex.Response, "#B5");
1117 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#B6");
1127 #if FEATURE_NO_BSD_SOCKETS
1128 [ExpectedException (typeof (PlatformNotSupportedException))]
1130 public void ReadTimeout ()
1132 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1133 string url = "http://" + ep.ToString () + "/test/";
1135 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1136 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1139 req.ReadWriteTimeout = 2000;
1140 req.KeepAlive = false;
1142 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1143 Stream rs = resp.GetResponseStream ();
1145 Assert.AreEqual (2000, rs.ReadTimeout, "#1");
1147 Assert.AreEqual (2000, rs.ReadTimeout, "#2");
1157 #if FEATURE_NO_BSD_SOCKETS
1158 [ExpectedException (typeof (PlatformNotSupportedException))]
1160 public void Write ()
1162 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1163 string url = "http://" + ep.ToString () + "/test/";
1165 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1166 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1169 req.ReadWriteTimeout = 2000;
1170 req.KeepAlive = false;
1172 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1173 Stream rs = resp.GetResponseStream ();
1174 byte [] buffer = new byte [5];
1176 rs.Write (buffer, 0, buffer.Length);
1178 } catch (NotSupportedException ex) {
1179 // The stream does not support writing
1180 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
1181 Assert.IsNull (ex.InnerException, "#3");
1182 Assert.IsNotNull (ex.Message, "#4");
1192 #if FEATURE_NO_BSD_SOCKETS
1193 [ExpectedException (typeof (PlatformNotSupportedException))]
1195 public void WriteTimeout ()
1197 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1198 string url = "http://" + ep.ToString () + "/test/";
1200 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1201 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1204 req.ReadWriteTimeout = 2000;
1205 req.KeepAlive = false;
1207 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1208 Stream rs = resp.GetResponseStream ();
1210 Assert.AreEqual (2000, rs.WriteTimeout, "#1");
1212 Assert.AreEqual (2000, rs.WriteTimeout, "#2");
1223 #if FEATURE_NO_BSD_SOCKETS
1224 [ExpectedException (typeof (PlatformNotSupportedException))]
1226 public void AutomaticDecompression ()
1228 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1229 string url = "http://" + ep.ToString () + "/test/";
1231 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.GzipResponseHandler (s))) {
1232 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1235 req.ReadWriteTimeout = 2000;
1236 req.KeepAlive = false;
1237 req.AutomaticDecompression = DecompressionMethods.GZip;
1239 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1240 Stream rs = resp.GetResponseStream ();
1241 byte [] buffer = new byte [24];
1243 // read full response
1244 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
1245 Assert.IsNull (resp.Headers[HttpRequestHeader.ContentEncoding]);