Constrain the timing on the dispatch test

This commit is contained in:
Louis DeJardin 2015-07-26 19:11:17 -07:00
parent e39fe60da0
commit 10bce6a2ec
1 changed files with 30 additions and 10 deletions

View File

@ -135,15 +135,18 @@ namespace Microsoft.AspNet.Server.KestrelTests
[Fact] [Fact]
public void ServerPipeDispatchConnections() public void ServerPipeDispatchConnections()
{ {
var pipeName = @"\\.\pipe\ServerPipeDispatchConnections" + Guid.NewGuid().ToString("n");
var loop = new UvLoopHandle(); var loop = new UvLoopHandle();
loop.Init(_uv); loop.Init(_uv);
var serverConnectionPipe = default(UvPipeHandle); var serverConnectionPipe = default(UvPipeHandle);
var serverConnectionPipeAcceptedEvent = new ManualResetEvent(false);
var serverConnectionTcpDisposedEvent = new ManualResetEvent(false);
var serverListenPipe = new UvPipeHandle(); var serverListenPipe = new UvPipeHandle();
serverListenPipe.Init(loop, false); serverListenPipe.Init(loop, false);
serverListenPipe.Bind(@"\\.\pipe\ServerPipeDispatchConnections"); serverListenPipe.Bind(pipeName);
serverListenPipe.Listen(128, (_1, status, error, _2) => serverListenPipe.Listen(128, (_1, status, error, _2) =>
{ {
serverConnectionPipe = new UvPipeHandle(); serverConnectionPipe = new UvPipeHandle();
@ -151,9 +154,11 @@ namespace Microsoft.AspNet.Server.KestrelTests
try try
{ {
serverListenPipe.Accept(serverConnectionPipe); serverListenPipe.Accept(serverConnectionPipe);
serverConnectionPipeAcceptedEvent.Set();
} }
catch (Exception) catch (Exception ex)
{ {
Console.WriteLine(ex);
serverConnectionPipe.Dispose(); serverConnectionPipe.Dispose();
serverConnectionPipe = null; serverConnectionPipe = null;
} }
@ -168,6 +173,8 @@ namespace Microsoft.AspNet.Server.KestrelTests
serverConnectionTcp.Init(loop); serverConnectionTcp.Init(loop);
serverListenTcp.Accept(serverConnectionTcp); serverListenTcp.Accept(serverConnectionTcp);
serverConnectionPipeAcceptedEvent.WaitOne();
var writeRequest = new UvWriteReq(); var writeRequest = new UvWriteReq();
writeRequest.Init(loop); writeRequest.Init(loop);
writeRequest.Write2( writeRequest.Write2(
@ -177,8 +184,9 @@ namespace Microsoft.AspNet.Server.KestrelTests
(_3, status2, error2, _4) => (_3, status2, error2, _4) =>
{ {
writeRequest.Dispose(); writeRequest.Dispose();
serverConnectionPipe.Dispose();
serverConnectionTcp.Dispose(); serverConnectionTcp.Dispose();
serverConnectionTcpDisposedEvent.Set();
serverConnectionPipe.Dispose();
serverListenPipe.Dispose(); serverListenPipe.Dispose();
serverListenTcp.Dispose(); serverListenTcp.Dispose();
}, },
@ -194,11 +202,14 @@ namespace Microsoft.AspNet.Server.KestrelTests
loop2.Init(_uv); loop2.Init(_uv);
clientConnectionPipe.Init(loop2, true); clientConnectionPipe.Init(loop2, true);
connect.Init(loop2); connect.Init(loop2);
connect.Connect(clientConnectionPipe, @"\\.\pipe\ServerPipeDispatchConnections", (_1, status, error, _2) => connect.Connect(clientConnectionPipe, pipeName, (_1, status, error, _2) =>
{ {
connect.Dispose(); connect.Dispose();
var buf = loop2.Libuv.buf_init(Marshal.AllocHGlobal(64), 64); var buf = loop2.Libuv.buf_init(Marshal.AllocHGlobal(64), 64);
serverConnectionTcpDisposedEvent.WaitOne();
clientConnectionPipe.ReadStart( clientConnectionPipe.ReadStart(
(_3, cb, _4) => buf, (_3, cb, _4) => buf,
(_3, status2, error2, _4) => (_3, status2, error2, _4) =>
@ -231,12 +242,21 @@ namespace Microsoft.AspNet.Server.KestrelTests
var worker2 = new Thread(() => var worker2 = new Thread(() =>
{ {
var socket = new Socket(SocketType.Stream, ProtocolType.IP); try
socket.Connect(IPAddress.Loopback, 54321); {
socket.Send(new byte[] { 6, 7, 8, 9 }); serverConnectionPipeAcceptedEvent.WaitOne();
socket.Shutdown(SocketShutdown.Send);
var cb = socket.Receive(new byte[64]); var socket = new Socket(SocketType.Stream, ProtocolType.IP);
socket.Dispose(); socket.Connect(IPAddress.Loopback, 54321);
socket.Send(new byte[] { 6, 7, 8, 9 });
socket.Shutdown(SocketShutdown.Send);
var cb = socket.Receive(new byte[64]);
socket.Dispose();
}
catch(Exception ex)
{
Console.WriteLine(ex);
}
}); });
worker.Start(); worker.Start();