2 // HttpWebResponseTest.cs - NUnit Test Cases for System.Net.HttpWebResponse
5 // Gert Driesen (drieseng@users.sourceforge.net)
7 // Copyright (c) 2008 Gert Driesen
11 using System.Globalization;
14 using System.Net.Sockets;
17 using NUnit.Framework;
19 namespace MonoTests.System.Net
22 public class HttpWebResponseTest
25 public void CharacterSet_Disposed ()
27 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
28 string url = "http://" + ep.ToString () + "/test/";
30 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
33 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
36 req.ReadWriteTimeout = 2000;
37 req.KeepAlive = false;
39 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
40 ((IDisposable) resp).Dispose ();
43 string charset = resp.CharacterSet;
44 Assert.Fail ("#1:" + charset);
45 } catch (ObjectDisposedException ex) {
46 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
47 Assert.IsNull (ex.InnerException, "#3");
48 Assert.IsNotNull (ex.Message, "#4");
49 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
55 public void Close_Disposed ()
57 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
58 string url = "http://" + ep.ToString () + "/test/";
60 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
63 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
66 req.ReadWriteTimeout = 2000;
67 req.KeepAlive = false;
69 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
70 ((IDisposable) resp).Dispose ();
76 public void ContentEncoding_Disposed ()
78 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
79 string url = "http://" + ep.ToString () + "/test/";
81 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
84 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
87 req.ReadWriteTimeout = 2000;
88 req.KeepAlive = false;
90 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
91 ((IDisposable) resp).Dispose ();
94 string enc = resp.ContentEncoding;
95 Assert.Fail ("#1:" + enc);
96 } catch (ObjectDisposedException ex) {
97 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
98 Assert.IsNull (ex.InnerException, "#3");
99 Assert.IsNotNull (ex.Message, "#4");
100 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
106 public void ContentLength_Disposed ()
108 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
109 string url = "http://" + ep.ToString () + "/test/";
111 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
114 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
117 req.ReadWriteTimeout = 2000;
118 req.KeepAlive = false;
120 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
121 ((IDisposable) resp).Dispose ();
123 Assert.AreEqual (9, resp.ContentLength);
128 public void ContentType_Disposed ()
130 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
131 string url = "http://" + ep.ToString () + "/test/";
133 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
136 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
139 req.ReadWriteTimeout = 2000;
140 req.KeepAlive = false;
142 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
143 ((IDisposable) resp).Dispose ();
146 string contentType = resp.ContentType;
147 Assert.Fail ("#1:" + contentType);
148 } catch (ObjectDisposedException ex) {
149 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
150 Assert.IsNull (ex.InnerException, "#3");
151 Assert.IsNotNull (ex.Message, "#4");
152 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
158 public void Cookies_Disposed ()
160 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
161 string url = "http://" + ep.ToString () + "/test/";
163 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
166 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
169 req.ReadWriteTimeout = 2000;
170 req.KeepAlive = false;
172 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
173 ((IDisposable) resp).Dispose ();
176 CookieCollection cookies = resp.Cookies;
177 Assert.Fail ("#A1:" + cookies);
178 } catch (ObjectDisposedException ex) {
179 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#A2");
180 Assert.IsNull (ex.InnerException, "#A3");
181 Assert.IsNotNull (ex.Message, "#A4");
182 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#A5");
186 resp.Cookies = new CookieCollection ();
188 } catch (ObjectDisposedException ex) {
189 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#B2");
190 Assert.IsNull (ex.InnerException, "#B3");
191 Assert.IsNotNull (ex.Message, "#B4");
192 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#B5");
198 public void GetResponseHeader_Disposed ()
200 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
201 string url = "http://" + ep.ToString () + "/test/";
203 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
206 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
209 req.ReadWriteTimeout = 2000;
210 req.KeepAlive = false;
212 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
213 ((IDisposable) resp).Dispose ();
216 string server = resp.GetResponseHeader ("Server");
217 Assert.Fail ("#1:" + server);
218 } catch (ObjectDisposedException ex) {
219 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
220 Assert.IsNull (ex.InnerException, "#3");
221 Assert.IsNotNull (ex.Message, "#4");
222 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
228 public void GetResponseStream_Disposed ()
230 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
231 string url = "http://" + ep.ToString () + "/test/";
233 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
236 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
239 req.ReadWriteTimeout = 2000;
240 req.KeepAlive = false;
242 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
243 ((IDisposable) resp).Dispose ();
246 Stream s = resp.GetResponseStream ();
247 Assert.Fail ("#1:" + s);
248 } catch (ObjectDisposedException ex) {
249 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
250 Assert.IsNull (ex.InnerException, "#3");
251 Assert.IsNotNull (ex.Message, "#4");
252 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
258 public void Headers_Disposed ()
260 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
261 string url = "http://" + ep.ToString () + "/test/";
263 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
266 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
269 req.ReadWriteTimeout = 2000;
270 req.KeepAlive = false;
272 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
273 ((IDisposable) resp).Dispose ();
276 WebHeaderCollection headers = resp.Headers;
277 Assert.AreEqual (6, headers.Count, "#1");
278 Assert.AreEqual ("9", headers ["Content-Length"], "#2");
279 Assert.AreEqual ("utf-8", headers ["Content-Encoding"], "#3");
280 Assert.AreEqual ("text/xml; charset=UTF-8", headers ["Content-Type"], "#4");
281 Assert.AreEqual ("Wed, 08 Jan 2003 23:11:55 GMT", headers ["Last-Modified"], "#5");
282 Assert.AreEqual ("UserID=Miguel,StoreProfile=true", headers ["Set-Cookie"], "#6");
283 Assert.AreEqual ("Mono/Test", headers ["Server"], "#7");
286 WebHeaderCollection headers = resp.Headers;
287 Assert.Fail ("#1:" + headers);
288 } catch (ObjectDisposedException ex) {
289 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
290 Assert.IsNull (ex.InnerException, "#3");
291 Assert.IsNotNull (ex.Message, "#4");
292 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
299 public void LastModified_Disposed ()
301 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
302 string url = "http://" + ep.ToString () + "/test/";
304 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
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 public void Method_Disposed ()
331 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
332 string url = "http://" + ep.ToString () + "/test/";
334 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
337 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
340 req.ReadWriteTimeout = 2000;
341 req.KeepAlive = false;
343 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
344 ((IDisposable) resp).Dispose ();
347 string method = resp.Method;
348 Assert.Fail ("#1:" + method);
349 } catch (ObjectDisposedException ex) {
350 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
351 Assert.IsNull (ex.InnerException, "#3");
352 Assert.IsNotNull (ex.Message, "#4");
353 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
359 public void ProtocolVersion_Disposed ()
361 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
362 string url = "http://" + ep.ToString () + "/test/";
364 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
367 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
370 req.ReadWriteTimeout = 2000;
371 req.KeepAlive = false;
373 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
374 ((IDisposable) resp).Dispose ();
377 Version protocolVersion = resp.ProtocolVersion;
378 Assert.Fail ("#1:" + protocolVersion);
379 } catch (ObjectDisposedException ex) {
380 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
381 Assert.IsNull (ex.InnerException, "#3");
382 Assert.IsNotNull (ex.Message, "#4");
383 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
389 public void ResponseUri_Disposed ()
391 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
392 string url = "http://" + ep.ToString () + "/test/";
394 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
397 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
400 req.ReadWriteTimeout = 2000;
401 req.KeepAlive = false;
403 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
404 ((IDisposable) resp).Dispose ();
407 Uri respUri = resp.ResponseUri;
408 Assert.Fail ("#1:" + respUri);
409 } catch (ObjectDisposedException ex) {
410 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
411 Assert.IsNull (ex.InnerException, "#3");
412 Assert.IsNotNull (ex.Message, "#4");
413 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
419 public void Server_Disposed ()
421 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
422 string url = "http://" + ep.ToString () + "/test/";
424 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
427 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
430 req.ReadWriteTimeout = 2000;
431 req.KeepAlive = false;
433 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
434 ((IDisposable) resp).Dispose ();
437 string server = resp.Server;
438 Assert.Fail ("#1:" + server);
439 } catch (ObjectDisposedException ex) {
440 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
441 Assert.IsNull (ex.InnerException, "#3");
442 Assert.IsNotNull (ex.Message, "#4");
443 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
449 public void StatusCode_Disposed ()
451 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
452 string url = "http://" + ep.ToString () + "/test/";
454 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
457 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
460 req.ReadWriteTimeout = 2000;
461 req.KeepAlive = false;
463 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
464 ((IDisposable) resp).Dispose ();
466 Assert.AreEqual (HttpStatusCode.OK, resp.StatusCode);
471 public void StatusDescription_Disposed ()
473 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
474 string url = "http://" + ep.ToString () + "/test/";
476 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
479 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
482 req.ReadWriteTimeout = 2000;
483 req.KeepAlive = false;
485 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
486 ((IDisposable) resp).Dispose ();
489 string statusDesc = resp.StatusDescription;
490 Assert.Fail ("#1:" + statusDesc);
491 } catch (ObjectDisposedException ex) {
492 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
493 Assert.IsNull (ex.InnerException, "#3");
494 Assert.IsNotNull (ex.Message, "#4");
495 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
500 internal static byte [] FullResponseHandler (Socket socket)
502 StringWriter sw = new StringWriter ();
504 sw.WriteLine ("HTTP/1.0 200 OK");
505 sw.WriteLine ("Server: Mono/Test");
506 sw.WriteLine ("Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT");
507 sw.WriteLine ("Content-Encoding: " + Encoding.UTF8.WebName);
508 sw.WriteLine ("Content-Type: text/xml; charset=UTF-8");
509 sw.WriteLine ("Content-Length: 9");
510 sw.WriteLine ("Set-Cookie: UserID=Miguel");
511 sw.WriteLine ("Set-Cookie: StoreProfile=true");
513 sw.Write ("<dummy />");
516 return Encoding.UTF8.GetBytes (sw.ToString ());
521 public class HttpResponseStreamTest
524 public void BeginRead_Buffer_Null ()
526 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
527 string url = "http://" + ep.ToString () + "/test/";
529 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
532 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
535 req.ReadWriteTimeout = 2000;
536 req.KeepAlive = false;
538 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
539 Stream rs = resp.GetResponseStream ();
540 byte [] buffer = null;
543 rs.BeginRead (buffer, 0, 0, null, null);
545 } catch (ArgumentNullException ex) {
546 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
547 Assert.IsNull (ex.InnerException, "#A3");
548 Assert.IsNotNull (ex.Message, "#A4");
549 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
552 // read full response
553 buffer = new byte [24];
554 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
558 rs.BeginRead (buffer, 0, 0, null, null);
560 } catch (ArgumentNullException ex) {
561 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
562 Assert.IsNull (ex.InnerException, "#B3");
563 Assert.IsNotNull (ex.Message, "#B4");
564 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
575 public void BeginWrite ()
577 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
578 string url = "http://" + ep.ToString () + "/test/";
580 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
583 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
586 req.ReadWriteTimeout = 2000;
587 req.KeepAlive = false;
589 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
590 Stream rs = resp.GetResponseStream ();
591 byte [] buffer = new byte [5];
593 rs.BeginWrite (buffer, 0, buffer.Length, null, null);
595 } catch (NotSupportedException ex) {
596 // The stream does not support writing
597 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
598 Assert.IsNull (ex.InnerException, "#3");
599 Assert.IsNotNull (ex.Message, "#4");
609 [Category ("NotWorking")]
610 public void CanRead ()
612 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
613 string url = "http://" + ep.ToString () + "/test/";
615 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
618 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
621 req.ReadWriteTimeout = 2000;
622 req.KeepAlive = false;
624 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
625 Stream rs = resp.GetResponseStream ();
627 Assert.IsTrue (rs.CanRead, "#1");
629 Assert.IsFalse (rs.CanRead, "#2");
639 public void CanSeek ()
641 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
642 string url = "http://" + ep.ToString () + "/test/";
644 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
647 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
650 req.ReadWriteTimeout = 2000;
651 req.KeepAlive = false;
653 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
654 Stream rs = resp.GetResponseStream ();
656 Assert.IsFalse (rs.CanSeek, "#1");
658 Assert.IsFalse (rs.CanSeek, "#2");
669 public void CanTimeout ()
671 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
672 string url = "http://" + ep.ToString () + "/test/";
674 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
677 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
680 req.ReadWriteTimeout = 2000;
681 req.KeepAlive = false;
683 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
684 Stream rs = resp.GetResponseStream ();
686 Assert.IsTrue (rs.CanTimeout, "#1");
688 Assert.IsTrue (rs.CanTimeout, "#2");
699 public void CanWrite ()
701 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
702 string url = "http://" + ep.ToString () + "/test/";
704 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
707 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
710 req.ReadWriteTimeout = 2000;
711 req.KeepAlive = false;
713 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
714 Stream rs = resp.GetResponseStream ();
716 Assert.IsFalse (rs.CanWrite, "#1");
718 Assert.IsFalse (rs.CanWrite, "#2");
730 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
731 string url = "http://" + ep.ToString () + "/test/";
733 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
736 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
739 req.ReadWriteTimeout = 2000;
740 req.KeepAlive = false;
742 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
743 Stream rs = resp.GetResponseStream ();
744 byte [] buffer = new byte [5];
746 Assert.AreEqual (1, rs.Read (buffer, 4, 1), "#A1");
747 Assert.AreEqual (new byte [] { 0x00, 0x00, 0x00, 0x00, 0x3c }, buffer, "#A2");
748 Assert.AreEqual (2, rs.Read (buffer, 0, 2), "#B1");
749 Assert.AreEqual (new byte [] { 0x64, 0x75, 0x00, 0x00, 0x3c }, buffer, "#B2");
750 Assert.AreEqual (4, rs.Read (buffer, 1, 4), "#C1");
751 Assert.AreEqual (new byte [] { 0x64, 0x6d, 0x6d, 0x79, 0x20 }, buffer, "#C2");
752 Assert.AreEqual (2, rs.Read (buffer, 0, 3), "#D1");
753 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#D2");
754 Assert.AreEqual (0, rs.Read (buffer, 1, 3), "#E1");
755 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#E2");
756 Assert.AreEqual (0, rs.Read (buffer, buffer.Length, 0), "#G1");
757 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#G2");
767 [Category ("NotWorking")]
768 public void Read_Buffer_Null ()
770 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
771 string url = "http://" + ep.ToString () + "/test/";
773 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
776 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
779 req.ReadWriteTimeout = 2000;
780 req.KeepAlive = false;
782 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
783 Stream rs = resp.GetResponseStream ();
784 byte [] buffer = null;
787 rs.Read (buffer, 0, 0);
789 } catch (ArgumentNullException ex) {
790 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
791 Assert.IsNull (ex.InnerException, "#A3");
792 Assert.IsNotNull (ex.Message, "#A4");
793 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
796 // read full response
797 buffer = new byte [24];
798 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
802 rs.Read (buffer, 0, 0);
804 } catch (ArgumentNullException ex) {
805 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
806 Assert.IsNull (ex.InnerException, "#B3");
807 Assert.IsNotNull (ex.Message, "#B4");
808 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
819 [Category ("NotWorking")]
820 public void Read_Count_Negative ()
822 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
823 string url = "http://" + ep.ToString () + "/test/";
825 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
828 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
831 req.ReadWriteTimeout = 2000;
832 req.KeepAlive = false;
834 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
835 Stream rs = resp.GetResponseStream ();
836 byte [] buffer = new byte [5];
839 rs.Read (buffer, 1, -1);
841 } catch (ArgumentOutOfRangeException ex) {
842 // Specified argument was out of the range of valid values
843 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
844 Assert.IsNull (ex.InnerException, "#A3");
845 Assert.IsNotNull (ex.Message, "#A4");
846 Assert.AreEqual ("size", ex.ParamName, "#A5");
849 // read full response
850 buffer = new byte [24];
851 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
854 rs.Read (buffer, 1, -1);
856 } catch (ArgumentOutOfRangeException ex) {
857 // Specified argument was out of the range of valid values
858 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
859 Assert.IsNull (ex.InnerException, "#B3");
860 Assert.IsNotNull (ex.Message, "#B4");
861 Assert.AreEqual ("size", ex.ParamName, "#B5");
872 [Category ("NotWorking")]
873 public void Read_Count_Overflow ()
875 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
876 string url = "http://" + ep.ToString () + "/test/";
878 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
881 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
884 req.ReadWriteTimeout = 2000;
885 req.KeepAlive = false;
887 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
888 Stream rs = resp.GetResponseStream ();
889 byte [] buffer = new byte [5];
892 rs.Read (buffer, buffer.Length - 2, 3);
894 } catch (ArgumentOutOfRangeException ex) {
895 // Specified argument was out of the range of valid values
896 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
897 Assert.IsNull (ex.InnerException, "#A3");
898 Assert.IsNotNull (ex.Message, "#A4");
899 Assert.AreEqual ("size", ex.ParamName, "#A5");
902 // read full response
903 buffer = new byte [24];
904 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
907 rs.Read (buffer, buffer.Length - 2, 3);
909 } catch (ArgumentOutOfRangeException ex) {
910 // Specified argument was out of the range of valid values
911 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
912 Assert.IsNull (ex.InnerException, "#B3");
913 Assert.IsNotNull (ex.Message, "#B4");
914 Assert.AreEqual ("size", ex.ParamName, "#B5");
925 [Category ("NotWorking")]
926 public void Read_Offset_Negative ()
928 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
929 string url = "http://" + ep.ToString () + "/test/";
931 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
934 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
937 req.ReadWriteTimeout = 2000;
938 req.KeepAlive = false;
940 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
941 Stream rs = resp.GetResponseStream ();
942 byte [] buffer = new byte [5];
945 rs.Read (buffer, -1, 0);
947 } catch (ArgumentOutOfRangeException ex) {
948 // Specified argument was out of the range of valid values
949 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
950 Assert.IsNull (ex.InnerException, "#A3");
951 Assert.IsNotNull (ex.Message, "#A4");
952 Assert.AreEqual ("offset", ex.ParamName, "#A5");
955 // read full response
956 buffer = new byte [24];
957 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
960 rs.Read (buffer, -1, 0);
962 } catch (ArgumentOutOfRangeException ex) {
963 // Specified argument was out of the range of valid values
964 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
965 Assert.IsNull (ex.InnerException, "#B3");
966 Assert.IsNotNull (ex.Message, "#B4");
967 Assert.AreEqual ("offset", ex.ParamName, "#B5");
978 [Category ("NotWorking")]
979 public void Read_Offset_Overflow ()
981 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
982 string url = "http://" + ep.ToString () + "/test/";
984 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
987 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
990 req.ReadWriteTimeout = 2000;
991 req.KeepAlive = false;
993 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
994 Stream rs = resp.GetResponseStream ();
995 byte [] buffer = new byte [5];
998 rs.Read (buffer, buffer.Length + 1, 0);
1000 } catch (ArgumentOutOfRangeException ex) {
1001 // Specified argument was out of the range of valid values
1002 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
1003 Assert.IsNull (ex.InnerException, "#A3");
1004 Assert.IsNotNull (ex.Message, "#A4");
1005 Assert.AreEqual ("offset", ex.ParamName, "#A5");
1008 // read full response
1009 buffer = new byte [24];
1010 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
1013 rs.Read (buffer, buffer.Length + 1, 0);
1014 Assert.Fail ("#B1");
1015 } catch (ArgumentOutOfRangeException ex) {
1016 // Specified argument was out of the range of valid values
1017 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
1018 Assert.IsNull (ex.InnerException, "#B3");
1019 Assert.IsNotNull (ex.Message, "#B4");
1020 Assert.AreEqual ("offset", ex.ParamName, "#B5");
1031 [Category ("NotWorking")]
1032 public void Read_Stream_Closed ()
1034 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
1035 string url = "http://" + ep.ToString () + "/test/";
1037 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1042 req = (HttpWebRequest) WebRequest.Create (url);
1045 req.ReadWriteTimeout = 2000;
1046 req.KeepAlive = false;
1048 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1049 Stream rs = resp.GetResponseStream ();
1052 rs.Read (new byte [0], 0, 0);
1053 Assert.Fail ("#A1");
1054 } catch (WebException ex) {
1055 // The request was aborted: The connection was closed unexpectedly
1056 Assert.AreEqual (typeof (WebException), ex.GetType (), "#A2");
1057 Assert.IsNull (ex.InnerException, "#A3");
1058 Assert.IsNotNull (ex.Message, "#A4");
1059 Assert.IsNull (ex.Response, "#A5");
1060 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#A6");
1067 req = (HttpWebRequest) WebRequest.Create (url);
1070 req.ReadWriteTimeout = 2000;
1071 req.KeepAlive = false;
1073 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1074 Stream rs = resp.GetResponseStream ();
1075 byte [] buffer = new byte [24];
1076 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
1079 rs.Read (new byte [0], 0, 0);
1080 Assert.Fail ("#B1");
1081 } catch (WebException ex) {
1082 // The request was aborted: The connection was closed unexpectedly
1083 Assert.AreEqual (typeof (WebException), ex.GetType (), "#B2");
1084 Assert.IsNull (ex.InnerException, "#B3");
1085 Assert.IsNotNull (ex.Message, "#B4");
1086 Assert.IsNull (ex.Response, "#B5");
1087 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#B6");
1098 public void ReadTimeout ()
1100 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
1101 string url = "http://" + ep.ToString () + "/test/";
1103 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1106 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1109 req.ReadWriteTimeout = 2000;
1110 req.KeepAlive = false;
1112 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1113 Stream rs = resp.GetResponseStream ();
1115 Assert.AreEqual (2000, rs.ReadTimeout, "#1");
1117 Assert.AreEqual (2000, rs.ReadTimeout, "#2");
1128 public void Write ()
1130 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
1131 string url = "http://" + ep.ToString () + "/test/";
1133 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
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 ();
1144 byte [] buffer = new byte [5];
1146 rs.Write (buffer, 0, buffer.Length);
1148 } catch (NotSupportedException ex) {
1149 // The stream does not support writing
1150 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
1151 Assert.IsNull (ex.InnerException, "#3");
1152 Assert.IsNotNull (ex.Message, "#4");
1163 public void WriteTimeout ()
1165 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
1166 string url = "http://" + ep.ToString () + "/test/";
1168 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1171 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1174 req.ReadWriteTimeout = 2000;
1175 req.KeepAlive = false;
1177 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1178 Stream rs = resp.GetResponseStream ();
1180 Assert.AreEqual (2000, rs.WriteTimeout, "#1");
1182 Assert.AreEqual (2000, rs.WriteTimeout, "#2");