Пример #1
0
        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());
            }
        }