summaryrefslogtreecommitdiff
path: root/apps/couch/src/test_util.erl
diff options
context:
space:
mode:
Diffstat (limited to 'apps/couch/src/test_util.erl')
-rw-r--r--apps/couch/src/test_util.erl61
1 files changed, 61 insertions, 0 deletions
diff --git a/apps/couch/src/test_util.erl b/apps/couch/src/test_util.erl
new file mode 100644
index 00000000..f086bf94
--- /dev/null
+++ b/apps/couch/src/test_util.erl
@@ -0,0 +1,61 @@
+% Licensed under the Apache License, Version 2.0 (the "License"); you may not
+% use this file except in compliance with the License. You may obtain a copy of
+% the License at
+%
+% http://www.apache.org/licenses/LICENSE-2.0
+%
+% Unless required by applicable law or agreed to in writing, software
+% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+% License for the specific language governing permissions and limitations under
+% the License.
+
+-module(test_util).
+
+-export([init_code_path/0]).
+-export([source_file/1, build_file/1, config_files/0]).
+-export([request/3, request/4]).
+
+init_code_path() ->
+ code:load_abs("apps/couch/test/etap/etap").
+
+source_file(Name) ->
+ filename:join(["apps/couch", Name]).
+
+build_file(Name) ->
+ filename:join(["rel/overlay", Name]).
+
+config_files() ->
+ [
+ build_file("etc/default.ini"),
+ build_file("etc/local.ini"),
+ source_file("test/etap/random_port.ini")
+ ].
+
+request(Url, Headers, Method) ->
+ request(Url, Headers, Method, []).
+
+request(Url, Headers, Method, Body) ->
+ request(Url, Headers, Method, Body, 3).
+
+request(_Url, _Headers, _Method, _Body, 0) ->
+ {error, request_failed};
+request(Url, Headers, Method, Body, N) ->
+ case code:is_loaded(ibrowse) of
+ false ->
+ {ok, _} = ibrowse:start();
+ _ ->
+ ok
+ end,
+ case ibrowse:send_req(Url, Headers, Method, Body) of
+ {ok, Code0, RespHeaders, RespBody0} ->
+ Code = list_to_integer(Code0),
+ RespBody = iolist_to_binary(RespBody0),
+ {ok, Code, RespHeaders, RespBody};
+ {error, {'EXIT', {normal, _}}} ->
+ % Connection closed right after a successful request that
+ % used the same connection.
+ request(Url, Headers, Method, Body, N - 1);
+ Error ->
+ Error
+ end.