From ca8322ea025b1087cf4053278f73c259eadb345c Mon Sep 17 00:00:00 2001 From: Jiahui Li Date: Fri, 10 Jan 2025 13:05:23 -0600 Subject: [PATCH] Fix unstable tests by adding 'retry_until()' Add `retry_until()` to avoid request timeout error in search_test.exs. Error logs: ``` 1) test search returns all items for GET (SearchTest) test/elixir/test/search_test.exs:67 ** (KeyError) key :status_code not found in: %HTTPotion.ErrorResponse{message: "req_timedout"} code: assert resp.status_code == 200 stacktrace: test/elixir/test/search_test.exs:74: (test) ``` --- test/elixir/test/partition_search_test.exs | 11 +++++++++++ test/elixir/test/search_test.exs | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/test/elixir/test/partition_search_test.exs b/test/elixir/test/partition_search_test.exs index 12199544923..a5f2cb76e4e 100644 --- a/test/elixir/test/partition_search_test.exs +++ b/test/elixir/test/partition_search_test.exs @@ -56,12 +56,14 @@ defmodule PartitionSearchTest do url = "/#{db_name}/_partition/foo/_design/library/_search/books" resp = Couch.get(url, query: %{q: "some:field"}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_ids(resp) assert ids == ["foo:10", "foo:2", "foo:4", "foo:6", "foo:8"] url = "/#{db_name}/_partition/bar/_design/library/_search/books" resp = Couch.get(url, query: %{q: "some:field"}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_ids(resp) assert ids == ["bar:1", "bar:3", "bar:5", "bar:7", "bar:9"] @@ -75,6 +77,7 @@ defmodule PartitionSearchTest do url = "/#{db_name}/_partition/foo/_design/library/_search/books" resp = Couch.get(url, query: %{q: "some:field"}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_ids(resp) assert ids == ["foo:10", "foo:2", "foo:4", "foo:6", "foo:8"] @@ -88,6 +91,7 @@ defmodule PartitionSearchTest do url = "/#{db_name}/_partition/foo/_design/library/_search/books" resp = Couch.get(url, query: %{q: "some:field", limit: 3}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_ids(resp) assert ids == ["foo:10", "foo:2", "foo:4"] @@ -95,11 +99,13 @@ defmodule PartitionSearchTest do %{:body => %{"bookmark" => bookmark}} = resp resp = Couch.get(url, query: %{q: "some:field", limit: 3, bookmark: bookmark}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_ids(resp) assert ids == ["foo:6", "foo:8"] resp = Couch.get(url, query: %{q: "some:field", limit: 2000, bookmark: bookmark}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_ids(resp) assert ids == ["foo:6", "foo:8"] @@ -116,6 +122,7 @@ defmodule PartitionSearchTest do url = "/#{db_name}/_design/library/_search/books" resp = Couch.post(url, body: %{:q => "some:field", :limit => 1}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 end @@ -127,6 +134,7 @@ defmodule PartitionSearchTest do url = "/#{db_name}/_partition/foo/_design/library/_search/books" resp = Couch.post(url, body: %{:q => "some:field", :limit => 1}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 end @@ -164,6 +172,7 @@ defmodule PartitionSearchTest do url = "/#{db_name}/_design/library/_search/books" resp = Couch.get(url, query: %{q: "some:field"}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_ids(resp) assert Enum.sort(ids) == Enum.sort(["bar:1", "bar:5", "bar:9", "foo:2", "bar:3", "foo:4", "foo:6", "bar:7", "foo:8", "foo:10"]) @@ -177,6 +186,7 @@ defmodule PartitionSearchTest do url = "/#{db_name}/_design/library/_search/books" resp = Couch.get(url, query: %{q: "some:field"}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_ids(resp) assert Enum.sort(ids) == Enum.sort(["bar:1", "bar:5", "bar:9", "foo:2", "bar:3", "foo:4", "foo:6", "bar:7", "foo:8", "foo:10"]) @@ -190,6 +200,7 @@ defmodule PartitionSearchTest do url = "/#{db_name}/_design/library/_search/books" resp = Couch.get(url, query: %{q: "some:field", limit: 3}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_ids(resp) assert Enum.sort(ids) == Enum.sort(["bar:1", "bar:5", "bar:9"]) diff --git a/test/elixir/test/search_test.exs b/test/elixir/test/search_test.exs index edf08f30d5b..126bd5216d1 100644 --- a/test/elixir/test/search_test.exs +++ b/test/elixir/test/search_test.exs @@ -71,6 +71,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" resp = Couch.get(url, query: %{q: "*:*", include_docs: true}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_items(resp) assert Enum.sort(ids) == Enum.sort(["apple", "banana", "carrot", "date"]) @@ -84,6 +85,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" resp = Couch.get(url, query: %{q: "*:*", drilldown: :jiffy.encode(["place", "kitchen"]), include_docs: true}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_items(resp) assert Enum.sort(ids) == Enum.sort(["apple", "banana", "carrot"]) @@ -97,6 +99,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" resp = Couch.get(url, query: %{q: "*:*", drilldown: :jiffy.encode(["state", "new", "unknown"]), include_docs: true}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_items(resp) assert Enum.sort(ids) == Enum.sort(["apple", "banana", "date"]) @@ -110,6 +113,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" resp = Couch.get(url, query: %{q: "*:*", drilldown: :jiffy.encode([["state", "old"], ["item", "apple"]]), include_docs: true}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_items(resp) assert Enum.sort(ids) == [] @@ -123,6 +127,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits?q=*:*&drilldown=[\"state\",\"old\"]&drilldown=[\"item\",\"apple\"]&include_docs=true" resp = Couch.get(url) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_items(resp) assert Enum.sort(ids) == [] @@ -137,6 +142,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" resp = Couch.post(url, body: %{q: "*:*", include_docs: true}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_items(resp) assert Enum.sort(ids) == Enum.sort(["apple", "banana", "carrot", "date"]) @@ -150,6 +156,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" resp = Couch.post(url, body: %{query: "*:*", drilldown: ["place", "kitchen"], include_docs: true}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_items(resp) assert Enum.sort(ids) == Enum.sort(["apple", "banana", "carrot"]) @@ -163,6 +170,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" resp = Couch.post(url, body: %{query: "*:*", drilldown: ["state", "new", "unknown"], include_docs: true}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_items(resp) assert Enum.sort(ids) == Enum.sort(["apple", "banana", "date"]) @@ -176,6 +184,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" resp = Couch.post(url, body: %{q: "*:*", drilldown: [["state", "old"], ["item", "apple"]], include_docs: true}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_items(resp) assert Enum.sort(ids) == [] @@ -189,6 +198,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" resp = Couch.post(url, body: %{q: "*:*", drilldown: [["place", "kitchen"], ["state", "new"], ["item", "apple"]], include_docs: true}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_items(resp) assert Enum.sort(ids) == ["apple"] @@ -202,6 +212,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" resp = Couch.post(url, body: %{q: "*:*", drilldown: [["state", "old", "new"], ["item", "apple"]], include_docs: true}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_items(resp) assert Enum.sort(ids) == ["apple"] @@ -215,6 +226,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" resp = Couch.post(url, body: "{\"include_docs\": true, \"q\": \"*:*\", \"drilldown\": [\"state\", \"old\"], \"drilldown\": [\"item\", \"apple\"]}") + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 ids = get_items(resp) assert Enum.sort(ids) == ["apple"] @@ -240,6 +252,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" counts = ["place"] resp = Couch.get(url, query: %{q: "*:*", limit: 0, counts: :jiffy.encode(counts)}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 %{:body => %{"counts" => counts}} = resp @@ -255,6 +268,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" counts = ["place"] resp = Couch.get(url, query: %{q: "item:tomato", limit: 0, counts: :jiffy.encode(counts)}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 %{:body => %{"counts" => counts}} = resp @@ -270,6 +284,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" ranges = %{"price" => %{"cheap" => "[0 TO 0.99]", "expensive" => "[1.00 TO Infinity]"}} resp = Couch.get(url, query: %{q: "*:*", limit: 0, ranges: :jiffy.encode(ranges)}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 %{:body => %{"ranges" => ranges}} = resp @@ -285,6 +300,7 @@ defmodule SearchTest do url = "/#{db_name}/_design/inventory/_search/fruits" ranges = %{"price" => %{}} resp = Couch.get(url, query: %{q: "*:*", limit: 0, ranges: :jiffy.encode(ranges)}) + retry_until(fn -> resp.status_code == 200 end) assert resp.status_code == 200 %{:body => %{"ranges" => ranges}} = resp