diff options
author | Robert Newson <rnewson@apache.org> | 2023-04-27 14:27:10 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-27 14:27:10 +0000 |
commit | 8e03f97669a15274ea04b9760048f965794ad690 (patch) | |
tree | 27d81edfdaf1db629f7da9dcdd40e3f4a4897177 /test/elixir/test/nouveau_test.exs | |
parent | 0d1175a4f1bfee8b1eb2e2d96a114aac83a2e43b (diff) | |
parent | 307450c3c0dcc7a06631d54ccdd5c0ceca191481 (diff) | |
download | couchdb-8e03f97669a15274ea04b9760048f965794ad690.tar.gz |
Merge pull request #4543 from apache/jenkins-enable-nouveau-ci
enable nouveau in CI
Diffstat (limited to 'test/elixir/test/nouveau_test.exs')
-rw-r--r-- | test/elixir/test/nouveau_test.exs | 82 |
1 files changed, 67 insertions, 15 deletions
diff --git a/test/elixir/test/nouveau_test.exs b/test/elixir/test/nouveau_test.exs index ee5d20542..896ff6154 100644 --- a/test/elixir/test/nouveau_test.exs +++ b/test/elixir/test/nouveau_test.exs @@ -22,6 +22,7 @@ defmodule NouveauTest do def create_ddoc(db_name, opts \\ %{}) do default_ddoc = %{ + autoupdate: false, nouveau: %{ bar: %{ default_analyzer: "standard", @@ -42,22 +43,47 @@ defmodule NouveauTest do assert Map.has_key?(resp.body, "ok") == true end + def create_mango_index(db_name) do + body = %{ + type: "nouveau", + index: %{ + fields: [ + %{name: "foo", type: "string"}, + %{name: "bar", type: "number"} + ] + } + } + + resp = Couch.post("/#{db_name}/_index", body: body) + assert resp.status_code in [200] + end + def get_ids(resp) do %{:body => %{"hits" => hits}} = resp Enum.map(hits, fn hit -> hit["doc"]["_id"] end) end + def get_mango_ids(resp) do + %{:body => %{"docs" => docs}} = resp + Enum.map(docs, fn doc -> doc["_id"] end) + end + def get_bookmark(resp) do %{:body => %{"bookmark" => bookmark}} = resp bookmark end + def assert_status_code(resp, code) do + assert resp.status_code == code, + "status code: #{resp.status_code}, resp body: #{:jiffy.encode(resp.body)}" + end + test "search analyze", context do url = "/_nouveau_analyze" resp = Couch.post(url, headers: ["Content-Type": "application/json"], body: %{analyzer: "standard", text: "hello there"}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) assert resp.body == %{"tokens" => ["hello", "there"]} end @@ -70,11 +96,11 @@ defmodule NouveauTest do # query it so it builds url = "/#{db_name}/_design/foo/_nouveau/bar" resp = Couch.get(url, query: %{q: "*:*", include_docs: true}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) url = "/#{db_name}/_design/foo/_nouveau_info/bar" resp = Couch.get(url) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) info = Map.get(resp.body, "search_index") assert Map.get(info, "disk_size") > 0 assert Map.get(info, "num_docs") > 0 @@ -89,7 +115,7 @@ defmodule NouveauTest do url = "/#{db_name}/_design/foo/_nouveau/bar" resp = Couch.get(url, query: %{q: "*:*", include_docs: true}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) ids = get_ids(resp) # nouveau sorts by _id as tie-breaker assert ids == ["doc1", "doc2", "doc3", "doc4"] @@ -103,7 +129,7 @@ defmodule NouveauTest do url = "/#{db_name}/_design/foo/_nouveau/bar" resp = Couch.post(url, body: %{q: "*:*", include_docs: true}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) ids = get_ids(resp) assert ids == ["doc1", "doc2", "doc3", "doc4"] end @@ -118,13 +144,13 @@ defmodule NouveauTest do # page 1 resp = Couch.post(url, body: %{q: "*:*", limit: 2, include_docs: true}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) ids = get_ids(resp) assert ids == ["doc1", "doc2"] # page 2 resp = Couch.post(url, body: %{q: "*:*", limit: 2, bookmark: get_bookmark(resp), include_docs: true}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) ids = get_ids(resp) assert ids == ["doc3", "doc4"] end @@ -137,7 +163,7 @@ defmodule NouveauTest do url = "/#{db_name}/_design/foo/_nouveau/bar" resp = Couch.post(url, body: %{q: "foo:bar", include_docs: true}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) ids = get_ids(resp) assert ids == ["doc3"] end @@ -150,7 +176,7 @@ defmodule NouveauTest do url = "/#{db_name}/_design/foo/_nouveau/bar" resp = Couch.post(url, body: %{q: "*:*", sort: "foo<string>", include_docs: true}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) ids = get_ids(resp) assert ids == ["doc3", "doc1", "doc4", "doc2"] end @@ -163,7 +189,7 @@ defmodule NouveauTest do url = "/#{db_name}/_design/foo/_nouveau/bar" resp = Couch.post(url, body: %{q: "*:*", sort: "-foo<string>", include_docs: true}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) ids = get_ids(resp) assert ids == ["doc2", "doc4", "doc1", "doc3"] end @@ -176,7 +202,7 @@ defmodule NouveauTest do url = "/#{db_name}/_design/foo/_nouveau/bar" resp = Couch.post(url, body: %{q: "*:*", sort: "bar<double>", include_docs: true}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) ids = get_ids(resp) assert ids == ["doc1", "doc3", "doc4", "doc2"] end @@ -189,7 +215,7 @@ defmodule NouveauTest do url = "/#{db_name}/_design/foo/_nouveau/bar" resp = Couch.post(url, body: %{q: "*:*", sort: "-bar<double>", include_docs: true}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) ids = get_ids(resp) assert ids == ["doc2", "doc4", "doc3", "doc1"] end @@ -202,7 +228,7 @@ defmodule NouveauTest do url = "/#{db_name}/_design/foo/_nouveau/bar" resp = Couch.post(url, body: %{q: "*:*", counts: ["foo"], include_docs: true}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) %{:body => %{"counts" => counts}} = resp assert counts == %{"foo" => %{"bar" => 1, "baz" => 1, "foo" => 1, "foobar" => 1}} end @@ -218,7 +244,7 @@ defmodule NouveauTest do %{label: "cheap", min: 0, max: 42}, %{label: "expensive", min: 42, min_inclusive: false, max: 1000}]}, include_docs: true}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) %{:body => %{"ranges" => ranges}} = resp assert ranges == %{"bar" => %{"cheap" => 3, "expensive" => 1}} end @@ -234,9 +260,35 @@ defmodule NouveauTest do %{label: "cheap", max: 42}, %{label: "expensive", min: 42, min_inclusive: false}]}, include_docs: true}) - assert resp.status_code == 200, "error #{resp.status_code} #{:jiffy.encode(resp.body)}" + assert_status_code(resp, 200) %{:body => %{"ranges" => ranges}} = resp assert ranges == %{"bar" => %{"cheap" => 3, "expensive" => 1}} end + @tag :with_db + test "mango search by number", context do + db_name = context[:db_name] + create_search_docs(db_name) + create_mango_index(db_name) + + url = "/#{db_name}/_find" + resp = Couch.post(url, body: %{selector: %{bar: %{"$gt": 5}}}) + assert_status_code(resp, 200) + ids = get_mango_ids(resp) + assert ids == ["doc2", "doc3", "doc4"] + end + + @tag :with_db + test "mango search by string", context do + db_name = context[:db_name] + create_search_docs(db_name) + create_mango_index(db_name) + + url = "/#{db_name}/_find" + resp = Couch.post(url, body: %{selector: %{foo: %{"$eq": "foo"}}}) + assert_status_code(resp, 200) + ids = get_mango_ids(resp) + assert ids == ["doc4"] + end + end |