Constrain the timing on the dispatch test
This commit is contained in:
parent
e39fe60da0
commit
10bce6a2ec
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue