Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGert Driesen <drieseng@users.sourceforge.net>2009-06-21 23:09:27 +0400
committerGert Driesen <drieseng@users.sourceforge.net>2009-06-21 23:09:27 +0400
commite9ff61a03b7f9561f5a6d28fe129ce1dd33c6328 (patch)
tree8c356bf91b85ab28e9aef5db03255b85ee299f6d /mcs/class/System/Test
parent2f6c7d8077b3d07eb3feccda165f1a3fdfbb8202 (diff)
* HttpWebRequestTest.cs: Improved and enabled test for bug #510642.
* WebConnectionStream.cs: Keep count of all bytes written, and perform write overflow check in both buffered and non-buffered writing (if not using chunked transfer encoding). Fixes bug #510642. svn path=/trunk/mcs/; revision=136570
Diffstat (limited to 'mcs/class/System/Test')
-rw-r--r--mcs/class/System/Test/System.Net/ChangeLog4
-rw-r--r--mcs/class/System/Test/System.Net/HttpWebRequestTest.cs179
2 files changed, 175 insertions, 8 deletions
diff --git a/mcs/class/System/Test/System.Net/ChangeLog b/mcs/class/System/Test/System.Net/ChangeLog
index a857c66ed51..1ca61e686d0 100644
--- a/mcs/class/System/Test/System.Net/ChangeLog
+++ b/mcs/class/System/Test/System.Net/ChangeLog
@@ -1,5 +1,9 @@
2009-06-20 Gert Driesen <drieseng@users.sourceforge.net>
+ * HttpWebRequestTest.cs: Improved and enabled test for bug #510642.
+
+2009-06-20 Gert Driesen <drieseng@users.sourceforge.net>
+
* SocketResponder.cs: Made a little more robust.
2009-06-20 Gert Driesen <drieseng@users.sourceforge.net>
diff --git a/mcs/class/System/Test/System.Net/HttpWebRequestTest.cs b/mcs/class/System/Test/System.Net/HttpWebRequestTest.cs
index dfab0a31e6f..704914741b0 100644
--- a/mcs/class/System/Test/System.Net/HttpWebRequestTest.cs
+++ b/mcs/class/System/Test/System.Net/HttpWebRequestTest.cs
@@ -612,36 +612,199 @@ namespace MonoTests.System.Net
}
[Test] // bug #510642
- [Category ("NotWorking")]
public void GetRequestStream_Write_Overflow ()
{
IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8001);
string url = "http://" + IPAddress.Loopback.ToString () + ":8001/test/";
+ // buffered, non-chunked
using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
responder.Start ();
- HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+ HttpWebRequest req;
+ Stream rs;
+ byte [] buffer;
+
+ req = (HttpWebRequest) WebRequest.Create (url);
req.ProtocolVersion = HttpVersion.Version11;
req.Method = "POST";
- req.Timeout = 200;
+ req.Timeout = 1000;
req.ReadWriteTimeout = 100;
req.ContentLength = 2;
- Stream rs = req.GetRequestStream ();
+ rs = req.GetRequestStream ();
+ rs.WriteByte (0x2c);
- byte [] buffer = new byte [] { 0x2a, 0x2c, 0x1d };
+ buffer = new byte [] { 0x2a, 0x1d };
try {
- rs.Write (buffer, 0, 3);
- Assert.Fail ("#1");
+ rs.Write (buffer, 0, buffer.Length);
+ Assert.Fail ("#A1");
+ } catch (ProtocolViolationException ex) {
+ // Bytes to be written to the stream exceed
+ // Content-Length bytes size specified
+ Assert.IsNull (ex.InnerException, "#A2");
+ Assert.IsNotNull (ex.Message, "#A3");
+ } finally {
+ req.Abort ();
+ }
+
+ req = (HttpWebRequest) WebRequest.Create (url);
+ req.ProtocolVersion = HttpVersion.Version11;
+ req.Method = "POST";
+ req.Timeout = 1000;
+ req.ReadWriteTimeout = 100;
+ req.ContentLength = 2;
+
+ rs = req.GetRequestStream ();
+
+ buffer = new byte [] { 0x2a, 0x2c, 0x1d };
+ try {
+ rs.Write (buffer, 0, buffer.Length);
+ Assert.Fail ("#B1");
+ } catch (ProtocolViolationException ex) {
+ // Bytes to be written to the stream exceed
+ // Content-Length bytes size specified
+ Assert.IsNull (ex.InnerException, "#B2");
+ Assert.IsNotNull (ex.Message, "#B3");
+ } finally {
+ req.Abort ();
+ }
+ }
+
+ // buffered, chunked
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req;
+ Stream rs;
+ byte [] buffer;
+
+ /*
+ req = (HttpWebRequest) WebRequest.Create (url);
+ req.ProtocolVersion = HttpVersion.Version11;
+ req.Method = "POST";
+ req.SendChunked = true;
+ req.Timeout = 1000;
+ req.ReadWriteTimeout = 100;
+ req.ContentLength = 2;
+
+ rs = req.GetRequestStream ();
+ rs.WriteByte (0x2c);
+
+ buffer = new byte [] { 0x2a, 0x1d };
+ rs.Write (buffer, 0, buffer.Length);
+ req.Abort ();
+ */
+
+ req = (HttpWebRequest) WebRequest.Create (url);
+ req.ProtocolVersion = HttpVersion.Version11;
+ req.Method = "POST";
+ req.SendChunked = true;
+ req.Timeout = 1000;
+ req.ReadWriteTimeout = 100;
+ req.ContentLength = 2;
+
+ rs = req.GetRequestStream ();
+
+ buffer = new byte [] { 0x2a, 0x2c, 0x1d };
+ rs.Write (buffer, 0, buffer.Length);
+ req.Abort ();
+ }
+
+ // non-buffered, non-chunked
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req;
+ Stream rs;
+ byte [] buffer;
+
+ req = (HttpWebRequest) WebRequest.Create (url);
+ req.AllowWriteStreamBuffering = false;
+ req.ProtocolVersion = HttpVersion.Version11;
+ req.Method = "POST";
+ req.Timeout = 1000;
+ req.ReadWriteTimeout = 100;
+ req.ContentLength = 2;
+
+ rs = req.GetRequestStream ();
+ rs.WriteByte (0x2c);
+
+ buffer = new byte [] { 0x2a, 0x1d };
+ try {
+ rs.Write (buffer, 0, buffer.Length);
+ Assert.Fail ("#C1");
} catch (ProtocolViolationException ex) {
// Bytes to be written to the stream exceed
// Content-Length bytes size specified
- Assert.IsNull (ex.InnerException, "#2");
+ Assert.IsNull (ex.InnerException, "#C2");
Assert.IsNotNull (ex.Message, "#3");
} finally {
req.Abort ();
}
+
+ req = (HttpWebRequest) WebRequest.Create (url);
+ req.AllowWriteStreamBuffering = false;
+ req.ProtocolVersion = HttpVersion.Version11;
+ req.Method = "POST";
+ req.Timeout = 1000;
+ req.ReadWriteTimeout = 100;
+ req.ContentLength = 2;
+
+ rs = req.GetRequestStream ();
+
+ buffer = new byte [] { 0x2a, 0x2c, 0x1d };
+ try {
+ rs.Write (buffer, 0, buffer.Length);
+ Assert.Fail ("#D1");
+ } catch (ProtocolViolationException ex) {
+ // Bytes to be written to the stream exceed
+ // Content-Length bytes size specified
+ Assert.IsNull (ex.InnerException, "#D2");
+ Assert.IsNotNull (ex.Message, "#D3");
+ } finally {
+ req.Abort ();
+ }
+ }
+
+ // non-buffered, chunked
+ using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
+ responder.Start ();
+
+ HttpWebRequest req;
+ Stream rs;
+ byte [] buffer;
+
+ req = (HttpWebRequest) WebRequest.Create (url);
+ req.AllowWriteStreamBuffering = false;
+ req.ProtocolVersion = HttpVersion.Version11;
+ req.Method = "POST";
+ req.SendChunked = true;
+ req.Timeout = 1000;
+ req.ReadWriteTimeout = 100;
+ req.ContentLength = 2;
+
+ rs = req.GetRequestStream ();
+ rs.WriteByte (0x2c);
+
+ buffer = new byte [] { 0x2a, 0x1d };
+ rs.Write (buffer, 0, buffer.Length);
+ req.Abort ();
+
+ req = (HttpWebRequest) WebRequest.Create (url);
+ req.AllowWriteStreamBuffering = false;
+ req.ProtocolVersion = HttpVersion.Version11;
+ req.Method = "POST";
+ req.SendChunked = true;
+ req.Timeout = 1000;
+ req.ReadWriteTimeout = 100;
+ req.ContentLength = 2;
+
+ rs = req.GetRequestStream ();
+
+ buffer = new byte [] { 0x2a, 0x2c, 0x1d };
+ rs.Write (buffer, 0, buffer.Length);
+ req.Abort ();
}
}