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 public void CharacterSet_Disposed ()
29 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
30 string url = "http://" + ep.ToString () + "/test/";
32 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
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");
55 public void Close_Disposed ()
57 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
58 string url = "http://" + ep.ToString () + "/test/";
60 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
61 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
64 req.ReadWriteTimeout = 2000;
65 req.KeepAlive = false;
67 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
68 ((IDisposable) resp).Dispose ();
74 public void ContentEncoding_Disposed ()
76 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
77 string url = "http://" + ep.ToString () + "/test/";
79 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
80 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
83 req.ReadWriteTimeout = 2000;
84 req.KeepAlive = false;
86 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
87 ((IDisposable) resp).Dispose ();
90 string enc = resp.ContentEncoding;
91 Assert.Fail ("#1:" + enc);
92 } catch (ObjectDisposedException ex) {
93 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
94 Assert.IsNull (ex.InnerException, "#3");
95 Assert.IsNotNull (ex.Message, "#4");
96 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
102 public void ContentLength_Disposed ()
104 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
105 string url = "http://" + ep.ToString () + "/test/";
107 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
108 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
111 req.ReadWriteTimeout = 2000;
112 req.KeepAlive = false;
114 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
115 ((IDisposable) resp).Dispose ();
117 Assert.AreEqual (9, resp.ContentLength);
122 public void ContentType_Disposed ()
124 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
125 string url = "http://" + ep.ToString () + "/test/";
127 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
128 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
131 req.ReadWriteTimeout = 2000;
132 req.KeepAlive = false;
134 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
135 ((IDisposable) resp).Dispose ();
138 string contentType = resp.ContentType;
139 Assert.Fail ("#1:" + contentType);
140 } catch (ObjectDisposedException ex) {
141 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
142 Assert.IsNull (ex.InnerException, "#3");
143 Assert.IsNotNull (ex.Message, "#4");
144 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
150 public void Cookies_Disposed ()
152 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
153 string url = "http://" + ep.ToString () + "/test/";
155 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
156 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
159 req.ReadWriteTimeout = 2000;
160 req.KeepAlive = false;
162 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
163 ((IDisposable) resp).Dispose ();
166 CookieCollection cookies = resp.Cookies;
167 Assert.Fail ("#A1:" + cookies);
168 } catch (ObjectDisposedException ex) {
169 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#A2");
170 Assert.IsNull (ex.InnerException, "#A3");
171 Assert.IsNotNull (ex.Message, "#A4");
172 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#A5");
176 resp.Cookies = new CookieCollection ();
178 } catch (ObjectDisposedException ex) {
179 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#B2");
180 Assert.IsNull (ex.InnerException, "#B3");
181 Assert.IsNotNull (ex.Message, "#B4");
182 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#B5");
188 public void GetResponseHeader_Disposed ()
190 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
191 string url = "http://" + ep.ToString () + "/test/";
193 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
194 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
197 req.ReadWriteTimeout = 2000;
198 req.KeepAlive = false;
200 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
201 ((IDisposable) resp).Dispose ();
204 string server = resp.GetResponseHeader ("Server");
205 Assert.Fail ("#1:" + server);
206 } catch (ObjectDisposedException ex) {
207 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
208 Assert.IsNull (ex.InnerException, "#3");
209 Assert.IsNotNull (ex.Message, "#4");
210 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
216 public void GetResponseStream_Disposed ()
218 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
219 string url = "http://" + ep.ToString () + "/test/";
221 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
222 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
225 req.ReadWriteTimeout = 2000;
226 req.KeepAlive = false;
228 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
229 ((IDisposable) resp).Dispose ();
232 Stream s = resp.GetResponseStream ();
233 Assert.Fail ("#1:" + s);
234 } catch (ObjectDisposedException ex) {
235 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
236 Assert.IsNull (ex.InnerException, "#3");
237 Assert.IsNotNull (ex.Message, "#4");
238 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
244 public void Headers_Disposed ()
246 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
247 string url = "http://" + ep.ToString () + "/test/";
249 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
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 ();
259 WebHeaderCollection headers = resp.Headers;
260 Assert.AreEqual (6, headers.Count, "#1");
261 Assert.AreEqual ("9", headers ["Content-Length"], "#2");
262 Assert.AreEqual ("utf-8", headers ["Content-Encoding"], "#3");
263 Assert.AreEqual ("text/xml; charset=UTF-8", headers ["Content-Type"], "#4");
264 Assert.AreEqual ("Wed, 08 Jan 2003 23:11:55 GMT", headers ["Last-Modified"], "#5");
265 Assert.AreEqual ("UserID=Miguel,StoreProfile=true", headers ["Set-Cookie"], "#6");
266 Assert.AreEqual ("Mono/Test", headers ["Server"], "#7");
271 public void LastModified_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 ();
287 DateTime lastMod = resp.LastModified;
288 Assert.Fail ("#1:" + lastMod);
289 } catch (ObjectDisposedException ex) {
290 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
291 Assert.IsNull (ex.InnerException, "#3");
292 Assert.IsNotNull (ex.Message, "#4");
293 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
299 public void Method_Disposed ()
301 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
302 string url = "http://" + ep.ToString () + "/test/";
304 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
305 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
308 req.ReadWriteTimeout = 2000;
309 req.KeepAlive = false;
311 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
312 ((IDisposable) resp).Dispose ();
315 string method = resp.Method;
316 Assert.Fail ("#1:" + method);
317 } catch (ObjectDisposedException ex) {
318 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
319 Assert.IsNull (ex.InnerException, "#3");
320 Assert.IsNotNull (ex.Message, "#4");
321 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
327 public void ProtocolVersion_Disposed ()
329 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
330 string url = "http://" + ep.ToString () + "/test/";
332 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
333 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
336 req.ReadWriteTimeout = 2000;
337 req.KeepAlive = false;
339 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
340 ((IDisposable) resp).Dispose ();
343 Version protocolVersion = resp.ProtocolVersion;
344 Assert.Fail ("#1:" + protocolVersion);
345 } catch (ObjectDisposedException ex) {
346 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
347 Assert.IsNull (ex.InnerException, "#3");
348 Assert.IsNotNull (ex.Message, "#4");
349 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
355 public void ResponseUri_Disposed ()
357 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
358 string url = "http://" + ep.ToString () + "/test/";
360 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
361 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
364 req.ReadWriteTimeout = 2000;
365 req.KeepAlive = false;
367 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
368 ((IDisposable) resp).Dispose ();
371 Uri respUri = resp.ResponseUri;
372 Assert.Fail ("#1:" + respUri);
373 } catch (ObjectDisposedException ex) {
374 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
375 Assert.IsNull (ex.InnerException, "#3");
376 Assert.IsNotNull (ex.Message, "#4");
377 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
383 public void Server_Disposed ()
385 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
386 string url = "http://" + ep.ToString () + "/test/";
388 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
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 string server = resp.Server;
400 Assert.Fail ("#1:" + server);
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");
411 public void StatusCode_Disposed ()
413 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
414 string url = "http://" + ep.ToString () + "/test/";
416 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
417 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
420 req.ReadWriteTimeout = 2000;
421 req.KeepAlive = false;
423 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
424 ((IDisposable) resp).Dispose ();
426 Assert.AreEqual (HttpStatusCode.OK, resp.StatusCode);
431 public void StatusDescription_Disposed ()
433 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
434 string url = "http://" + ep.ToString () + "/test/";
436 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
437 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
440 req.ReadWriteTimeout = 2000;
441 req.KeepAlive = false;
443 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
444 ((IDisposable) resp).Dispose ();
447 string statusDesc = resp.StatusDescription;
448 Assert.Fail ("#1:" + statusDesc);
449 } catch (ObjectDisposedException ex) {
450 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
451 Assert.IsNull (ex.InnerException, "#3");
452 Assert.IsNotNull (ex.Message, "#4");
453 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
458 internal static byte [] FullResponseHandler (Socket socket)
460 StringWriter sw = new StringWriter ();
462 sw.WriteLine ("HTTP/1.0 200 OK");
463 sw.WriteLine ("Server: Mono/Test");
464 sw.WriteLine ("Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT");
465 sw.WriteLine ("Content-Encoding: " + Encoding.UTF8.WebName);
466 sw.WriteLine ("Content-Type: text/xml; charset=UTF-8");
467 sw.WriteLine ("Content-Length: 9");
468 sw.WriteLine ("Set-Cookie: UserID=Miguel");
469 sw.WriteLine ("Set-Cookie: StoreProfile=true");
471 sw.Write ("<dummy />");
474 return Encoding.UTF8.GetBytes (sw.ToString ());
479 public class HttpResponseStreamTest
482 public void BeginRead_Buffer_Null ()
484 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
485 string url = "http://" + ep.ToString () + "/test/";
487 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
488 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
491 req.ReadWriteTimeout = 2000;
492 req.KeepAlive = false;
494 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
495 Stream rs = resp.GetResponseStream ();
496 byte [] buffer = null;
499 rs.BeginRead (buffer, 0, 0, null, null);
501 } catch (ArgumentNullException ex) {
502 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
503 Assert.IsNull (ex.InnerException, "#A3");
504 Assert.IsNotNull (ex.Message, "#A4");
505 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
508 // read full response
509 buffer = new byte [24];
510 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
514 rs.BeginRead (buffer, 0, 0, null, null);
516 } catch (ArgumentNullException ex) {
517 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
518 Assert.IsNull (ex.InnerException, "#B3");
519 Assert.IsNotNull (ex.Message, "#B4");
520 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
531 public void BeginWrite ()
533 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
534 string url = "http://" + ep.ToString () + "/test/";
536 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
537 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
540 req.ReadWriteTimeout = 2000;
541 req.KeepAlive = false;
543 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
544 Stream rs = resp.GetResponseStream ();
545 byte [] buffer = new byte [5];
547 rs.BeginWrite (buffer, 0, buffer.Length, null, null);
549 } catch (NotSupportedException ex) {
550 // The stream does not support writing
551 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
552 Assert.IsNull (ex.InnerException, "#3");
553 Assert.IsNotNull (ex.Message, "#4");
563 [Category ("NotWorking")]
564 public void CanRead ()
566 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
567 string url = "http://" + ep.ToString () + "/test/";
569 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
570 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
573 req.ReadWriteTimeout = 2000;
574 req.KeepAlive = false;
576 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
577 Stream rs = resp.GetResponseStream ();
579 Assert.IsTrue (rs.CanRead, "#1");
581 Assert.IsFalse (rs.CanRead, "#2");
591 public void CanSeek ()
593 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
594 string url = "http://" + ep.ToString () + "/test/";
596 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
597 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
600 req.ReadWriteTimeout = 2000;
601 req.KeepAlive = false;
603 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
604 Stream rs = resp.GetResponseStream ();
606 Assert.IsFalse (rs.CanSeek, "#1");
608 Assert.IsFalse (rs.CanSeek, "#2");
617 [Test] // bug #324182
618 public void CanTimeout ()
620 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
621 string url = "http://" + ep.ToString () + "/test/";
623 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
624 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
627 req.ReadWriteTimeout = 2000;
628 req.KeepAlive = false;
630 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
631 Stream rs = resp.GetResponseStream ();
633 Assert.IsTrue (rs.CanTimeout, "#1");
635 Assert.IsTrue (rs.CanTimeout, "#2");
645 public void CanWrite ()
647 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
648 string url = "http://" + ep.ToString () + "/test/";
650 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
651 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
654 req.ReadWriteTimeout = 2000;
655 req.KeepAlive = false;
657 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
658 Stream rs = resp.GetResponseStream ();
660 Assert.IsFalse (rs.CanWrite, "#1");
662 Assert.IsFalse (rs.CanWrite, "#2");
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 ();
686 byte [] buffer = new byte [5];
688 Assert.AreEqual (1, rs.Read (buffer, 4, 1), "#A1");
689 Assert.AreEqual (new byte [] { 0x00, 0x00, 0x00, 0x00, 0x3c }, buffer, "#A2");
690 Assert.AreEqual (2, rs.Read (buffer, 0, 2), "#B1");
691 Assert.AreEqual (new byte [] { 0x64, 0x75, 0x00, 0x00, 0x3c }, buffer, "#B2");
692 Assert.AreEqual (4, rs.Read (buffer, 1, 4), "#C1");
693 Assert.AreEqual (new byte [] { 0x64, 0x6d, 0x6d, 0x79, 0x20 }, buffer, "#C2");
694 Assert.AreEqual (2, rs.Read (buffer, 0, 3), "#D1");
695 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#D2");
696 Assert.AreEqual (0, rs.Read (buffer, 1, 3), "#E1");
697 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#E2");
698 Assert.AreEqual (0, rs.Read (buffer, buffer.Length, 0), "#G1");
699 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#G2");
709 public void Read_Buffer_Null ()
711 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
712 string url = "http://" + ep.ToString () + "/test/";
714 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
715 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
718 req.ReadWriteTimeout = 2000;
719 req.KeepAlive = false;
721 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
722 Stream rs = resp.GetResponseStream ();
723 byte [] buffer = null;
726 rs.Read (buffer, 0, 0);
728 } catch (ArgumentNullException ex) {
729 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
730 Assert.IsNull (ex.InnerException, "#A3");
731 Assert.IsNotNull (ex.Message, "#A4");
732 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
735 // read full response
736 buffer = new byte [24];
737 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
741 rs.Read (buffer, 0, 0);
743 } catch (ArgumentNullException ex) {
744 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
745 Assert.IsNull (ex.InnerException, "#B3");
746 Assert.IsNotNull (ex.Message, "#B4");
747 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
758 public void Read_Count_Negative ()
760 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
761 string url = "http://" + ep.ToString () + "/test/";
763 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
764 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
767 req.ReadWriteTimeout = 2000;
768 req.KeepAlive = false;
770 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
771 Stream rs = resp.GetResponseStream ();
772 byte [] buffer = new byte [5];
775 rs.Read (buffer, 1, -1);
777 } catch (ArgumentOutOfRangeException ex) {
778 // Specified argument was out of the range of valid values
779 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
780 Assert.IsNull (ex.InnerException, "#A3");
781 Assert.IsNotNull (ex.Message, "#A4");
782 Assert.AreEqual ("size", ex.ParamName, "#A5");
785 // read full response
786 buffer = new byte [24];
787 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
790 rs.Read (buffer, 1, -1);
792 } catch (ArgumentOutOfRangeException ex) {
793 // Specified argument was out of the range of valid values
794 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
795 Assert.IsNull (ex.InnerException, "#B3");
796 Assert.IsNotNull (ex.Message, "#B4");
797 Assert.AreEqual ("size", ex.ParamName, "#B5");
808 public void Read_Count_Overflow ()
810 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
811 string url = "http://" + ep.ToString () + "/test/";
813 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
814 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
817 req.ReadWriteTimeout = 2000;
818 req.KeepAlive = false;
820 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
821 Stream rs = resp.GetResponseStream ();
822 byte [] buffer = new byte [5];
825 rs.Read (buffer, buffer.Length - 2, 3);
827 } catch (ArgumentOutOfRangeException ex) {
828 // Specified argument was out of the range of valid values
829 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
830 Assert.IsNull (ex.InnerException, "#A3");
831 Assert.IsNotNull (ex.Message, "#A4");
832 Assert.AreEqual ("size", ex.ParamName, "#A5");
835 // read full response
836 buffer = new byte [24];
837 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
840 rs.Read (buffer, buffer.Length - 2, 3);
842 } catch (ArgumentOutOfRangeException ex) {
843 // Specified argument was out of the range of valid values
844 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
845 Assert.IsNull (ex.InnerException, "#B3");
846 Assert.IsNotNull (ex.Message, "#B4");
847 Assert.AreEqual ("size", ex.ParamName, "#B5");
858 public void Read_Offset_Negative ()
860 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
861 string url = "http://" + ep.ToString () + "/test/";
863 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
864 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
867 req.ReadWriteTimeout = 2000;
868 req.KeepAlive = false;
870 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
871 Stream rs = resp.GetResponseStream ();
872 byte [] buffer = new byte [5];
875 rs.Read (buffer, -1, 0);
877 } catch (ArgumentOutOfRangeException ex) {
878 // Specified argument was out of the range of valid values
879 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
880 Assert.IsNull (ex.InnerException, "#A3");
881 Assert.IsNotNull (ex.Message, "#A4");
882 Assert.AreEqual ("offset", ex.ParamName, "#A5");
885 // read full response
886 buffer = new byte [24];
887 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
890 rs.Read (buffer, -1, 0);
892 } catch (ArgumentOutOfRangeException ex) {
893 // Specified argument was out of the range of valid values
894 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
895 Assert.IsNull (ex.InnerException, "#B3");
896 Assert.IsNotNull (ex.Message, "#B4");
897 Assert.AreEqual ("offset", ex.ParamName, "#B5");
908 public void Read_Offset_Overflow ()
910 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
911 string url = "http://" + ep.ToString () + "/test/";
913 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
914 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
917 req.ReadWriteTimeout = 2000;
918 req.KeepAlive = false;
920 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
921 Stream rs = resp.GetResponseStream ();
922 byte [] buffer = new byte [5];
925 rs.Read (buffer, buffer.Length + 1, 0);
927 } catch (ArgumentOutOfRangeException ex) {
928 // Specified argument was out of the range of valid values
929 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
930 Assert.IsNull (ex.InnerException, "#A3");
931 Assert.IsNotNull (ex.Message, "#A4");
932 Assert.AreEqual ("offset", ex.ParamName, "#A5");
935 // read full response
936 buffer = new byte [24];
937 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
940 rs.Read (buffer, buffer.Length + 1, 0);
942 } catch (ArgumentOutOfRangeException ex) {
943 // Specified argument was out of the range of valid values
944 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
945 Assert.IsNull (ex.InnerException, "#B3");
946 Assert.IsNotNull (ex.Message, "#B4");
947 Assert.AreEqual ("offset", ex.ParamName, "#B5");
958 [Category ("NotWorking")]
959 public void Read_Stream_Closed ()
961 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
962 string url = "http://" + ep.ToString () + "/test/";
964 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
967 req = (HttpWebRequest) WebRequest.Create (url);
970 req.ReadWriteTimeout = 2000;
971 req.KeepAlive = false;
973 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
974 Stream rs = resp.GetResponseStream ();
977 rs.Read (new byte [0], 0, 0);
979 } catch (WebException ex) {
980 // The request was aborted: The connection was closed unexpectedly
981 Assert.AreEqual (typeof (WebException), ex.GetType (), "#A2");
982 Assert.IsNull (ex.InnerException, "#A3");
983 Assert.IsNotNull (ex.Message, "#A4");
984 Assert.IsNull (ex.Response, "#A5");
985 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#A6");
992 req = (HttpWebRequest) WebRequest.Create (url);
995 req.ReadWriteTimeout = 2000;
996 req.KeepAlive = false;
998 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
999 Stream rs = resp.GetResponseStream ();
1000 byte [] buffer = new byte [24];
1001 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
1004 rs.Read (new byte [0], 0, 0);
1005 Assert.Fail ("#B1");
1006 } catch (WebException ex) {
1007 // The request was aborted: The connection was closed unexpectedly
1008 Assert.AreEqual (typeof (WebException), ex.GetType (), "#B2");
1009 Assert.IsNull (ex.InnerException, "#B3");
1010 Assert.IsNotNull (ex.Message, "#B4");
1011 Assert.IsNull (ex.Response, "#B5");
1012 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#B6");
1022 public void ReadTimeout ()
1024 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1025 string url = "http://" + ep.ToString () + "/test/";
1027 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1028 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1031 req.ReadWriteTimeout = 2000;
1032 req.KeepAlive = false;
1034 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1035 Stream rs = resp.GetResponseStream ();
1037 Assert.AreEqual (2000, rs.ReadTimeout, "#1");
1039 Assert.AreEqual (2000, rs.ReadTimeout, "#2");
1049 public void Write ()
1051 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1052 string url = "http://" + ep.ToString () + "/test/";
1054 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1055 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1058 req.ReadWriteTimeout = 2000;
1059 req.KeepAlive = false;
1061 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1062 Stream rs = resp.GetResponseStream ();
1063 byte [] buffer = new byte [5];
1065 rs.Write (buffer, 0, buffer.Length);
1067 } catch (NotSupportedException ex) {
1068 // The stream does not support writing
1069 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
1070 Assert.IsNull (ex.InnerException, "#3");
1071 Assert.IsNotNull (ex.Message, "#4");
1081 public void WriteTimeout ()
1083 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1084 string url = "http://" + ep.ToString () + "/test/";
1086 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1087 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1090 req.ReadWriteTimeout = 2000;
1091 req.KeepAlive = false;
1093 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1094 Stream rs = resp.GetResponseStream ();
1096 Assert.AreEqual (2000, rs.WriteTimeout, "#1");
1098 Assert.AreEqual (2000, rs.WriteTimeout, "#2");