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 [Category ("RequiresBSDSockets")]
25 public class HttpWebResponseTest
28 public void CharacterSet_Disposed ()
30 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
31 string url = "http://" + ep.ToString () + "/test/";
33 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
34 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
37 req.ReadWriteTimeout = 2000;
38 req.KeepAlive = false;
40 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
41 ((IDisposable) resp).Dispose ();
44 string charset = resp.CharacterSet;
45 Assert.Fail ("#1:" + charset);
46 } catch (ObjectDisposedException ex) {
47 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
48 Assert.IsNull (ex.InnerException, "#3");
49 Assert.IsNotNull (ex.Message, "#4");
50 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
56 public void Close_Disposed ()
58 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
59 string url = "http://" + ep.ToString () + "/test/";
61 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
62 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
65 req.ReadWriteTimeout = 2000;
66 req.KeepAlive = false;
68 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
69 ((IDisposable) resp).Dispose ();
75 public void ContentEncoding_Disposed ()
77 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
78 string url = "http://" + ep.ToString () + "/test/";
80 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
81 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
84 req.ReadWriteTimeout = 2000;
85 req.KeepAlive = false;
87 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
88 ((IDisposable) resp).Dispose ();
91 string enc = resp.ContentEncoding;
92 Assert.Fail ("#1:" + enc);
93 } catch (ObjectDisposedException ex) {
94 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
95 Assert.IsNull (ex.InnerException, "#3");
96 Assert.IsNotNull (ex.Message, "#4");
97 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
103 public void ContentLength_Disposed ()
105 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
106 string url = "http://" + ep.ToString () + "/test/";
108 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
109 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
112 req.ReadWriteTimeout = 2000;
113 req.KeepAlive = false;
115 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
116 ((IDisposable) resp).Dispose ();
118 Assert.AreEqual (9, resp.ContentLength);
123 public void ContentType_Disposed ()
125 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
126 string url = "http://" + ep.ToString () + "/test/";
128 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
129 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
132 req.ReadWriteTimeout = 2000;
133 req.KeepAlive = false;
135 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
136 ((IDisposable) resp).Dispose ();
139 string contentType = resp.ContentType;
140 Assert.Fail ("#1:" + contentType);
141 } catch (ObjectDisposedException ex) {
142 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
143 Assert.IsNull (ex.InnerException, "#3");
144 Assert.IsNotNull (ex.Message, "#4");
145 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
151 public void Cookies_Disposed ()
153 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
154 string url = "http://" + ep.ToString () + "/test/";
156 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
157 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
160 req.ReadWriteTimeout = 2000;
161 req.KeepAlive = false;
163 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
164 ((IDisposable) resp).Dispose ();
167 CookieCollection cookies = resp.Cookies;
168 Assert.Fail ("#A1:" + cookies);
169 } catch (ObjectDisposedException ex) {
170 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#A2");
171 Assert.IsNull (ex.InnerException, "#A3");
172 Assert.IsNotNull (ex.Message, "#A4");
173 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#A5");
177 resp.Cookies = new CookieCollection ();
179 } catch (ObjectDisposedException ex) {
180 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#B2");
181 Assert.IsNull (ex.InnerException, "#B3");
182 Assert.IsNotNull (ex.Message, "#B4");
183 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#B5");
189 public void GetResponseHeader_Disposed ()
191 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
192 string url = "http://" + ep.ToString () + "/test/";
194 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
195 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
198 req.ReadWriteTimeout = 2000;
199 req.KeepAlive = false;
201 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
202 ((IDisposable) resp).Dispose ();
205 string server = resp.GetResponseHeader ("Server");
206 Assert.Fail ("#1:" + server);
207 } catch (ObjectDisposedException ex) {
208 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
209 Assert.IsNull (ex.InnerException, "#3");
210 Assert.IsNotNull (ex.Message, "#4");
211 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
217 public void GetResponseStream_Disposed ()
219 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
220 string url = "http://" + ep.ToString () + "/test/";
222 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
223 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
226 req.ReadWriteTimeout = 2000;
227 req.KeepAlive = false;
229 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
230 ((IDisposable) resp).Dispose ();
233 Stream s = resp.GetResponseStream ();
234 Assert.Fail ("#1:" + s);
235 } catch (ObjectDisposedException ex) {
236 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
237 Assert.IsNull (ex.InnerException, "#3");
238 Assert.IsNotNull (ex.Message, "#4");
239 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
245 public void Headers_Disposed ()
247 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
248 string url = "http://" + ep.ToString () + "/test/";
250 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
251 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
254 req.ReadWriteTimeout = 2000;
255 req.KeepAlive = false;
257 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
258 ((IDisposable) resp).Dispose ();
260 WebHeaderCollection headers = resp.Headers;
261 Assert.AreEqual (6, headers.Count, "#1");
262 Assert.AreEqual ("9", headers ["Content-Length"], "#2");
263 Assert.AreEqual ("utf-8", headers ["Content-Encoding"], "#3");
264 Assert.AreEqual ("text/xml; charset=UTF-8", headers ["Content-Type"], "#4");
265 Assert.AreEqual ("Wed, 08 Jan 2003 23:11:55 GMT", headers ["Last-Modified"], "#5");
266 Assert.AreEqual ("UserID=Miguel,StoreProfile=true", headers ["Set-Cookie"], "#6");
267 Assert.AreEqual ("Mono/Test", headers ["Server"], "#7");
272 public void LastModified_Disposed ()
274 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
275 string url = "http://" + ep.ToString () + "/test/";
277 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
278 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
281 req.ReadWriteTimeout = 2000;
282 req.KeepAlive = false;
284 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
285 ((IDisposable) resp).Dispose ();
288 DateTime lastMod = resp.LastModified;
289 Assert.Fail ("#1:" + lastMod);
290 } catch (ObjectDisposedException ex) {
291 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
292 Assert.IsNull (ex.InnerException, "#3");
293 Assert.IsNotNull (ex.Message, "#4");
294 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
300 public void Method_Disposed ()
302 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
303 string url = "http://" + ep.ToString () + "/test/";
305 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
306 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
309 req.ReadWriteTimeout = 2000;
310 req.KeepAlive = false;
312 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
313 ((IDisposable) resp).Dispose ();
316 string method = resp.Method;
317 Assert.Fail ("#1:" + method);
318 } catch (ObjectDisposedException ex) {
319 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
320 Assert.IsNull (ex.InnerException, "#3");
321 Assert.IsNotNull (ex.Message, "#4");
322 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
328 public void ProtocolVersion_Disposed ()
330 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
331 string url = "http://" + ep.ToString () + "/test/";
333 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
334 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
337 req.ReadWriteTimeout = 2000;
338 req.KeepAlive = false;
340 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
341 ((IDisposable) resp).Dispose ();
344 Version protocolVersion = resp.ProtocolVersion;
345 Assert.Fail ("#1:" + protocolVersion);
346 } catch (ObjectDisposedException ex) {
347 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
348 Assert.IsNull (ex.InnerException, "#3");
349 Assert.IsNotNull (ex.Message, "#4");
350 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
356 public void ResponseUri_Disposed ()
358 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
359 string url = "http://" + ep.ToString () + "/test/";
361 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
362 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
365 req.ReadWriteTimeout = 2000;
366 req.KeepAlive = false;
368 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
369 ((IDisposable) resp).Dispose ();
372 Uri respUri = resp.ResponseUri;
373 Assert.Fail ("#1:" + respUri);
374 } catch (ObjectDisposedException ex) {
375 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
376 Assert.IsNull (ex.InnerException, "#3");
377 Assert.IsNotNull (ex.Message, "#4");
378 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
384 public void Server_Disposed ()
386 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
387 string url = "http://" + ep.ToString () + "/test/";
389 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
390 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
393 req.ReadWriteTimeout = 2000;
394 req.KeepAlive = false;
396 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
397 ((IDisposable) resp).Dispose ();
400 string server = resp.Server;
401 Assert.Fail ("#1:" + server);
402 } catch (ObjectDisposedException ex) {
403 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
404 Assert.IsNull (ex.InnerException, "#3");
405 Assert.IsNotNull (ex.Message, "#4");
406 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
412 public void StatusCode_Disposed ()
414 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
415 string url = "http://" + ep.ToString () + "/test/";
417 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
418 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
421 req.ReadWriteTimeout = 2000;
422 req.KeepAlive = false;
424 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
425 ((IDisposable) resp).Dispose ();
427 Assert.AreEqual (HttpStatusCode.OK, resp.StatusCode);
432 public void StatusDescription_Disposed ()
434 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
435 string url = "http://" + ep.ToString () + "/test/";
437 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
438 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
441 req.ReadWriteTimeout = 2000;
442 req.KeepAlive = false;
444 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
445 ((IDisposable) resp).Dispose ();
448 string statusDesc = resp.StatusDescription;
449 Assert.Fail ("#1:" + statusDesc);
450 } catch (ObjectDisposedException ex) {
451 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
452 Assert.IsNull (ex.InnerException, "#3");
453 Assert.IsNotNull (ex.Message, "#4");
454 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
459 internal static byte [] FullResponseHandler (Socket socket)
461 StringWriter sw = new StringWriter ();
463 sw.WriteLine ("HTTP/1.0 200 OK");
464 sw.WriteLine ("Server: Mono/Test");
465 sw.WriteLine ("Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT");
466 sw.WriteLine ("Content-Encoding: " + Encoding.UTF8.WebName);
467 sw.WriteLine ("Content-Type: text/xml; charset=UTF-8");
468 sw.WriteLine ("Content-Length: 9");
469 sw.WriteLine ("Set-Cookie: UserID=Miguel");
470 sw.WriteLine ("Set-Cookie: StoreProfile=true");
472 sw.Write ("<dummy />");
475 return Encoding.UTF8.GetBytes (sw.ToString ());
480 [Category ("RequiresBSDSockets")]
481 public class HttpResponseStreamTest
484 public void BeginRead_Buffer_Null ()
486 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
487 string url = "http://" + ep.ToString () + "/test/";
489 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
490 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
493 req.ReadWriteTimeout = 2000;
494 req.KeepAlive = false;
496 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
497 Stream rs = resp.GetResponseStream ();
498 byte [] buffer = null;
501 rs.BeginRead (buffer, 0, 0, null, null);
503 } catch (ArgumentNullException ex) {
504 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
505 Assert.IsNull (ex.InnerException, "#A3");
506 Assert.IsNotNull (ex.Message, "#A4");
507 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
510 // read full response
511 buffer = new byte [24];
512 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
516 rs.BeginRead (buffer, 0, 0, null, null);
518 } catch (ArgumentNullException ex) {
519 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
520 Assert.IsNull (ex.InnerException, "#B3");
521 Assert.IsNotNull (ex.Message, "#B4");
522 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
533 public void BeginWrite ()
535 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
536 string url = "http://" + ep.ToString () + "/test/";
538 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
539 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
542 req.ReadWriteTimeout = 2000;
543 req.KeepAlive = false;
545 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
546 Stream rs = resp.GetResponseStream ();
547 byte [] buffer = new byte [5];
549 rs.BeginWrite (buffer, 0, buffer.Length, null, null);
551 } catch (NotSupportedException ex) {
552 // The stream does not support writing
553 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
554 Assert.IsNull (ex.InnerException, "#3");
555 Assert.IsNotNull (ex.Message, "#4");
565 [Category ("NotWorking")]
566 public void CanRead ()
568 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
569 string url = "http://" + ep.ToString () + "/test/";
571 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
572 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
575 req.ReadWriteTimeout = 2000;
576 req.KeepAlive = false;
578 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
579 Stream rs = resp.GetResponseStream ();
581 Assert.IsTrue (rs.CanRead, "#1");
583 Assert.IsFalse (rs.CanRead, "#2");
593 public void CanSeek ()
595 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
596 string url = "http://" + ep.ToString () + "/test/";
598 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
599 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
602 req.ReadWriteTimeout = 2000;
603 req.KeepAlive = false;
605 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
606 Stream rs = resp.GetResponseStream ();
608 Assert.IsFalse (rs.CanSeek, "#1");
610 Assert.IsFalse (rs.CanSeek, "#2");
619 [Test] // bug #324182
620 public void CanTimeout ()
622 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
623 string url = "http://" + ep.ToString () + "/test/";
625 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
626 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
629 req.ReadWriteTimeout = 2000;
630 req.KeepAlive = false;
632 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
633 Stream rs = resp.GetResponseStream ();
635 Assert.IsTrue (rs.CanTimeout, "#1");
637 Assert.IsTrue (rs.CanTimeout, "#2");
647 public void CanWrite ()
649 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
650 string url = "http://" + ep.ToString () + "/test/";
652 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
653 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
656 req.ReadWriteTimeout = 2000;
657 req.KeepAlive = false;
659 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
660 Stream rs = resp.GetResponseStream ();
662 Assert.IsFalse (rs.CanWrite, "#1");
664 Assert.IsFalse (rs.CanWrite, "#2");
676 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
677 string url = "http://" + ep.ToString () + "/test/";
679 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
680 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
683 req.ReadWriteTimeout = 2000;
684 req.KeepAlive = false;
686 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
687 Stream rs = resp.GetResponseStream ();
688 byte [] buffer = new byte [5];
690 Assert.AreEqual (1, rs.Read (buffer, 4, 1), "#A1");
691 Assert.AreEqual (new byte [] { 0x00, 0x00, 0x00, 0x00, 0x3c }, buffer, "#A2");
692 Assert.AreEqual (2, rs.Read (buffer, 0, 2), "#B1");
693 Assert.AreEqual (new byte [] { 0x64, 0x75, 0x00, 0x00, 0x3c }, buffer, "#B2");
694 Assert.AreEqual (4, rs.Read (buffer, 1, 4), "#C1");
695 Assert.AreEqual (new byte [] { 0x64, 0x6d, 0x6d, 0x79, 0x20 }, buffer, "#C2");
696 Assert.AreEqual (2, rs.Read (buffer, 0, 3), "#D1");
697 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#D2");
698 Assert.AreEqual (0, rs.Read (buffer, 1, 3), "#E1");
699 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#E2");
700 Assert.AreEqual (0, rs.Read (buffer, buffer.Length, 0), "#G1");
701 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#G2");
711 public void Read_Buffer_Null ()
713 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
714 string url = "http://" + ep.ToString () + "/test/";
716 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
717 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
720 req.ReadWriteTimeout = 2000;
721 req.KeepAlive = false;
723 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
724 Stream rs = resp.GetResponseStream ();
725 byte [] buffer = null;
728 rs.Read (buffer, 0, 0);
730 } catch (ArgumentNullException ex) {
731 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
732 Assert.IsNull (ex.InnerException, "#A3");
733 Assert.IsNotNull (ex.Message, "#A4");
734 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
737 // read full response
738 buffer = new byte [24];
739 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
743 rs.Read (buffer, 0, 0);
745 } catch (ArgumentNullException ex) {
746 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
747 Assert.IsNull (ex.InnerException, "#B3");
748 Assert.IsNotNull (ex.Message, "#B4");
749 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
760 public void Read_Count_Negative ()
762 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
763 string url = "http://" + ep.ToString () + "/test/";
765 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
766 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
769 req.ReadWriteTimeout = 2000;
770 req.KeepAlive = false;
772 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
773 Stream rs = resp.GetResponseStream ();
774 byte [] buffer = new byte [5];
777 rs.Read (buffer, 1, -1);
779 } catch (ArgumentOutOfRangeException ex) {
780 // Specified argument was out of the range of valid values
781 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
782 Assert.IsNull (ex.InnerException, "#A3");
783 Assert.IsNotNull (ex.Message, "#A4");
784 Assert.AreEqual ("size", ex.ParamName, "#A5");
787 // read full response
788 buffer = new byte [24];
789 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
792 rs.Read (buffer, 1, -1);
794 } catch (ArgumentOutOfRangeException ex) {
795 // Specified argument was out of the range of valid values
796 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
797 Assert.IsNull (ex.InnerException, "#B3");
798 Assert.IsNotNull (ex.Message, "#B4");
799 Assert.AreEqual ("size", ex.ParamName, "#B5");
810 public void Read_Count_Overflow ()
812 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
813 string url = "http://" + ep.ToString () + "/test/";
815 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
816 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
819 req.ReadWriteTimeout = 2000;
820 req.KeepAlive = false;
822 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
823 Stream rs = resp.GetResponseStream ();
824 byte [] buffer = new byte [5];
827 rs.Read (buffer, buffer.Length - 2, 3);
829 } catch (ArgumentOutOfRangeException ex) {
830 // Specified argument was out of the range of valid values
831 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
832 Assert.IsNull (ex.InnerException, "#A3");
833 Assert.IsNotNull (ex.Message, "#A4");
834 Assert.AreEqual ("size", ex.ParamName, "#A5");
837 // read full response
838 buffer = new byte [24];
839 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
842 rs.Read (buffer, buffer.Length - 2, 3);
844 } catch (ArgumentOutOfRangeException ex) {
845 // Specified argument was out of the range of valid values
846 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
847 Assert.IsNull (ex.InnerException, "#B3");
848 Assert.IsNotNull (ex.Message, "#B4");
849 Assert.AreEqual ("size", ex.ParamName, "#B5");
860 public void Read_Offset_Negative ()
862 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
863 string url = "http://" + ep.ToString () + "/test/";
865 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
866 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
869 req.ReadWriteTimeout = 2000;
870 req.KeepAlive = false;
872 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
873 Stream rs = resp.GetResponseStream ();
874 byte [] buffer = new byte [5];
877 rs.Read (buffer, -1, 0);
879 } catch (ArgumentOutOfRangeException ex) {
880 // Specified argument was out of the range of valid values
881 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
882 Assert.IsNull (ex.InnerException, "#A3");
883 Assert.IsNotNull (ex.Message, "#A4");
884 Assert.AreEqual ("offset", ex.ParamName, "#A5");
887 // read full response
888 buffer = new byte [24];
889 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
892 rs.Read (buffer, -1, 0);
894 } catch (ArgumentOutOfRangeException ex) {
895 // Specified argument was out of the range of valid values
896 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
897 Assert.IsNull (ex.InnerException, "#B3");
898 Assert.IsNotNull (ex.Message, "#B4");
899 Assert.AreEqual ("offset", ex.ParamName, "#B5");
910 public void Read_Offset_Overflow ()
912 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
913 string url = "http://" + ep.ToString () + "/test/";
915 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
916 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
919 req.ReadWriteTimeout = 2000;
920 req.KeepAlive = false;
922 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
923 Stream rs = resp.GetResponseStream ();
924 byte [] buffer = new byte [5];
927 rs.Read (buffer, buffer.Length + 1, 0);
929 } catch (ArgumentOutOfRangeException ex) {
930 // Specified argument was out of the range of valid values
931 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
932 Assert.IsNull (ex.InnerException, "#A3");
933 Assert.IsNotNull (ex.Message, "#A4");
934 Assert.AreEqual ("offset", ex.ParamName, "#A5");
937 // read full response
938 buffer = new byte [24];
939 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
942 rs.Read (buffer, buffer.Length + 1, 0);
944 } catch (ArgumentOutOfRangeException ex) {
945 // Specified argument was out of the range of valid values
946 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
947 Assert.IsNull (ex.InnerException, "#B3");
948 Assert.IsNotNull (ex.Message, "#B4");
949 Assert.AreEqual ("offset", ex.ParamName, "#B5");
960 [Category ("NotWorking")]
961 public void Read_Stream_Closed ()
963 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
964 string url = "http://" + ep.ToString () + "/test/";
966 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
969 req = (HttpWebRequest) WebRequest.Create (url);
972 req.ReadWriteTimeout = 2000;
973 req.KeepAlive = false;
975 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
976 Stream rs = resp.GetResponseStream ();
979 rs.Read (new byte [0], 0, 0);
981 } catch (WebException ex) {
982 // The request was aborted: The connection was closed unexpectedly
983 Assert.AreEqual (typeof (WebException), ex.GetType (), "#A2");
984 Assert.IsNull (ex.InnerException, "#A3");
985 Assert.IsNotNull (ex.Message, "#A4");
986 Assert.IsNull (ex.Response, "#A5");
987 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#A6");
994 req = (HttpWebRequest) WebRequest.Create (url);
997 req.ReadWriteTimeout = 2000;
998 req.KeepAlive = false;
1000 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1001 Stream rs = resp.GetResponseStream ();
1002 byte [] buffer = new byte [24];
1003 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
1006 rs.Read (new byte [0], 0, 0);
1007 Assert.Fail ("#B1");
1008 } catch (WebException ex) {
1009 // The request was aborted: The connection was closed unexpectedly
1010 Assert.AreEqual (typeof (WebException), ex.GetType (), "#B2");
1011 Assert.IsNull (ex.InnerException, "#B3");
1012 Assert.IsNotNull (ex.Message, "#B4");
1013 Assert.IsNull (ex.Response, "#B5");
1014 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#B6");
1024 public void ReadTimeout ()
1026 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1027 string url = "http://" + ep.ToString () + "/test/";
1029 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1030 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1033 req.ReadWriteTimeout = 2000;
1034 req.KeepAlive = false;
1036 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1037 Stream rs = resp.GetResponseStream ();
1039 Assert.AreEqual (2000, rs.ReadTimeout, "#1");
1041 Assert.AreEqual (2000, rs.ReadTimeout, "#2");
1051 public void Write ()
1053 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1054 string url = "http://" + ep.ToString () + "/test/";
1056 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1057 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1060 req.ReadWriteTimeout = 2000;
1061 req.KeepAlive = false;
1063 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1064 Stream rs = resp.GetResponseStream ();
1065 byte [] buffer = new byte [5];
1067 rs.Write (buffer, 0, buffer.Length);
1069 } catch (NotSupportedException ex) {
1070 // The stream does not support writing
1071 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
1072 Assert.IsNull (ex.InnerException, "#3");
1073 Assert.IsNotNull (ex.Message, "#4");
1083 public void WriteTimeout ()
1085 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1086 string url = "http://" + ep.ToString () + "/test/";
1088 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1089 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1092 req.ReadWriteTimeout = 2000;
1093 req.KeepAlive = false;
1095 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1096 Stream rs = resp.GetResponseStream ();
1098 Assert.AreEqual (2000, rs.WriteTimeout, "#1");
1100 Assert.AreEqual (2000, rs.WriteTimeout, "#2");