public void ShouldCreateDatabaseAddDocumentToItReplicateAndRead()
        {
            var dbA = "db_" + Guid.NewGuid();
            var dbB = "db_" + Guid.NewGuid();
            var savedDocument = Entity.CreateDocWithoutRevision();

            var couchApi = (ICouchApi) new CouchApi(new CouchApiSettings("http://127.0.0.1:5984/"), null);
            couchApi.Db(dbA).Synchronously.Create();
            var docInfo = couchApi.Db(dbA).Synchronously.SaveDocument(savedDocument);

            couchApi.Db(dbB).Synchronously.Create();

            var replicationDescriptorId = dbA + "_to_" + dbB;

            var replicationTaskDescriptor = new ReplicationTaskDescriptor {
                Id = replicationDescriptorId,
                Target = new Uri(dbB, UriKind.Relative),
                Source = new Uri(dbA, UriKind.Relative)
            };
            couchApi.Replicator.Synchronously.SaveDescriptor(replicationTaskDescriptor);

            var replicationDoneEvent = new ManualResetEvent(false);
            WatchForReplicationToFinish(
                () => couchApi.Replicator.RequestDescriptorById(replicationDescriptorId), replicationDoneEvent);
            replicationDoneEvent.WaitOrThrowOnTimeout();

            var loadedDocument = couchApi.Db(dbB).Synchronously.RequestDocument(savedDocument.Id);

            Assert.Equal(savedDocument.Id, loadedDocument.Id);
            Assert.Equal(docInfo.Revision, loadedDocument.Revision);

            couchApi.Replicator.DeleteDescriptor(replicationTaskDescriptor);
            couchApi.Db(dbA).Synchronously.Delete();
            couchApi.Db(dbB).Synchronously.Delete();
        }
Пример #2
0
        public Task <DocumentInfo> SaveDescriptor(ReplicationTaskDescriptor replicationTask)
        {
            if (replicationTask == null)
            {
                throw new ArgumentNullException("replicationTask");
            }
            if (replicationTask.Id.HasNoValue())
            {
                throw new ArgumentException("Replication task descriptor ID should be specified", "replicationTask");
            }

            var json = (JsonObject)parent.Settings.Serializer.ConvertToJson(replicationTask);

            var doc = new Document(new JsonObject(
                                       from kvp in json
                                       where !kvp.Key.StartsWith("_replication_")
                                       select kvp
                                       ));

            using (SyncContext.SwitchToDefault())
                return(replicatorDbApi.SaveDocument(doc, overwriteConcurrentUpdates: true)
                       .ContinueWith(rt => {
                    var docInfo = rt.Result;
                    replicationTask.Revision = docInfo.Revision;
                    return docInfo;
                }));
        }
Пример #3
0
        public Task <DocumentInfo> DeleteDescriptor(ReplicationTaskDescriptor replicationTask)
        {
            if (replicationTask == null)
            {
                throw new ArgumentNullException("replicationTask");
            }
            if (replicationTask.Id.HasNoValue())
            {
                throw new ArgumentException("Replication task descriptor ID should be specified", "replicationTask");
            }
            if (replicationTask.Revision.HasNoValue())
            {
                throw new ArgumentException("Replication task descriptor revision should be specified", "replicationTask");
            }

            using (SyncContext.SwitchToDefault())
                return(replicatorDbApi.DeleteDocument(replicationTask.Id, replicationTask.Revision));
        }
        public void ShouldCreateDatabaseAddDocumentToItReplicateAndRead()
        {
            var dbA           = "db_" + Guid.NewGuid();
            var dbB           = "db_" + Guid.NewGuid();
            var savedDocument = Entity.CreateDocWithoutRevision();

            var couchApi = (ICouchApi) new CouchApi(new CouchApiSettings("http://127.0.0.1:5984/"), null);

            couchApi.Db(dbA).Synchronously.Create();
            var docInfo = couchApi.Db(dbA).Synchronously.SaveDocument(savedDocument);

            couchApi.Db(dbB).Synchronously.Create();

            var replicationDescriptorId = dbA + "_to_" + dbB;

            var replicationTaskDescriptor = new ReplicationTaskDescriptor {
                Id     = replicationDescriptorId,
                Target = new Uri(dbB, UriKind.Relative),
                Source = new Uri(dbA, UriKind.Relative)
            };

            couchApi.Replicator.Synchronously.SaveDescriptor(replicationTaskDescriptor);

            var replicationDoneEvent = new ManualResetEvent(false);

            WatchForReplicationToFinish(
                () => couchApi.Replicator.RequestDescriptorById(replicationDescriptorId), replicationDoneEvent);
            replicationDoneEvent.WaitOrThrowOnTimeout();

            var loadedDocument = couchApi.Db(dbB).Synchronously.RequestDocument(savedDocument.Id);

            Assert.Equal(savedDocument.Id, loadedDocument.Id);
            Assert.Equal(docInfo.Revision, loadedDocument.Revision);

            couchApi.Replicator.DeleteDescriptor(replicationTaskDescriptor);
            couchApi.Db(dbA).Synchronously.Delete();
            couchApi.Db(dbB).Synchronously.Delete();
        }
Пример #5
0
 public DocumentInfo Delete(ReplicationTaskDescriptor replicationTask)
 {
     return(replicatorApi.DeleteDescriptor(replicationTask).WaitForResult());
 }
Пример #6
0
 public DocumentInfo SaveDescriptor(ReplicationTaskDescriptor replicationTask)
 {
     return replicatorApi.SaveDescriptor(replicationTask).WaitForResult();
 }