diff options
Diffstat (limited to 'test/elixir/test/reshard_helpers.exs')
-rw-r--r-- | test/elixir/test/reshard_helpers.exs | 111 |
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 |