| #!/usr/bin/env escript |
| %% -*- erlang -*- |
| |
| % 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. |
| |
| %% XXX: Figure out how to -include("couch_rep.hrl") |
| -record(http_db, { |
| url, |
| auth = [], |
| resource = "", |
| headers = [ |
| {"User-Agent", "CouchDB/"++couch_server:get_version()}, |
| {"Accept", "application/json"}, |
| {"Accept-Encoding", "gzip"} |
| ], |
| qs = [], |
| method = get, |
| body = nil, |
| options = [ |
| {response_format,binary}, |
| {inactivity_timeout, 30000} |
| ], |
| retries = 10, |
| pause = 1, |
| conn = nil |
| }). |
| |
| server() -> "http://127.0.0.1:5984/". |
| dbname() -> "etap-test-db". |
| |
| config_files() -> |
| lists:map(fun test_util:build_file/1, [ |
| "etc/couchdb/default_dev.ini", |
| "etc/couchdb/local_dev.ini" |
| ]). |
| |
| main(_) -> |
| test_util:init_code_path(), |
| |
| etap:plan(6), |
| case (catch test()) of |
| ok -> |
| etap:end_tests(); |
| Other -> |
| etap:diag(io_lib:format("Test died abnormally: ~p", [Other])), |
| etap:bail(Other) |
| end, |
| ok. |
| |
| test() -> |
| couch_server_sup:start_link(config_files()), |
| ibrowse:start(), |
| crypto:start(), |
| |
| couch_server:delete(list_to_binary(dbname()), []), |
| {ok, Db} = couch_db:create(list_to_binary(dbname()), []), |
| |
| test_welcome(), |
| test_binary_url(), |
| test_put(), |
| test_qs(), |
| test_db_exists(), |
| |
| couch_db:close(Db), |
| couch_server:delete(list_to_binary(dbname()), []), |
| ok. |
| |
| test_welcome() -> |
| WelcomeReq = #http_db{url=server()}, |
| Expect = {[ |
| {<<"couchdb">>, <<"Welcome">>}, |
| {<<"version">>, list_to_binary(couch_server:get_version())} |
| ]}, |
| etap:is( |
| couch_rep_httpc:request(WelcomeReq), |
| Expect, |
| "welcome request with url-as-list" |
| ). |
| |
| test_binary_url() -> |
| Req = #http_db{url=list_to_binary(server())}, |
| Expect = {[ |
| {<<"couchdb">>, <<"Welcome">>}, |
| {<<"version">>, list_to_binary(couch_server:get_version())} |
| ]}, |
| etap:is( |
| couch_rep_httpc:request(Req), |
| Expect, |
| "welcome request with url-as-binary" |
| ). |
| |
| test_put() -> |
| Req = #http_db{ |
| url = server() ++ dbname() ++ "/", |
| resource = "test_put", |
| body = {[{<<"foo">>, <<"bar">>}]}, |
| method = put |
| }, |
| {Resp} = couch_rep_httpc:request(Req), |
| etap:ok(couch_util:get_value(<<"ok">>, Resp), "ok:true on upload"), |
| etap:is(<<"test_put">>, couch_util:get_value(<<"id">>, Resp), "id is correct"). |
| |
| test_qs() -> |
| Req = #http_db{ |
| url = server() ++ dbname() ++ "/", |
| resource = "foo", |
| qs = [ |
| {bar, true}, |
| {baz, 1.03}, |
| {bif, mochijson2:encode(<<"1-23456">>)} |
| ] |
| }, |
| Expect = server() ++ dbname() ++ "/foo?bar=true&baz=1.03&bif=\"1-23456\"", |
| etap:is( |
| couch_rep_httpc:full_url(Req), |
| Expect, |
| "query-string proplist encoding ok" |
| ). |
| |
| test_db_exists() -> |
| Req1 = #http_db{url=server() ++ dbname() ++ "/"}, |
| Req2 = #http_db{url=server() ++ dbname() ++ "_foo/"}, |
| etap:is(couch_rep_httpc:db_exists(Req1), Req1, "db_exists true check"). |
| % etap:is(couch_rep_httpc:db_exists(Req2), false, "db_exists false check"). |