| % 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(ddoc_cache_tutil). |
| |
| |
| -export([ |
| start_couch/0, |
| start_couch/1, |
| stop_couch/1, |
| clear/0, |
| get_rev/2, |
| ddocs/0, |
| purge_modules/0, |
| with/1 |
| ]). |
| |
| |
| -include_lib("couch/include/couch_db.hrl"). |
| -include_lib("couch/include/couch_eunit.hrl"). |
| |
| |
| start_couch() -> |
| start_couch([{write_ddocs, true}]). |
| |
| |
| start_couch(Options) -> |
| WriteDDocs = couch_util:get_value(write_ddocs, Options, true), |
| purge_modules(), |
| Ctx = test_util:start_couch(?CONFIG_CHAIN, [chttpd, ddoc_cache]), |
| TmpDb = ?tempdb(), |
| ok = fabric:create_db(TmpDb, [{q, "1"}, {n, "1"}]), |
| if not WriteDDocs -> ok; true -> |
| {ok, _} = fabric:update_docs(TmpDb, ddocs(), [?ADMIN_CTX]) |
| end, |
| {TmpDb, Ctx}. |
| |
| |
| stop_couch({_TmpDb, Ctx}) -> |
| test_util:stop_couch(Ctx). |
| |
| |
| clear() -> |
| application:stop(ddoc_cache), |
| application:start(ddoc_cache). |
| |
| |
| get_rev(DbName, DDocId) -> |
| {_, Ref} = erlang:spawn_monitor(fun() -> |
| {ok, #doc{revs = Revs}} = fabric:open_doc(DbName, DDocId, [?ADMIN_CTX]), |
| {Depth, [RevId | _]} = Revs, |
| exit({Depth, RevId}) |
| end), |
| receive |
| {'DOWN', Ref, _, _, Rev} -> Rev |
| end. |
| |
| |
| ddocs() -> |
| FooBar = #doc{ |
| id = <<"_design/foobar">>, |
| body = {[ |
| {<<"foo">>, <<"bar">>} |
| ]} |
| }, |
| VDU = #doc{ |
| id = <<"_design/vdu">>, |
| body = {[ |
| {<<"validate_doc_update">>, <<"function(doc) {return;}">>} |
| ]} |
| }, |
| Custom = #doc{ |
| id = <<"_design/custom">>, |
| body = {[ |
| {<<"status">>, <<"ok">>}, |
| {<<"custom">>, <<"hotrod">>} |
| ]} |
| }, |
| [FooBar, VDU, Custom]. |
| |
| |
| purge_modules() -> |
| case application:get_key(ddoc_cache, modules) of |
| {ok, Mods} -> |
| lists:foreach(fun(Mod) -> |
| case code:which(Mod) of |
| cover_compiled -> |
| ok; |
| _ -> |
| code:delete(Mod), |
| code:purge(Mod) |
| end |
| end, Mods); |
| undefined -> |
| ok |
| end. |
| |
| %% eunit implementation of {with, Tests} doesn't detect test name correctly |
| with(Tests) -> |
| fun(ArgsTuple) -> |
| [{Name, ?_test(Fun(ArgsTuple))} || {Name, Fun} <- Tests] |
| end. |