anchor.diff:    ].
   groups() ->
     [
  -    {make_ring_group, [sequence], [test_make_ring, tester_write, {group, recover_data_group}]},
  -    {recover_data_group, [sequence, {repeat, ?NUM_EXECUTIONS}], [tester_read]},
  -    {remove_node_group, [sequence], [tester_write, {group, remove_node}]},
  -    {remove_node, [sequence, {repeat, ?NUM_EXECUTIONS}], [tester_remove_node]}
  +    {make_ring_group, [sequence], [test_make_ring, write, {group, recover_data_group}]},
  +    {recover_data_group, [sequence, {repeat, num_executions()}], [read]},
  +    {remove_node_group, [sequence], [write, {group, remove_node}]},
  +    {remove_node, [sequence, {repeat, num_executions()}], [remove_node]}
     ].
   
   suite() -> [ {timetrap, {seconds, 60}} ].
  
positive.code: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % test write/1 write data to KV DBs
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  tester_write(_Config) ->
    % write data to KV
    [kv_on_cseq:write(integer_to_list(X),X) || X <- lists:seq(1, 100)].
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % test read/1 ensure data integrity after recovery
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  tester_read(Config) ->
    {priv_dir, PrivDir} = lists:keyfind(priv_dir, 1, Config),
    unittest_helper:stop_ring(),
    % wait for leases to expire
  
negative.code:   util:wait_for(fun admin:check_leases/0),
    % check data integrity
    [{ok, X} = kv_on_cseq:read(integer_to_list(X)) || X <- lists:seq(1, 100)],
    % add node to reform ring_size() node ring
    admin:add_nodes(1),
    timer:sleep(3000),
    unittest_helper:check_ring_size_fully_joined(ring_size()),
    true.
  