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");
668 [Test] // bug #324182
670 [Category ("NotWorking")]
672 public void CanTimeout ()
674 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
675 string url = "http://" + ep.ToString () + "/test/";
677 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
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 ();
689 Assert.IsTrue (rs.CanTimeout, "#1");
691 Assert.IsTrue (rs.CanTimeout, "#2");
702 public void CanWrite ()
704 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
705 string url = "http://" + ep.ToString () + "/test/";
707 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
710 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
713 req.ReadWriteTimeout = 2000;
714 req.KeepAlive = false;
716 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
717 Stream rs = resp.GetResponseStream ();
719 Assert.IsFalse (rs.CanWrite, "#1");
721 Assert.IsFalse (rs.CanWrite, "#2");
733 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
734 string url = "http://" + ep.ToString () + "/test/";
736 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
739 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
742 req.ReadWriteTimeout = 2000;
743 req.KeepAlive = false;
745 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
746 Stream rs = resp.GetResponseStream ();
747 byte [] buffer = new byte [5];
749 Assert.AreEqual (1, rs.Read (buffer, 4, 1), "#A1");
750 Assert.AreEqual (new byte [] { 0x00, 0x00, 0x00, 0x00, 0x3c }, buffer, "#A2");
751 Assert.AreEqual (2, rs.Read (buffer, 0, 2), "#B1");
752 Assert.AreEqual (new byte [] { 0x64, 0x75, 0x00, 0x00, 0x3c }, buffer, "#B2");
753 Assert.AreEqual (4, rs.Read (buffer, 1, 4), "#C1");
754 Assert.AreEqual (new byte [] { 0x64, 0x6d, 0x6d, 0x79, 0x20 }, buffer, "#C2");
755 Assert.AreEqual (2, rs.Read (buffer, 0, 3), "#D1");
756 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#D2");
757 Assert.AreEqual (0, rs.Read (buffer, 1, 3), "#E1");
758 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#E2");
759 Assert.AreEqual (0, rs.Read (buffer, buffer.Length, 0), "#G1");
760 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#G2");
770 public void Read_Buffer_Null ()
772 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
773 string url = "http://" + ep.ToString () + "/test/";
775 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
778 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
781 req.ReadWriteTimeout = 2000;
782 req.KeepAlive = false;
784 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
785 Stream rs = resp.GetResponseStream ();
786 byte [] buffer = null;
789 rs.Read (buffer, 0, 0);
791 } catch (ArgumentNullException ex) {
792 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
793 Assert.IsNull (ex.InnerException, "#A3");
794 Assert.IsNotNull (ex.Message, "#A4");
795 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
798 // read full response
799 buffer = new byte [24];
800 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
804 rs.Read (buffer, 0, 0);
806 } catch (ArgumentNullException ex) {
807 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
808 Assert.IsNull (ex.InnerException, "#B3");
809 Assert.IsNotNull (ex.Message, "#B4");
810 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
821 public void Read_Count_Negative ()
823 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
824 string url = "http://" + ep.ToString () + "/test/";
826 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
829 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
832 req.ReadWriteTimeout = 2000;
833 req.KeepAlive = false;
835 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
836 Stream rs = resp.GetResponseStream ();
837 byte [] buffer = new byte [5];
840 rs.Read (buffer, 1, -1);
842 } catch (ArgumentOutOfRangeException ex) {
843 // Specified argument was out of the range of valid values
844 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
845 Assert.IsNull (ex.InnerException, "#A3");
846 Assert.IsNotNull (ex.Message, "#A4");
847 Assert.AreEqual ("size", ex.ParamName, "#A5");
850 // read full response
851 buffer = new byte [24];
852 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
855 rs.Read (buffer, 1, -1);
857 } catch (ArgumentOutOfRangeException ex) {
858 // Specified argument was out of the range of valid values
859 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
860 Assert.IsNull (ex.InnerException, "#B3");
861 Assert.IsNotNull (ex.Message, "#B4");
862 Assert.AreEqual ("size", ex.ParamName, "#B5");
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 public void Read_Offset_Negative ()
927 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
928 string url = "http://" + ep.ToString () + "/test/";
930 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
933 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
936 req.ReadWriteTimeout = 2000;
937 req.KeepAlive = false;
939 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
940 Stream rs = resp.GetResponseStream ();
941 byte [] buffer = new byte [5];
944 rs.Read (buffer, -1, 0);
946 } catch (ArgumentOutOfRangeException ex) {
947 // Specified argument was out of the range of valid values
948 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
949 Assert.IsNull (ex.InnerException, "#A3");
950 Assert.IsNotNull (ex.Message, "#A4");
951 Assert.AreEqual ("offset", ex.ParamName, "#A5");
954 // read full response
955 buffer = new byte [24];
956 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
959 rs.Read (buffer, -1, 0);
961 } catch (ArgumentOutOfRangeException ex) {
962 // Specified argument was out of the range of valid values
963 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
964 Assert.IsNull (ex.InnerException, "#B3");
965 Assert.IsNotNull (ex.Message, "#B4");
966 Assert.AreEqual ("offset", ex.ParamName, "#B5");
977 public void Read_Offset_Overflow ()
979 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
980 string url = "http://" + ep.ToString () + "/test/";
982 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
985 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
988 req.ReadWriteTimeout = 2000;
989 req.KeepAlive = false;
991 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
992 Stream rs = resp.GetResponseStream ();
993 byte [] buffer = new byte [5];
996 rs.Read (buffer, buffer.Length + 1, 0);
998 } catch (ArgumentOutOfRangeException ex) {
999 // Specified argument was out of the range of valid values
1000 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
1001 Assert.IsNull (ex.InnerException, "#A3");
1002 Assert.IsNotNull (ex.Message, "#A4");
1003 Assert.AreEqual ("offset", ex.ParamName, "#A5");
1006 // read full response
1007 buffer = new byte [24];
1008 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
1011 rs.Read (buffer, buffer.Length + 1, 0);
1012 Assert.Fail ("#B1");
1013 } catch (ArgumentOutOfRangeException ex) {
1014 // Specified argument was out of the range of valid values
1015 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
1016 Assert.IsNull (ex.InnerException, "#B3");
1017 Assert.IsNotNull (ex.Message, "#B4");
1018 Assert.AreEqual ("offset", ex.ParamName, "#B5");
1029 [Category ("NotWorking")]
1030 public void Read_Stream_Closed ()
1032 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
1033 string url = "http://" + ep.ToString () + "/test/";
1035 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1040 req = (HttpWebRequest) WebRequest.Create (url);
1043 req.ReadWriteTimeout = 2000;
1044 req.KeepAlive = false;
1046 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1047 Stream rs = resp.GetResponseStream ();
1050 rs.Read (new byte [0], 0, 0);
1051 Assert.Fail ("#A1");
1052 } catch (WebException ex) {
1053 // The request was aborted: The connection was closed unexpectedly
1054 Assert.AreEqual (typeof (WebException), ex.GetType (), "#A2");
1055 Assert.IsNull (ex.InnerException, "#A3");
1056 Assert.IsNotNull (ex.Message, "#A4");
1057 Assert.IsNull (ex.Response, "#A5");
1058 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#A6");
1065 req = (HttpWebRequest) WebRequest.Create (url);
1068 req.ReadWriteTimeout = 2000;
1069 req.KeepAlive = false;
1071 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1072 Stream rs = resp.GetResponseStream ();
1073 byte [] buffer = new byte [24];
1074 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
1077 rs.Read (new byte [0], 0, 0);
1078 Assert.Fail ("#B1");
1079 } catch (WebException ex) {
1080 // The request was aborted: The connection was closed unexpectedly
1081 Assert.AreEqual (typeof (WebException), ex.GetType (), "#B2");
1082 Assert.IsNull (ex.InnerException, "#B3");
1083 Assert.IsNotNull (ex.Message, "#B4");
1084 Assert.IsNull (ex.Response, "#B5");
1085 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#B6");
1096 public void ReadTimeout ()
1098 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
1099 string url = "http://" + ep.ToString () + "/test/";
1101 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1104 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1107 req.ReadWriteTimeout = 2000;
1108 req.KeepAlive = false;
1110 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1111 Stream rs = resp.GetResponseStream ();
1113 Assert.AreEqual (2000, rs.ReadTimeout, "#1");
1115 Assert.AreEqual (2000, rs.ReadTimeout, "#2");
1126 public void Write ()
1128 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
1129 string url = "http://" + ep.ToString () + "/test/";
1131 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1134 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1137 req.ReadWriteTimeout = 2000;
1138 req.KeepAlive = false;
1140 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1141 Stream rs = resp.GetResponseStream ();
1142 byte [] buffer = new byte [5];
1144 rs.Write (buffer, 0, buffer.Length);
1146 } catch (NotSupportedException ex) {
1147 // The stream does not support writing
1148 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
1149 Assert.IsNull (ex.InnerException, "#3");
1150 Assert.IsNotNull (ex.Message, "#4");
1161 public void WriteTimeout ()
1163 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
1164 string url = "http://" + ep.ToString () + "/test/";
1166 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1169 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1172 req.ReadWriteTimeout = 2000;
1173 req.KeepAlive = false;
1175 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1176 Stream rs = resp.GetResponseStream ();
1178 Assert.AreEqual (2000, rs.WriteTimeout, "#1");
1180 Assert.AreEqual (2000, rs.WriteTimeout, "#2");