public static void CreateServerAndConnectedClient(out SocketServer server, out SslClient client1, out SslClient client2) { var connected1 = new ManualResetEventSlim(false); var connected2 = new ManualResetEventSlim(false); var ex = ServerHelpers.CreateExecutor(); var s = ServerHelpers.CreateServer(); SslClient lClient = null; SslClient sClient = null; var certBytesStream = Assembly.GetExecutingAssembly() .GetManifestResourceStream("Stacks.Tests.StacksTest.pfx"); var certBytes = new BinaryReader(certBytesStream).ReadBytes((int)certBytesStream.Length); s.Connected.Subscribe(c => { sClient = new SslClient(c, new X509Certificate2(certBytes)); sClient.Connected.Subscribe(_ => { connected2.Set(); }); sClient.EstablishSsl(); }); s.Started.Subscribe(_ => { lClient = new SslClient(new SocketClient(ex), "Stacks Test", true); lClient.Connected.Subscribe(__ => { connected1.Set(); }); lClient.Connect(new IPEndPoint(IPAddress.Loopback, s.BindEndPoint.Port)); }); s.Start(); connected1.AssertWaitFor(300000); connected2.AssertWaitFor(300000); server = s; client1 = lClient; client2 = sClient; }