如何在不使用复制的情况下模拟CouchDB中的冲突?

nic*_*773 2 couchdb conflict

我想为我的应用程序编写单元测试,模拟复制过程中的冲突.有没有办法只使用一个CouchDB数据库和服务器来模拟冲突?

Mat*_*all 6

我假设您想要获取包含数据库冲突的文档,而不是409冲突响应?

因此,使用已知的_id在数据库中创建文档:

$ curl http://localhost:5984/scratch/foo -X PUT -H "Content-Type: application/json" -d '{}'
{"ok":true,"id":"foo","rev":"1-967a00dff5e02add41819138abb3284d"}
Run Code Online (Sandbox Code Playgroud)

然后使用与all_or_nothing批量文档API:true选项更新与故意损坏或没有_rev相同的文档,添加好措施一些不同的文档属性:

$ curl http://localhost:5984/scratch/_bulk_docs -X POST -H "Content-Type: application/json" -d '{"all_or_nothing": true, "docs": [{"_id": "foo", "abc": 123}]}'
[{"id":"foo","rev":"1-15c813a2b4b312c6915821b01a1986c5"}]
Run Code Online (Sandbox Code Playgroud)

然后,您应该在文档中发生冲突:

$ curl http://localhost:5984/scratch/foo?conflicts=true
{"_id":"foo","_rev":"1-967a00dff5e02add41819138abb3284d","_conflicts":["1-15c813a2b4b312c6915821b01a1986c5"]}
Run Code Online (Sandbox Code Playgroud)

您还可以使用CouchDB提交者Randall Leeds?new_edits=false描述的执行常规查询.

$ curl http://localhost:5984/scratch?new_edits=false -X POST -H "Content-Type: application/json" -d '{"_id": "foo", "abc": 123}'
Run Code Online (Sandbox Code Playgroud)