public void TestPushTimeSeries() { if (!Boolean.Parse((string)GetProperty("replicationTestsEnabled"))) { Assert.Inconclusive("Replication tests disabled."); return; } using (var remoteDb = _sg.CreateDatabase(ScratchDbName)) { var tsPush = _ts.CreatePushReplication(remoteDb.RemoteUri, true); tsPush.Continuous = true; Console.WriteLine("Starting replication"); var idleMre = new ManualResetEventSlim(); var stoppedMre = new ManualResetEventSlim(); tsPush.Changed += (sender, e) => { if (e.CompletedChangesCount == 10 && e.Status == ReplicationStatus.Idle && e.Source.GetPendingDocumentIDs().Count == 0) { idleMre.Set(); } else if (e.Status == ReplicationStatus.Stopped) { stoppedMre.Set(); } }; var waitHandle = GenerateEventsAsync(); tsPush.Start(); // Generate events: Console.WriteLine("Waiting for events..."); Assert.IsTrue(waitHandle.WaitOne(TimeSpan.FromSeconds(10)), "Waiting for events timed out"); Console.WriteLine("Waiting for replication to finish..."); idleMre.Reset(); Assert.IsTrue(idleMre.Wait(TimeSpan.FromSeconds(10)), "Timed out waiting for replication"); idleMre.Dispose(); Assert.IsNull(tsPush.LastError); // Stop the replication: tsPush.Stop(); Console.WriteLine("Waiting for replication to stop"); Assert.IsTrue(stoppedMre.Wait(TimeSpan.FromSeconds(10)), "Timed out waiting for replication to stop"); stoppedMre.Dispose(); Assert.IsNull(tsPush.LastError); // Did the docs get purged? Assert.AreEqual(0, database.GetDocumentCount()); } }