public void MasterSwitch() { masterKnown = true; SentinelConn.GetSubscriber().Subscribe("+switch-master", (channel, message) => { masterKnown = true; }); IDatabase db = RedisConn.GetDatabase(0); db.StringSet("TestValue0", "Value0"); db.KeyDelete("TestValue0"); RedisConn.GetServer(SentinelConn.GetConfiguredMasterForService()).Shutdown(ShutdownMode.Always); Stopwatch sw = new Stopwatch(); sw.Start(); masterKnown = false; Assert.Throws <RedisConnectionException>(() => { db.StringSet("TestValue1", "Value1"); db.KeyDelete("TestValue1"); }, "Can access master immediately after shutdown!"); while (!masterKnown) { if (sw.ElapsedMilliseconds > 180 * 1000) { throw new TimeoutException("Test timed out waiting for sentinel to switch master!"); } Thread.Sleep(100); } Assert.True(masterKnown, "Master still unknown after timeout!"); Thread.Sleep(2000); // Wait for reconfigure db.StringSet("TestValue2", "Value2"); db.KeyDelete("TestValue2"); }