You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by wo...@apache.org on 2018/12/20 03:10:10 UTC
[couchdb] branch master updated: Migrate cluster with(out) quorum
js tests as elixir tests (#1812)
This is an automated email from the ASF dual-hosted git repository.
wohali pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/couchdb.git
The following commit(s) were added to refs/heads/master by this push:
new f4195a0 Migrate cluster with(out) quorum js tests as elixir tests (#1812)
f4195a0 is described below
commit f4195a0fa2a8e90c34931e383376eb365c6ea65f
Author: Juanjo Rodriguez <jj...@gmail.com>
AuthorDate: Thu Dec 20 04:10:04 2018 +0100
Migrate cluster with(out) quorum js tests as elixir tests (#1812)
---
Makefile | 14 +-
Makefile.win | 14 +-
test/elixir/test/cluster_with_quorum_test.exs | 179 +++++++++++++++++++++++
test/elixir/test/cluster_without_quorum_test.exs | 178 ++++++++++++++++++++++
4 files changed, 383 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 04c40e7..c6cdcc3 100644
--- a/Makefile
+++ b/Makefile
@@ -201,7 +201,19 @@ python-black-update: .venv/bin/black
.PHONY: elixir
elixir: elixir-check-formatted elixir-credo devclean
- @dev/run -a adm:pass --no-eval test/elixir/run $(EXUNIT_OPTS)
+ @dev/run -a adm:pass --no-eval 'test/elixir/run --exclude without_quorum_test --exclude with_quorum_test $(EXUNIT_OPTS)'
+
+.PHONY: elixir-cluster-without-quorum
+elixir-cluster-without-quorum: elixir-check-formatted elixir-credo devclean
+ @dev/run -n 3 -q -a adm:pass \
+ --degrade-cluster 2 \
+ --no-eval 'test/elixir/run --only without_quorum_test $(EXUNIT_OPTS)'
+
+.PHONY: elixir-cluster-with-quorum
+elixir-cluster-with-quorum: elixir-check-formatted elixir-credo devclean
+ @dev/run -n 3 -q -a adm:pass \
+ --degrade-cluster 1 \
+ --no-eval 'test/elixir/run --only with_quorum_test $(EXUNIT_OPTS)'
.PHONY: elixir-check-formatted
elixir-check-formatted:
diff --git a/Makefile.win b/Makefile.win
index 0ffbfa9..fd1ab9b 100644
--- a/Makefile.win
+++ b/Makefile.win
@@ -173,7 +173,19 @@ python-black-update: .venv/bin/black
.PHONY: elixir
elixir: elixir-check-formatted elixir-credo devclean
- @dev\run -a adm:pass --no-eval test\elixir\run.cmd $(EXUNIT_OPTS)
+ @dev\run -a adm:pass --no-eval 'test\elixir\run.cmd --exclude without_quorum_test --exclude with_quorum_test $(EXUNIT_OPTS)'
+
+.PHONY: elixir-cluster-without-quorum
+elixir-cluster-without-quorum: elixir-check-formatted elixir-credo devclean
+ @dev\run -n 3 -q -a adm:pass \
+ --degrade-cluster 2 \
+ --no-eval 'test\elixir\run --only without_quorum_test $(EXUNIT_OPTS)'
+
+.PHONY: elixir-cluster-with-quorum
+elixir-cluster-with-quorum: elixir-check-formatted elixir-credo devclean
+ @dev\run -n 3 -q -a adm:pass \
+ --degrade-cluster 1 \
+ --no-eval 'test\elixir\run --only with_quorum_test $(EXUNIT_OPTS)'
.PHONY: elixir-check-formatted
elixir-check-formatted:
diff --git a/test/elixir/test/cluster_with_quorum_test.exs b/test/elixir/test/cluster_with_quorum_test.exs
new file mode 100644
index 0000000..76fc9b4
--- /dev/null
+++ b/test/elixir/test/cluster_with_quorum_test.exs
@@ -0,0 +1,179 @@
+defmodule WithQuorumTest do
+ use CouchTestCase
+
+ @moduletag :with_quorum_test
+
+ @moduledoc """
+ Test CouchDB API in a cluster without quorum.
+ """
+ @tag :with_db_name
+ test "Creating/Deleting DB should return 201-Created/202-Acepted", context do
+ db_name = context[:db_name]
+ resp = Couch.put("/#{db_name}")
+ msg = "Should return 201-Created"
+ assert resp.status_code == 201, msg
+ resp = Couch.delete("/#{db_name}")
+ msg = "Should return 202-Acepted"
+ assert resp.status_code == 202, msg
+ end
+
+ @tag :with_db_name
+ test "Creating-Updating/Deleting doc should return 201-Created/200-OK", context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+
+ resp = Couch.post("/#{context[:db_name]}", body: %{:_id => "0", :a => 1})
+ msg = "Should return 201-Created"
+ assert resp.status_code == 201, msg
+
+ resp = Couch.get("/#{context[:db_name]}/0")
+ rev = resp.body["_rev"]
+
+ resp =
+ Couch.put("/#{context[:db_name]}/0", body: %{:_id => "0", :_rev => rev, :a => 2})
+
+ msg = "Should return 201-Created"
+ assert resp.status_code == 201, msg
+
+ resp = Couch.get("/#{context[:db_name]}/0")
+ rev = resp.body["_rev"]
+ resp = Couch.delete("/#{context[:db_name]}/0", query: %{:rev => rev})
+ msg = "Should return 200-OK"
+ assert resp.status_code == 200, msg
+
+ Couch.delete("/#{db_name}")
+ end
+
+ @tag :with_db_name
+ test "Creating-Updating/Deleting doc with overriden quorum should return 202-Acepted/200-OK",
+ context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+
+ resp =
+ Couch.post("/#{context[:db_name]}",
+ query: %{:w => 3},
+ body: %{:_id => "0", :a => 1}
+ )
+
+ msg = "Should return 202-Acepted"
+ assert resp.status_code == 202, msg
+
+ resp = Couch.get("/#{context[:db_name]}/0")
+ rev = resp.body["_rev"]
+
+ resp =
+ Couch.put("/#{context[:db_name]}/0",
+ query: %{:w => 3},
+ body: %{:_id => "0", :_rev => rev, :a => 2}
+ )
+
+ msg = "Should return 202-Acepted"
+ assert resp.status_code == 202, msg
+
+ resp = Couch.get("/#{context[:db_name]}/0")
+ rev = resp.body["_rev"]
+ resp = Couch.delete("/#{context[:db_name]}/0", query: %{:w => 1, :rev => rev})
+ msg = "Should return 200-Ok"
+ assert resp.status_code == 200, msg
+
+ Couch.delete("/#{db_name}")
+ end
+
+ @tag :with_db_name
+ test "Copy doc should return 201-Created", context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+
+ Couch.post("/#{context[:db_name]}",
+ body: %{:_id => "0", :a => 1}
+ )
+
+ headers = [Destination: "1"]
+ resp = Couch.request(:copy, "/#{context[:db_name]}/0", headers: headers)
+ msg = "Should return 201-Created"
+ assert resp.status_code == 201, msg
+ Couch.delete("/#{db_name}")
+ end
+
+ @doc_range 1..5
+
+ @tag :with_db_name
+ test "Bulk docs should return 201-Created", context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+ docs = create_docs(@doc_range)
+ resp = Couch.post("/#{db_name}/_bulk_docs", body: %{docs: docs})
+ msg = "Should return 201-Created"
+ assert resp.status_code == 201, msg
+
+ Couch.delete("/#{db_name}")
+ end
+
+ @tag :with_db_name
+ test "Bulk docs overriden quorum should return 202-Acepted", context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+ docs = create_docs(@doc_range)
+ resp = Couch.post("/#{db_name}/_bulk_docs", query: %{:w => 3}, body: %{docs: docs})
+ msg = "Should return 202-Acepted"
+ assert resp.status_code == 202, msg
+
+ Couch.delete("/#{db_name}")
+ end
+
+ @tag :with_db_name
+ test "Attachments should return 201-Created", context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+ resp = Couch.post("/#{context[:db_name]}", body: %{:_id => "0"})
+ rev = resp.body["rev"]
+
+ resp =
+ Couch.put("/#{context[:db_name]}/0/foo.txt",
+ query: %{:rev => rev},
+ body: "This is a no bas64 encoded text",
+ headers: ["Content-Type": "text/plain;charset=utf-8"]
+ )
+
+ msg = "Should return 201-Created"
+ assert resp.status_code == 201, msg
+
+ rev = resp.body["rev"]
+ resp = Couch.delete("/#{context[:db_name]}/0/foo.txt", query: %{:rev => rev})
+ msg = "Should return 200-Ok"
+ assert resp.status_code == 200, msg
+
+ Couch.delete("/#{db_name}")
+ end
+
+ @tag :with_db_name
+ test "Attachments overriden quorum should return 202-Acepted", context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+ resp = Couch.post("/#{context[:db_name]}", body: %{:_id => "0"})
+ rev = resp.body["rev"]
+
+ resp =
+ Couch.put("/#{context[:db_name]}/0/foo.txt",
+ query: %{:rev => rev, :w => 3},
+ body: "This is a no bas64 encoded text",
+ headers: ["Content-Type": "text/plain;charset=utf-8"]
+ )
+
+ msg = "Should return 202-Acepted"
+ assert resp.status_code == 202, msg
+
+ rev = resp.body["rev"]
+
+ resp =
+ Couch.delete("/#{context[:db_name]}/0/foo.txt",
+ query: %{:rev => rev, :w => 3}
+ )
+
+ msg = "Should return 200-Ok"
+ assert resp.status_code == 200, msg
+
+ Couch.delete("/#{db_name}")
+ end
+end
diff --git a/test/elixir/test/cluster_without_quorum_test.exs b/test/elixir/test/cluster_without_quorum_test.exs
new file mode 100644
index 0000000..a0bdcc3
--- /dev/null
+++ b/test/elixir/test/cluster_without_quorum_test.exs
@@ -0,0 +1,178 @@
+defmodule WithoutQuorumTest do
+ use CouchTestCase
+
+ @moduletag :without_quorum_test
+
+ @moduledoc """
+ Test CouchDB API in a cluster without quorum.
+ """
+ @tag :with_db_name
+ test "Creating/Deleting DB should return 202-Acepted", context do
+ db_name = context[:db_name]
+ resp = Couch.put("/#{db_name}")
+ msg = "Should return 202-Acepted"
+ assert resp.status_code == 202, msg
+ resp = Couch.delete("/#{db_name}")
+ assert resp.status_code == 202, msg
+ end
+
+ @tag :with_db_name
+ test "Creating/Updating/Deleting doc should return 202-Acepted", context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+
+ resp = Couch.post("/#{context[:db_name]}", body: %{:_id => "0", :a => 1})
+ msg = "Should return 202-Acepted"
+ assert resp.status_code == 202, msg
+
+ resp = Couch.get("/#{context[:db_name]}/0")
+ rev = resp.body["_rev"]
+
+ resp =
+ Couch.put("/#{context[:db_name]}/0", body: %{:_id => "0", :_rev => rev, :a => 2})
+
+ msg = "Should return 202-Acepted"
+ assert resp.status_code == 202, msg
+
+ resp = Couch.get("/#{context[:db_name]}/0")
+ rev = resp.body["_rev"]
+ resp = Couch.delete("/#{context[:db_name]}/0", query: %{:rev => rev})
+ msg = "Should return 202-Acepted"
+ assert resp.status_code == 202, msg
+
+ Couch.delete("/#{db_name}")
+ end
+
+ @tag :with_db_name
+ test "Creating-Updating/Deleting doc with overriden quorum should return 201-Created/200-OK",
+ context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+
+ resp =
+ Couch.post("/#{context[:db_name]}",
+ query: %{:w => 1},
+ body: %{:_id => "0", :a => 1}
+ )
+
+ msg = "Should return 201-Created"
+ assert resp.status_code == 201, msg
+
+ resp = Couch.get("/#{context[:db_name]}/0")
+ rev = resp.body["_rev"]
+
+ resp =
+ Couch.put("/#{context[:db_name]}/0",
+ query: %{:w => 1},
+ body: %{:_id => "0", :_rev => rev, :a => 2}
+ )
+
+ msg = "Should return 201-Created"
+ assert resp.status_code == 201, msg
+
+ resp = Couch.get("/#{context[:db_name]}/0")
+ rev = resp.body["_rev"]
+ resp = Couch.delete("/#{context[:db_name]}/0", query: %{:w => 1, :rev => rev})
+ msg = "Should return 200-Ok"
+ assert resp.status_code == 200, msg
+
+ Couch.delete("/#{db_name}")
+ end
+
+ @tag :with_db_name
+ test "Copy doc should return 202-Acepted", context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+
+ Couch.post("/#{context[:db_name]}",
+ body: %{:_id => "0", :a => 1}
+ )
+
+ headers = [Destination: "1"]
+ resp = Couch.request(:copy, "/#{context[:db_name]}/0", headers: headers)
+ msg = "Should return 202-Acepted"
+ assert resp.status_code == 202, msg
+ Couch.delete("/#{db_name}")
+ end
+
+ @doc_range 1..5
+
+ @tag :with_db_name
+ test "Bulk docs should return 202-Acepted", context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+ docs = create_docs(@doc_range)
+ resp = Couch.post("/#{db_name}/_bulk_docs", body: %{docs: docs})
+ msg = "Should return 202-Acepted"
+ assert resp.status_code == 202, msg
+
+ Couch.delete("/#{db_name}")
+ end
+
+ @tag :with_db_name
+ test "Bulk docs overriden quorum should return 201-Created", context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+ docs = create_docs(@doc_range)
+ resp = Couch.post("/#{db_name}/_bulk_docs", query: %{:w => 1}, body: %{docs: docs})
+ msg = "Should return 201-Created"
+ assert resp.status_code == 201, msg
+
+ Couch.delete("/#{db_name}")
+ end
+
+ @tag :with_db_name
+ test "Attachments should return 202-Acepted", context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+ resp = Couch.post("/#{context[:db_name]}", body: %{:_id => "0"})
+ rev = resp.body["rev"]
+
+ resp =
+ Couch.put("/#{context[:db_name]}/0/foo.txt",
+ query: %{:rev => rev},
+ body: "This is a no bas64 encoded text",
+ headers: ["Content-Type": "text/plain;charset=utf-8"]
+ )
+
+ msg = "Should return 202-Acepted"
+ assert resp.status_code == 202, msg
+
+ rev = resp.body["rev"]
+ resp = Couch.delete("/#{context[:db_name]}/0/foo.txt", query: %{:rev => rev})
+ msg = "Should return 200-Ok"
+ assert resp.status_code == 200, msg
+
+ Couch.delete("/#{db_name}")
+ end
+
+ @tag :with_db_name
+ test "Attachments overriden quorum should return 201-Created", context do
+ db_name = context[:db_name]
+ Couch.put("/#{db_name}")
+ resp = Couch.post("/#{context[:db_name]}", body: %{:_id => "0"})
+ rev = resp.body["rev"]
+
+ resp =
+ Couch.put("/#{context[:db_name]}/0/foo.txt",
+ query: %{:rev => rev, :w => 1},
+ body: "This is a no bas64 encoded text",
+ headers: ["Content-Type": "text/plain;charset=utf-8"]
+ )
+
+ msg = "Should return 201-Created"
+ assert resp.status_code == 201, msg
+
+ rev = resp.body["rev"]
+
+ resp =
+ Couch.delete("/#{context[:db_name]}/0/foo.txt",
+ query: %{:rev => rev, :w => 1}
+ )
+
+ msg = "Should return 200-Ok"
+ assert resp.status_code == 200, msg
+
+ Couch.delete("/#{db_name}")
+ end
+end