public virtual void TestRunReplicationWithError()
        {
            var mockHttpClientFactory = new AlwaysFailingClientFactory();
            var dbUrlString           = "http://fake.test-url.com:4984/fake/";
            var remote     = new Uri(dbUrlString);
            var continuous = false;
            var r1         = new Puller(database, remote, continuous, mockHttpClientFactory, manager.workExecutor);

            Assert.IsFalse(r1.Continuous);

            RunReplication(r1);

            // It should have failed with a 404:
            Assert.AreEqual(ReplicationStatus.Stopped, r1.Status);
            Assert.AreEqual(0, r1.CompletedChangesCount);
            Assert.AreEqual(0, r1.ChangesCount);
            Assert.IsNotNull(r1.LastError);
        }
        public virtual void TestFetchRemoteCheckpointDoc()
        {
            var mockHttpClientFactory = new AlwaysFailingClientFactory();

            mockHttpClientFactory.GetHttpClient();

            Log.D("TEST", "testFetchRemoteCheckpointDoc() called");
            string dbUrlString = "http://fake.test-url.com:4984/fake/";
            Uri    remote      = new Uri(dbUrlString);

            database.SetLastSequence("1", dbUrlString, true);
            // otherwise fetchRemoteCheckpoint won't contact remote
            Assert.Fail();
            Replication replicator = new Pusher(database, remote, false, mockHttpClientFactory
                                                , manager.workExecutor);
            CountDownLatch doneSignal = new CountDownLatch(1);

            ReplicationTest.ReplicationObserver replicationObserver = new ReplicationTest.ReplicationObserver
                                                                          (this, doneSignal);
            replicator.Changed += replicationObserver.Changed;
            replicator.FetchRemoteCheckpointDoc();
            Log.D(Tag, "testFetchRemoteCheckpointDoc() Waiting for replicator to finish");
            try
            {
                bool succeeded = doneSignal.Await(TimeSpan.FromSeconds(3));
                NUnit.Framework.Assert.IsTrue(succeeded);
                Log.D(Tag, "testFetchRemoteCheckpointDoc() replicator finished");
            }
            catch (Exception e)
            {
                Sharpen.Runtime.PrintStackTrace(e);
            }
            string errorMessage = "Since we are passing in a mock http client that always throws "
                                  + "errors, we expect the replicator to be in an error state";

            NUnit.Framework.Assert.IsNotNull(replicator.LastError, errorMessage);
        }