public void TestIsReconnectingAndStatus() { bool disconnected = false; object disconnectedLock = new object(); bool reconnected = false; object reconnectedLock = new object(); IConnection c = null; Options opts = utils.DefaultTestOptions; opts.Url = "nats://localhost:22222"; opts.AllowReconnect = true; opts.MaxReconnect = 10000; opts.ReconnectWait = 100; opts.DisconnectedEventHandler += (sender, args) => { lock (disconnectedLock) { disconnected = true; Monitor.Pulse(disconnectedLock); } }; opts.ReconnectedEventHandler += (sender, args) => { lock (reconnectedLock) { reconnected = true; Monitor.Pulse(reconnectedLock); } }; using (NATSServer s = utils.CreateServerOnPort(22222)) { c = new ConnectionFactory().CreateConnection(opts); Assert.True(c.State == ConnState.CONNECTED); Assert.True(c.IsReconnecting() == false); } // server stops here... lock (disconnectedLock) { if (!disconnected) Assert.True(Monitor.Wait(disconnectedLock, 10000)); } Assert.True(c.State == ConnState.RECONNECTING); Assert.True(c.IsReconnecting() == true); // restart the server using (NATSServer s = utils.CreateServerOnPort(22222)) { lock (reconnectedLock) { // may have reconnected, if not, wait if (!reconnected) Assert.True(Monitor.Wait(reconnectedLock, 10000)); } Assert.True(c.IsReconnecting() == false); Assert.True(c.State == ConnState.CONNECTED); c.Close(); } Assert.True(c.IsReconnecting() == false); Assert.True(c.State == ConnState.CLOSED); }