本文整理汇总了C#中Couchbase.Lite.Internal.Body类的典型用法代码示例。如果您正苦于以下问题:C# Body类的具体用法?C# Body怎么用?C# Body使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
Body类属于Couchbase.Lite.Internal命名空间,在下文中一共展示了Body类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TestChangeNotification
public void TestChangeNotification()
{
var changeNotifications = 0;
EventHandler<DatabaseChangeEventArgs> handler
= (sender, e) => changeNotifications++;
database.Changed += handler;
// create a document
var documentProperties = new Dictionary<string, object>();
documentProperties["foo"] = 1;
documentProperties["bar"] = false;
documentProperties["baz"] = "touch";
var body = new Body(documentProperties);
var rev1 = new RevisionInternal(body, database);
var status = new Status();
database.PutRevision(rev1, null, false, status);
Assert.AreEqual(1, changeNotifications);
// Analysis disable once DelegateSubtraction
database.Changed -= handler;
}
示例2: RevisionInternal
public RevisionInternal(Body body, Database database) : this((string)body.GetPropertyForKey
("_id"), (string)body.GetPropertyForKey("_rev"), (((bool)body.GetPropertyForKey(
"_deleted") != null) && ((bool)body.GetPropertyForKey("_deleted") == true)), database
)
{
this.body = body;
}
示例3: Run
public bool Run()
{
string[] bigObj = new string[this._enclosing.GetSizeOfDocument()];
for (int i = 0; i < this._enclosing.GetSizeOfDocument(); i++)
{
bigObj[i] = Test10_DeleteDB._propertyValue;
}
for (int i_1 = 0; i_1 < this._enclosing.GetNumberOfDocuments(); i_1++)
{
//create a document
IDictionary<string, object> props = new Dictionary<string, object>();
props.Put("bigArray", bigObj);
Body body = new Body(props);
RevisionInternal rev1 = new RevisionInternal(body, this._enclosing.database);
Status status = new Status();
try
{
rev1 = this._enclosing.database.PutRevision(rev1, null, false, status);
}
catch (Exception t)
{
Log.E(Test10_DeleteDB.Tag, "Document create failed", t);
return false;
}
}
return true;
}
示例4: TestChangeNotification
public void TestChangeNotification()
{
var countDown = new CountdownEvent(1);
EventHandler<DatabaseChangeEventArgs> handler
= (sender, e) => countDown.Signal();
database.Changed += handler;
// create a document
var documentProperties = new Dictionary<string, object>();
documentProperties["foo"] = 1;
documentProperties["bar"] = false;
documentProperties["baz"] = "touch";
var body = new Body(documentProperties);
var rev1 = new RevisionInternal(body);
database.PutRevision(rev1, null, false);
Sleep(500);
Assert.IsTrue(countDown.Wait(TimeSpan.FromSeconds(1)));
// Analysis disable once DelegateSubtraction
database.Changed -= handler;
}
示例5: TestChangeNotification
/// <exception cref="Couchbase.Lite.CouchbaseLiteException"></exception>
public virtual void TestChangeNotification()
{
// add listener to database
database.Changed += (sender, e) => changeNotifications++;
// create a document
IDictionary<string, object> documentProperties = new Dictionary<string, object>();
documentProperties["foo"] = 1;
documentProperties["bar"] = false;
documentProperties["baz"] = "touch";
Body body = new Body(documentProperties);
RevisionInternal rev1 = new RevisionInternal(body, database);
Status status = new Status();
rev1 = database.PutRevision(rev1, null, false, status);
NUnit.Framework.Assert.AreEqual(1, changeNotifications);
}
示例6: TestChangeNotification
/// <exception cref="Couchbase.Lite.CouchbaseLiteException"></exception>
public virtual void TestChangeNotification()
{
Database.ChangeListener changeListener = new _ChangeListener_16(this);
// add listener to database
database.AddChangeListener(changeListener);
// create a document
IDictionary<string, object> documentProperties = new Dictionary<string, object>();
documentProperties.Put("foo", 1);
documentProperties.Put("bar", false);
documentProperties.Put("baz", "touch");
Body body = new Body(documentProperties);
RevisionInternal rev1 = new RevisionInternal(body, database);
Status status = new Status();
rev1 = database.PutRevision(rev1, null, false, status);
NUnit.Framework.Assert.AreEqual(1, changeNotifications);
}
示例7: TestLoadDBPerformance
/// <exception cref="Couchbase.Lite.CouchbaseLiteException"></exception>
public virtual void TestLoadDBPerformance()
{
long startMillis = Runtime.CurrentTimeMillis();
string[] bigObj = new string[GetSizeOfDocument()];
for (int i = 0; i < GetSizeOfDocument(); i++)
{
bigObj[i] = _propertyValue;
}
for (int j = 0; j < GetNumberOfShutAndReloadCycles(); j++)
{
//Force close and reopen of manager and database to ensure cold
//start before doc creation
try
{
TearDown();
manager = new Manager(new LiteTestContext(), Manager.DefaultOptions);
database = manager.GetExistingDatabase(DefaultTestDb);
}
catch (Exception ex)
{
Log.E(Tag, "DB teardown", ex);
Fail();
}
for (int k = 0; k < GetNumberOfDocuments(); k++)
{
//create a document
IDictionary<string, object> props = new Dictionary<string, object>();
props.Put("bigArray", bigObj);
Body body = new Body(props);
RevisionInternal rev1 = new RevisionInternal(body, database);
Status status = new Status();
try
{
rev1 = database.PutRevision(rev1, null, false, status);
}
catch (Exception t)
{
Log.E(Tag, "Document creation failed", t);
Fail();
}
}
}
Log.V("PerformanceStats", Tag + "," + Sharpen.Extensions.ValueOf(Runtime.CurrentTimeMillis
() - startMillis).ToString() + "," + GetNumberOfDocuments() + "," + GetSizeOfDocument
() + ",," + GetNumberOfShutAndReloadCycles());
}
示例8: TestCreateDocsUnoptimizedWayPerformance
/// <exception cref="Couchbase.Lite.CouchbaseLiteException"></exception>
public virtual void TestCreateDocsUnoptimizedWayPerformance()
{
long startMillis = Runtime.CurrentTimeMillis();
string[] bigObj = new string[GetSizeOfDocument()];
for (int i = 0; i < GetSizeOfDocument(); i++)
{
bigObj[i] = _propertyValue;
}
for (int i_1 = 0; i_1 < GetNumberOfDocuments(); i_1++)
{
//create a document
IDictionary<string, object> props = new Dictionary<string, object>();
props.Put("bigArray", bigObj);
Body body = new Body(props);
RevisionInternal rev1 = new RevisionInternal(body, database);
Status status = new Status();
rev1 = database.PutRevision(rev1, null, false, status);
}
Log.V("PerformanceStats", Tag + "," + Sharpen.Extensions.ValueOf(Runtime.CurrentTimeMillis
() - startMillis).ToString() + "," + GetNumberOfDocuments() + "," + GetSizeOfDocument
());
}
示例9: TestLocalDocs
/// <exception cref="Couchbase.Lite.CouchbaseLiteException"></exception>
public virtual void TestLocalDocs()
{
//create a document
IDictionary<string, object> documentProperties = new Dictionary<string, object>();
documentProperties.Put("_id", "_local/doc1");
documentProperties.Put("foo", 1);
documentProperties.Put("bar", false);
Body body = new Body(documentProperties);
RevisionInternal rev1 = new RevisionInternal(body, database);
Status status = new Status();
rev1 = database.PutLocalRevision(rev1, null);
Log.V(Tag, "Created " + rev1);
NUnit.Framework.Assert.AreEqual("_local/doc1", rev1.GetDocId());
NUnit.Framework.Assert.IsTrue(rev1.GetRevId().StartsWith("1-"));
//read it back
RevisionInternal readRev = database.GetLocalDocument(rev1.GetDocId(), null);
NUnit.Framework.Assert.IsNotNull(readRev);
IDictionary<string, object> readRevProps = readRev.GetProperties();
NUnit.Framework.Assert.AreEqual(rev1.GetDocId(), readRev.GetProperties().Get("_id"
));
NUnit.Framework.Assert.AreEqual(rev1.GetRevId(), readRev.GetProperties().Get("_rev"
));
NUnit.Framework.Assert.AreEqual(UserProperties(readRevProps), UserProperties(body
.GetProperties()));
//now update it
documentProperties = readRev.GetProperties();
documentProperties.Put("status", "updated!");
body = new Body(documentProperties);
RevisionInternal rev2 = new RevisionInternal(body, database);
RevisionInternal rev2input = rev2;
rev2 = database.PutLocalRevision(rev2, rev1.GetRevId());
Log.V(Tag, "Updated " + rev1);
NUnit.Framework.Assert.AreEqual(rev1.GetDocId(), rev2.GetDocId());
NUnit.Framework.Assert.IsTrue(rev2.GetRevId().StartsWith("2-"));
//read it back
readRev = database.GetLocalDocument(rev2.GetDocId(), null);
NUnit.Framework.Assert.IsNotNull(readRev);
NUnit.Framework.Assert.AreEqual(UserProperties(readRev.GetProperties()), UserProperties
(body.GetProperties()));
// Try to update the first rev, which should fail:
bool gotException = false;
try
{
database.PutLocalRevision(rev2input, rev1.GetRevId());
}
catch (CouchbaseLiteException e)
{
NUnit.Framework.Assert.AreEqual(Status.Conflict, e.GetCBLStatus().GetCode());
gotException = true;
}
NUnit.Framework.Assert.IsTrue(gotException);
// Delete it:
RevisionInternal revD = new RevisionInternal(rev2.GetDocId(), null, true, database
);
gotException = false;
try
{
RevisionInternal revResult = database.PutLocalRevision(revD, null);
NUnit.Framework.Assert.IsNull(revResult);
}
catch (CouchbaseLiteException e)
{
NUnit.Framework.Assert.AreEqual(Status.Conflict, e.GetCBLStatus().GetCode());
gotException = true;
}
NUnit.Framework.Assert.IsTrue(gotException);
revD = database.PutLocalRevision(revD, rev2.GetRevId());
// Delete nonexistent doc:
gotException = false;
RevisionInternal revFake = new RevisionInternal("_local/fake", null, true, database
);
try
{
database.PutLocalRevision(revFake, null);
}
catch (CouchbaseLiteException e)
{
NUnit.Framework.Assert.AreEqual(Status.NotFound, e.GetCBLStatus().GetCode());
gotException = true;
}
NUnit.Framework.Assert.IsTrue(gotException);
// Read it back (should fail):
readRev = database.GetLocalDocument(revD.GetDocId(), null);
NUnit.Framework.Assert.IsNull(readRev);
}
开发者ID:transformersprimeabcxyz,项目名称:_TO-DO-couchbase-lite-net-couchbase,代码行数:86,代码来源:LocalDocsTest.cs
示例10: TestPusher
public void TestPusher()
{
var remote = GetReplicationURL();
var docIdTimestamp = Convert.ToString(Runtime.CurrentTimeMillis());
// Create some documents:
var documentProperties = new Dictionary<string, object>();
var doc1Id = string.Format("doc1-{0}", docIdTimestamp);
documentProperties["_id"] = doc1Id;
documentProperties["foo"] = 1;
documentProperties["bar"] = false;
var body = new Body(documentProperties);
var rev1 = new RevisionInternal(body, database);
var status = new Status();
rev1 = database.PutRevision(rev1, null, false, status);
Assert.AreEqual(StatusCode.Created, status.GetCode());
documentProperties.Put("_rev", rev1.GetRevId());
documentProperties["UPDATED"] = true;
database.PutRevision(new RevisionInternal(documentProperties, database), rev1.GetRevId(), false, status);
Assert.AreEqual(StatusCode.Created, status.GetCode());
documentProperties = new Dictionary<string, object>();
var doc2Id = string.Format("doc2-{0}", docIdTimestamp);
documentProperties["_id"] = doc2Id;
documentProperties["baz"] = 666;
documentProperties["fnord"] = true;
database.PutRevision(new RevisionInternal(documentProperties, database), null, false, status);
Assert.AreEqual(StatusCode.Created, status.GetCode());
var doc2 = database.GetDocument(doc2Id);
var doc2UnsavedRev = doc2.CreateRevision();
var attachmentStream = GetAsset("attachment.png");
doc2UnsavedRev.SetAttachment("attachment.png", "image/png", attachmentStream);
var doc2Rev = doc2UnsavedRev.Save();
Assert.IsNotNull(doc2Rev);
const bool continuous = false;
var repl = database.CreatePushReplication(remote);
repl.Continuous = continuous;
if (!IsSyncGateway(remote)) {
repl.CreateTarget = true;
}
// Check the replication's properties:
Assert.AreEqual(database, repl.LocalDatabase);
Assert.AreEqual(remote, repl.RemoteUrl);
Assert.IsFalse(repl.IsPull);
Assert.IsFalse(repl.Continuous);
Assert.IsNull(repl.Filter);
Assert.IsNull(repl.FilterParams);
Assert.IsNull(repl.DocIds);
// TODO: CAssertNil(r1.headers); still not null!
// Check that the replication hasn't started running:
Assert.IsFalse(repl.IsRunning);
Assert.AreEqual((int)repl.Status, (int)ReplicationStatus.Stopped);
Assert.AreEqual(0, repl.CompletedChangesCount);
Assert.AreEqual(0, repl.ChangesCount);
Assert.IsNull(repl.LastError);
RunReplication(repl);
// TODO: Verify the foloowing 2 asserts. ChangesCount and CompletedChangesCount
// should already be reset when the replicator stopped.
Assert.IsTrue(repl.ChangesCount >= 2);
Assert.IsTrue(repl.CompletedChangesCount >= 2);
Assert.IsNull(repl.LastError);
VerifyRemoteDocExists(remote, doc1Id);
// Add doc3
documentProperties = new Dictionary<string, object>();
var doc3Id = string.Format("doc3-{0}", docIdTimestamp);
var doc3 = database.GetDocument(doc3Id);
documentProperties["bat"] = 677;
doc3.PutProperties(documentProperties);
// re-run push replication
var repl2 = database.CreatePushReplication(remote);
repl2.Continuous = continuous;
if (!IsSyncGateway(remote))
{
repl2.CreateTarget = true;
}
var repl2CheckedpointId = repl2.RemoteCheckpointDocID();
RunReplication(repl2);
Assert.IsNull(repl2.LastError);
// make sure trhe doc has been added
VerifyRemoteDocExists(remote, doc3Id);
Assert.AreEqual(repl2.LastSequence, database.LastSequenceWithCheckpointId(repl2CheckedpointId));
System.Threading.Thread.Sleep(2000);
//.........这里部分代码省略.........
示例11: UpdateDb
// Perform a document operation on the specified database
private static CouchbaseLiteResponse UpdateDb(ICouchbaseListenerContext context, Database db, string docId, Body body, bool deleting)
{
var response = context.CreateResponse();
if (docId != null) {
// On PUT/DELETE, get revision ID from either ?rev= query, If-Match: header, or doc body:
string revParam = context.GetQueryParam("rev");
string ifMatch = context.RequestHeaders["If-Match"];
if (ifMatch != null) {
if (revParam == null) {
revParam = ifMatch;
} else if (!revParam.Equals(ifMatch)) {
return context.CreateResponse(StatusCode.BadRequest);
}
}
if (revParam != null && body != null) {
var revProp = body.GetPropertyForKey("_rev");
if (revProp == null) {
// No _rev property in body, so use ?rev= query param instead:
var props = body.GetProperties();
props["_rev"] = revParam;
body = new Body(props);
} else if (!revProp.Equals(revParam)) {
return context.CreateResponse(StatusCode.BadRequest); // mismatch between _rev and rev
}
}
}
RevisionInternal rev;
StatusCode status = UpdateDocument(context, db, docId, body, deleting, false, out rev);
if ((int)status < 300) {
context.CacheWithEtag(rev.GetRevId()); // set ETag
if (!deleting) {
var url = context.RequestUrl;
if (docId != null) {
response["Location"] = url.AbsoluteUri;
}
}
response.JsonBody = new Body(new Dictionary<string, object> {
{ "ok", true },
{ "id", rev.GetDocId() },
{ "rev", rev.GetRevId() }
});
}
response.InternalStatus = status;
return response;
}
示例12: TestCRUDOperations
public void TestCRUDOperations()
{
database.Changed += (sender, e) => {
var changes = e.Changes.ToList();
foreach (DocumentChange change in changes)
{
var rev = change.AddedRevision;
Assert.IsNotNull(rev);
Assert.IsNotNull(rev.GetDocId());
Assert.IsNotNull(rev.GetRevId());
Assert.AreEqual(rev.GetDocId(), rev.GetProperties()["_id"]);
Assert.AreEqual(rev.GetRevId(), rev.GetProperties()["_rev"]);
}
};
var privateUUID = database.PrivateUUID();
var publicUUID = database.PublicUUID();
Log.V(Tag, "DB private UUID = '" + privateUUID + "', public UUID = '" +
publicUUID + "'");
Assert.IsTrue(privateUUID.Length >= 20);
Assert.IsTrue(publicUUID.Length >= 20);
//create a document
var documentProperties = new Dictionary<string, object>();
documentProperties["foo"] = 1;
documentProperties["bar"] = false;
documentProperties["baz"] = "touch";
var body = new Body(documentProperties);
var rev1 = new RevisionInternal(body);
rev1 = database.PutRevision(rev1, null, false);
Log.V(Tag, "Created " + rev1);
Assert.IsTrue(rev1.GetDocId().Length >= 10);
Assert.IsTrue(rev1.GetRevId().StartsWith("1-"));
//read it back
var readRev = database.GetDocument(rev1.GetDocId(), null,
true);
Assert.IsNotNull(readRev);
var userReadRevProps = UserProperties(readRev.GetProperties());
var userBodyProps = UserProperties(body.GetProperties());
Assert.AreEqual(userReadRevProps.Count, userBodyProps.Count);
foreach(var key in userReadRevProps.Keys)
{
Assert.AreEqual(userReadRevProps[key], userBodyProps[key]);
}
//now update it
documentProperties = (Dictionary<string, object>)readRev.GetProperties();
documentProperties["status"] = "updated!";
body = new Body(documentProperties);
var rev2 = new RevisionInternal(body);
var rev2input = rev2;
rev2 = database.PutRevision(rev2, rev1.GetRevId(), false);
Log.V(Tag, "Updated " + rev1);
Assert.AreEqual(rev1.GetDocId(), rev2.GetDocId());
Assert.IsTrue(rev2.GetRevId().StartsWith("2-"));
//read it back
readRev = database.GetDocument(rev2.GetDocId(), null,
true);
Assert.IsNotNull(readRev);
Assert.AreEqual(UserProperties(readRev.GetProperties()), UserProperties
(body.GetProperties()));
// Try to update the first rev, which should fail:
var ex = Assert.Throws<CouchbaseLiteException>(() => database.PutRevision(rev2input, rev1.GetRevId(), false));
Assert.AreEqual(StatusCode.Conflict, ex.Code);
// Check the changes feed, with and without filters:
var changeRevisions = database.ChangesSince(0, ChangesOptions.Default, null, null);
Log.V(Tag, "Changes = " + changeRevisions);
Assert.AreEqual(1, changeRevisions.Count);
changeRevisions = database.ChangesSince(0, ChangesOptions.Default,
(revision, items) => "updated!".Equals (revision.Properties.Get("status")), null);
Assert.AreEqual(1, changeRevisions.Count);
changeRevisions = database.ChangesSince(0, ChangesOptions.Default,
(revision, items) => "not updated!".Equals (revision.Properties.Get("status")), null);
Assert.AreEqual(0, changeRevisions.Count);
// Delete it:
var revD = new RevisionInternal(rev2.GetDocId(), null, true);
ex = Assert.Throws<CouchbaseLiteException>(() => database.PutRevision(revD, null, false));
Assert.AreEqual(StatusCode.Conflict, ex.Code);
revD = database.PutRevision(revD, rev2.GetRevId(), false);
Assert.AreEqual(revD.GetDocId(), rev2.GetDocId());
Assert.IsTrue(revD.GetRevId().StartsWith("3-"));
// Delete nonexistent doc:
var revFake = new RevisionInternal("fake", null, true);
ex = Assert.Throws<CouchbaseLiteException>(() => database.PutRevision(revFake, null, false));
Assert.AreEqual(StatusCode.NotFound, ex.Code);
// Read it back (should fail):
//.........这里部分代码省略.........
开发者ID:transformersprimeabcxyz,项目名称:_TO-DO-couchbase-lite-net-couchbase,代码行数:101,代码来源:CRUDOperationsTest.cs
示例13: ExecuteTemporaryViewFunction
/// <summary>
/// Creates (and executes) a temporary view based on the view function supplied in the JSON request.
/// </summary>
/// <returns>The response state for further HTTP processing</returns>
/// <param name="context">The context of the Couchbase Lite HTTP request</param>
/// <remarks>
/// http://docs.couchdb.org/en/latest/api/database/temp-views.html#post--db-_temp_view
/// </remarks>
public static ICouchbaseResponseState ExecuteTemporaryViewFunction(ICouchbaseListenerContext context)
{
var response = context.CreateResponse();
if (context.RequestHeaders["Content-Type"] == null ||
!context.RequestHeaders["Content-Type"].StartsWith("application/json")) {
response.InternalStatus = StatusCode.UnsupportedType;
return response.AsDefaultState();
}
IEnumerable<byte> json = context.BodyStream.ReadAllBytes();
var requestBody = new Body(json);
if (!requestBody.IsValidJSON()) {
response.InternalStatus = StatusCode.BadJson;
return response.AsDefaultState();
}
var props = requestBody.GetProperties();
if (props == null) {
response.InternalStatus = StatusCode.BadJson;
return response.AsDefaultState();
}
var options = context.QueryOptions;
if (options == null) {
response.InternalStatus = StatusCode.BadRequest;
return response.AsDefaultState();
}
return PerformLogicWithDatabase(context, true, db =>
{
if (context.CacheWithEtag(db.GetLastSequenceNumber().ToString())) {
response.InternalStatus = StatusCode.NotModified;
return response;
}
var view = db.GetView("@@[email protected]@");
var status = view.Compile(props, "javascript");
if(status.IsError) {
response.InternalStatus = status.Code;
return response;
}
try {
view.UpdateIndex_Internal();
return QueryView(context, null, view, options);
} catch(CouchbaseLiteException e) {
response.InternalStatus = e.CBLStatus.Code;
}
return response;
}).AsDefaultState();
}
示例14: ProcessDocumentChangeOperations
/// <summary>
/// Create and update multiple documents at the same time within a single request.
/// </summary>
/// <returns>The response state for further HTTP processing</returns>
/// <param name="context">The context of the Couchbase Lite HTTP request</param>
/// <remarks>
/// http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_bulk_docs
/// </remarks>
public static ICouchbaseResponseState ProcessDocumentChangeOperations(ICouchbaseListenerContext context)
{
return PerformLogicWithDatabase(context, true, db =>
{
var postBody = context.BodyAs<Dictionary<string, object>>();
if(postBody == null) {
return context.CreateResponse(StatusCode.BadJson);
}
if(!postBody.ContainsKey("docs")) {
return context.CreateResponse(StatusCode.BadParam);
}
var docs = postBody["docs"].AsList<IDictionary<string, object>>();
bool allOrNothing;
postBody.TryGetValue<bool>("all_or_nothing", out allOrNothing);
bool newEdits;
postBody.TryGetValue<bool>("new_edits", out newEdits);
var response = context.CreateResponse();
StatusCode status = StatusCode.Ok;
bool success = db.RunInTransaction(() => {
List<IDictionary<string, object>> results = new List<IDictionary<string, object>>(docs.Count);
var castContext = context as ICouchbaseListenerContext2;
var source = castContext != null && !castContext.IsLoopbackRequest ? castContext.Sender : null;
foreach(var doc in docs) {
string docId = doc.CblID();
RevisionInternal rev = null;
Body body = new Body(doc);
if(!newEdits) {
if(!RevisionInternal.IsValid(body)) {
status = StatusCode.BadParam;
} else {
rev = new RevisionInternal(body);
var history = Database.ParseCouchDBRevisionHistory(doc);
try {
db.ForceInsert(rev, history, source);
} catch(CouchbaseLiteException e) {
status = e.Code;
}
}
} else {
status = DocumentMethods.UpdateDocument(context, db, docId, body, false, allOrNothing, out rev);
}
IDictionary<string, object> result = null;
if((int)status < 300) {
Debug.Assert(rev != null && rev.RevID != null);
if(newEdits) {
result = new Dictionary<string, object>
{
{ "id", rev.DocID },
{ "rev", rev.RevID },
{ "status", (int)status }
};
}
} else if((int)status >= 500) {
return false; // abort the whole thing if something goes badly wrong
} else if(allOrNothing) {
return false; // all_or_nothing backs out if there's any error
} else {
var info = Status.ToHttpStatus(status);
result = new Dictionary<string, object>
{
{ "id", docId },
{ "error", info.Item2 },
{ "status", info.Item1 }
};
}
if(result != null) {
results.Add(result);
}
}
response.JsonBody = new Body(results.Cast<object>().ToList());
return true;
});
if(!success) {
response.InternalStatus = status;
}
return response;
}).AsDefaultState();
}
示例15: TestPusher
public void TestPusher()
{
if (!Boolean.Parse((string)GetProperty("replicationTestsEnabled")))
{
Assert.Inconclusive("Replication tests disabled.");
return;
}
using (var remoteDb = _sg.CreateDatabase(TempDbName())) {
var remote = remoteDb.RemoteUri;
var docIdTimestamp = Convert.ToString((ulong)DateTime.UtcNow.TimeSinceEpoch().TotalMilliseconds);
// Create some documents:
var documentProperties = new Dictionary<string, object>();
var doc1Id = string.Format("doc1-{0}", docIdTimestamp);
documentProperties["_id"] = doc1Id;
documentProperties["foo"] = 1;
documentProperties["bar"] = false;
var body = new Body(documentProperties);
var rev1 = new RevisionInternal(body);
rev1 = database.PutRevision(rev1, null, false);
documentProperties.SetRevID(rev1.RevID);
documentProperties["UPDATED"] = true;
database.PutRevision(new RevisionInternal(documentProperties), rev1.RevID, false);
documentProperties = new Dictionary<string, object>();
var doc2Id = string.Format("doc2-{0}", docIdTimestamp);
documentProperties["_id"] = doc2Id;
documentProperties["baz"] = 666;
documentProperties["fnord"] = true;
database.PutRevision(new RevisionInternal(documentProperties), null, false);
var doc2 = database.GetDocument(doc2Id);
var doc2UnsavedRev = doc2.CreateRevision();
var attachmentStream = GetAsset("attachment.png");
doc2UnsavedRev.SetAttachment("attachment_testPusher.png", "image/png", attachmentStream);
var doc2Rev = doc2UnsavedRev.Save();
doc2UnsavedRev.Dispose();
attachmentStream.Dispose();
Assert.IsNotNull(doc2Rev);
const bool continuous = false;
var repl = database.CreatePushReplication(remote);
repl.Continuous = continuous;
if (!IsSyncGateway(remote)) {
repl.CreateTarget = true;
}
// Check the replication's properties:
Assert.AreEqual(database, repl.LocalDatabase);
Assert.AreEqual(remote, repl.RemoteUrl);
Assert.IsFalse(repl.IsPull);
Assert.IsFalse(repl.Continuous);
Assert.IsNull(repl.Filter);
Assert.IsNull(repl.FilterParams);
Assert.IsNull(repl.DocIds);
// TODO: CAssertNil(r1.headers); still not null!
// Check that the replication hasn't started running:
Assert.IsFalse(repl.IsRunning);
Assert.AreEqual(ReplicationStatus.Stopped, repl.Status);
Assert.AreEqual(0, repl.CompletedChangesCount);
Assert.AreEqual(0, repl.ChangesCount);
Assert.IsNull(repl.LastError);
RunReplication(repl);
// TODO: Verify the foloowing 2 asserts. ChangesCount and CompletedChangesCount
// should already be reset when the replicator stopped.
Assert.IsNull(repl.LastError);
Assert.IsTrue(repl.ChangesCount >= 2);
Assert.IsTrue(repl.CompletedChangesCount >= 2);
remoteDb.VerifyDocumentExists(doc1Id);
// Add doc3
documentProperties = new Dictionary<string, object>();
var doc3Id = string.Format("doc3-{0}", docIdTimestamp);
var doc3 = database.GetDocument(doc3Id);
documentProperties["bat"] = 677;
doc3.PutProperties(documentProperties);
// re-run push replication
var repl2 = database.CreatePushReplication(remote);
repl2.Continuous = continuous;
if (!IsSyncGateway(remote)) {
repl2.CreateTarget = true;
}
var repl2CheckedpointId = repl2.RemoteCheckpointDocID();
RunReplication(repl2);
Assert.IsNull(repl2.LastError);
Sleep(1000);
//.........这里部分代码省略.........