anchor.diff:                                end),
       ?assertEqual(F, gen_server:call(ns_config, {update_with_changes, F})).
   
  --define(assertConfigEquals(A, B), ?assertEqual(lists:sort(A),
  -                                               lists:sort(B))).
  +-define(assertConfigEquals(A, B), ?assertEqual(lists:sort([{K, strip_metadata(V)} || {K,V} <- A]),
  +                                               lists:sort([{K, strip_metadata(V)} || {K,V} <- B]))).
   
   test_set() ->
       Self = self(),
  
positive.code:     Updater0 = (fun () -> receive {update_with_changes, F} -> F end end)(),
  
      ?assertConfigEquals([{test, 1}], element(2, Updater0([]))),
      {[{test, 1}], Val2} = Updater0([{foo, 2}]),
      ?assertConfigEquals([{test, 1}, {foo, 2}], Val2),
  
      {[{test, 1}], Val3} = Updater0([{foo, [{k, 1}, {v, 2}]},
                                      {xar, true},
                                      {test, [{a, b}, {c, d}]}]),
  
      ?assertConfigEquals([{foo, [{k, 1}, {v, 2}]},
                           {xar, true},
  
negative.code: 
      ?assertEqual([[{a, b}, {c, d}], {a, b}, {c, d}], ListValues),
  
      ?assertEqual(-3, strip_metadata(proplists:get_value(a, NewConfig))),
      ?assertEqual(-4, strip_metadata(proplists:get_value(b, NewConfig))),
  
      ?assertMatch([{N, _}] when N =:= node(), extract_vclock(proplists:get_value(a, NewConfig))),
      ?assertMatch([{N, _}] when N =:= node(), extract_vclock(proplists:get_value(b, NewConfig))),
  
      ns_config:update_key(a, fun (3) -> 10 end),
      Updater2 = RecvUpdater(),
      {[{a, [{'_vclock', [_]} | 10]}], NewConfig2} = Updater2(OldConfig),
  
      ?assertConfigEquals([{a, 10} | lists:keydelete(a, 1, OldConfig)], NewConfig2),
      ok.
  