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 #if FEATURE_NO_BSD_SOCKETS
28 [ExpectedException (typeof (PlatformNotSupportedException))]
30 public void CharacterSet_Disposed ()
32 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
33 string url = "http://" + ep.ToString () + "/test/";
35 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
36 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
39 req.ReadWriteTimeout = 2000;
40 req.KeepAlive = false;
42 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
43 ((IDisposable) resp).Dispose ();
46 string charset = resp.CharacterSet;
47 Assert.Fail ("#1:" + charset);
48 } catch (ObjectDisposedException ex) {
49 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
50 Assert.IsNull (ex.InnerException, "#3");
51 Assert.IsNotNull (ex.Message, "#4");
52 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
58 #if FEATURE_NO_BSD_SOCKETS
59 [ExpectedException (typeof (PlatformNotSupportedException))]
61 public void Close_Disposed ()
63 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
64 string url = "http://" + ep.ToString () + "/test/";
66 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
67 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
70 req.ReadWriteTimeout = 2000;
71 req.KeepAlive = false;
73 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
74 ((IDisposable) resp).Dispose ();
80 #if FEATURE_NO_BSD_SOCKETS
81 [ExpectedException (typeof (PlatformNotSupportedException))]
83 public void ContentEncoding_Disposed ()
85 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
86 string url = "http://" + ep.ToString () + "/test/";
88 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
89 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
92 req.ReadWriteTimeout = 2000;
93 req.KeepAlive = false;
95 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
96 ((IDisposable) resp).Dispose ();
99 string enc = resp.ContentEncoding;
100 Assert.Fail ("#1:" + enc);
101 } catch (ObjectDisposedException ex) {
102 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
103 Assert.IsNull (ex.InnerException, "#3");
104 Assert.IsNotNull (ex.Message, "#4");
105 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
111 #if FEATURE_NO_BSD_SOCKETS
112 [ExpectedException (typeof (PlatformNotSupportedException))]
114 public void ContentLength_Disposed ()
116 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
117 string url = "http://" + ep.ToString () + "/test/";
119 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
120 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
123 req.ReadWriteTimeout = 2000;
124 req.KeepAlive = false;
126 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
127 ((IDisposable) resp).Dispose ();
129 Assert.AreEqual (9, resp.ContentLength);
134 #if FEATURE_NO_BSD_SOCKETS
135 [ExpectedException (typeof (PlatformNotSupportedException))]
137 public void ContentType_Disposed ()
139 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
140 string url = "http://" + ep.ToString () + "/test/";
142 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
143 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
146 req.ReadWriteTimeout = 2000;
147 req.KeepAlive = false;
149 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
150 ((IDisposable) resp).Dispose ();
153 string contentType = resp.ContentType;
154 Assert.Fail ("#1:" + contentType);
155 } catch (ObjectDisposedException ex) {
156 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
157 Assert.IsNull (ex.InnerException, "#3");
158 Assert.IsNotNull (ex.Message, "#4");
159 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
165 #if FEATURE_NO_BSD_SOCKETS
166 [ExpectedException (typeof (PlatformNotSupportedException))]
168 public void Cookies_Disposed ()
170 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
171 string url = "http://" + ep.ToString () + "/test/";
173 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
174 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
177 req.ReadWriteTimeout = 2000;
178 req.KeepAlive = false;
180 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
181 ((IDisposable) resp).Dispose ();
184 CookieCollection cookies = resp.Cookies;
185 Assert.Fail ("#A1:" + cookies);
186 } catch (ObjectDisposedException ex) {
187 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#A2");
188 Assert.IsNull (ex.InnerException, "#A3");
189 Assert.IsNotNull (ex.Message, "#A4");
190 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#A5");
194 resp.Cookies = new CookieCollection ();
196 } catch (ObjectDisposedException ex) {
197 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#B2");
198 Assert.IsNull (ex.InnerException, "#B3");
199 Assert.IsNotNull (ex.Message, "#B4");
200 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#B5");
206 #if FEATURE_NO_BSD_SOCKETS
207 [ExpectedException (typeof (PlatformNotSupportedException))]
209 public void GetResponseHeader_Disposed ()
211 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
212 string url = "http://" + ep.ToString () + "/test/";
214 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
215 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
218 req.ReadWriteTimeout = 2000;
219 req.KeepAlive = false;
221 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
222 ((IDisposable) resp).Dispose ();
225 string server = resp.GetResponseHeader ("Server");
226 Assert.Fail ("#1:" + server);
227 } catch (ObjectDisposedException ex) {
228 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
229 Assert.IsNull (ex.InnerException, "#3");
230 Assert.IsNotNull (ex.Message, "#4");
231 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
237 #if FEATURE_NO_BSD_SOCKETS
238 [ExpectedException (typeof (PlatformNotSupportedException))]
240 public void GetResponseStream_Disposed ()
242 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
243 string url = "http://" + ep.ToString () + "/test/";
245 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
246 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
249 req.ReadWriteTimeout = 2000;
250 req.KeepAlive = false;
252 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
253 ((IDisposable) resp).Dispose ();
256 Stream s = resp.GetResponseStream ();
257 Assert.Fail ("#1:" + s);
258 } catch (ObjectDisposedException ex) {
259 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
260 Assert.IsNull (ex.InnerException, "#3");
261 Assert.IsNotNull (ex.Message, "#4");
262 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
268 #if FEATURE_NO_BSD_SOCKETS
269 [ExpectedException (typeof (PlatformNotSupportedException))]
271 public void Headers_Disposed ()
273 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
274 string url = "http://" + ep.ToString () + "/test/";
276 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
277 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
280 req.ReadWriteTimeout = 2000;
281 req.KeepAlive = false;
283 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
284 ((IDisposable) resp).Dispose ();
286 WebHeaderCollection headers = resp.Headers;
287 Assert.AreEqual (6, headers.Count, "#1");
288 Assert.AreEqual ("9", headers ["Content-Length"], "#2");
289 Assert.AreEqual ("utf-8", headers ["Content-Encoding"], "#3");
290 Assert.AreEqual ("text/xml; charset=UTF-8", headers ["Content-Type"], "#4");
291 Assert.AreEqual ("Wed, 08 Jan 2003 23:11:55 GMT", headers ["Last-Modified"], "#5");
292 Assert.AreEqual ("UserID=Miguel,StoreProfile=true", headers ["Set-Cookie"], "#6");
293 Assert.AreEqual ("Mono/Test", headers ["Server"], "#7");
298 #if FEATURE_NO_BSD_SOCKETS
299 [ExpectedException (typeof (PlatformNotSupportedException))]
301 public void LastModified_Disposed ()
303 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
304 string url = "http://" + ep.ToString () + "/test/";
306 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
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 #if FEATURE_NO_BSD_SOCKETS
330 [ExpectedException (typeof (PlatformNotSupportedException))]
332 public void Method_Disposed ()
334 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
335 string url = "http://" + ep.ToString () + "/test/";
337 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
338 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
341 req.ReadWriteTimeout = 2000;
342 req.KeepAlive = false;
344 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
345 ((IDisposable) resp).Dispose ();
348 string method = resp.Method;
349 Assert.Fail ("#1:" + method);
350 } catch (ObjectDisposedException ex) {
351 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
352 Assert.IsNull (ex.InnerException, "#3");
353 Assert.IsNotNull (ex.Message, "#4");
354 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
360 #if FEATURE_NO_BSD_SOCKETS
361 [ExpectedException (typeof (PlatformNotSupportedException))]
363 public void ProtocolVersion_Disposed ()
365 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
366 string url = "http://" + ep.ToString () + "/test/";
368 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
369 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
372 req.ReadWriteTimeout = 2000;
373 req.KeepAlive = false;
375 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
376 ((IDisposable) resp).Dispose ();
379 Version protocolVersion = resp.ProtocolVersion;
380 Assert.Fail ("#1:" + protocolVersion);
381 } catch (ObjectDisposedException ex) {
382 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
383 Assert.IsNull (ex.InnerException, "#3");
384 Assert.IsNotNull (ex.Message, "#4");
385 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
391 #if FEATURE_NO_BSD_SOCKETS
392 [ExpectedException (typeof (PlatformNotSupportedException))]
394 public void ResponseUri_Disposed ()
396 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
397 string url = "http://" + ep.ToString () + "/test/";
399 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
400 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
403 req.ReadWriteTimeout = 2000;
404 req.KeepAlive = false;
406 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
407 ((IDisposable) resp).Dispose ();
410 Uri respUri = resp.ResponseUri;
411 Assert.Fail ("#1:" + respUri);
412 } catch (ObjectDisposedException ex) {
413 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
414 Assert.IsNull (ex.InnerException, "#3");
415 Assert.IsNotNull (ex.Message, "#4");
416 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
422 #if FEATURE_NO_BSD_SOCKETS
423 [ExpectedException (typeof (PlatformNotSupportedException))]
425 public void Server_Disposed ()
427 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
428 string url = "http://" + ep.ToString () + "/test/";
430 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
431 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
434 req.ReadWriteTimeout = 2000;
435 req.KeepAlive = false;
437 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
438 ((IDisposable) resp).Dispose ();
441 string server = resp.Server;
442 Assert.Fail ("#1:" + server);
443 } catch (ObjectDisposedException ex) {
444 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
445 Assert.IsNull (ex.InnerException, "#3");
446 Assert.IsNotNull (ex.Message, "#4");
447 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
453 #if FEATURE_NO_BSD_SOCKETS
454 [ExpectedException (typeof (PlatformNotSupportedException))]
456 public void StatusCode_Disposed ()
458 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
459 string url = "http://" + ep.ToString () + "/test/";
461 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
462 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
465 req.ReadWriteTimeout = 2000;
466 req.KeepAlive = false;
468 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
469 ((IDisposable) resp).Dispose ();
471 Assert.AreEqual (HttpStatusCode.OK, resp.StatusCode);
476 #if FEATURE_NO_BSD_SOCKETS
477 [ExpectedException (typeof (PlatformNotSupportedException))]
479 public void StatusDescription_Disposed ()
481 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
482 string url = "http://" + ep.ToString () + "/test/";
484 using (SocketResponder responder = new SocketResponder (ep, s => FullResponseHandler (s))) {
485 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
488 req.ReadWriteTimeout = 2000;
489 req.KeepAlive = false;
491 HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
492 ((IDisposable) resp).Dispose ();
495 string statusDesc = resp.StatusDescription;
496 Assert.Fail ("#1:" + statusDesc);
497 } catch (ObjectDisposedException ex) {
498 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
499 Assert.IsNull (ex.InnerException, "#3");
500 Assert.IsNotNull (ex.Message, "#4");
501 Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
506 internal static byte [] FullResponseHandler (Socket socket)
508 StringWriter sw = new StringWriter ();
510 sw.WriteLine ("HTTP/1.0 200 OK");
511 sw.WriteLine ("Server: Mono/Test");
512 sw.WriteLine ("Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT");
513 sw.WriteLine ("Content-Encoding: " + Encoding.UTF8.WebName);
514 sw.WriteLine ("Content-Type: text/xml; charset=UTF-8");
515 sw.WriteLine ("Content-Length: 9");
516 sw.WriteLine ("Set-Cookie: UserID=Miguel");
517 sw.WriteLine ("Set-Cookie: StoreProfile=true");
519 sw.Write ("<dummy />");
522 return Encoding.UTF8.GetBytes (sw.ToString ());
527 public class HttpResponseStreamTest
530 #if FEATURE_NO_BSD_SOCKETS
531 [ExpectedException (typeof (PlatformNotSupportedException))]
533 public void BeginRead_Buffer_Null ()
535 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
536 string url = "http://" + ep.ToString () + "/test/";
538 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
539 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
542 req.ReadWriteTimeout = 2000;
543 req.KeepAlive = false;
545 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
546 Stream rs = resp.GetResponseStream ();
547 byte [] buffer = null;
550 rs.BeginRead (buffer, 0, 0, null, null);
552 } catch (ArgumentNullException ex) {
553 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
554 Assert.IsNull (ex.InnerException, "#A3");
555 Assert.IsNotNull (ex.Message, "#A4");
556 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
559 // read full response
560 buffer = new byte [24];
561 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
565 rs.BeginRead (buffer, 0, 0, null, null);
567 } catch (ArgumentNullException ex) {
568 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
569 Assert.IsNull (ex.InnerException, "#B3");
570 Assert.IsNotNull (ex.Message, "#B4");
571 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
582 #if FEATURE_NO_BSD_SOCKETS
583 [ExpectedException (typeof (PlatformNotSupportedException))]
585 public void BeginWrite ()
587 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
588 string url = "http://" + ep.ToString () + "/test/";
590 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
591 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
594 req.ReadWriteTimeout = 2000;
595 req.KeepAlive = false;
597 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
598 Stream rs = resp.GetResponseStream ();
599 byte [] buffer = new byte [5];
601 rs.BeginWrite (buffer, 0, buffer.Length, null, null);
603 } catch (NotSupportedException ex) {
604 // The stream does not support writing
605 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
606 Assert.IsNull (ex.InnerException, "#3");
607 Assert.IsNotNull (ex.Message, "#4");
617 [Category ("NotWorking")]
618 public void CanRead ()
620 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
621 string url = "http://" + ep.ToString () + "/test/";
623 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
624 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
627 req.ReadWriteTimeout = 2000;
628 req.KeepAlive = false;
630 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
631 Stream rs = resp.GetResponseStream ();
633 Assert.IsTrue (rs.CanRead, "#1");
635 Assert.IsFalse (rs.CanRead, "#2");
645 #if FEATURE_NO_BSD_SOCKETS
646 [ExpectedException (typeof (PlatformNotSupportedException))]
648 public void CanSeek ()
650 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
651 string url = "http://" + ep.ToString () + "/test/";
653 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
654 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
657 req.ReadWriteTimeout = 2000;
658 req.KeepAlive = false;
660 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
661 Stream rs = resp.GetResponseStream ();
663 Assert.IsFalse (rs.CanSeek, "#1");
665 Assert.IsFalse (rs.CanSeek, "#2");
674 [Test] // bug #324182
675 #if FEATURE_NO_BSD_SOCKETS
676 [ExpectedException (typeof (PlatformNotSupportedException))]
678 public void CanTimeout ()
680 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
681 string url = "http://" + ep.ToString () + "/test/";
683 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
684 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
687 req.ReadWriteTimeout = 2000;
688 req.KeepAlive = false;
690 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
691 Stream rs = resp.GetResponseStream ();
693 Assert.IsTrue (rs.CanTimeout, "#1");
695 Assert.IsTrue (rs.CanTimeout, "#2");
705 #if FEATURE_NO_BSD_SOCKETS
706 [ExpectedException (typeof (PlatformNotSupportedException))]
708 public void CanWrite ()
710 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
711 string url = "http://" + ep.ToString () + "/test/";
713 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
714 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
717 req.ReadWriteTimeout = 2000;
718 req.KeepAlive = false;
720 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
721 Stream rs = resp.GetResponseStream ();
723 Assert.IsFalse (rs.CanWrite, "#1");
725 Assert.IsFalse (rs.CanWrite, "#2");
735 #if FEATURE_NO_BSD_SOCKETS
736 [ExpectedException (typeof (PlatformNotSupportedException))]
740 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
741 string url = "http://" + ep.ToString () + "/test/";
743 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
744 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
747 req.ReadWriteTimeout = 2000;
748 req.KeepAlive = false;
750 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
751 Stream rs = resp.GetResponseStream ();
752 byte [] buffer = new byte [5];
754 Assert.AreEqual (1, rs.Read (buffer, 4, 1), "#A1");
755 Assert.AreEqual (new byte [] { 0x00, 0x00, 0x00, 0x00, 0x3c }, buffer, "#A2");
756 Assert.AreEqual (2, rs.Read (buffer, 0, 2), "#B1");
757 Assert.AreEqual (new byte [] { 0x64, 0x75, 0x00, 0x00, 0x3c }, buffer, "#B2");
758 Assert.AreEqual (4, rs.Read (buffer, 1, 4), "#C1");
759 Assert.AreEqual (new byte [] { 0x64, 0x6d, 0x6d, 0x79, 0x20 }, buffer, "#C2");
760 Assert.AreEqual (2, rs.Read (buffer, 0, 3), "#D1");
761 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#D2");
762 Assert.AreEqual (0, rs.Read (buffer, 1, 3), "#E1");
763 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#E2");
764 Assert.AreEqual (0, rs.Read (buffer, buffer.Length, 0), "#G1");
765 Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#G2");
775 #if FEATURE_NO_BSD_SOCKETS
776 [ExpectedException (typeof (PlatformNotSupportedException))]
778 public void Read_Buffer_Null ()
780 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
781 string url = "http://" + ep.ToString () + "/test/";
783 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
784 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
787 req.ReadWriteTimeout = 2000;
788 req.KeepAlive = false;
790 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
791 Stream rs = resp.GetResponseStream ();
792 byte [] buffer = null;
795 rs.Read (buffer, 0, 0);
797 } catch (ArgumentNullException ex) {
798 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
799 Assert.IsNull (ex.InnerException, "#A3");
800 Assert.IsNotNull (ex.Message, "#A4");
801 Assert.AreEqual ("buffer", ex.ParamName, "#A5");
804 // read full response
805 buffer = new byte [24];
806 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
810 rs.Read (buffer, 0, 0);
812 } catch (ArgumentNullException ex) {
813 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
814 Assert.IsNull (ex.InnerException, "#B3");
815 Assert.IsNotNull (ex.Message, "#B4");
816 Assert.AreEqual ("buffer", ex.ParamName, "#B5");
827 #if FEATURE_NO_BSD_SOCKETS
828 [ExpectedException (typeof (PlatformNotSupportedException))]
830 public void Read_Count_Negative ()
832 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
833 string url = "http://" + ep.ToString () + "/test/";
835 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
836 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
839 req.ReadWriteTimeout = 2000;
840 req.KeepAlive = false;
842 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
843 Stream rs = resp.GetResponseStream ();
844 byte [] buffer = new byte [5];
847 rs.Read (buffer, 1, -1);
849 } catch (ArgumentOutOfRangeException ex) {
850 // Specified argument was out of the range of valid values
851 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
852 Assert.IsNull (ex.InnerException, "#A3");
853 Assert.IsNotNull (ex.Message, "#A4");
854 Assert.AreEqual ("size", ex.ParamName, "#A5");
857 // read full response
858 buffer = new byte [24];
859 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
862 rs.Read (buffer, 1, -1);
864 } catch (ArgumentOutOfRangeException ex) {
865 // Specified argument was out of the range of valid values
866 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
867 Assert.IsNull (ex.InnerException, "#B3");
868 Assert.IsNotNull (ex.Message, "#B4");
869 Assert.AreEqual ("size", ex.ParamName, "#B5");
880 #if FEATURE_NO_BSD_SOCKETS
881 [ExpectedException (typeof (PlatformNotSupportedException))]
883 public void Read_Count_Overflow ()
885 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
886 string url = "http://" + ep.ToString () + "/test/";
888 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
889 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
892 req.ReadWriteTimeout = 2000;
893 req.KeepAlive = false;
895 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
896 Stream rs = resp.GetResponseStream ();
897 byte [] buffer = new byte [5];
900 rs.Read (buffer, buffer.Length - 2, 3);
902 } catch (ArgumentOutOfRangeException ex) {
903 // Specified argument was out of the range of valid values
904 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
905 Assert.IsNull (ex.InnerException, "#A3");
906 Assert.IsNotNull (ex.Message, "#A4");
907 Assert.AreEqual ("size", ex.ParamName, "#A5");
910 // read full response
911 buffer = new byte [24];
912 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
915 rs.Read (buffer, buffer.Length - 2, 3);
917 } catch (ArgumentOutOfRangeException ex) {
918 // Specified argument was out of the range of valid values
919 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
920 Assert.IsNull (ex.InnerException, "#B3");
921 Assert.IsNotNull (ex.Message, "#B4");
922 Assert.AreEqual ("size", ex.ParamName, "#B5");
933 #if FEATURE_NO_BSD_SOCKETS
934 [ExpectedException (typeof (PlatformNotSupportedException))]
936 public void Read_Offset_Negative ()
938 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
939 string url = "http://" + ep.ToString () + "/test/";
941 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
942 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
945 req.ReadWriteTimeout = 2000;
946 req.KeepAlive = false;
948 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
949 Stream rs = resp.GetResponseStream ();
950 byte [] buffer = new byte [5];
953 rs.Read (buffer, -1, 0);
955 } catch (ArgumentOutOfRangeException ex) {
956 // Specified argument was out of the range of valid values
957 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
958 Assert.IsNull (ex.InnerException, "#A3");
959 Assert.IsNotNull (ex.Message, "#A4");
960 Assert.AreEqual ("offset", ex.ParamName, "#A5");
963 // read full response
964 buffer = new byte [24];
965 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
968 rs.Read (buffer, -1, 0);
970 } catch (ArgumentOutOfRangeException ex) {
971 // Specified argument was out of the range of valid values
972 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
973 Assert.IsNull (ex.InnerException, "#B3");
974 Assert.IsNotNull (ex.Message, "#B4");
975 Assert.AreEqual ("offset", ex.ParamName, "#B5");
986 #if FEATURE_NO_BSD_SOCKETS
987 [ExpectedException (typeof (PlatformNotSupportedException))]
989 public void Read_Offset_Overflow ()
991 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
992 string url = "http://" + ep.ToString () + "/test/";
994 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
995 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
998 req.ReadWriteTimeout = 2000;
999 req.KeepAlive = false;
1001 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1002 Stream rs = resp.GetResponseStream ();
1003 byte [] buffer = new byte [5];
1006 rs.Read (buffer, buffer.Length + 1, 0);
1007 Assert.Fail ("#A1");
1008 } catch (ArgumentOutOfRangeException ex) {
1009 // Specified argument was out of the range of valid values
1010 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
1011 Assert.IsNull (ex.InnerException, "#A3");
1012 Assert.IsNotNull (ex.Message, "#A4");
1013 Assert.AreEqual ("offset", ex.ParamName, "#A5");
1016 // read full response
1017 buffer = new byte [24];
1018 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
1021 rs.Read (buffer, buffer.Length + 1, 0);
1022 Assert.Fail ("#B1");
1023 } catch (ArgumentOutOfRangeException ex) {
1024 // Specified argument was out of the range of valid values
1025 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
1026 Assert.IsNull (ex.InnerException, "#B3");
1027 Assert.IsNotNull (ex.Message, "#B4");
1028 Assert.AreEqual ("offset", ex.ParamName, "#B5");
1039 [Category ("NotWorking")]
1040 public void Read_Stream_Closed ()
1042 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1043 string url = "http://" + ep.ToString () + "/test/";
1045 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
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 ();
1058 rs.Read (new byte [0], 0, 0);
1059 Assert.Fail ("#A1");
1060 } catch (WebException ex) {
1061 // The request was aborted: The connection was closed unexpectedly
1062 Assert.AreEqual (typeof (WebException), ex.GetType (), "#A2");
1063 Assert.IsNull (ex.InnerException, "#A3");
1064 Assert.IsNotNull (ex.Message, "#A4");
1065 Assert.IsNull (ex.Response, "#A5");
1066 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#A6");
1073 req = (HttpWebRequest) WebRequest.Create (url);
1076 req.ReadWriteTimeout = 2000;
1077 req.KeepAlive = false;
1079 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1080 Stream rs = resp.GetResponseStream ();
1081 byte [] buffer = new byte [24];
1082 Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
1085 rs.Read (new byte [0], 0, 0);
1086 Assert.Fail ("#B1");
1087 } catch (WebException ex) {
1088 // The request was aborted: The connection was closed unexpectedly
1089 Assert.AreEqual (typeof (WebException), ex.GetType (), "#B2");
1090 Assert.IsNull (ex.InnerException, "#B3");
1091 Assert.IsNotNull (ex.Message, "#B4");
1092 Assert.IsNull (ex.Response, "#B5");
1093 Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#B6");
1103 #if FEATURE_NO_BSD_SOCKETS
1104 [ExpectedException (typeof (PlatformNotSupportedException))]
1106 public void ReadTimeout ()
1108 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1109 string url = "http://" + ep.ToString () + "/test/";
1111 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1112 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1115 req.ReadWriteTimeout = 2000;
1116 req.KeepAlive = false;
1118 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1119 Stream rs = resp.GetResponseStream ();
1121 Assert.AreEqual (2000, rs.ReadTimeout, "#1");
1123 Assert.AreEqual (2000, rs.ReadTimeout, "#2");
1133 #if FEATURE_NO_BSD_SOCKETS
1134 [ExpectedException (typeof (PlatformNotSupportedException))]
1136 public void Write ()
1138 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1139 string url = "http://" + ep.ToString () + "/test/";
1141 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1142 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1145 req.ReadWriteTimeout = 2000;
1146 req.KeepAlive = false;
1148 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1149 Stream rs = resp.GetResponseStream ();
1150 byte [] buffer = new byte [5];
1152 rs.Write (buffer, 0, buffer.Length);
1154 } catch (NotSupportedException ex) {
1155 // The stream does not support writing
1156 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
1157 Assert.IsNull (ex.InnerException, "#3");
1158 Assert.IsNotNull (ex.Message, "#4");
1168 #if FEATURE_NO_BSD_SOCKETS
1169 [ExpectedException (typeof (PlatformNotSupportedException))]
1171 public void WriteTimeout ()
1173 IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
1174 string url = "http://" + ep.ToString () + "/test/";
1176 using (SocketResponder responder = new SocketResponder (ep, s => HttpWebResponseTest.FullResponseHandler (s))) {
1177 HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
1180 req.ReadWriteTimeout = 2000;
1181 req.KeepAlive = false;
1183 using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
1184 Stream rs = resp.GetResponseStream ();
1186 Assert.AreEqual (2000, rs.WriteTimeout, "#1");
1188 Assert.AreEqual (2000, rs.WriteTimeout, "#2");