* HttpListener2Test.cs: Added test for bug #513849.
authorGert Driesen <drieseng@users.sourceforge.net>
Sat, 20 Jun 2009 13:22:17 +0000 (13:22 -0000)
committerGert Driesen <drieseng@users.sourceforge.net>
Sat, 20 Jun 2009 13:22:17 +0000 (13:22 -0000)
* HttpWebRequestTest.cs: Enabled test for bug #508027. Added test for
bug #513087.
* WebClientTest.cs: Added test for bug #484795, for Encoding property.

svn path=/trunk/mcs/; revision=136544

mcs/class/System/Test/System.Net/ChangeLog
mcs/class/System/Test/System.Net/HttpListener2Test.cs
mcs/class/System/Test/System.Net/HttpWebRequestTest.cs
mcs/class/System/Test/System.Net/WebClientTest.cs

index 18aeb3fcf2e4d79a7b4e30aa6e938f5094179622..d5348f75f701a981955aea9b2a7844ed2be23fe5 100644 (file)
@@ -1,3 +1,10 @@
+2009-06-20  Gert Driesen  <drieseng@users.sourceforge.net>
+
+       * HttpListener2Test.cs: Added test for bug #513849.
+       * HttpWebRequestTest.cs: Enabled test for bug #508027. Added test for
+       bug #513087.
+       * WebClientTest.cs: Added test for bug #484795, for Encoding property.
+
 2009-06-16  AndrĂ©s G. Aragoneses  <aaragoneses@novell.com>
 
        * WebRequestTest.cs: Drop NotWorking attrib, more accurate tests.
index fcd36d91bd62fa1d513a03e82341eaefa90f9097..f79f1593259caf2c1e38f6dcf4cb725da7828c62 100644 (file)
@@ -723,7 +723,19 @@ namespace MonoTests.System.Net {
 
                        listener.Close ();
                }
-               
+
+               [Test] // bug #513849
+               public void ClosePort ()
+               {
+                       var h = new HttpListener ();
+                       h.Prefixes.Add ("http://127.0.0.1:8080/");
+                       h.Start ();
+                       h.BeginGetContext (null, null);
+                       h.Stop ();
+                       TcpListener t = new TcpListener (IPAddress.Parse ("127.0.0.1"), 8080);
+                       t.Start ();
+                       t.Stop ();
+               }
        }
 }
 #endif
index cffc59b0e1e67b434c691793882024f1171b8fea..dfab0a31e6fa0059d046d0e34829c64f48912122 100644 (file)
@@ -381,7 +381,6 @@ namespace MonoTests.System.Net
                }
 
                [Test] // bug #508027
-               [Category ("NotWorking")]
                public void BeginGetResponse ()
                {
                        IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8003);
@@ -544,7 +543,7 @@ namespace MonoTests.System.Net
                        }
                }
 
-               [Test] // bug #510661
+               [Test] // bug #510661 and #514996
                [Category ("NotWorking")]
                public void GetRequestStream_Close_NotAllBytesWritten ()
                {
@@ -922,6 +921,40 @@ namespace MonoTests.System.Net
                        }
                }
 
+               [Test] // bug #513087
+               public void NonStandardVerb ()
+               {
+                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       string url = "http://" + IPAddress.Loopback.ToString () + ":8000/moved/";
+
+                       using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (VerbEchoHandler))) {
+                               responder.Start ();
+
+                               HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);
+                               req.Method = "WhatEver";
+                               req.KeepAlive = false;
+                               req.Timeout = 20000;
+                               req.ReadWriteTimeout = 20000;
+
+                               Stream rs = req.GetRequestStream ();
+                               rs.Close ();
+
+                               using (HttpWebResponse resp = (HttpWebResponse) req.GetResponse ()) {
+                                       StreamReader sr = new StreamReader (resp.GetResponseStream (),
+                                               Encoding.UTF8);
+                                       string body = sr.ReadToEnd ();
+
+                                       Assert.AreEqual (resp.StatusCode, HttpStatusCode.OK, "#1");
+                                       Assert.AreEqual (resp.ResponseUri.ToString (), "http://" +
+                                               ep.ToString () + "/moved/", "#2");
+                                       Assert.AreEqual ("WhatEver", resp.Method, "#3");
+                                       Assert.AreEqual ("WhatEver", body, "#4");
+                               }
+
+                               responder.Stop ();
+                       }
+               }
+
                [Test]
                [Category ("NotWorking")] // Assert #2 fails
                public void NotModiedSince ()
@@ -1133,6 +1166,44 @@ namespace MonoTests.System.Net
                        return Encoding.UTF8.GetBytes (sw.ToString ());
                }
 
+               static byte [] VerbEchoHandler (Socket socket)
+               {
+                       MemoryStream ms = new MemoryStream ();
+                       byte [] buffer = new byte [4096];
+                       int bytesReceived = socket.Receive (buffer);
+                       while (bytesReceived > 0) {
+                               ms.Write (buffer, 0, bytesReceived);
+                               if (socket.Available > 0) {
+                                       bytesReceived = socket.Receive (buffer);
+                               } else {
+                                       bytesReceived = 0;
+                               }
+                       }
+                       ms.Flush ();
+                       ms.Position = 0;
+                       string statusLine = null;
+                       using (StreamReader sr = new StreamReader (ms, Encoding.UTF8)) {
+                               statusLine = sr.ReadLine ();
+                       }
+
+                       string verb = "DEFAULT";
+                       if (statusLine != null) {
+                               string [] parts = statusLine.Split (' ');
+                               if (parts.Length > 0)
+                                       verb = parts [0];
+                       }
+
+                       StringWriter sw = new StringWriter ();
+                       sw.WriteLine ("HTTP/1.1 200 OK");
+                       sw.WriteLine ("Content-Type: text/plain");
+                       sw.WriteLine ("Content-Length: " + verb.Length);
+                       sw.WriteLine ();
+                       sw.Write (verb);
+                       sw.Flush ();
+
+                       return Encoding.UTF8.GetBytes (sw.ToString ());
+               }
+
                [Test]
                public void NtlmAuthentication ()
                {
index fa57be61aec5571ed3fed578ea9a5c0ec43f6a02..9faf08cf5d799b73eb9c85a4c2397c579b63b37a 100644 (file)
@@ -5,12 +5,15 @@
 //
 
 using System;
+using System.Collections;
 using System.Collections.Specialized;
+using System.Globalization;
 using System.IO;
 using System.Net;
-using System.Collections;
+using System.Net.Sockets;
 using System.Runtime.Serialization;
-
+using System.Text;
+using System.Threading;
 using NUnit.Framework;
 
 namespace MonoTests.System.Net
@@ -382,6 +385,30 @@ namespace MonoTests.System.Net
                                Assert.IsNotNull (inner.Message, "#9");
                        }
                }
+
+               [Test]
+               public void EncodingTest ()
+               {
+                       WebClient wc = new WebClient ();
+                       Assert.AreSame (Encoding.Default, wc.Encoding, "#1");
+                       wc.Encoding = Encoding.ASCII;
+                       Assert.AreSame (Encoding.ASCII, wc.Encoding, "#2");
+               }
+
+               [Test]
+               public void Encoding_Value_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.Encoding = null;
+                               Assert.Fail ("#1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.AreEqual ("Encoding", ex.ParamName, "#6");
+                       }
+               }
 #endif
 
                [Test] // OpenRead (string)
@@ -1667,6 +1694,30 @@ namespace MonoTests.System.Net
                }
 #endif
 
+               [Test]
+               public void UploadValues1 ()
+               {
+                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+
+                       using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
+                               responder.Start ();
+
+                               WebClient wc = new WebClient ();
+#if NET_2_0
+                               wc.Encoding = Encoding.ASCII;
+#endif
+
+                               NameValueCollection nvc = new NameValueCollection ();
+                               nvc.Add ("Name", "\u0041\u2262\u0391\u002E");
+                               nvc.Add ("Address", "\u002E\u2262\u0041\u0391");
+
+                               byte [] buffer = wc.UploadValues (url, nvc);
+                               string response = Encoding.UTF8.GetString (buffer);
+                               Assert.AreEqual ("Name=A%e2%89%a2%ce%91.&Address=.%e2%89%a2A%ce%91\r\n", response);
+                       }
+               }
+
                [Test] // UploadValues (string, NameValueCollection)
                public void UploadValues1_Address_Null ()
                {
@@ -1982,5 +2033,89 @@ namespace MonoTests.System.Net
                        }
                }
 #endif
+
+               static byte [] EchoRequestHandler (Socket socket)
+               {
+                       MemoryStream ms = new MemoryStream ();
+                       byte [] buffer = new byte [4096];
+                       int bytesReceived = socket.Receive (buffer);
+                       while (bytesReceived > 0) {
+                               ms.Write (buffer, 0, bytesReceived);
+                               if (socket.Available > 0) {
+                                       bytesReceived = socket.Receive (buffer);
+                               } else {
+                                       bytesReceived = 0;
+                               }
+                       }
+                       ms.Flush ();
+                       ms.Position = 0;
+
+                       StringBuilder sb = new StringBuilder ();
+
+                       string expect = null;
+
+                       StreamReader sr = new StreamReader (ms, Encoding.UTF8);
+                       string line = sr.ReadLine ();
+                       byte state = 0;
+                       while (line != null) {
+                               if (state > 0) {
+                                       state = 2;
+                                       sb.Append (line);
+                                       sb.Append ("\r\n");
+                                       line = sr.ReadLine ();
+                               } else {
+                                       if (line.StartsWith ("Expect:"))
+                                               expect = line.Substring (8);
+                                       line = sr.ReadLine ();
+                                       if (line.Length == 0) {
+                                               state = 1;
+                                               line = sr.ReadLine ();
+                                       }
+                               }
+                       }
+
+                       StringWriter sw = new StringWriter ();
+
+                       if (expect == "100-continue" && state != 2) {
+                               sw.WriteLine ("HTTP/1.1 100 Continue");
+                               sw.WriteLine ();
+                               sw.Flush ();
+
+                               socket.Send (Encoding.UTF8.GetBytes (sw.ToString ()));
+
+                               // receive body
+                               ms = new MemoryStream ();
+                               buffer = new byte [4096];
+                               bytesReceived = socket.Receive (buffer);
+                               while (bytesReceived > 0) {
+                                       ms.Write (buffer, 0, bytesReceived);
+                                       if (socket.Available > 0) {
+                                               bytesReceived = socket.Receive (buffer);
+                                       } else {
+                                               bytesReceived = 0;
+                                       }
+                               }
+                               ms.Flush ();
+                               ms.Position = 0;
+
+                               sb = new StringBuilder ();
+                               sr = new StreamReader (ms, Encoding.UTF8);
+                               line = sr.ReadLine ();
+                               while (line != null) {
+                                       sb.Append (line);
+                                       sb.Append ("\r\n");
+                                       line = sr.ReadLine ();
+                               }
+                       }
+
+                       sw.WriteLine ("HTTP/1.1 200 OK");
+                       sw.WriteLine ("Content-Type: text/xml");
+                       sw.WriteLine ("Content-Length: " + sb.Length.ToString (CultureInfo.InvariantCulture));
+                       sw.WriteLine ();
+                       sw.Write (sb.ToString ());
+                       sw.Flush ();
+
+                       return Encoding.UTF8.GetBytes (sw.ToString ());
+               }
        }
 }