using System.Net.Sockets;
using System.Text;
+using MonoTests.Helpers;
+
using NUnit.Framework;
namespace MonoTests.System.Net
[Test]
public void CharacterSet_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
Assert.IsNotNull (ex.Message, "#4");
Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
}
-
- responder.Stop ();
}
}
[Test]
public void Close_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
((IDisposable) resp).Dispose ();
resp.Close ();
-
- responder.Stop ();
}
}
[Test]
public void ContentEncoding_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
Assert.IsNotNull (ex.Message, "#4");
Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
}
-
- responder.Stop ();
}
}
[Test]
public void ContentLength_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
((IDisposable) resp).Dispose ();
Assert.AreEqual (9, resp.ContentLength);
-
- responder.Stop ();
}
}
[Test]
public void ContentType_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
Assert.IsNotNull (ex.Message, "#4");
Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
}
-
- responder.Stop ();
}
}
[Test]
public void Cookies_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
Assert.IsNotNull (ex.Message, "#B4");
Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#B5");
}
-
- responder.Stop ();
}
}
[Test]
public void GetResponseHeader_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
Assert.IsNotNull (ex.Message, "#4");
Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
}
-
- responder.Stop ();
}
}
[Test]
public void GetResponseStream_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
Assert.IsNotNull (ex.Message, "#4");
Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
}
-
- responder.Stop ();
}
}
[Test]
public void Headers_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
((IDisposable) resp).Dispose ();
-#if NET_2_0
WebHeaderCollection headers = resp.Headers;
Assert.AreEqual (6, headers.Count, "#1");
Assert.AreEqual ("9", headers ["Content-Length"], "#2");
Assert.AreEqual ("Wed, 08 Jan 2003 23:11:55 GMT", headers ["Last-Modified"], "#5");
Assert.AreEqual ("UserID=Miguel,StoreProfile=true", headers ["Set-Cookie"], "#6");
Assert.AreEqual ("Mono/Test", headers ["Server"], "#7");
-#else
- try {
- WebHeaderCollection headers = resp.Headers;
- Assert.Fail ("#1:" + headers);
- } catch (ObjectDisposedException ex) {
- Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
- Assert.IsNull (ex.InnerException, "#3");
- Assert.IsNotNull (ex.Message, "#4");
- Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
- }
-#endif
-
- responder.Stop ();
}
}
[Test]
public void LastModified_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
Assert.IsNotNull (ex.Message, "#4");
Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
}
-
- responder.Stop ();
}
}
[Test]
public void Method_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
Assert.IsNotNull (ex.Message, "#4");
Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
}
-
- responder.Stop ();
}
}
[Test]
public void ProtocolVersion_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
Assert.IsNotNull (ex.Message, "#4");
Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
}
-
- responder.Stop ();
}
}
[Test]
public void ResponseUri_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
Assert.IsNotNull (ex.Message, "#4");
Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
}
-
- responder.Stop ();
}
}
[Test]
public void Server_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
Assert.IsNotNull (ex.Message, "#4");
Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
}
-
- responder.Stop ();
}
}
[Test]
public void StatusCode_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
((IDisposable) resp).Dispose ();
Assert.AreEqual (HttpStatusCode.OK, resp.StatusCode);
-
- responder.Stop ();
}
}
[Test]
public void StatusDescription_Disposed ()
{
- IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
- string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
- using (SocketResponder responder = new SocketResponder (new IPEndPoint (IPAddress.Loopback, 8000), new SocketRequestHandler (FullResponseHandler))) {
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
responder.Start ();
HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
Assert.IsNotNull (ex.Message, "#4");
Assert.AreEqual (typeof (HttpWebResponse).FullName, ex.ObjectName, "#5");
}
-
- responder.Stop ();
}
}
- static byte [] FullResponseHandler (Socket socket)
+ internal static byte [] FullResponseHandler (Socket socket)
{
StringWriter sw = new StringWriter ();
sw.NewLine = "\r\n";
return Encoding.UTF8.GetBytes (sw.ToString ());
}
}
+
+ [TestFixture]
+ public class HttpResponseStreamTest
+ {
+ [Test]
+ public void BeginRead_Buffer_Null ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ byte [] buffer = null;
+ try {
+ try {
+ rs.BeginRead (buffer, 0, 0, null, null);
+ Assert.Fail ("#A1");
+ } catch (ArgumentNullException ex) {
+ Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
+ Assert.IsNull (ex.InnerException, "#A3");
+ Assert.IsNotNull (ex.Message, "#A4");
+ Assert.AreEqual ("buffer", ex.ParamName, "#A5");
+ }
+
+ // read full response
+ buffer = new byte [24];
+ Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
+
+ buffer = null;
+ try {
+ rs.BeginRead (buffer, 0, 0, null, null);
+ Assert.Fail ("#B1");
+ } catch (ArgumentNullException ex) {
+ Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
+ Assert.IsNull (ex.InnerException, "#B3");
+ Assert.IsNotNull (ex.Message, "#B4");
+ Assert.AreEqual ("buffer", ex.ParamName, "#B5");
+ }
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void BeginWrite ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ byte [] buffer = new byte [5];
+ try {
+ rs.BeginWrite (buffer, 0, buffer.Length, null, null);
+ Assert.Fail ("#1");
+ } catch (NotSupportedException ex) {
+ // The stream does not support writing
+ Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
+ Assert.IsNull (ex.InnerException, "#3");
+ Assert.IsNotNull (ex.Message, "#4");
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ [Category ("NotWorking")]
+ public void CanRead ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ try {
+ Assert.IsTrue (rs.CanRead, "#1");
+ rs.Close ();
+ Assert.IsFalse (rs.CanRead, "#2");
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void CanSeek ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ try {
+ Assert.IsFalse (rs.CanSeek, "#1");
+ rs.Close ();
+ Assert.IsFalse (rs.CanSeek, "#2");
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test] // bug #324182
+ public void CanTimeout ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ try {
+ Assert.IsTrue (rs.CanTimeout, "#1");
+ rs.Close ();
+ Assert.IsTrue (rs.CanTimeout, "#2");
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void CanWrite ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ try {
+ Assert.IsFalse (rs.CanWrite, "#1");
+ rs.Close ();
+ Assert.IsFalse (rs.CanWrite, "#2");
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void Read ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ byte [] buffer = new byte [5];
+ try {
+ Assert.AreEqual (1, rs.Read (buffer, 4, 1), "#A1");
+ Assert.AreEqual (new byte [] { 0x00, 0x00, 0x00, 0x00, 0x3c }, buffer, "#A2");
+ Assert.AreEqual (2, rs.Read (buffer, 0, 2), "#B1");
+ Assert.AreEqual (new byte [] { 0x64, 0x75, 0x00, 0x00, 0x3c }, buffer, "#B2");
+ Assert.AreEqual (4, rs.Read (buffer, 1, 4), "#C1");
+ Assert.AreEqual (new byte [] { 0x64, 0x6d, 0x6d, 0x79, 0x20 }, buffer, "#C2");
+ Assert.AreEqual (2, rs.Read (buffer, 0, 3), "#D1");
+ Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#D2");
+ Assert.AreEqual (0, rs.Read (buffer, 1, 3), "#E1");
+ Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#E2");
+ Assert.AreEqual (0, rs.Read (buffer, buffer.Length, 0), "#G1");
+ Assert.AreEqual (new byte [] { 0x2f, 0x3e, 0x6d, 0x79, 0x20 }, buffer, "#G2");
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void Read_Buffer_Null ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ byte [] buffer = null;
+ try {
+ try {
+ rs.Read (buffer, 0, 0);
+ Assert.Fail ("#A1");
+ } catch (ArgumentNullException ex) {
+ Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
+ Assert.IsNull (ex.InnerException, "#A3");
+ Assert.IsNotNull (ex.Message, "#A4");
+ Assert.AreEqual ("buffer", ex.ParamName, "#A5");
+ }
+
+ // read full response
+ buffer = new byte [24];
+ Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
+
+ buffer = null;
+ try {
+ rs.Read (buffer, 0, 0);
+ Assert.Fail ("#B1");
+ } catch (ArgumentNullException ex) {
+ Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
+ Assert.IsNull (ex.InnerException, "#B3");
+ Assert.IsNotNull (ex.Message, "#B4");
+ Assert.AreEqual ("buffer", ex.ParamName, "#B5");
+ }
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void Read_Count_Negative ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ byte [] buffer = new byte [5];
+ try {
+ try {
+ rs.Read (buffer, 1, -1);
+ Assert.Fail ("#A1");
+ } catch (ArgumentOutOfRangeException ex) {
+ // Specified argument was out of the range of valid values
+ Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
+ Assert.IsNull (ex.InnerException, "#A3");
+ Assert.IsNotNull (ex.Message, "#A4");
+ Assert.AreEqual ("size", ex.ParamName, "#A5");
+ }
+
+ // read full response
+ buffer = new byte [24];
+ Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
+
+ try {
+ rs.Read (buffer, 1, -1);
+ Assert.Fail ("#B1");
+ } catch (ArgumentOutOfRangeException ex) {
+ // Specified argument was out of the range of valid values
+ Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
+ Assert.IsNull (ex.InnerException, "#B3");
+ Assert.IsNotNull (ex.Message, "#B4");
+ Assert.AreEqual ("size", ex.ParamName, "#B5");
+ }
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void Read_Count_Overflow ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ byte [] buffer = new byte [5];
+ try {
+ try {
+ rs.Read (buffer, buffer.Length - 2, 3);
+ Assert.Fail ("#A1");
+ } catch (ArgumentOutOfRangeException ex) {
+ // Specified argument was out of the range of valid values
+ Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
+ Assert.IsNull (ex.InnerException, "#A3");
+ Assert.IsNotNull (ex.Message, "#A4");
+ Assert.AreEqual ("size", ex.ParamName, "#A5");
+ }
+
+ // read full response
+ buffer = new byte [24];
+ Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
+
+ try {
+ rs.Read (buffer, buffer.Length - 2, 3);
+ Assert.Fail ("#B1");
+ } catch (ArgumentOutOfRangeException ex) {
+ // Specified argument was out of the range of valid values
+ Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
+ Assert.IsNull (ex.InnerException, "#B3");
+ Assert.IsNotNull (ex.Message, "#B4");
+ Assert.AreEqual ("size", ex.ParamName, "#B5");
+ }
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void Read_Offset_Negative ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ byte [] buffer = new byte [5];
+ try {
+ try {
+ rs.Read (buffer, -1, 0);
+ Assert.Fail ("#A1");
+ } catch (ArgumentOutOfRangeException ex) {
+ // Specified argument was out of the range of valid values
+ Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
+ Assert.IsNull (ex.InnerException, "#A3");
+ Assert.IsNotNull (ex.Message, "#A4");
+ Assert.AreEqual ("offset", ex.ParamName, "#A5");
+ }
+
+ // read full response
+ buffer = new byte [24];
+ Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
+
+ try {
+ rs.Read (buffer, -1, 0);
+ Assert.Fail ("#B1");
+ } catch (ArgumentOutOfRangeException ex) {
+ // Specified argument was out of the range of valid values
+ Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
+ Assert.IsNull (ex.InnerException, "#B3");
+ Assert.IsNotNull (ex.Message, "#B4");
+ Assert.AreEqual ("offset", ex.ParamName, "#B5");
+ }
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void Read_Offset_Overflow ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ byte [] buffer = new byte [5];
+ try {
+ try {
+ rs.Read (buffer, buffer.Length + 1, 0);
+ Assert.Fail ("#A1");
+ } catch (ArgumentOutOfRangeException ex) {
+ // Specified argument was out of the range of valid values
+ Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
+ Assert.IsNull (ex.InnerException, "#A3");
+ Assert.IsNotNull (ex.Message, "#A4");
+ Assert.AreEqual ("offset", ex.ParamName, "#A5");
+ }
+
+ // read full response
+ buffer = new byte [24];
+ Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
+
+ try {
+ rs.Read (buffer, buffer.Length + 1, 0);
+ Assert.Fail ("#B1");
+ } catch (ArgumentOutOfRangeException ex) {
+ // Specified argument was out of the range of valid values
+ Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
+ Assert.IsNull (ex.InnerException, "#B3");
+ Assert.IsNotNull (ex.Message, "#B4");
+ Assert.AreEqual ("offset", ex.ParamName, "#B5");
+ }
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ [Category ("NotWorking")]
+ public void Read_Stream_Closed ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req;
+
+ req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ rs.Close ();
+ try {
+ rs.Read (new byte [0], 0, 0);
+ Assert.Fail ("#A1");
+ } catch (WebException ex) {
+ // The request was aborted: The connection was closed unexpectedly
+ Assert.AreEqual (typeof (WebException), ex.GetType (), "#A2");
+ Assert.IsNull (ex.InnerException, "#A3");
+ Assert.IsNotNull (ex.Message, "#A4");
+ Assert.IsNull (ex.Response, "#A5");
+ Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#A6");
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+
+ req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ byte [] buffer = new byte [24];
+ Assert.AreEqual (9, rs.Read (buffer, 0, buffer.Length));
+ rs.Close ();
+ try {
+ rs.Read (new byte [0], 0, 0);
+ Assert.Fail ("#B1");
+ } catch (WebException ex) {
+ // The request was aborted: The connection was closed unexpectedly
+ Assert.AreEqual (typeof (WebException), ex.GetType (), "#B2");
+ Assert.IsNull (ex.InnerException, "#B3");
+ Assert.IsNotNull (ex.Message, "#B4");
+ Assert.IsNull (ex.Response, "#B5");
+ Assert.AreEqual (WebExceptionStatus.ConnectionClosed, ex.Status, "#B6");
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void ReadTimeout ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ try {
+ Assert.AreEqual (2000, rs.ReadTimeout, "#1");
+ rs.Close ();
+ Assert.AreEqual (2000, rs.ReadTimeout, "#2");
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void Write ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ byte [] buffer = new byte [5];
+ try {
+ rs.Write (buffer, 0, buffer.Length);
+ Assert.Fail ("#1");
+ } catch (NotSupportedException ex) {
+ // The stream does not support writing
+ Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
+ Assert.IsNull (ex.InnerException, "#3");
+ Assert.IsNotNull (ex.Message, "#4");
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void WriteTimeout ()
+ {
+ IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
+ string url = "http://" + ep.ToString () + "/test/";
+
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ req.Method = "GET";
+ req.Timeout = 2000;
+ req.ReadWriteTimeout = 2000;
+ req.KeepAlive = false;
+
+ using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+ Stream rs = resp.GetResponseStream ();
+ try {
+ Assert.AreEqual (2000, rs.WriteTimeout, "#1");
+ rs.Close ();
+ Assert.AreEqual (2000, rs.WriteTimeout, "#2");
+ } finally {
+ rs.Close ();
+ req.Abort ();
+ }
+ }
+ }
+ }
+ }
}