anchor.diff:                                  half_join_and_recover_after_step3,
                                   half_join_and_recover_after_step4
                                  ]},
  +     {leave_tests, [sequence], [
  +                                %% leaves one node with no lease
  +                                %% half_leave_and_recover_after_step1,
  +                                %% half_leave_and_recover_after_step2,
  +                                half_leave_and_recover_after_step3,
  +                                half_leave_and_recover_after_step4
  +                               ]},
        {repeater, [{repeat, 30}], [{group, slide_tests}]}
       ].
   
   all() -> [
  -          {group, slide_tests}
  +          {group, slide_tests},
  +          {group, leave_tests}
            ].
   
   suite() -> [ {timetrap, {seconds, 60}} ].
  
positive.code: 
  half_join_and_recover_after_step4(Config) ->
      half_join_and_recover(Config, split_reply_step4).
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% generic test for interrupted split before recover
  
negative.code: 
  init_per_testcase(_TestCase, Config) ->
      {priv_dir, PrivDir} = lists:keyfind(priv_dir, 1, Config),
      unittest_helper:make_symmetric_ring([{config, [{log_path, PrivDir},
                                                     {leases, true},
                                                     {db_backend, db_mnesia}]}]),
      Config.
  
  end_per_testcase(_TestCase, Config) ->
      unittest_helper:stop_ring(),
      _ = application:stop(mnesia),
      %% need config to get db path
      Config2 = unittest_helper:start_minimal_procs(Config, [], false),
      PWD = os:cmd(pwd),
      WorkingDir = string:sub_string(PWD, 1, string:len(PWD) - 1) ++
  