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 ();
275 WebHeaderCollection headers = resp.Headers;
276 Assert.AreEqual (6, headers.Count, "#1");
277 Assert.AreEqual ("9", headers ["Content-Length"], "#2");
278 Assert.AreEqual ("utf-8", headers ["Content-Encoding"], "#3");
279 Assert.AreEqual ("text/xml; charset=UTF-8", headers ["Content-Type"], "#4");
280 Assert.AreEqual ("Wed, 08 Jan 2003 23:11:55 GMT", headers ["Last-Modified"], "#5");
281 Assert.AreEqual ("UserID=Miguel,StoreProfile=true", headers ["Set-Cookie"], "#6");
282 Assert.AreEqual ("Mono/Test", headers ["Server"], "#7");
287 public void LastModified_Disposed ()
289 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
290 string url = "http://" + ep.ToString () + "/test/";
292 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
295 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
298 req.ReadWriteTimeout = 2000;
299 req.KeepAlive = false;
301 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
302 ((IDisposable) resp).Dispose ();
305 DateTime lastMod = resp.LastModified;
306 Assert.Fail ("#1:" + lastMod);
307 } catch (ObjectDisposedException ex) {
308 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
309 Assert.IsNull (ex.InnerException, "#3");
310 Assert.IsNotNull (ex.Message, "#4");
311 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
317 public void Method_Disposed ()
319 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
320 string url = "http://" + ep.ToString () + "/test/";
322 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
325 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
328 req.ReadWriteTimeout = 2000;
329 req.KeepAlive = false;
331 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
332 ((IDisposable) resp).Dispose ();
335 string method = resp.Method;
336 Assert.Fail ("#1:" + method);
337 } catch (ObjectDisposedException ex) {
338 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
339 Assert.IsNull (ex.InnerException, "#3");
340 Assert.IsNotNull (ex.Message, "#4");
341 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
347 public void ProtocolVersion_Disposed ()
349 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
350 string url = "http://" + ep.ToString () + "/test/";
352 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
355 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
358 req.ReadWriteTimeout = 2000;
359 req.KeepAlive = false;
361 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
362 ((IDisposable) resp).Dispose ();
365 Version protocolVersion = resp.ProtocolVersion;
366 Assert.Fail ("#1:" + protocolVersion);
367 } catch (ObjectDisposedException ex) {
368 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
369 Assert.IsNull (ex.InnerException, "#3");
370 Assert.IsNotNull (ex.Message, "#4");
371 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
377 public void ResponseUri_Disposed ()
379 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
380 string url = "http://" + ep.ToString () + "/test/";
382 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
385 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
388 req.ReadWriteTimeout = 2000;
389 req.KeepAlive = false;
391 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
392 ((IDisposable) resp).Dispose ();
395 Uri respUri = resp.ResponseUri;
396 Assert.Fail ("#1:" + respUri);
397 } catch (ObjectDisposedException ex) {
398 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
399 Assert.IsNull (ex.InnerException, "#3");
400 Assert.IsNotNull (ex.Message, "#4");
401 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
407 public void Server_Disposed ()
409 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
410 string url = "http://" + ep.ToString () + "/test/";
412 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
415 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
418 req.ReadWriteTimeout = 2000;
419 req.KeepAlive = false;
421 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
422 ((IDisposable) resp).Dispose ();
425 string server = resp.Server;
426 Assert.Fail ("#1:" + server);
427 } catch (ObjectDisposedException ex) {
428 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
429 Assert.IsNull (ex.InnerException, "#3");
430 Assert.IsNotNull (ex.Message, "#4");
431 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
437 public void StatusCode_Disposed ()
439 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
440 string url = "http://" + ep.ToString () + "/test/";
442 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
445 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
448 req.ReadWriteTimeout = 2000;
449 req.KeepAlive = false;
451 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
452 ((IDisposable) resp).Dispose ();
454 Assert.AreEqual (HttpStatusCode.OK, resp.StatusCode);
459 public void StatusDescription_Disposed ()
461 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
462 string url = "http://" + ep.ToString () + "/test/";
464 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
467 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
470 req.ReadWriteTimeout = 2000;
471 req.KeepAlive = false;
473 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
474 ((IDisposable) resp).Dispose ();
477 string statusDesc = resp.StatusDescription;
478 Assert.Fail ("#1:" + statusDesc);
479 } catch (ObjectDisposedException ex) {
480 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
481 Assert.IsNull (ex.InnerException, "#3");
482 Assert.IsNotNull (ex.Message, "#4");
483 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
488 internal static byte [] FullResponseHandler (Socket socket)
490 StringWriter sw = new StringWriter ();
492 sw.WriteLine ("HTTP/1.0 200 OK");
493 sw.WriteLine ("Server: Mono/Test");
494 sw.WriteLine ("Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT");
495 sw.WriteLine ("Content-Encoding: " + Encoding.UTF8.WebName);
496 sw.WriteLine ("Content-Type: text/xml; charset=UTF-8");
497 sw.WriteLine ("Content-Length: 9");
498 sw.WriteLine ("Set-Cookie: UserID=Miguel");
499 sw.WriteLine ("Set-Cookie: StoreProfile=true");
501 sw.Write ("<dummy />");
504 return Encoding.UTF8.GetBytes (sw.ToString ());
509 public class HttpResponseStreamTest
512 public void BeginRead_Buffer_Null ()
514 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
515 string url = "http://" + ep.ToString () + "/test/";
517 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
520 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
523 req.ReadWriteTimeout = 2000;
524 req.KeepAlive = false;
526 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
527 Stream rs = resp.GetResponseStream ();
528 byte [] buffer = null;
531 rs.BeginRead (buffer, 0, 0, null, null);
533 } catch (ArgumentNullException ex) {
534 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
535 Assert.IsNull (ex.InnerException, "#A3");
536 Assert.IsNotNull (ex.Message, "#A4");
537 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
540 // read full response
541 buffer = new byte [24];
542 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
546 rs.BeginRead (buffer, 0, 0, null, null);
548 } catch (ArgumentNullException ex) {
549 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
550 Assert.IsNull (ex.InnerException, "#B3");
551 Assert.IsNotNull (ex.Message, "#B4");
552 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
563 public void BeginWrite ()
565 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
566 string url = "http://" + ep.ToString () + "/test/";
568 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
571 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
574 req.ReadWriteTimeout = 2000;
575 req.KeepAlive = false;
577 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
578 Stream rs = resp.GetResponseStream ();
579 byte [] buffer = new byte [5];
581 rs.BeginWrite (buffer, 0, buffer.Length, null, null);
583 } catch (NotSupportedException ex) {
584 // The stream does not support writing
585 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
586 Assert.IsNull (ex.InnerException, "#3");
587 Assert.IsNotNull (ex.Message, "#4");
597 [Category ("NotWorking")]
598 public void CanRead ()
600 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
601 string url = "http://" + ep.ToString () + "/test/";
603 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
606 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
609 req.ReadWriteTimeout = 2000;
610 req.KeepAlive = false;
612 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
613 Stream rs = resp.GetResponseStream ();
615 Assert.IsTrue (rs.CanRead, "#1");
617 Assert.IsFalse (rs.CanRead, "#2");
627 public void CanSeek ()
629 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
630 string url = "http://" + ep.ToString () + "/test/";
632 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
635 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
638 req.ReadWriteTimeout = 2000;
639 req.KeepAlive = false;
641 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
642 Stream rs = resp.GetResponseStream ();
644 Assert.IsFalse (rs.CanSeek, "#1");
646 Assert.IsFalse (rs.CanSeek, "#2");
655 [Test] // bug #324182
656 public void CanTimeout ()
658 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
659 string url = "http://" + ep.ToString () + "/test/";
661 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
664 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
667 req.ReadWriteTimeout = 2000;
668 req.KeepAlive = false;
670 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
671 Stream rs = resp.GetResponseStream ();
673 Assert.IsTrue (rs.CanTimeout, "#1");
675 Assert.IsTrue (rs.CanTimeout, "#2");
685 public void CanWrite ()
687 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
688 string url = "http://" + ep.ToString () + "/test/";
690 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
693 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
696 req.ReadWriteTimeout = 2000;
697 req.KeepAlive = false;
699 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
700 Stream rs = resp.GetResponseStream ();
702 Assert.IsFalse (rs.CanWrite, "#1");
704 Assert.IsFalse (rs.CanWrite, "#2");
716 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
717 string url = "http://" + ep.ToString () + "/test/";
719 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
722 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
725 req.ReadWriteTimeout = 2000;
726 req.KeepAlive = false;
728 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
729 Stream rs = resp.GetResponseStream ();
730 byte [] buffer = new byte [5];
732 Assert.AreEqual (1, rs.Read (buffer, 4, 1), "#A1");
733 Assert.AreEqual (new byte [] { 0x00, 0x00, 0x00, 0x00, 0x3c }, buffer, "#A2");
734 Assert.AreEqual (2, rs.Read (buffer, 0, 2), "#B1");
735 Assert.AreEqual (new byte [] { 0x64, 0x75, 0x00, 0x00, 0x3c }, buffer, "#B2");
736 Assert.AreEqual (4, rs.Read (buffer, 1, 4), "#C1");
737 Assert.AreEqual (new byte [] { 0x64, 0x6d, 0x6d, 0x79, 0x20 }, buffer, "#C2");
738 Assert.AreEqual (2, rs.Read (buffer, 0, 3), "#D1");
739 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#D2");
740 Assert.AreEqual (0, rs.Read (buffer, 1, 3), "#E1");
741 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#E2");
742 Assert.AreEqual (0, rs.Read (buffer, buffer.Length, 0), "#G1");
743 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#G2");
753 public void Read_Buffer_Null ()
755 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
756 string url = "http://" + ep.ToString () + "/test/";
758 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
761 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
764 req.ReadWriteTimeout = 2000;
765 req.KeepAlive = false;
767 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
768 Stream rs = resp.GetResponseStream ();
769 byte [] buffer = null;
772 rs.Read (buffer, 0, 0);
774 } catch (ArgumentNullException ex) {
775 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
776 Assert.IsNull (ex.InnerException, "#A3");
777 Assert.IsNotNull (ex.Message, "#A4");
778 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
781 // read full response
782 buffer = new byte [24];
783 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
787 rs.Read (buffer, 0, 0);
789 } catch (ArgumentNullException ex) {
790 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
791 Assert.IsNull (ex.InnerException, "#B3");
792 Assert.IsNotNull (ex.Message, "#B4");
793 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
804 public void Read_Count_Negative ()
806 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
807 string url = "http://" + ep.ToString () + "/test/";
809 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
812 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
815 req.ReadWriteTimeout = 2000;
816 req.KeepAlive = false;
818 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
819 Stream rs = resp.GetResponseStream ();
820 byte [] buffer = new byte [5];
823 rs.Read (buffer, 1, -1);
825 } catch (ArgumentOutOfRangeException ex) {
826 // Specified argument was out of the range of valid values
827 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
828 Assert.IsNull (ex.InnerException, "#A3");
829 Assert.IsNotNull (ex.Message, "#A4");
830 Assert.AreEqual ("size", ex.ParamName, "#A5");
833 // read full response
834 buffer = new byte [24];
835 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
838 rs.Read (buffer, 1, -1);
840 } catch (ArgumentOutOfRangeException ex) {
841 // Specified argument was out of the range of valid values
842 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
843 Assert.IsNull (ex.InnerException, "#B3");
844 Assert.IsNotNull (ex.Message, "#B4");
845 Assert.AreEqual ("size", ex.ParamName, "#B5");
856 public void Read_Count_Overflow ()
858 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
859 string url = "http://" + ep.ToString () + "/test/";
861 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
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, buffer.Length - 2, 3);
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 ("size", 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, buffer.Length - 2, 3);
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 ("size", ex.ParamName, "#B5");
908 public void Read_Offset_Negative ()
910 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
911 string url = "http://" + ep.ToString () + "/test/";
913 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
916 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
919 req.ReadWriteTimeout = 2000;
920 req.KeepAlive = false;
922 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
923 Stream rs = resp.GetResponseStream ();
924 byte [] buffer = new byte [5];
927 rs.Read (buffer, -1, 0);
929 } catch (ArgumentOutOfRangeException ex) {
930 // Specified argument was out of the range of valid values
931 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
932 Assert.IsNull (ex.InnerException, "#A3");
933 Assert.IsNotNull (ex.Message, "#A4");
934 Assert.AreEqual ("offset", ex.ParamName, "#A5");
937 // read full response
938 buffer = new byte [24];
939 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
942 rs.Read (buffer, -1, 0);
944 } catch (ArgumentOutOfRangeException ex) {
945 // Specified argument was out of the range of valid values
946 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
947 Assert.IsNull (ex.InnerException, "#B3");
948 Assert.IsNotNull (ex.Message, "#B4");
949 Assert.AreEqual ("offset", ex.ParamName, "#B5");
960 public void Read_Offset_Overflow ()
962 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
963 string url = "http://" + ep.ToString () + "/test/";
965 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
968 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
971 req.ReadWriteTimeout = 2000;
972 req.KeepAlive = false;
974 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
975 Stream rs = resp.GetResponseStream ();
976 byte [] buffer = new byte [5];
979 rs.Read (buffer, buffer.Length + 1, 0);
981 } catch (ArgumentOutOfRangeException ex) {
982 // Specified argument was out of the range of valid values
983 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
984 Assert.IsNull (ex.InnerException, "#A3");
985 Assert.IsNotNull (ex.Message, "#A4");
986 Assert.AreEqual ("offset", ex.ParamName, "#A5");
989 // read full response
990 buffer = new byte [24];
991 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
994 rs.Read (buffer, buffer.Length + 1, 0);
996 } catch (ArgumentOutOfRangeException ex) {
997 // Specified argument was out of the range of valid values
998 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
999 Assert.IsNull (ex.InnerException, "#B3");
1000 Assert.IsNotNull (ex.Message, "#B4");
1001 Assert.AreEqual ("offset", ex.ParamName, "#B5");
1012 [Category ("NotWorking")]
1013 public void Read_Stream_Closed ()
1015 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
1016 string url = "http://" + ep.ToString () + "/test/";
1018 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1023 req = (HttpWebRequest) WebRequest.Create (url);
1026 req.ReadWriteTimeout = 2000;
1027 req.KeepAlive = false;
1029 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1030 Stream rs = resp.GetResponseStream ();
1033 rs.Read (new byte [0], 0, 0);
1034 Assert.Fail ("#A1");
1035 } catch (WebException ex) {
1036 // The request was aborted: The connection was closed unexpectedly
1037 Assert.AreEqual (typeof (WebException), ex.GetType (), "#A2");
1038 Assert.IsNull (ex.InnerException, "#A3");
1039 Assert.IsNotNull (ex.Message, "#A4");
1040 Assert.IsNull (ex.Response, "#A5");
1041 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#A6");
1048 req = (HttpWebRequest) WebRequest.Create (url);
1051 req.ReadWriteTimeout = 2000;
1052 req.KeepAlive = false;
1054 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1055 Stream rs = resp.GetResponseStream ();
1056 byte [] buffer = new byte [24];
1057 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
1060 rs.Read (new byte [0], 0, 0);
1061 Assert.Fail ("#B1");
1062 } catch (WebException ex) {
1063 // The request was aborted: The connection was closed unexpectedly
1064 Assert.AreEqual (typeof (WebException), ex.GetType (), "#B2");
1065 Assert.IsNull (ex.InnerException, "#B3");
1066 Assert.IsNotNull (ex.Message, "#B4");
1067 Assert.IsNull (ex.Response, "#B5");
1068 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#B6");
1078 public void ReadTimeout ()
1080 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
1081 string url = "http://" + ep.ToString () + "/test/";
1083 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1086 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1089 req.ReadWriteTimeout = 2000;
1090 req.KeepAlive = false;
1092 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1093 Stream rs = resp.GetResponseStream ();
1095 Assert.AreEqual (2000, rs.ReadTimeout, "#1");
1097 Assert.AreEqual (2000, rs.ReadTimeout, "#2");
1107 public void Write ()
1109 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
1110 string url = "http://" + ep.ToString () + "/test/";
1112 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1115 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1118 req.ReadWriteTimeout = 2000;
1119 req.KeepAlive = false;
1121 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1122 Stream rs = resp.GetResponseStream ();
1123 byte [] buffer = new byte [5];
1125 rs.Write (buffer, 0, buffer.Length);
1127 } catch (NotSupportedException ex) {
1128 // The stream does not support writing
1129 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
1130 Assert.IsNull (ex.InnerException, "#3");
1131 Assert.IsNotNull (ex.Message, "#4");
1141 public void WriteTimeout ()
1143 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
1144 string url = "http://" + ep.ToString () + "/test/";
1146 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1149 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1152 req.ReadWriteTimeout = 2000;
1153 req.KeepAlive = false;
1155 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1156 Stream rs = resp.GetResponseStream ();
1158 Assert.AreEqual (2000, rs.WriteTimeout, "#1");
1160 Assert.AreEqual (2000, rs.WriteTimeout, "#2");