diff options
Diffstat (limited to 'src/couch/test/eunit/couch_db_mpr_tests.erl')
-rw-r--r-- | src/couch/test/eunit/couch_db_mpr_tests.erl | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/src/couch/test/eunit/couch_db_mpr_tests.erl b/src/couch/test/eunit/couch_db_mpr_tests.erl deleted file mode 100644 index bb97c66d7..000000000 --- a/src/couch/test/eunit/couch_db_mpr_tests.erl +++ /dev/null @@ -1,137 +0,0 @@ -% 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(couch_db_mpr_tests). - - --include_lib("couch/include/couch_eunit.hrl"). --include_lib("couch/include/couch_db.hrl"). - --define(TIMEOUT, 30). - --define(USER, "couch_db_admin"). --define(PASS, "pass"). --define(AUTH, {basic_auth, {?USER, ?PASS}}). --define(CONTENT_JSON, {"Content-Type", "application/json"}). --define(JSON_BODY, "{\"foo\": \"bar\"}"). --define(CONTENT_MULTI_RELATED, - {"Content-Type", "multipart/related;boundary=\"bound\""}). - - -setup() -> - Hashed = couch_passwords:hash_admin_password(?PASS), - ok = config:set("admins", ?USER, ?b2l(Hashed), _Persist=false), - TmpDb = ?tempdb(), - Addr = config:get("httpd", "bind_address", "127.0.0.1"), - Port = mochiweb_socket_server:get(couch_httpd, port), - Url = lists:concat(["http://", Addr, ":", Port, "/", ?b2l(TmpDb)]), - Url. - - -teardown(Url) -> - catch delete_db(Url), - ok = config:delete("admins", ?USER, _Persist=false). - - -create_db(Url) -> - {ok, Status, _, _} = test_request:put(Url, [?CONTENT_JSON, ?AUTH], "{}"), - ?assert(Status =:= 201 orelse Status =:= 202). - - -delete_db(Url) -> - {ok, 200, _, _} = test_request:delete(Url, [?AUTH]). - - -create_doc(Url, Id, Body, Type) -> - test_request:put(Url ++ "/" ++ Id, [Type, ?AUTH], Body). - - -delete_doc(Url, Id, Rev) -> - test_request:delete(Url ++ "/" ++ Id ++ "?rev=" ++ ?b2l(Rev)). - - -couch_db_mpr_test_() -> - { - "multi-part attachment tests", - { - setup, - fun test_util:start_couch/0, - fun test_util:stop_couch/1, - { - foreach, - fun setup/0, - fun teardown/1, - [ - fun recreate_with_mpr/1 - ] - } - } - }. - - -recreate_with_mpr(Url) -> - {timeout, ?TIMEOUT, ?_test(begin - DocId1 = "foo", - DocId2 = "bar", - - create_db(Url), - create_and_delete_doc(Url, DocId1), - Rev1 = create_with_mpr(Url, DocId1), - delete_db(Url), - - create_db(Url), - create_and_delete_doc(Url, DocId1), - % We create a second unrelated doc to change the - % position on disk where the attachment is written - % so that we can assert that the position on disk - % is not included when calculating a revision. - create_and_delete_doc(Url, DocId2), - Rev2 = create_with_mpr(Url, DocId1), - delete_db(Url), - - ?assertEqual(Rev1, Rev2) - end)}. - - -create_and_delete_doc(Url, DocId) -> - {ok, _, _, Resp} = create_doc(Url, DocId, ?JSON_BODY, ?CONTENT_JSON), - {Props} = ?JSON_DECODE(Resp), - Rev = couch_util:get_value(<<"rev">>, Props, undefined), - ?assert(is_binary(Rev)), - {ok, _, _, _} = delete_doc(Url, DocId, Rev). - - -create_with_mpr(Url, DocId) -> - {ok, _, _, Resp} = create_doc(Url, DocId, mpr(), ?CONTENT_MULTI_RELATED), - {Props} = ?JSON_DECODE(Resp), - Rev = couch_util:get_value(<<"rev">>, Props, undefined), - ?assert(is_binary(Rev)), - Rev. - - -mpr() -> - lists:concat([ - "--bound\r\n", - "Content-Type: application/json\r\n\r\n", - "{", - "\"body\":\"stuff\"," - "\"_attachments\":", - "{\"foo.txt\":{", - "\"follows\":true,", - "\"content_type\":\"text/plain\"," - "\"length\":21", - "}}" - "}", - "\r\n--bound\r\n\r\n", - "this is 21 chars long", - "\r\n--bound--epilogue" - ]). |