[System/ServiceModel] Fix more hardcoded test ports
[mono.git] / mcs / class / System / Test / System.Net / HttpListener2Test.cs
index 6e459b9d07896f0cf07b83e37b9dfdd9d2848656..45649b8ad51a173ed0a658892fbf07fd0330042f 100644 (file)
@@ -38,6 +38,8 @@ using System.Threading;
 
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 // ***************************************************************************************
 // NOTE: when adding prefixes, make then unique per test, as MS might take 'some time' to
 // unregister it even after explicitly closing the listener.
@@ -136,8 +138,9 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test1 ()
                {
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test1/");
-                       NetworkStream ns = CreateNS (9000);
+                       var port = NetworkHelpers.FindFreePort ();
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test1/");
+                       NetworkStream ns = CreateNS (port);
                        Send (ns, "GET / HTTP/1.1\r\n\r\n"); // No host
                        string response = Receive (ns, 512);
                        ns.Close ();
@@ -147,8 +150,9 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test2 ()
                {
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test2/");
-                       NetworkStream ns = CreateNS (9000);
+                       var port = NetworkHelpers.FindFreePort ();
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test2/");
+                       NetworkStream ns = CreateNS (port);
                        Send (ns, "GET / HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n"); // no prefix
                        string response = Receive (ns, 512);
                        ns.Close ();
@@ -182,8 +186,9 @@ namespace MonoTests.System.Net {
                        bad.Append ('}');
 
                        foreach (char b in bad.ToString ()){
-                               HttpListener listener = CreateAndStartListener ("http://127.0.0.1:9000/test3/");
-                               NetworkStream ns = CreateNS (9000);
+                               var port = NetworkHelpers.FindFreePort ();
+                               HttpListener listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test3/");
+                               NetworkStream ns = CreateNS (port);
                                Send (ns, String.Format ("MA{0} / HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n", b)); // bad method
                                
                                string response = Receive (ns, 512);
@@ -196,8 +201,9 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test4 ()
                {
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test4/");
-                       NetworkStream ns = CreateNS (9000);
+                       var port = NetworkHelpers.FindFreePort ();
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test4/");
+                       NetworkStream ns = CreateNS (port);
                        Send (ns, "POST /test4/ HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n"); // length required
                        string response = Receive (ns, 512);
                        ns.Close ();
@@ -207,8 +213,9 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test5 ()
                {
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test5/");
-                       NetworkStream ns = CreateNS (9000);
+                       var port = NetworkHelpers.FindFreePort ();
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test5/");
+                       NetworkStream ns = CreateNS (port);
                        Send (ns, "POST / HTTP/1.1\r\nHost: 127.0.0.1\r\nTransfer-Encoding: pepe\r\n\r\n"); // not implemented
                        string response = Receive (ns, 512);
                        ns.Close ();
@@ -218,8 +225,9 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test6 ()
                {
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test6/");
-                       NetworkStream ns = CreateNS (9000);
+                       var port = NetworkHelpers.FindFreePort ();
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test6/");
+                       NetworkStream ns = CreateNS (port);
                         // not implemented! This is against the RFC. Should be a bad request/length required
                        Send (ns, "POST /test6/ HTTP/1.1\r\nHost: 127.0.0.1\r\nTransfer-Encoding: identity\r\n\r\n");
                        string response = Receive (ns, 512);
@@ -230,8 +238,9 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test7 ()
                {
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test7/");
-                       NetworkStream ns = CreateNS (9000);
+                       var port = NetworkHelpers.FindFreePort ();
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test7/");
+                       NetworkStream ns = CreateNS (port);
                        Send (ns, "POST /test7/ HTTP/1.1\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123");
                        HttpListenerContext ctx = _listener.GetContext ();
                        Send (ctx.Response.OutputStream, "%%%OK%%%");
@@ -245,8 +254,9 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test8 ()
                {
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test8/");
-                       NetworkStream ns = CreateNS (9000);
+                       var port = NetworkHelpers.FindFreePort ();
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test8/");
+                       NetworkStream ns = CreateNS (port);
                        // Just like Test7, but 1.0
                        Send (ns, "POST /test8/ HTTP/1.0\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123");
                        HttpListenerContext ctx = _listener.GetContext ();
@@ -261,9 +271,10 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test9 ()
                {
+                       var port = NetworkHelpers.FindFreePort ();
                        // 1.0 + "Transfer-Encoding: chunked"
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test9/");
-                       NetworkStream ns = CreateNS (9000);
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test9/");
+                       NetworkStream ns = CreateNS (port);
                        Send (ns, "POST /test9/ HTTP/1.0\r\nHost: 127.0.0.1\r\nTransfer-Encoding: chunked\r\n\r\n3\r\n123\r\n0\r\n\r\n");
                        bool timeout;
                        string response = ReceiveWithTimeout (ns, 512, 1000, out timeout);
@@ -275,9 +286,10 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test10 ()
                {
+                       var port = NetworkHelpers.FindFreePort ();
                        // Same as Test9, but now we shutdown the socket for sending.
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test10/");
-                       MyNetworkStream ns = CreateNS (9000);
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test10/");
+                       MyNetworkStream ns = CreateNS (port);
                        Send (ns, "POST /test10/ HTTP/1.0\r\nHost: 127.0.0.1\r\nTransfer-Encoding: chunked\r\n\r\n3\r\n123\r\n0\r\n\r\n");
                        ns.GetSocket ().Shutdown (SocketShutdown.Send);
                        bool timeout;
@@ -290,9 +302,10 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test11 ()
                {
+                       var port = NetworkHelpers.FindFreePort ();
                        // 0.9
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test11/");
-                       MyNetworkStream ns = CreateNS (9000);
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test11/");
+                       MyNetworkStream ns = CreateNS (port);
                        Send (ns, "POST /test11/ HTTP/0.9\r\nHost: 127.0.0.1\r\n\r\n123");
                        ns.GetSocket ().Shutdown (SocketShutdown.Send);
                        string input = Receive (ns, 512);
@@ -303,9 +316,10 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test12 ()
                {
+                       var port = NetworkHelpers.FindFreePort ();
                        // 0.9
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test12/");
-                       MyNetworkStream ns = CreateNS (9000);
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test12/");
+                       MyNetworkStream ns = CreateNS (port);
                        Send (ns, "POST /test12/ HTTP/0.9\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123");
                        ns.GetSocket ().Shutdown (SocketShutdown.Send);
                        string input = Receive (ns, 512);
@@ -316,9 +330,10 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test13 ()
                {
+                       var port = NetworkHelpers.FindFreePort ();
                        // 0.9
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test13/");
-                       MyNetworkStream ns = CreateNS (9000);
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test13/");
+                       MyNetworkStream ns = CreateNS (port);
                        Send (ns, "GEt /test13/ HTTP/0.9\r\nHost: 127.0.0.1\r\n\r\n");
                        ns.GetSocket ().Shutdown (SocketShutdown.Send);
                        string input = Receive (ns, 512);
@@ -332,8 +347,9 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test14 ()
                {
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test14/");
-                       MyNetworkStream ns = CreateNS (9000);
+                       var port = NetworkHelpers.FindFreePort ();
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test14/");
+                       MyNetworkStream ns = CreateNS (port);
                        Send (ns, "POST /test14/ HTTP/1.0\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123");
                        HttpListenerContext c = _listener.GetContext ();
                        test14_request = c.Request;
@@ -367,9 +383,10 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test15 ()
                {
+                       var port = NetworkHelpers.FindFreePort ();
                        // 2 separate writes -> 2 packets. Body size > 8kB
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test15/");
-                       MyNetworkStream ns = CreateNS (9000);
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test15/");
+                       MyNetworkStream ns = CreateNS (port);
                        Send (ns, "POST /test15/ HTTP/1.0\r\nHost: 127.0.0.1\r\nContent-Length: 8888\r\n\r\n");
                        Thread.Sleep (800);
                        string data = new string ('a', 8888);
@@ -388,9 +405,10 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test16 ()
                {
+                       var port = NetworkHelpers.FindFreePort ();
                        // 1 single write with headers + body (size > 8kB)
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test16/");
-                       MyNetworkStream ns = CreateNS (9000);
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test16/");
+                       MyNetworkStream ns = CreateNS (port);
                        StringBuilder sb = new StringBuilder ();
                        sb.Append ("POST /test16/ HTTP/1.0\r\nHost: 127.0.0.1\r\nContent-Length: 8888\r\n\r\n");
                        string eights = new string ('b', 8888);
@@ -411,8 +429,9 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test17 ()
                {
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/test17/");
-                       NetworkStream ns = CreateNS (9000);
+                       var port = NetworkHelpers.FindFreePort ();
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/test17/");
+                       NetworkStream ns = CreateNS (port);
                        Send (ns, "RANDOM /test17/ HTTP/1.1\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123");
                        HttpListenerContext ctx = _listener.GetContext ();
                        Send (ctx.Response.OutputStream, "%%%OK%%%");
@@ -426,8 +445,9 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test_MultipleClosesOnOuputStreamAllowed ()
                {
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/MultipleCloses/");
-                       NetworkStream ns = CreateNS (9000);
+                       var port = NetworkHelpers.FindFreePort ();
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + port + "/MultipleCloses/");
+                       NetworkStream ns = CreateNS (port);
                        Send (ns, "GET /MultipleCloses/ HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n");
 
                        HttpListenerContext ctx = _listener.GetContext ();
@@ -438,8 +458,8 @@ namespace MonoTests.System.Net {
                }
        
                void SendCookie ()
-               {
-                       NetworkStream ns = CreateNS (9000);
+               {               
+                       NetworkStream ns = CreateNS (sendCookiePort);
                        Send (ns, "GET /SendCookie/ HTTP/1.1\r\nHost: 127.0.0.1\r\n"+
                                "Cookie:$Version=\"1\"; "+
                                "Cookie1=Value1; $Path=\"/\"; "+
@@ -455,7 +475,8 @@ namespace MonoTests.System.Net {
                [Test]
                public void ReceiveCookiesFromClient ()
                {
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/SendCookie/");
+                       sendCookiePort = NetworkHelpers.FindFreePort ();                        
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + sendCookiePort + "/SendCookie/");
                        Thread clientThread = new Thread (new ThreadStart (SendCookie));
                        clientThread.Start ();
 
@@ -486,10 +507,12 @@ namespace MonoTests.System.Net {
 
                private object _lock = new Object();
                private string cookieResponse;
+               private int receiveCookiePort;
+               private int sendCookiePort;             
 
                void ReceiveCookie () {
                        lock (_lock) {
-                               NetworkStream ns = CreateNS (9000);
+                               NetworkStream ns = CreateNS (receiveCookiePort);
                                Send (ns, "GET /ReceiveCookie/ HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n");
                                cookieResponse = Receive (ns, 512);
                        }
@@ -498,7 +521,8 @@ namespace MonoTests.System.Net {
                [Test]
                public void SendCookiestoClient ()
                {
-                       _listener = CreateAndStartListener ("http://127.0.0.1:9000/ReceiveCookie/");
+                       receiveCookiePort = NetworkHelpers.FindFreePort ();
+                       _listener = CreateAndStartListener ("http://127.0.0.1:" + receiveCookiePort + "/ReceiveCookie/");
                        Thread clientThread = new Thread (new ThreadStart (ReceiveCookie));
                        clientThread.Start ();
 
@@ -548,6 +572,7 @@ namespace MonoTests.System.Net {
                [Test]
                public void MultiResponses ()
                {
+                       echoServerPort = NetworkHelpers.FindFreePort ();
                        Thread srv = new Thread (new ThreadStart (EchoServer));
                        srv.Start ();
                        Thread.Sleep (200);
@@ -557,7 +582,7 @@ namespace MonoTests.System.Net {
                                        "Client{0}", i);
 
                                HttpWebRequest req = (HttpWebRequest) WebRequest.Create (
-                                       "http://localhost:8888/foobar/");
+                                       "http://localhost:" + echoServerPort + "/foobar/");
                                req.ServicePoint.Expect100Continue = false;
                                req.ServicePoint.UseNagleAlgorithm = false;
                                req.Method = "POST";
@@ -575,10 +600,11 @@ namespace MonoTests.System.Net {
                        srv.Join ();
                }
 
+               int echoServerPort;
                void EchoServer ()
                {
                        _listener = new HttpListener ();
-                       _listener.Prefixes.Add ("http://*:8888/foobar/");
+                       _listener.Prefixes.Add ("http://*:" + echoServerPort + "/foobar/");
                        _listener.Start ();
 
                        manualReset = new ManualResetEvent (false);
@@ -613,11 +639,12 @@ namespace MonoTests.System.Net {
                [Test]
                public void TestNonChunkedAsync ()
                {
-                       HttpListener listener = HttpListener2Test.CreateAndStartListener ("http://127.0.0.1:9123/");
+                       var port = NetworkHelpers.FindFreePort ();
+                       HttpListener listener = HttpListener2Test.CreateAndStartListener ("http://127.0.0.1:" + port + "/");
 
                        listener.BeginGetContext (callback, listener);
                        
-                       HttpListener2Test.MyNetworkStream ns = HttpListener2Test.CreateNS (9123);
+                       HttpListener2Test.MyNetworkStream ns = HttpListener2Test.CreateNS (port);
                        string message = "<script>\n"+
                                " <!-- register the blueprint for our show-headers service -->\n"+
                                " <action verb=\"POST\" path=\"/host/register\">\n" +
@@ -666,10 +693,11 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test_MultipleConnections ()
                {
-                       HttpListener listener = HttpListener2Test.CreateAndStartListener ("http://127.0.0.1:9000/multiple/");
+                       var port = NetworkHelpers.FindFreePort ();                      
+                       HttpListener listener = HttpListener2Test.CreateAndStartListener ("http://127.0.0.1:" + port + "/multiple/");
 
                        // First one
-                       NetworkStream ns = HttpListener2Test.CreateNS (9000);
+                       NetworkStream ns = HttpListener2Test.CreateNS (port);
                        HttpListener2Test.Send (ns, "POST /multiple/ HTTP/1.0\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123");
                        HttpListenerContext ctx = listener.GetContext ();
                        HttpListener2Test.Send (ctx.Response.OutputStream, "%%%OK%%%");
@@ -678,7 +706,7 @@ namespace MonoTests.System.Net {
                        ns.Close ();
 
                        // Second one
-                       ns = HttpListener2Test.CreateNS (9000);
+                       ns = HttpListener2Test.CreateNS (port);
                        HttpListener2Test.Send (ns, "POST /multiple/ HTTP/1.0\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123");
                        ctx = listener.GetContext ();
                        HttpListener2Test.Send (ctx.Response.OutputStream, "%%%OK%%%");
@@ -697,11 +725,12 @@ namespace MonoTests.System.Net {
                {
                        var wait = new ManualResetEvent (false);
                        var wait2 = new ManualResetEvent (false);
+                       var port = NetworkHelpers.FindFreePort ();
                        
                        Thread t = new Thread (delegate (object a) {
                                wait.WaitOne ();
 
-                               NetworkStream ns = HttpListener2Test.CreateNS (9145);
+                               NetworkStream ns = HttpListener2Test.CreateNS (port);
                                HttpListener2Test.Send (ns, "GET http://www.google.com/ HTTP/1.1\r\nHost: www.google.com\r\nContent-Length: 3\r\n\r\n123456");
 
                                wait2.WaitOne ();
@@ -709,11 +738,11 @@ namespace MonoTests.System.Net {
                        });
                        t.Start ();
                                
-                       HttpListener listener = HttpListener2Test.CreateAndStartListener ("http://*:9145/");
+                       HttpListener listener = HttpListener2Test.CreateAndStartListener ("http://*:" + port + "/");
                        wait.Set ();
                        HttpListenerContext ctx = listener.GetContext ();
                        
-                       Assert.AreEqual ("http://www.google.com:9145/", ctx.Request.Url.ToString ());
+                       Assert.AreEqual ("http://www.google.com:" + port + "/", ctx.Request.Url.ToString ());
                        Assert.AreEqual ("http://www.google.com/", ctx.Request.RawUrl);
                        wait2.Set ();
 
@@ -723,12 +752,13 @@ namespace MonoTests.System.Net {
                [Test] // bug #513849
                public void ClosePort ()
                {
+                       var port = NetworkHelpers.FindFreePort ();
                        var h = new HttpListener ();
-                       h.Prefixes.Add ("http://127.0.0.1:30158/");
+                       h.Prefixes.Add ("http://127.0.0.1:" + port + "/");
                        h.Start ();
                        h.BeginGetContext (null, null);
                        h.Stop ();
-                       TcpListener t = new TcpListener (IPAddress.Parse ("127.0.0.1"), 30158);
+                       TcpListener t = new TcpListener (IPAddress.Parse ("127.0.0.1"), port);
                        t.Start ();
                        t.Stop ();
                }
@@ -754,7 +784,7 @@ namespace MonoTests.System.Net {
                                Assert.Ignore ("Hostname couldn't be resolved.");
                        }
                        
-                       int port = 61234;
+                       int port = NetworkHelpers.FindFreePort ();;
                        var h = new HttpListener ();
                        h.Prefixes.Add ("http://" + machineAddress [0] + ":" + port + "/");
                        h.Start ();
@@ -772,7 +802,7 @@ namespace MonoTests.System.Net {
                public void BindToAllInterfaces ()
                {
                        var h = new HttpListener ();
-                       int port = 62234;
+                       int port = NetworkHelpers.FindFreePort ();
                        h.Prefixes.Add ("http://*:" + port + "/");
                        h.Start ();
                        var c = new TcpClient ("localhost", port);
@@ -783,8 +813,9 @@ namespace MonoTests.System.Net {
                [Test]
                public void Test_EmptyLineAtStart ()
                {
-                       var listener = HttpListener2Test.CreateAndStartListener ("http://127.0.0.1:9124/");
-                       var ns = HttpListener2Test.CreateNS (9124);
+                       var port = NetworkHelpers.FindFreePort ();
+                       var listener = HttpListener2Test.CreateAndStartListener ("http://127.0.0.1:" + port + "/");
+                       var ns = HttpListener2Test.CreateNS (port);
 
                        HttpListener2Test.Send (ns, "\r\nGET / HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n");