summaryrefslogtreecommitdiff
path: root/test/elixir/test/reshard_helpers.exs
diff options
context:
space:
mode:
Diffstat (limited to 'test/elixir/test/reshard_helpers.exs')
-rw-r--r--test/elixir/test/reshard_helpers.exs111
1 files changed, 111 insertions, 0 deletions
diff --git a/test/elixir/test/reshard_helpers.exs b/test/elixir/test/reshard_helpers.exs
new file mode 100644
index 000000000..c67e6902e
--- /dev/null
+++ b/test/elixir/test/reshard_helpers.exs
@@ -0,0 +1,111 @@
+defmodule ReshardHelpers do
+ use CouchTestCase
+
+ def get_summary do
+ resp = Couch.get("/_reshard")
+ assert resp.status_code == 200
+ resp.body
+ end
+
+ def get_state do
+ resp = Couch.get("/_reshard/state")
+ assert resp.status_code == 200
+ resp.body
+ end
+
+ def put_state_running do
+ resp = Couch.put("/_reshard/state", body: %{:state => "running"})
+ assert resp.status_code == 200
+ resp
+ end
+
+ def put_state_stopped(reason \\ "") do
+ body = %{:state => "stopped", :reason => reason}
+ resp = Couch.put("/_reshard/state", body: body)
+ assert resp.status_code == 200
+ resp
+ end
+
+ def get_jobs do
+ resp = Couch.get("/_reshard/jobs")
+ assert resp.status_code == 200
+ resp.body["jobs"]
+ end
+
+ def post_job_db(db) do
+ body = %{:type => :split, :db => db}
+ Couch.post("/_reshard/jobs", body: body)
+ end
+
+ def post_job_node(db, node) do
+ body = %{:type => :split, :db => db, :node => node}
+ Couch.post("/_reshard/jobs", body: body)
+ end
+
+ def post_job_range(db, range) do
+ body = %{:type => :split, :db => db, :range => range}
+ Couch.post("/_reshard/jobs", body: body)
+ end
+
+ def post_job_node_and_range(db, node, range) do
+ body = %{:type => :split, :db => db, :node => node, :range => range}
+ Couch.post("/_reshard/jobs", body: body)
+ end
+
+ def get_job(id) when is_binary(id) do
+ Couch.get("/_reshard/jobs/#{id}")
+ end
+
+ def remove_job(id) when is_binary(id) do
+ Couch.delete("/_reshard/jobs/#{id}")
+ end
+
+ def get_job_state(id) when is_binary(id) do
+ resp = Couch.get("/_reshard/jobs/#{id}/state")
+ assert resp.status_code == 200
+ resp.body["state"]
+ end
+
+ def stop_job(id, reason \\ "") when is_binary(id) do
+ body = %{:state => "stopped", :reason => reason}
+ Couch.post("/_reshard/jobs/#{id}/state", body: body)
+ end
+
+ def resume_job(id) when is_binary(id) do
+ body = %{:state => "running"}
+ Couch.post("/_reshard/jobs/#{id}/state", body: body)
+ end
+
+ def job_ids(jobs) do
+ Enum.map(fn job -> job["id"] end, jobs)
+ end
+
+ def get_first_node do
+ mresp = Couch.get("/_membership")
+ assert mresp.status_code == 200
+ cluster_nodes = mresp.body["cluster_nodes"]
+ [node1 | _] = cluster_nodes
+ node1
+ end
+
+ def wait_job_removed(id) do
+ retry_until(fn -> get_job(id).status_code == 404 end, 200, 10_000)
+ end
+
+ def wait_job_completed(id) do
+ wait_job_state(id, "completed")
+ end
+
+ def wait_job_state(id, state) do
+ retry_until(fn -> get_job_state(id) == state end, 200, 10_000)
+ end
+
+ def reset_reshard_state do
+ get_jobs()
+ |> Enum.map(fn j -> j["id"] end)
+ |> Enum.each(fn id -> remove_job(id) end)
+
+ assert get_jobs() == []
+ put_state_running()
+ end
+end