Example #1
0
        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");
        }