@@ -25,7 +25,11 @@ couch_quickjs_scanner_plugin_test_() ->
2525 [
2626 ? TDEF_FE (t_no_auto_purge_by_default , 10 ),
2727 ? TDEF_FE (t_auto_purge_after_config_ttl , 10 ),
28- ? TDEF_FE (t_auto_purge_after_db_ttl , 10 )
28+ ? TDEF_FE (t_auto_purge_after_db_ttl , 10 ),
29+ ? TDEF_FE (t_min_batch_size_1 , 10 ),
30+ ? TDEF_FE (t_min_batch_size_2 , 10 ),
31+ ? TDEF_FE (t_max_batch_size_1 , 10 ),
32+ ? TDEF_FE (t_max_batch_size_2 , 10 )
2933 ]
3034 }.
3135
@@ -83,6 +87,92 @@ t_auto_purge_after_db_ttl({_, DbName}) ->
8387 ? assertEqual (0 , doc_del_count (DbName )),
8488 ok .
8589
90+ t_min_batch_size_1 ({_ , DbName }) ->
91+ meck :new (fabric , [passthrough ]),
92+ config :set_integer (atom_to_list (? PLUGIN ), " min_batch_size" , 5 ),
93+ ok = fabric :set_auto_purge_props (DbName , [{<<" deleted_document_ttl" >>, " -3_hour" }]),
94+ [
95+ add_doc (DbName , <<" doc" , (integer_to_binary (I ))/binary >>, #{<<" _deleted" >> => true })
96+ || I <- lists :seq (1 , 10 )
97+ ],
98+ ? assertEqual (10 , doc_del_count (DbName )),
99+ meck :reset (couch_scanner_server ),
100+ meck :reset (? PLUGIN ),
101+ config :set (" couch_scanner_plugins" , atom_to_list (? PLUGIN ), " true" , false ),
102+ wait_exit (10000 ),
103+ ? assertEqual (2 , meck :num_calls (fabric , purge_docs , '_' )),
104+ ? assertEqual (0 , doc_del_count (DbName )),
105+ ok .
106+
107+ t_min_batch_size_2 ({_ , DbName }) ->
108+ meck :new (fabric , [passthrough ]),
109+ config :set_integer (atom_to_list (? PLUGIN ), " min_batch_size" , 5 ),
110+ ok = fabric :set_auto_purge_props (DbName , [{<<" deleted_document_ttl" >>, " -3_hour" }]),
111+ [
112+ add_doc (DbName , <<" doc" , (integer_to_binary (I ))/binary >>, #{<<" _deleted" >> => true })
113+ || I <- lists :seq (1 , 11 )
114+ ],
115+ ? assertEqual (11 , doc_del_count (DbName )),
116+ meck :reset (couch_scanner_server ),
117+ meck :reset (? PLUGIN ),
118+ config :set (" couch_scanner_plugins" , atom_to_list (? PLUGIN ), " true" , false ),
119+ wait_exit (10000 ),
120+ ? assertEqual (4 , meck :num_calls (fabric , purge_docs , '_' )),
121+ ? assertEqual (0 , doc_del_count (DbName )),
122+ ok .
123+
124+ t_max_batch_size_1 ({_ , DbName }) ->
125+ meck :new (fabric , [passthrough ]),
126+ config :set_integer (atom_to_list (? PLUGIN ), " min_batch_size" , 1 ),
127+ config :set_integer (atom_to_list (? PLUGIN ), " max_batch_size" , 5 ),
128+ ok = fabric :set_auto_purge_props (DbName , [{<<" deleted_document_ttl" >>, " -3_hour" }]),
129+ [
130+ add_replicated_doc (
131+ DbName ,
132+ <<" doc" >>,
133+ #{
134+ <<" _rev" >> => <<" 1-" , (couch_uuids :random ())/binary >>,
135+ <<" foo" >> => I ,
136+ <<" _deleted" >> => true
137+ }
138+ )
139+ || I <- lists :seq (1 , 10 )
140+ ],
141+ ? assertEqual (1 , doc_del_count (DbName )),
142+ meck :reset (couch_scanner_server ),
143+ meck :reset (? PLUGIN ),
144+ config :set (" couch_scanner_plugins" , atom_to_list (? PLUGIN ), " true" , false ),
145+ wait_exit (10000 ),
146+ ? assertEqual (2 , meck :num_calls (fabric , purge_docs , '_' )),
147+ ? assertEqual (0 , doc_del_count (DbName )),
148+ ok .
149+
150+ t_max_batch_size_2 ({_ , DbName }) ->
151+ meck :new (fabric , [passthrough ]),
152+ config :set_integer (atom_to_list (? PLUGIN ), " min_batch_size" , 1 ),
153+ config :set_integer (atom_to_list (? PLUGIN ), " max_batch_size" , 5 ),
154+ ok = fabric :set_auto_purge_props (DbName , [{<<" deleted_document_ttl" >>, " -3_hour" }]),
155+ [
156+ add_replicated_doc (
157+ DbName ,
158+ <<" doc" >>,
159+ #{
160+ <<" _rev" >> => <<" 1-" , (couch_uuids :random ())/binary >>,
161+ <<" foo" >> => I ,
162+ <<" _deleted" >> => true
163+ }
164+ )
165+ || I <- lists :seq (1 , 11 )
166+ ],
167+ ? assertEqual (1 , doc_del_count (DbName )),
168+ meck :reset (couch_scanner_server ),
169+ meck :reset (? PLUGIN ),
170+ config :set (" couch_scanner_plugins" , atom_to_list (? PLUGIN ), " true" , false ),
171+ wait_exit (10000 ),
172+ ? assertEqual (3 , meck :num_calls (fabric , purge_docs , '_' )),
173+ ? assertEqual (0 , doc_del_count (DbName )),
174+ ok .
175+
86176reset_stats () ->
87177 Counters = [
88178 [couchdb , query_server , process_error_exits ],
@@ -106,6 +196,10 @@ add_doc(DbName, DocId, Body) ->
106196 {ok , _ } = fabric :update_doc (DbName , mkdoc (DocId , Body ), [? ADMIN_CTX ]),
107197 ok .
108198
199+ add_replicated_doc (DbName , DocId , Body ) ->
200+ {ok , _ } = fabric :update_doc (DbName , mkdoc (DocId , Body ), [? ADMIN_CTX , ? REPLICATED_CHANGES ]),
201+ ok .
202+
109203mkdoc (Id , #{} = Body ) ->
110204 Body1 = Body #{<<" _id" >> => Id },
111205 jiffy :decode (jiffy :encode (Body1 )).
0 commit comments