2 // HttpWebResponseTest.cs - NUnit Test Cases for System.Net.HttpWebResponse
5 // Gert Driesen (drieseng@users.sourceforge.net)
7 // Copyright (c) 2008 Gert Driesen
11 using System.Globalization;
14 using System.Net.Sockets;
17 using MonoTests.Helpers;
19 using NUnit.Framework;
21 namespace MonoTests.System.Net
24 public class HttpWebResponseTest
27 public void CharacterSet_Disposed ()
29 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
30 string url = "http://" + ep.ToString () + "/test/";
32 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
35 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
38 req.ReadWriteTimeout = 2000;
39 req.KeepAlive = false;
41 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
42 ((IDisposable) resp).Dispose ();
45 string charset = resp.CharacterSet;
46 Assert.Fail ("#1:" + charset);
47 } catch (ObjectDisposedException ex) {
48 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
49 Assert.IsNull (ex.InnerException, "#3");
50 Assert.IsNotNull (ex.Message, "#4");
51 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
57 public void Close_Disposed ()
59 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
60 string url = "http://" + ep.ToString () + "/test/";
62 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
65 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
68 req.ReadWriteTimeout = 2000;
69 req.KeepAlive = false;
71 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
72 ((IDisposable) resp).Dispose ();
78 public void ContentEncoding_Disposed ()
80 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
81 string url = "http://" + ep.ToString () + "/test/";
83 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
86 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
89 req.ReadWriteTimeout = 2000;
90 req.KeepAlive = false;
92 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
93 ((IDisposable) resp).Dispose ();
96 string enc = resp.ContentEncoding;
97 Assert.Fail ("#1:" + enc);
98 } catch (ObjectDisposedException ex) {
99 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
100 Assert.IsNull (ex.InnerException, "#3");
101 Assert.IsNotNull (ex.Message, "#4");
102 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
108 public void ContentLength_Disposed ()
110 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
111 string url = "http://" + ep.ToString () + "/test/";
113 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
116 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
119 req.ReadWriteTimeout = 2000;
120 req.KeepAlive = false;
122 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
123 ((IDisposable) resp).Dispose ();
125 Assert.AreEqual (9, resp.ContentLength);
130 public void ContentType_Disposed ()
132 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
133 string url = "http://" + ep.ToString () + "/test/";
135 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
138 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
141 req.ReadWriteTimeout = 2000;
142 req.KeepAlive = false;
144 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
145 ((IDisposable) resp).Dispose ();
148 string contentType = resp.ContentType;
149 Assert.Fail ("#1:" + contentType);
150 } catch (ObjectDisposedException ex) {
151 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
152 Assert.IsNull (ex.InnerException, "#3");
153 Assert.IsNotNull (ex.Message, "#4");
154 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
160 public void Cookies_Disposed ()
162 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
163 string url = "http://" + ep.ToString () + "/test/";
165 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
168 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
171 req.ReadWriteTimeout = 2000;
172 req.KeepAlive = false;
174 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
175 ((IDisposable) resp).Dispose ();
178 CookieCollection cookies = resp.Cookies;
179 Assert.Fail ("#A1:" + cookies);
180 } catch (ObjectDisposedException ex) {
181 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#A2");
182 Assert.IsNull (ex.InnerException, "#A3");
183 Assert.IsNotNull (ex.Message, "#A4");
184 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#A5");
188 resp.Cookies = new CookieCollection ();
190 } catch (ObjectDisposedException ex) {
191 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#B2");
192 Assert.IsNull (ex.InnerException, "#B3");
193 Assert.IsNotNull (ex.Message, "#B4");
194 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#B5");
200 public void GetResponseHeader_Disposed ()
202 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
203 string url = "http://" + ep.ToString () + "/test/";
205 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
208 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
211 req.ReadWriteTimeout = 2000;
212 req.KeepAlive = false;
214 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
215 ((IDisposable) resp).Dispose ();
218 string server = resp.GetResponseHeader ("Server");
219 Assert.Fail ("#1:" + server);
220 } catch (ObjectDisposedException ex) {
221 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
222 Assert.IsNull (ex.InnerException, "#3");
223 Assert.IsNotNull (ex.Message, "#4");
224 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
230 public void GetResponseStream_Disposed ()
232 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
233 string url = "http://" + ep.ToString () + "/test/";
235 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
238 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
241 req.ReadWriteTimeout = 2000;
242 req.KeepAlive = false;
244 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
245 ((IDisposable) resp).Dispose ();
248 Stream s = resp.GetResponseStream ();
249 Assert.Fail ("#1:" + s);
250 } catch (ObjectDisposedException ex) {
251 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
252 Assert.IsNull (ex.InnerException, "#3");
253 Assert.IsNotNull (ex.Message, "#4");
254 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
260 public void Headers_Disposed ()
262 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
263 string url = "http://" + ep.ToString () + "/test/";
265 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
268 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
271 req.ReadWriteTimeout = 2000;
272 req.KeepAlive = false;
274 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
275 ((IDisposable) resp).Dispose ();
277 WebHeaderCollection headers = resp.Headers;
278 Assert.AreEqual (6, headers.Count, "#1");
279 Assert.AreEqual ("9", headers ["Content-Length"], "#2");
280 Assert.AreEqual ("utf-8", headers ["Content-Encoding"], "#3");
281 Assert.AreEqual ("text/xml; charset=UTF-8", headers ["Content-Type"], "#4");
282 Assert.AreEqual ("Wed, 08 Jan 2003 23:11:55 GMT", headers ["Last-Modified"], "#5");
283 Assert.AreEqual ("UserID=Miguel,StoreProfile=true", headers ["Set-Cookie"], "#6");
284 Assert.AreEqual ("Mono/Test", headers ["Server"], "#7");
289 public void LastModified_Disposed ()
291 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
292 string url = "http://" + ep.ToString () + "/test/";
294 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
297 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
300 req.ReadWriteTimeout = 2000;
301 req.KeepAlive = false;
303 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
304 ((IDisposable) resp).Dispose ();
307 DateTime lastMod = resp.LastModified;
308 Assert.Fail ("#1:" + lastMod);
309 } catch (ObjectDisposedException ex) {
310 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
311 Assert.IsNull (ex.InnerException, "#3");
312 Assert.IsNotNull (ex.Message, "#4");
313 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
319 public void Method_Disposed ()
321 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
322 string url = "http://" + ep.ToString () + "/test/";
324 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
327 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
330 req.ReadWriteTimeout = 2000;
331 req.KeepAlive = false;
333 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
334 ((IDisposable) resp).Dispose ();
337 string method = resp.Method;
338 Assert.Fail ("#1:" + method);
339 } catch (ObjectDisposedException ex) {
340 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
341 Assert.IsNull (ex.InnerException, "#3");
342 Assert.IsNotNull (ex.Message, "#4");
343 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
349 public void ProtocolVersion_Disposed ()
351 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
352 string url = "http://" + ep.ToString () + "/test/";
354 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
357 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
360 req.ReadWriteTimeout = 2000;
361 req.KeepAlive = false;
363 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
364 ((IDisposable) resp).Dispose ();
367 Version protocolVersion = resp.ProtocolVersion;
368 Assert.Fail ("#1:" + protocolVersion);
369 } catch (ObjectDisposedException ex) {
370 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
371 Assert.IsNull (ex.InnerException, "#3");
372 Assert.IsNotNull (ex.Message, "#4");
373 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
379 public void ResponseUri_Disposed ()
381 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
382 string url = "http://" + ep.ToString () + "/test/";
384 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
387 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
390 req.ReadWriteTimeout = 2000;
391 req.KeepAlive = false;
393 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
394 ((IDisposable) resp).Dispose ();
397 Uri respUri = resp.ResponseUri;
398 Assert.Fail ("#1:" + respUri);
399 } catch (ObjectDisposedException ex) {
400 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
401 Assert.IsNull (ex.InnerException, "#3");
402 Assert.IsNotNull (ex.Message, "#4");
403 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
409 public void Server_Disposed ()
411 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
412 string url = "http://" + ep.ToString () + "/test/";
414 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
417 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
420 req.ReadWriteTimeout = 2000;
421 req.KeepAlive = false;
423 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
424 ((IDisposable) resp).Dispose ();
427 string server = resp.Server;
428 Assert.Fail ("#1:" + server);
429 } catch (ObjectDisposedException ex) {
430 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
431 Assert.IsNull (ex.InnerException, "#3");
432 Assert.IsNotNull (ex.Message, "#4");
433 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
439 public void StatusCode_Disposed ()
441 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
442 string url = "http://" + ep.ToString () + "/test/";
444 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
447 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
450 req.ReadWriteTimeout = 2000;
451 req.KeepAlive = false;
453 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
454 ((IDisposable) resp).Dispose ();
456 Assert.AreEqual (HttpStatusCode.OK, resp.StatusCode);
461 public void StatusDescription_Disposed ()
463 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
464 string url = "http://" + ep.ToString () + "/test/";
466 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
469 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
472 req.ReadWriteTimeout = 2000;
473 req.KeepAlive = false;
475 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
476 ((IDisposable) resp).Dispose ();
479 string statusDesc = resp.StatusDescription;
480 Assert.Fail ("#1:" + statusDesc);
481 } catch (ObjectDisposedException ex) {
482 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
483 Assert.IsNull (ex.InnerException, "#3");
484 Assert.IsNotNull (ex.Message, "#4");
485 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
490 internal static byte [] FullResponseHandler (Socket socket)
492 StringWriter sw = new StringWriter ();
494 sw.WriteLine ("HTTP/1.0 200 OK");
495 sw.WriteLine ("Server: Mono/Test");
496 sw.WriteLine ("Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT");
497 sw.WriteLine ("Content-Encoding: " + Encoding.UTF8.WebName);
498 sw.WriteLine ("Content-Type: text/xml; charset=UTF-8");
499 sw.WriteLine ("Content-Length: 9");
500 sw.WriteLine ("Set-Cookie: UserID=Miguel");
501 sw.WriteLine ("Set-Cookie: StoreProfile=true");
503 sw.Write ("<dummy />");
506 return Encoding.UTF8.GetBytes (sw.ToString ());
511 public class HttpResponseStreamTest
514 public void BeginRead_Buffer_Null ()
516 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
517 string url = "http://" + ep.ToString () + "/test/";
519 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
522 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
525 req.ReadWriteTimeout = 2000;
526 req.KeepAlive = false;
528 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
529 Stream rs = resp.GetResponseStream ();
530 byte [] buffer = null;
533 rs.BeginRead (buffer, 0, 0, null, null);
535 } catch (ArgumentNullException ex) {
536 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
537 Assert.IsNull (ex.InnerException, "#A3");
538 Assert.IsNotNull (ex.Message, "#A4");
539 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
542 // read full response
543 buffer = new byte [24];
544 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
548 rs.BeginRead (buffer, 0, 0, null, null);
550 } catch (ArgumentNullException ex) {
551 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
552 Assert.IsNull (ex.InnerException, "#B3");
553 Assert.IsNotNull (ex.Message, "#B4");
554 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
565 public void BeginWrite ()
567 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
568 string url = "http://" + ep.ToString () + "/test/";
570 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
573 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
576 req.ReadWriteTimeout = 2000;
577 req.KeepAlive = false;
579 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
580 Stream rs = resp.GetResponseStream ();
581 byte [] buffer = new byte [5];
583 rs.BeginWrite (buffer, 0, buffer.Length, null, null);
585 } catch (NotSupportedException ex) {
586 // The stream does not support writing
587 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
588 Assert.IsNull (ex.InnerException, "#3");
589 Assert.IsNotNull (ex.Message, "#4");
599 [Category ("NotWorking")]
600 public void CanRead ()
602 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
603 string url = "http://" + ep.ToString () + "/test/";
605 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
608 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
611 req.ReadWriteTimeout = 2000;
612 req.KeepAlive = false;
614 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
615 Stream rs = resp.GetResponseStream ();
617 Assert.IsTrue (rs.CanRead, "#1");
619 Assert.IsFalse (rs.CanRead, "#2");
629 public void CanSeek ()
631 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
632 string url = "http://" + ep.ToString () + "/test/";
634 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
637 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
640 req.ReadWriteTimeout = 2000;
641 req.KeepAlive = false;
643 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
644 Stream rs = resp.GetResponseStream ();
646 Assert.IsFalse (rs.CanSeek, "#1");
648 Assert.IsFalse (rs.CanSeek, "#2");
657 [Test] // bug #324182
658 public void CanTimeout ()
660 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
661 string url = "http://" + ep.ToString () + "/test/";
663 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
666 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
669 req.ReadWriteTimeout = 2000;
670 req.KeepAlive = false;
672 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
673 Stream rs = resp.GetResponseStream ();
675 Assert.IsTrue (rs.CanTimeout, "#1");
677 Assert.IsTrue (rs.CanTimeout, "#2");
687 public void CanWrite ()
689 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
690 string url = "http://" + ep.ToString () + "/test/";
692 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
695 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
698 req.ReadWriteTimeout = 2000;
699 req.KeepAlive = false;
701 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
702 Stream rs = resp.GetResponseStream ();
704 Assert.IsFalse (rs.CanWrite, "#1");
706 Assert.IsFalse (rs.CanWrite, "#2");
718 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
719 string url = "http://" + ep.ToString () + "/test/";
721 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
724 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
727 req.ReadWriteTimeout = 2000;
728 req.KeepAlive = false;
730 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
731 Stream rs = resp.GetResponseStream ();
732 byte [] buffer = new byte [5];
734 Assert.AreEqual (1, rs.Read (buffer, 4, 1), "#A1");
735 Assert.AreEqual (new byte [] { 0x00, 0x00, 0x00, 0x00, 0x3c }, buffer, "#A2");
736 Assert.AreEqual (2, rs.Read (buffer, 0, 2), "#B1");
737 Assert.AreEqual (new byte [] { 0x64, 0x75, 0x00, 0x00, 0x3c }, buffer, "#B2");
738 Assert.AreEqual (4, rs.Read (buffer, 1, 4), "#C1");
739 Assert.AreEqual (new byte [] { 0x64, 0x6d, 0x6d, 0x79, 0x20 }, buffer, "#C2");
740 Assert.AreEqual (2, rs.Read (buffer, 0, 3), "#D1");
741 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#D2");
742 Assert.AreEqual (0, rs.Read (buffer, 1, 3), "#E1");
743 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#E2");
744 Assert.AreEqual (0, rs.Read (buffer, buffer.Length, 0), "#G1");
745 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#G2");
755 public void Read_Buffer_Null ()
757 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
758 string url = "http://" + ep.ToString () + "/test/";
760 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
763 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
766 req.ReadWriteTimeout = 2000;
767 req.KeepAlive = false;
769 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
770 Stream rs = resp.GetResponseStream ();
771 byte [] buffer = null;
774 rs.Read (buffer, 0, 0);
776 } catch (ArgumentNullException ex) {
777 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
778 Assert.IsNull (ex.InnerException, "#A3");
779 Assert.IsNotNull (ex.Message, "#A4");
780 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
783 // read full response
784 buffer = new byte [24];
785 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
789 rs.Read (buffer, 0, 0);
791 } catch (ArgumentNullException ex) {
792 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
793 Assert.IsNull (ex.InnerException, "#B3");
794 Assert.IsNotNull (ex.Message, "#B4");
795 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
806 public void Read_Count_Negative ()
808 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
809 string url = "http://" + ep.ToString () + "/test/";
811 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
814 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
817 req.ReadWriteTimeout = 2000;
818 req.KeepAlive = false;
820 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
821 Stream rs = resp.GetResponseStream ();
822 byte [] buffer = new byte [5];
825 rs.Read (buffer, 1, -1);
827 } catch (ArgumentOutOfRangeException ex) {
828 // Specified argument was out of the range of valid values
829 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
830 Assert.IsNull (ex.InnerException, "#A3");
831 Assert.IsNotNull (ex.Message, "#A4");
832 Assert.AreEqual ("size", ex.ParamName, "#A5");
835 // read full response
836 buffer = new byte [24];
837 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
840 rs.Read (buffer, 1, -1);
842 } catch (ArgumentOutOfRangeException ex) {
843 // Specified argument was out of the range of valid values
844 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
845 Assert.IsNull (ex.InnerException, "#B3");
846 Assert.IsNotNull (ex.Message, "#B4");
847 Assert.AreEqual ("size", ex.ParamName, "#B5");
858 public void Read_Count_Overflow ()
860 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
861 string url = "http://" + ep.ToString () + "/test/";
863 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
866 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
869 req.ReadWriteTimeout = 2000;
870 req.KeepAlive = false;
872 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
873 Stream rs = resp.GetResponseStream ();
874 byte [] buffer = new byte [5];
877 rs.Read (buffer, buffer.Length - 2, 3);
879 } catch (ArgumentOutOfRangeException ex) {
880 // Specified argument was out of the range of valid values
881 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
882 Assert.IsNull (ex.InnerException, "#A3");
883 Assert.IsNotNull (ex.Message, "#A4");
884 Assert.AreEqual ("size", ex.ParamName, "#A5");
887 // read full response
888 buffer = new byte [24];
889 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
892 rs.Read (buffer, 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 (), "#B2");
897 Assert.IsNull (ex.InnerException, "#B3");
898 Assert.IsNotNull (ex.Message, "#B4");
899 Assert.AreEqual ("size", ex.ParamName, "#B5");
910 public void Read_Offset_Negative ()
912 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
913 string url = "http://" + ep.ToString () + "/test/";
915 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
918 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
921 req.ReadWriteTimeout = 2000;
922 req.KeepAlive = false;
924 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
925 Stream rs = resp.GetResponseStream ();
926 byte [] buffer = new byte [5];
929 rs.Read (buffer, -1, 0);
931 } catch (ArgumentOutOfRangeException ex) {
932 // Specified argument was out of the range of valid values
933 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
934 Assert.IsNull (ex.InnerException, "#A3");
935 Assert.IsNotNull (ex.Message, "#A4");
936 Assert.AreEqual ("offset", ex.ParamName, "#A5");
939 // read full response
940 buffer = new byte [24];
941 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
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 (), "#B2");
949 Assert.IsNull (ex.InnerException, "#B3");
950 Assert.IsNotNull (ex.Message, "#B4");
951 Assert.AreEqual ("offset", ex.ParamName, "#B5");
962 public void Read_Offset_Overflow ()
964 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
965 string url = "http://" + ep.ToString () + "/test/";
967 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
970 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
973 req.ReadWriteTimeout = 2000;
974 req.KeepAlive = false;
976 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
977 Stream rs = resp.GetResponseStream ();
978 byte [] buffer = new byte [5];
981 rs.Read (buffer, buffer.Length + 1, 0);
983 } catch (ArgumentOutOfRangeException ex) {
984 // Specified argument was out of the range of valid values
985 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
986 Assert.IsNull (ex.InnerException, "#A3");
987 Assert.IsNotNull (ex.Message, "#A4");
988 Assert.AreEqual ("offset", ex.ParamName, "#A5");
991 // read full response
992 buffer = new byte [24];
993 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
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 (), "#B2");
1001 Assert.IsNull (ex.InnerException, "#B3");
1002 Assert.IsNotNull (ex.Message, "#B4");
1003 Assert.AreEqual ("offset", ex.ParamName, "#B5");
1014 [Category ("NotWorking")]
1015 public void Read_Stream_Closed ()
1017 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1018 string url = "http://" + ep.ToString () + "/test/";
1020 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1025 req = (HttpWebRequest) WebRequest.Create (url);
1028 req.ReadWriteTimeout = 2000;
1029 req.KeepAlive = false;
1031 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1032 Stream rs = resp.GetResponseStream ();
1035 rs.Read (new byte [0], 0, 0);
1036 Assert.Fail ("#A1");
1037 } catch (WebException ex) {
1038 // The request was aborted: The connection was closed unexpectedly
1039 Assert.AreEqual (typeof (WebException), ex.GetType (), "#A2");
1040 Assert.IsNull (ex.InnerException, "#A3");
1041 Assert.IsNotNull (ex.Message, "#A4");
1042 Assert.IsNull (ex.Response, "#A5");
1043 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#A6");
1050 req = (HttpWebRequest) WebRequest.Create (url);
1053 req.ReadWriteTimeout = 2000;
1054 req.KeepAlive = false;
1056 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1057 Stream rs = resp.GetResponseStream ();
1058 byte [] buffer = new byte [24];
1059 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
1062 rs.Read (new byte [0], 0, 0);
1063 Assert.Fail ("#B1");
1064 } catch (WebException ex) {
1065 // The request was aborted: The connection was closed unexpectedly
1066 Assert.AreEqual (typeof (WebException), ex.GetType (), "#B2");
1067 Assert.IsNull (ex.InnerException, "#B3");
1068 Assert.IsNotNull (ex.Message, "#B4");
1069 Assert.IsNull (ex.Response, "#B5");
1070 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#B6");
1080 public void ReadTimeout ()
1082 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1083 string url = "http://" + ep.ToString () + "/test/";
1085 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1088 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1091 req.ReadWriteTimeout = 2000;
1092 req.KeepAlive = false;
1094 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1095 Stream rs = resp.GetResponseStream ();
1097 Assert.AreEqual (2000, rs.ReadTimeout, "#1");
1099 Assert.AreEqual (2000, rs.ReadTimeout, "#2");
1109 public void Write ()
1111 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1112 string url = "http://" + ep.ToString () + "/test/";
1114 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1117 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1120 req.ReadWriteTimeout = 2000;
1121 req.KeepAlive = false;
1123 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1124 Stream rs = resp.GetResponseStream ();
1125 byte [] buffer = new byte [5];
1127 rs.Write (buffer, 0, buffer.Length);
1129 } catch (NotSupportedException ex) {
1130 // The stream does not support writing
1131 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
1132 Assert.IsNull (ex.InnerException, "#3");
1133 Assert.IsNotNull (ex.Message, "#4");
1143 public void WriteTimeout ()
1145 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1146 string url = "http://" + ep.ToString () + "/test/";
1148 using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
1151 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1154 req.ReadWriteTimeout = 2000;
1155 req.KeepAlive = false;
1157 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1158 Stream rs = resp.GetResponseStream ();
1160 Assert.AreEqual (2000, rs.WriteTimeout, "#1");
1162 Assert.AreEqual (2000, rs.WriteTimeout, "#2");