anchor.diff:      synchronous_join(4),
       true.
   
  +test_quadruple_join(_Config) ->
  +    wait_for_ring_size(1),
  +    wait_for_correct_ring(),
  +    %ct:pal("leases ~p", [get_all_leases()]),
  +    synchronous_join(2),
  +    synchronous_join(3),
  +    synchronous_join(4),
  +    synchronous_join(5),
  +    true.
  +
   
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   %
  
positive.code:      {join_tests, [sequence], [
                                 test_single_join,
                                 test_double_join,
                                 test_triple_join
                                 ]}
      ].
  
  
negative.code:                 length(ActiveLeases) == TargetSize andalso
                  length(PassiveLeases) == 0
      end.
  
  check_leases_per_node() ->
      lists:all([ check_local_leases(DHTNode) || DHTNode <- pid_groups:find_all(dht_node) ]).
  
  check_local_leases(DHTNode) ->
      {ActiveLeases, PassiveLeases} = get_dht_node_state(DHTNode, lease_list),
      ActiveIntervals = lists:flatten(
                          [ l_on_cseq:get_range(Lease) || Lease <- ActiveLeases]),
      MyRange = get_dht_node_state(DHTNode, my_range),
      LocalCorrect = intervals:are_equal(MyRange, ActiveIntervals),
      length(PassiveLeases) == 0 andalso LocalCorrect.
  