Imported Upstream version 4.0.0~alpha1

Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
This commit is contained in:
Jo Shields
2015-04-07 09:35:12 +01:00
parent 283343f570
commit 3c1f479b9d
22469 changed files with 2931443 additions and 869343 deletions

View File

@ -101,7 +101,6 @@ namespace MonoTests.System.Net.WebSockets
}
[Test]
[Ignore ("See bug #24340")]
public void EchoTest ()
{
const string Payload = "This is a websocket test";
@ -126,7 +125,6 @@ namespace MonoTests.System.Net.WebSockets
}
[Test]
[Ignore ("See bug #24340")]
public void CloseOutputAsyncTest ()
{
Assert.IsTrue (socket.ConnectAsync (new Uri (EchoServerUrl), CancellationToken.None).Wait (5000));
@ -220,6 +218,45 @@ namespace MonoTests.System.Net.WebSockets
Assert.Fail ("Should have thrown");
}
[Test]
[Category ("NotWorking")] // FIXME: test relies on unimplemented HttpListenerContext.AcceptWebSocketAsync (), reenable it when the method is implemented
public void SendAsyncEndOfMessageTest ()
{
var cancellationToken = new CancellationTokenSource (TimeSpan.FromSeconds (30)).Token;
SendAsyncEndOfMessageTest (false, WebSocketMessageType.Text, cancellationToken).Wait (5000);
SendAsyncEndOfMessageTest (true, WebSocketMessageType.Text, cancellationToken).Wait (5000);
SendAsyncEndOfMessageTest (false, WebSocketMessageType.Binary, cancellationToken).Wait (5000);
SendAsyncEndOfMessageTest (true, WebSocketMessageType.Binary, cancellationToken).Wait (5000);
}
public async Task SendAsyncEndOfMessageTest (bool expectedEndOfMessage, WebSocketMessageType webSocketMessageType, CancellationToken cancellationToken)
{
using (var client = new ClientWebSocket ()) {
// Configure the listener.
var serverReceive = HandleHttpWebSocketRequestAsync<WebSocketReceiveResult> (async socket => await socket.ReceiveAsync (new ArraySegment<byte> (new byte[32]), cancellationToken), cancellationToken);
// Connect to the listener and make the request.
await client.ConnectAsync (new Uri ("ws://localhost:" + Port + "/"), cancellationToken);
await client.SendAsync (new ArraySegment<byte> (Encoding.UTF8.GetBytes ("test")), webSocketMessageType, expectedEndOfMessage, cancellationToken);
// Wait for the listener to handle the request and return its result.
var result = await serverReceive;
// Cleanup and check results.
await client.CloseAsync (WebSocketCloseStatus.NormalClosure, "Finished", cancellationToken);
Assert.AreEqual (expectedEndOfMessage, result.EndOfMessage, "EndOfMessage should be " + expectedEndOfMessage);
}
}
async Task<T> HandleHttpWebSocketRequestAsync<T> (Func<WebSocket, Task<T>> action, CancellationToken cancellationToken)
{
var ctx = await this.listener.GetContextAsync ();
var wsContext = await ctx.AcceptWebSocketAsync (null);
var result = await action (wsContext.WebSocket);
await wsContext.WebSocket.CloseOutputAsync (WebSocketCloseStatus.NormalClosure, "Finished", cancellationToken);
return result;
}
async Task HandleHttpRequestAsync (Action<HttpListenerRequest, HttpListenerResponse> handler)
{
var ctx = await listener.GetContextAsync ();