public void TestIssue490() { var sg = new CouchDB("http", GetReplicationServer()); using (var remoteDb = sg.CreateDatabase("issue490")) { var push = database.CreatePushReplication(remoteDb.RemoteUri); CreateFilteredDocuments(database, 30); CreateNonFilteredDocuments (database, 10); RunReplication(push); Assert.IsTrue(push.ChangesCount==40); Assert.IsTrue(push.CompletedChangesCount==40); Assert.IsNull(push.LastError); Assert.AreEqual(40, database.DocumentCount); for (int i = 0; i <= 5; i++) { pull = database.CreatePullReplication(remoteDb.RemoteUri); pull.Continuous = true; pull.Start (); Task.Delay (1000).Wait(); CallToView (); Task.Delay (2000).Wait(); RecreateDatabase (); } } }
public void TestUpdateToServerSavesAttachment() { var couchDb = new CouchDB(GetReplicationProtocol(), GetReplicationServer()); using (var remoteDb = couchDb.CreateDatabase(TempDbName())) { var pull = database.CreatePullReplication(remoteDb.RemoteUri); pull.Continuous = true; pull.Start(); var docName = "doc" + Convert.ToString((ulong)DateTime.UtcNow.TimeSinceEpoch().TotalMilliseconds); var endpoint = remoteDb.RemoteUri.AppendPath(docName); var docContent = Encoding.UTF8.GetBytes("{\"foo\":false}"); var putRequest = new HttpRequestMessage(HttpMethod.Put, endpoint); putRequest.Content = new StringContent("{\"foo\":false}"); putRequest.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var response = _httpClient.SendAsync(putRequest).Result; Assert.AreEqual(HttpStatusCode.Created, response.StatusCode); var attachmentStream = GetAsset("attachment.png"); var baos = new MemoryStream(); attachmentStream.CopyTo(baos); attachmentStream.Dispose(); endpoint = endpoint.AppendPath("attachment?rev=1-1153b140e4c8674e2e6425c94de860a0"); docContent = baos.ToArray(); baos.Dispose(); putRequest = new HttpRequestMessage(HttpMethod.Put, endpoint); putRequest.Content = new ByteArrayContent(docContent); putRequest.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png"); response = _httpClient.SendAsync(putRequest).Result; Assert.AreEqual(HttpStatusCode.Created, response.StatusCode); endpoint = remoteDb.RemoteUri.AppendPath(docName + "?rev=2-bb71ce0da1de19f848177525c4ae5a8b"); const string docContentStr = "{\"foo\":true,\"_attachments\":{\"attachment\":{\"content_type\":\"image/png\",\"revpos\":2,\"digest\":\"md5-ks1IBwCXbuY7VWAO9CkEjA==\",\"length\":519173,\"stub\":true}}}"; putRequest = new HttpRequestMessage(HttpMethod.Put, endpoint); putRequest.Content = new StringContent(docContentStr); putRequest.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); response = _httpClient.SendAsync(putRequest).Result; Assert.AreEqual(HttpStatusCode.Created, response.StatusCode); Sleep(1000); while (pull.Status == ReplicationStatus.Active) { Sleep(500); } Assert.IsNull(pull.LastError); Assert.AreEqual(ReplicationStatus.Idle, pull.Status); var doc = database.GetExistingDocument(docName); Assert.IsNotNull(doc); Assert.IsNotNull(doc.CurrentRevision.Attachments); StopReplication(pull); } }
[Test] // Issue #449 public void TestPushAttachmentToCouchDB() { var couchDb = new CouchDB(GetReplicationProtocol(), GetReplicationServer()); using (var remoteDb = couchDb.CreateDatabase(TempDbName())) { var push = database.CreatePushReplication(remoteDb.RemoteUri); CreateDocuments(database, 2); var attachDoc = database.CreateDocument(); var newRev = attachDoc.CreateRevision(); var newProps = newRev.UserProperties; newProps["foo"] = "bar"; newRev.SetUserProperties(newProps); var attachmentStream = GetAsset("attachment.png"); newRev.SetAttachment("attachment.png", "image/png", attachmentStream); newRev.Save(); RunReplication(push); Assert.AreEqual(3, push.ChangesCount); Assert.AreEqual(3, push.CompletedChangesCount); attachDoc = database.GetExistingDocument(attachDoc.Id); attachDoc.Update(rev => { var props = rev.UserProperties; props["extraminutes"] = "5"; rev.SetUserProperties(props); return true; }); push = database.CreatePushReplication(push.RemoteUrl); RunReplication(push); database.Close(); database = EnsureEmptyDatabase(database.Name); var pull = database.CreatePullReplication(push.RemoteUrl); RunReplication(pull); Assert.AreEqual(3, database.GetDocumentCount()); attachDoc = database.GetExistingDocument(attachDoc.Id); Assert.IsNotNull(attachDoc, "Failed to retrieve doc with attachment"); Assert.IsNotNull(attachDoc.CurrentRevision.Attachments, "Failed to retrieve attachments on attachment doc"); attachDoc.Update(rev => { var props = rev.UserProperties; props["extraminutes"] = "10"; rev.SetUserProperties(props); return true; }); push = database.CreatePushReplication(pull.RemoteUrl); RunReplication(push); Assert.IsNull(push.LastError); Assert.AreEqual(1, push.ChangesCount); Assert.AreEqual(1, push.CompletedChangesCount); Assert.AreEqual(3, database.GetDocumentCount()); } }
public void TestUpdateToServerSavesAttachment() { var couchDb = new CouchDB(GetReplicationProtocol(), GetReplicationServer()); using (var remoteDb = couchDb.CreateDatabase(TempDbName())) { var pull = database.CreatePullReplication(remoteDb.RemoteUri); pull.Continuous = true; pull.Start(); var docName = "doc" + Convert.ToString(DateTime.UtcNow.ToMillisecondsSinceEpoch()); var endpoint = remoteDb.RemoteUri.AppendPath(docName); var docContent = Encoding.UTF8.GetBytes("{\"foo\":false}"); var putRequest = HttpWebRequest.Create(endpoint); putRequest.Method = "PUT"; putRequest.ContentType = "application/json"; putRequest.GetRequestStream().Write(docContent, 0, docContent.Length); var response = (HttpWebResponse)putRequest.GetResponse(); Assert.AreEqual(HttpStatusCode.Created, response.StatusCode); var attachmentStream = (InputStream)GetAsset("attachment.png"); var baos = new MemoryStream(); attachmentStream.Wrapped.CopyTo(baos); attachmentStream.Dispose(); endpoint = endpoint.AppendPath("attachment?rev=1-1153b140e4c8674e2e6425c94de860a0"); docContent = baos.ToArray(); putRequest = HttpWebRequest.Create(endpoint); putRequest.Method = "PUT"; putRequest.ContentType = "image/png"; putRequest.GetRequestStream().Write(docContent, 0, docContent.Length); response = (HttpWebResponse)putRequest.GetResponse(); Assert.AreEqual(HttpStatusCode.Created, response.StatusCode); endpoint = remoteDb.RemoteUri.AppendPath(docName + "?rev=2-bb71ce0da1de19f848177525c4ae5a8b"); docContent = Encoding.UTF8.GetBytes("{\"foo\":true,\"_attachments\":{\"attachment\":{\"content_type\":\"image/png\",\"revpos\":2,\"digest\":\"md5-ks1IBwCXbuY7VWAO9CkEjA==\",\"length\":519173,\"stub\":true}}}"); putRequest = HttpWebRequest.Create(endpoint); putRequest.Method = "PUT"; putRequest.ContentType = "application/json"; putRequest.GetRequestStream().Write(docContent, 0, docContent.Length); response = (HttpWebResponse)putRequest.GetResponse(); Assert.AreEqual(HttpStatusCode.Created, response.StatusCode); Thread.Sleep(1000); while (pull.Status == ReplicationStatus.Active) { Thread.Sleep(500); } Assert.IsNull(pull.LastError); Assert.AreEqual(ReplicationStatus.Idle, pull.Status); var doc = database.GetExistingDocument(docName); Assert.IsNotNull(doc); Assert.IsNotNull(doc.CurrentRevision.Attachments); } }