public void StopReplication(Replication replication)
        {
            if (replication.Status == ReplicationStatus.Stopped)
            {
                return;
            }

            var replicationDoneSignal      = new CountdownEvent(1);
            var replicationStoppedObserver = new ReplicationStoppedObserver(replicationDoneSignal);

            replication.Changed += replicationStoppedObserver.Changed;
            replication.Stop();

            var success = replicationDoneSignal.Wait(TimeSpan.FromSeconds(10));

            Assert.IsTrue(success);

            // give a little padding to give it a chance to save a checkpoint
            Sleep(2 * 1000);
        }
        public void TestCloseDatabaseWhileReplicating()
        {
            var signal = new CountdownEvent(1);
            var rso = new ReplicationStoppedObserver(signal);

            using (var remoteDb = _sg.CreateDatabase(TempDbName())) {
                CreateDocuments(database, 100);
                var pusher = database.CreatePushReplication(remoteDb.RemoteUri);
                pusher.Changed += rso.Changed;
                pusher.Start();
                Sleep(500);
                Assert.IsTrue(database.Close().Wait(15000));
                Assert.IsFalse(database.IsOpen);
                Assert.IsNull(database.Storage);
                Assert.IsTrue(signal.Wait(10000));
            }
        }
        public void StopReplication(Replication replication)
        {
            if (replication.Status == ReplicationStatus.Stopped) {
                return;
            }

            var replicationDoneSignal = new CountdownEvent(1);
            var replicationStoppedObserver = new ReplicationStoppedObserver(replicationDoneSignal);
            replication.Changed += replicationStoppedObserver.Changed;
            replication.Stop();

            var success = replicationDoneSignal.Wait(TimeSpan.FromSeconds(10));
            Assert.IsTrue(success);

            // give a little padding to give it a chance to save a checkpoint
            Thread.Sleep(2 * 1000);
        }