Merge pull request #1857 from slluis/fix-assembly-resolver
[mono.git] / mcs / class / System / Test / System.Net / HttpListenerRequestTest.cs
index 411a45adb166e8479733251fe84844857ca97c2b..bc2bb3fa23d743ae75a104d6813567b2b4c8fbdb 100644 (file)
@@ -1,8 +1,9 @@
 //
 // HttpListenerRequestTest.cs - Unit tests for System.Net.HttpListenerRequest
 //
-// Author:
+// Authors:
 //     Gert Driesen (drieseng@users.sourceforge.net)
+//     David Straw
 //
 // Copyright (C) 2007 Gert Driesen
 //
@@ -26,8 +27,6 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0
-
 using System;
 using System.IO;
 using System.Net;
@@ -39,12 +38,10 @@ using NUnit.Framework;
 namespace MonoTests.System.Net
 {
        [TestFixture]
-#if TARGET_JVM
-       [Ignore ("The class HttpListener is not supported")]
-#endif
        public class HttpListenerRequestTest
        {
                [Test]
+               [Category ("NotWorking")] // Bug #5742 
                public void HasEntityBody ()
                {
                        HttpListenerContext ctx;
@@ -147,7 +144,71 @@ namespace MonoTests.System.Net
 
                        listener.Close ();
                }
-       }
-}      
 
-#endif
+               [Test]
+               public void HttpMethod ()
+               {
+                       HttpListener listener = HttpListener2Test.CreateAndStartListener (
+                               "http://127.0.0.1:9000/HttpMethod/");
+                       NetworkStream ns = HttpListener2Test.CreateNS (9000);
+                       HttpListener2Test.Send (ns, "pOsT /HttpMethod/ HTTP/1.1\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123");
+                       HttpListenerContext ctx = listener.GetContext ();
+                       HttpListenerRequest request = ctx.Request;
+                       Assert.AreEqual ("pOsT", request.HttpMethod);
+                       listener.Close ();
+               }
+
+               [Test]
+               public void HttpBasicAuthScheme ()
+               {
+                       HttpListener listener = HttpListener2Test.CreateAndStartListener ("http://*:9000/authTest/", AuthenticationSchemes.Basic);
+                       //dummy-wait for context
+                       listener.BeginGetContext (null, listener);
+                       NetworkStream ns = HttpListener2Test.CreateNS (9000);
+                       HttpListener2Test.Send (ns, "GET /authTest/ HTTP/1.0\r\n\r\n");
+                       String response = HttpListener2Test.Receive (ns, 512);
+                       Assert.IsTrue (response.Contains ("WWW-Authenticate: Basic realm"), "#A");
+                       ns.Close ();
+                       listener.Close ();
+               }
+
+               [Test]
+               public void HttpRequestUriIsNotDecoded ()
+               {
+                       HttpListener listener = HttpListener2Test.CreateAndStartListener (
+                               "http://127.0.0.1:9000/RequestUriDecodeTest/");
+                       NetworkStream ns = HttpListener2Test.CreateNS (9000);
+                       HttpListener2Test.Send (ns, "GET /RequestUriDecodeTest/?a=b&c=d%26e HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n");
+                       HttpListenerContext ctx = listener.GetContext ();
+                       HttpListenerRequest request = ctx.Request;
+                       Assert.AreEqual ("/RequestUriDecodeTest/?a=b&c=d%26e", request.Url.PathAndQuery);
+                       listener.Close ();
+               }
+
+               [Test] // #29927
+               public void HttpRequestUriUnescape ()
+               {
+                       var prefix = "http://localhost:12345/";
+                       var key = "Product/1";
+
+                       var expectedUrl = prefix + key + "/";
+                       var rawUrl = prefix + Uri.EscapeDataString (key) + "/";
+
+                       HttpListener listener = new HttpListener ();
+                       listener.Prefixes.Add (prefix);
+                       listener.Start ();
+
+                       var contextTask = listener.GetContextAsync ();
+
+                       var request = (HttpWebRequest) WebRequest.Create (rawUrl);
+                       request.GetResponseAsync ();
+
+                       if(!contextTask.Wait (1000))
+                               Assert.Fail ("Timeout");
+
+                       Assert.AreEqual (expectedUrl, contextTask.Result.Request.Url.AbsoluteUri);
+
+                       listener.Close ();
+               }
+       }
+}