blob: a943fc4879dbedd5b9ddb62f6dd9676cd04c762e [file] [log] [blame]
% 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(cpse_test_purge_seqs).
-compile(export_all).
-include_lib("eunit/include/eunit.hrl").
-include_lib("couch/include/couch_db.hrl").
setup_each() ->
{ok, Db} = cpse_util:create_db(),
couch_db:name(Db).
teardown_each(DbName) ->
ok = couch_server:delete(DbName, []).
cpse_increment_purge_seq_on_complete_purge(DbName) ->
{ok, Rev1} = cpse_util:save_doc(DbName, {[{'_id', foo1}, {vsn, 1.1}]}),
{ok, Rev2} = cpse_util:save_doc(DbName, {[{'_id', foo2}, {vsn, 1.2}]}),
cpse_util:assert_db_props(?MODULE, ?LINE, DbName, [
{doc_count, 2},
{del_doc_count, 0},
{update_seq, 2},
{purge_seq, 0},
{purge_infos, []}
]),
PurgeInfos1 = [
{cpse_util:uuid(), <<"foo1">>, [Rev1]}
],
{ok, [{ok, PRevs1}]} = cpse_util:purge(DbName, PurgeInfos1),
?assertEqual([Rev1], PRevs1),
cpse_util:assert_db_props(?MODULE, ?LINE, DbName, [
{doc_count, 1},
{del_doc_count, 0},
{update_seq, 3},
{purge_seq, 1},
{purge_infos, PurgeInfos1}
]),
PurgeInfos2 = [
{cpse_util:uuid(), <<"foo2">>, [Rev2]}
],
{ok, [{ok, PRevs2}]} = cpse_util:purge(DbName, PurgeInfos2),
?assertEqual([Rev2], PRevs2),
cpse_util:assert_db_props(?MODULE, ?LINE, DbName, [
{doc_count, 0},
{del_doc_count, 0},
{update_seq, 4},
{purge_seq, 2},
{purge_infos, PurgeInfos1 ++ PurgeInfos2}
]).
cpse_increment_purge_multiple_times(DbName) ->
{ok, Rev1} = cpse_util:save_doc(DbName, {[{'_id', foo1}, {vsn, 1.1}]}),
{ok, Rev2} = cpse_util:save_doc(DbName, {[{'_id', foo2}, {vsn, 1.2}]}),
cpse_util:assert_db_props(?MODULE, ?LINE, DbName, [
{doc_count, 2},
{del_doc_count, 0},
{update_seq, 2},
{purge_seq, 0},
{purge_infos, []}
]),
PurgeInfos1 = [
{cpse_util:uuid(), <<"foo1">>, [Rev1]},
{cpse_util:uuid(), <<"foo2">>, [Rev2]}
],
{ok, [{ok, PRevs1}, {ok, PRevs2}]} = cpse_util:purge(DbName, PurgeInfos1),
?assertEqual([Rev1], PRevs1),
?assertEqual([Rev2], PRevs2),
cpse_util:assert_db_props(?MODULE, ?LINE, DbName, [
{doc_count, 0},
{del_doc_count, 0},
{update_seq, 3},
{purge_seq, 2},
{purge_infos, PurgeInfos1}
]).
cpse_increment_purge_seq_on_partial_purge(DbName) ->
Doc1 = {[{'_id', foo}, {vsn, 1}]},
Doc2 = {[{'_id', foo}, {vsn, 2}]},
{ok, Rev1} = cpse_util:save_doc(DbName, Doc1),
{ok, _Rev2} = cpse_util:save_doc(DbName, Doc2, [replicated_changes]),
cpse_util:assert_db_props(?MODULE, ?LINE, DbName, [
{doc_count, 1},
{del_doc_count, 0},
{update_seq, 2},
{purge_seq, 0},
{purge_infos, []}
]),
PurgeInfos1 = [
{cpse_util:uuid(), <<"foo1">>, [Rev1]}
],
{ok, [{ok, PRevs1}]} = cpse_util:purge(DbName, PurgeInfos1),
?assertEqual([Rev1], PRevs1),
cpse_util:assert_db_props(?MODULE, ?LINE, DbName, [
{doc_count, 1},
{del_doc_count, 0},
{update_seq, 3},
{purge_seq, 1},
{purge_infos, PurgeInfos1}
]).