Imported Upstream version 4.6.0.125

Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2016-08-03 10:59:49 +00:00
parent a569aebcfd
commit e79aa3c0ed
17047 changed files with 3137615 additions and 392334 deletions

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@
//
using System;
using System.Collections;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Threading;
@ -55,8 +55,9 @@ namespace MonoTests.System.Net
IAsyncResult async = Dns.BeginResolve (site1Dot, null, null);
IPHostEntry entry = Dns.EndResolve (async);
SubTestValidIPHostEntry (entry);
Assert.AreEqual (site1Dot, entry.AddressList [0].ToString ());
SubTestValidIPHostEntry (entry);
var ip = GetIPv4Address (entry);
Assert.AreEqual (site1Dot, ip.ToString ());
}
void ResolveCallback (IAsyncResult ar)
@ -205,12 +206,21 @@ namespace MonoTests.System.Net
}
}
static IPAddress GetIPv4Address (IPHostEntry h)
{
var al = h.AddressList.FirstOrDefault (x => x.AddressFamily == AddressFamily.InterNetwork);
if (al == null)
Assert.Ignore ("Could not resolve an IPv4 address as required by this test case, e.g. running on an IPv6 only network");
return al;
}
void SubTestGetHostByName (string siteName, string siteDot)
{
IPHostEntry h = Dns.GetHostByName (siteName);
SubTestValidIPHostEntry (h);
Assert.AreEqual (siteName, h.HostName, "siteName");
Assert.AreEqual (siteDot, h.AddressList [0].ToString (), "siteDot");
var ip = GetIPv4Address (h);
Assert.AreEqual (siteDot, ip.ToString (), "siteDot");
}
[Test]
@ -287,7 +297,8 @@ namespace MonoTests.System.Net
IPAddress addr = new IPAddress (IPAddress.NetworkToHostOrder ((int) site1IP));
IPHostEntry h = Dns.GetHostByAddress (addr);
SubTestValidIPHostEntry (h);
Assert.AreEqual (addr.ToString (), h.AddressList [0].ToString ());
var ip = GetIPv4Address (h);
Assert.AreEqual (addr.ToString (), ip.ToString ());
}
[Test]
@ -295,8 +306,9 @@ namespace MonoTests.System.Net
{
IPAddress addr = new IPAddress (IPAddress.NetworkToHostOrder ((int) site2IP));
IPHostEntry h = Dns.GetHostByAddress (addr);
SubTestValidIPHostEntry (h);
Assert.AreEqual (addr.ToString (), h.AddressList [0].ToString ());
SubTestValidIPHostEntry (h);
var ip = GetIPv4Address (h);
Assert.AreEqual (addr.ToString (), ip.ToString ());
}
[Test]

View File

@ -660,7 +660,7 @@ namespace MonoTests.System.Net
Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.IsFalse (ex.ParamName == "value", "#6");
Assert.AreEqual ("value", ex.ParamName, "#6");
Assert.IsNull (ex.InnerException, "#7");
}
}

View 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.
@ -79,13 +81,23 @@ namespace MonoTests.System.Net {
public static MyNetworkStream CreateNS (int port)
{
return CreateNS (port, 5000);
return CreateNS (IPAddress.Loopback, port, 5000);
}
public static MyNetworkStream CreateNS (int port, int timeout_ms)
{
return CreateNS (IPAddress.Loopback, port, timeout_ms);
}
public static MyNetworkStream CreateNS (IPAddress ip, int port)
{
return CreateNS (ip, port, 5000);
}
public static MyNetworkStream CreateNS (IPAddress ip, int port, int timeout_ms)
{
Socket sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect (new IPEndPoint (IPAddress.Loopback, port));
sock.Connect (new IPEndPoint (ip, port));
sock.SendTimeout = timeout_ms;
sock.ReceiveTimeout = timeout_ms;
return new MyNetworkStream (sock);
@ -136,8 +148,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 +160,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 +196,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 +211,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 +223,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 +235,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 +248,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 +264,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 +281,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 +296,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 +312,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 +326,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 +340,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 +357,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 +393,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 +415,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 +439,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 +455,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 +468,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 +485,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 +517,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 +531,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 +582,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 +592,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 +610,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 +649,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 +703,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 +716,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 +735,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 +748,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 +762,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 +794,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 +812,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 +823,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");

View File

@ -30,11 +30,15 @@
using System;
using System.IO;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Collections.Generic;
using NUnit.Framework;
using MonoTests.Helpers;
namespace MonoTests.System.Net
{
[TestFixture]
@ -47,12 +51,12 @@ namespace MonoTests.System.Net
HttpListenerContext ctx;
HttpListenerRequest request;
NetworkStream ns;
var port = NetworkHelpers.FindFreePort ();
HttpListener listener = HttpListener2Test.CreateAndStartListener (
"http://127.0.0.1:9000/HasEntityBody/");
"http://127.0.0.1:" + port + "/HasEntityBody/");
// POST with non-zero Content-Lenth
ns = HttpListener2Test.CreateNS (9000);
ns = HttpListener2Test.CreateNS (port);
HttpListener2Test.Send (ns, "POST /HasEntityBody/ HTTP/1.1\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123");
ctx = listener.GetContext ();
request = ctx.Request;
@ -60,7 +64,7 @@ namespace MonoTests.System.Net
HttpListener2Test.Send (ctx.Response.OutputStream, "%%%OK%%%");
// POST with zero Content-Lenth
ns = HttpListener2Test.CreateNS (9000);
ns = HttpListener2Test.CreateNS (port);
HttpListener2Test.Send (ns, "POST /HasEntityBody/ HTTP/1.1\r\nHost: 127.0.0.1\r\nContent-Length: 0\r\n\r\n123");
ctx = listener.GetContext ();
request = ctx.Request;
@ -68,7 +72,7 @@ namespace MonoTests.System.Net
HttpListener2Test.Send (ctx.Response.OutputStream, "%%%OK%%%");
// POST with chunked encoding
ns = HttpListener2Test.CreateNS (9000);
ns = HttpListener2Test.CreateNS (port);
HttpListener2Test.Send (ns, "POST /HasEntityBody HTTP/1.1\r\nHost: 127.0.0.1\r\nTransfer-Encoding: chunked\r\n\r\n0\r\n");
ctx = listener.GetContext ();
request = ctx.Request;
@ -76,7 +80,7 @@ namespace MonoTests.System.Net
HttpListener2Test.Send (ctx.Response.OutputStream, "%%%OK%%%");
// GET with no Content-Length
ns = HttpListener2Test.CreateNS (9000);
ns = HttpListener2Test.CreateNS (port);
HttpListener2Test.Send (ns, "GET /HasEntityBody HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n");
ctx = listener.GetContext ();
request = ctx.Request;
@ -84,7 +88,7 @@ namespace MonoTests.System.Net
HttpListener2Test.Send (ctx.Response.OutputStream, "%%%OK%%%");
// GET with non-zero Content-Length
ns = HttpListener2Test.CreateNS (9000);
ns = HttpListener2Test.CreateNS (port);
HttpListener2Test.Send (ns, "GET /HasEntityBody HTTP/1.1\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n");
ctx = listener.GetContext ();
request = ctx.Request;
@ -92,7 +96,7 @@ namespace MonoTests.System.Net
HttpListener2Test.Send (ctx.Response.OutputStream, "%%%OK%%%");
// GET with zero Content-Length
ns = HttpListener2Test.CreateNS (9000);
ns = HttpListener2Test.CreateNS (port);
HttpListener2Test.Send (ns, "GET /HasEntityBody HTTP/1.1\r\nHost: 127.0.0.1\r\nContent-Length: 0\r\n\r\n");
ctx = listener.GetContext ();
request = ctx.Request;
@ -100,7 +104,7 @@ namespace MonoTests.System.Net
HttpListener2Test.Send (ctx.Response.OutputStream, "%%%OK%%%");
// GET with chunked encoding
ns = HttpListener2Test.CreateNS (9000);
ns = HttpListener2Test.CreateNS (port);
HttpListener2Test.Send (ns, "GET /HasEntityBody HTTP/1.1\r\nHost: 127.0.0.1\r\nTransfer-Encoding: chunked\r\n\r\n0\r\n");
ctx = listener.GetContext ();
request = ctx.Request;
@ -108,35 +112,35 @@ namespace MonoTests.System.Net
HttpListener2Test.Send (ctx.Response.OutputStream, "%%%OK%%%");
// PUT with non-zero Content-Lenth
ns = HttpListener2Test.CreateNS (9000);
ns = HttpListener2Test.CreateNS (port);
HttpListener2Test.Send (ns, "PUT /HasEntityBody/ HTTP/1.1\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123");
ctx = listener.GetContext ();
request = ctx.Request;
Assert.IsTrue (request.HasEntityBody, "#H");
// PUT with zero Content-Lenth
ns = HttpListener2Test.CreateNS (9000);
ns = HttpListener2Test.CreateNS (port);
HttpListener2Test.Send (ns, "PUT /HasEntityBody/ HTTP/1.1\r\nHost: 127.0.0.1\r\nContent-Length: 0\r\n\r\n123");
ctx = listener.GetContext ();
request = ctx.Request;
Assert.IsFalse (request.HasEntityBody, "#I");
// INVALID with non-zero Content-Lenth
ns = HttpListener2Test.CreateNS (9000);
ns = HttpListener2Test.CreateNS (port);
HttpListener2Test.Send (ns, "INVALID /HasEntityBody/ HTTP/1.1\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123");
ctx = listener.GetContext ();
request = ctx.Request;
Assert.IsTrue (request.HasEntityBody, "#J");
// INVALID with zero Content-Lenth
ns = HttpListener2Test.CreateNS (9000);
ns = HttpListener2Test.CreateNS (port);
HttpListener2Test.Send (ns, "INVALID /HasEntityBody/ HTTP/1.1\r\nHost: 127.0.0.1\r\nContent-Length: 0\r\n\r\n123");
ctx = listener.GetContext ();
request = ctx.Request;
Assert.IsFalse (request.HasEntityBody, "#K");
// INVALID with chunked encoding
ns = HttpListener2Test.CreateNS (9000);
ns = HttpListener2Test.CreateNS (port);
HttpListener2Test.Send (ns, "INVALID /HasEntityBody/ HTTP/1.1\r\nHost: 127.0.0.1\r\nTransfer-Encoding: chunked\r\n\r\n0\r\n");
ctx = listener.GetContext ();
request = ctx.Request;
@ -148,9 +152,10 @@ namespace MonoTests.System.Net
[Test]
public void HttpMethod ()
{
var port = NetworkHelpers.FindFreePort ();
HttpListener listener = HttpListener2Test.CreateAndStartListener (
"http://127.0.0.1:9000/HttpMethod/");
NetworkStream ns = HttpListener2Test.CreateNS (9000);
"http://127.0.0.1:" + port + "/HttpMethod/");
NetworkStream ns = HttpListener2Test.CreateNS (port);
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;
@ -161,10 +166,11 @@ namespace MonoTests.System.Net
[Test]
public void HttpBasicAuthScheme ()
{
HttpListener listener = HttpListener2Test.CreateAndStartListener ("http://*:9000/authTest/", AuthenticationSchemes.Basic);
var port = NetworkHelpers.FindFreePort ();
HttpListener listener = HttpListener2Test.CreateAndStartListener ("http://*:" + port + "/authTest/", AuthenticationSchemes.Basic);
//dummy-wait for context
listener.BeginGetContext (null, listener);
NetworkStream ns = HttpListener2Test.CreateNS (9000);
NetworkStream ns = HttpListener2Test.CreateNS (port);
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");
@ -175,9 +181,10 @@ namespace MonoTests.System.Net
[Test]
public void HttpRequestUriIsNotDecoded ()
{
var port = NetworkHelpers.FindFreePort ();
HttpListener listener = HttpListener2Test.CreateAndStartListener (
"http://127.0.0.1:9000/RequestUriDecodeTest/");
NetworkStream ns = HttpListener2Test.CreateNS (9000);
"http://127.0.0.1:" + port + "/RequestUriDecodeTest/");
NetworkStream ns = HttpListener2Test.CreateNS (port);
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;
@ -185,10 +192,37 @@ namespace MonoTests.System.Net
listener.Close ();
}
[Test]
public void HttpRequestIsLocal ()
{
var port = NetworkHelpers.FindFreePort ();
var ips = new List<IPAddress> ();
ips.Add (IPAddress.Loopback);
foreach (var adapter in NetworkInterface.GetAllNetworkInterfaces ()) {
foreach (var ip in adapter.GetIPProperties ().UnicastAddresses) {
ips.Add (ip.Address);
}
}
foreach (var ip in ips) {
if (ip.AddressFamily != AddressFamily.InterNetwork)
continue;
HttpListener listener = HttpListener2Test.CreateAndStartListener (
"http://" + ip + ":" + port + "/HttpRequestIsLocal/");
NetworkStream ns = HttpListener2Test.CreateNS (ip, port);
HttpListener2Test.Send (ns, "GET /HttpRequestIsLocal/ HTTP/1.0\r\n\r\n");
HttpListenerContext ctx = listener.GetContext ();
HttpListenerRequest request = ctx.Request;
Assert.AreEqual (true, request.IsLocal, "IP " + ip + " is not local");
listener.Close ();
}
}
[Test] // #29927
public void HttpRequestUriUnescape ()
{
var prefix = "http://localhost:12345/";
var prefix = "http://localhost:" + NetworkHelpers.FindFreePort () + "/";
var key = "Product/1";
var expectedUrl = prefix + key + "/";

View File

@ -352,7 +352,7 @@ namespace MonoTests.System.Net {
public void CloseWhileBegin ()
{
HttpListener listener = new HttpListener ();
listener.Prefixes.Add ("http://127.0.0.1:9001/closewhilebegin/");
listener.Prefixes.Add ("http://127.0.0.1:" + NetworkHelpers.FindFreePort () + "/closewhilebegin/");
listener.Start ();
CallMe cm = new CallMe ();
listener.BeginGetContext (cm.Callback, listener);
@ -368,7 +368,7 @@ namespace MonoTests.System.Net {
public void AbortWhileBegin ()
{
HttpListener listener = new HttpListener ();
listener.Prefixes.Add ("http://127.0.0.1:9001/abortwhilebegin/");
listener.Prefixes.Add ("http://127.0.0.1:" + NetworkHelpers.FindFreePort () + "/abortwhilebegin/");
listener.Start ();
CallMe cm = new CallMe ();
listener.BeginGetContext (cm.Callback, listener);
@ -390,7 +390,7 @@ namespace MonoTests.System.Net {
// at MonoTests.System.Net.HttpListenerTest.CloseWhileGet()
HttpListener listener = new HttpListener ();
listener.Prefixes.Add ("http://127.0.0.1:9001/closewhileget/");
listener.Prefixes.Add ("http://127.0.0.1:" + NetworkHelpers.FindFreePort () + "/closewhileget/");
listener.Start ();
RunMe rm = new RunMe (1000, new ThreadStart (listener.Close), new object [0]);
rm.Start ();
@ -407,7 +407,7 @@ namespace MonoTests.System.Net {
// at MonoTests.System.Net.HttpListenerTest.CloseWhileGet()
HttpListener listener = new HttpListener ();
listener.Prefixes.Add ("http://127.0.0.1:9001/abortwhileget/");
listener.Prefixes.Add ("http://127.0.0.1:" + NetworkHelpers.FindFreePort () + "/abortwhileget/");
listener.Start ();
RunMe rm = new RunMe (1000, new ThreadStart (listener.Abort), new object [0]);
rm.Start ();

View File

@ -1 +1 @@
ea928e50b3028df3f637377e58caab11f8e20610
a289a6b5e76e2ac19ac91ec28b641c358d2fcf10

View File

@ -145,16 +145,8 @@ public class IPAddressTest
"0xff.0x7f.0x20.0xf", "255.127.32.15",
"0.0.0.0", IPAddress.Any.ToString(),
"255.255.255.255", IPAddress.Broadcast.ToString(),
"12.1.1.3 abc", "12.1.1.3",
"12.1 .1.2", "12.0.0.1",
"12.1 .zzzz.2", "12.0.0.1",
"12.1.7", "12.1.0.7",
"12", "0.0.0.12",
"12.5.3 foo.67.test.test.7FFFFFFFFFfaFFF789FFFFFFFFFFFFFFF", "12.5.0.3",
"12.1 foo.bar.test.test.baf", "12.0.0.1",
"12.1.4.6 foo.bar.test.test.baf", "12.1.4.6",
"12.3 foo.bar.test.test.4", "12.0.0.3",
"12 foo.bar.test.test.baf", "0.0.0.12",
"65536", "0.1.0.0",
"65535", "0.0.255.255",
"20.65535", "20.0.255.255",
@ -187,6 +179,14 @@ public class IPAddressTest
"12...",
" ",
"7848198702",
"12.1.1.3 abc",
"12.1 .1.2",
"12.1 .zzzz.2",
"12.5.3 foo.67.test.test.7FFFFFFFFFfaFFF789FFFFFFFFFFFFFFF",
"12.1 foo.bar.test.test.baf",
"12.1.4.6 foo.bar.test.test.baf",
"12.3 foo.bar.test.test.4",
"12 foo.bar.test.test.baf",
};
static byte [] ipv4MappedIPv6Prefix = new byte [] { 0,0, 0,0, 0,0, 0,0, 0,0, 0xFF,0xFF };
@ -197,8 +197,8 @@ public class IPAddressTest
Assert.AreEqual ((long) 0, IPAddress.Any.Address, "#1");
Assert.AreEqual ((long) 0xFFFFFFFF, IPAddress.Broadcast.Address, "#2");
long loopback = IPAddress.HostToNetworkOrder (BitConverter.IsLittleEndian ?
0x7f000001 :
0x0100007f);
0x7f000001 :
0x0100007f);
Assert.AreEqual (loopback, IPAddress.Loopback.Address, "#3");
Assert.AreEqual ((long) 0xFFFFFFFF, IPAddress.None.Address, "#4");
}
@ -241,8 +241,8 @@ public class IPAddressTest
[Test]
public void IsLoopbackV6 ()
{
if (!Socket.SupportsIPv6)
Assert.Ignore ("IPv6 must be enabled in machine.config");
// if (!Socket.SupportsIPv6)
// Assert.Ignore ("IPv6 must be enabled in machine.config");
IPAddress ip = IPAddress.IPv6Loopback;
Assert.IsTrue (IPAddress.IsLoopback (ip), "#1");
@ -277,24 +277,16 @@ public class IPAddressTest
[Test]
public void Address ()
{
// hm, lame, anything is accepted by ms.net
/*
try {
IPAddress ip1 = new IPAddress (0x0000000100000000);
Assertion.Fail ("#1");
Assert.Fail ("#1");
} catch (ArgumentOutOfRangeException) {}
IPAddress ip = IPAddress.Parse ("127.0.0.1");
ip.Address = 0;
ip.Address = 0xffffffff;
try {
ip.Address = -1;
Assertion.Fail ("#2");
} catch (ArgumentOutOfRangeException) {}
try {
ip.Address = 0x0000000100000000;
Assertion.Fail ("#3");
} catch (ArgumentOutOfRangeException) {}
*/
ip.Address = -1;
ip.Address = 0x0000000100000000;
}
[Test]
@ -532,16 +524,11 @@ public class IPAddressTest
public void TryParse_IpString_Null ()
{
IPAddress i;
try {
IPAddress.TryParse ((string) null, out i);
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 ("ipString", ex.ParamName, "#5");
}
bool val1 = IPAddress.TryParse ((string) null, out i);
Assert.IsFalse (val1, "#1");
Assert.IsNull (i, "#2");
}
[Test]
@ -625,8 +612,8 @@ public class IPAddressTest
[Test]
public void ParseWrongV6 ()
{
if (!Socket.SupportsIPv6)
Assert.Ignore ("IPv6 must be enabled in machine.config");
//if (!Socket.SupportsIPv6)
// Assert.Ignore ("IPv6 must be enabled in machine.config");
for (int i = 0; i < ipv6ParseWrong.Length; i++) {
string ipAddress = ipv6ParseWrong [i];
@ -636,14 +623,12 @@ public class IPAddressTest
Assert.Fail ("#1:" + i + " (" + ipAddress + ")");
} catch (FormatException ex) {
Assert.AreEqual (typeof (FormatException), ex.GetType (), "#2:" + i);
Assert.IsNull (ex.InnerException, "#3:" + i);
Assert.AreEqual(typeof(SocketException), ex.InnerException.GetType (), "#3:" + i);
Assert.IsNotNull (ex.Message, "#4:" + i);
}
}
}
#if NET_4_5
[Test]
public void MapToIPv6 ()
{
@ -678,8 +663,6 @@ public class IPAddressTest
return true;
}
#endif
[Test]
public void EqualsFromBytes ()
{
@ -691,6 +674,18 @@ public class IPAddressTest
}
[Test]
[Category ("NotDotNet")]
public void UnixInterfaceNameAsZoneIndex ()
{
var ip = IPAddress.Parse ("fe80::bae8:56ff:fe47:af7e%en0");
// Should be en0 but it's of long type!
Assert.AreEqual (0, ip.ScopeId);
Assert.AreEqual ("fe80::bae8:56ff:fe47:af7e", ip.ToString ());
}
}
}

View File

@ -219,7 +219,7 @@ public class ServicePointTest
ServicePointManager.DnsRefreshTimeout = dnsRefreshTimeout;
uri = new Uri ("http://www.google.com/");
uri = new Uri ("http://localhost/");
sp = ServicePointManager.FindServicePoint (uri);
hostEntryProperty = typeof (ServicePoint).GetProperty ("HostEntry", BindingFlags.NonPublic | BindingFlags.Instance);

View File

@ -1853,7 +1853,8 @@ namespace MonoTests.System.Net
[Category ("AndroidNotWorking")] // Test suite hangs if the tests runs as part of the entire BCL suite. Works when only this fixture is ran
public void UploadFileAsyncContentType ()
{
var serverUri = "http://localhost:13370/";
var port = NetworkHelpers.FindFreePort ();
var serverUri = "http://localhost:" + port + "/";
var filename = Path.GetTempFileName ();
HttpListener listener = new HttpListener ();