anchor.diff:  groups() ->
       Tests =
           [ t_generate_and_store
  +        , t_generate_error
           , t_fetch_expired
           , t_storage_error_corrupt
           , t_storage_error_io
  -        % TODO: Error cases:
  -        %   - string generation error (low entropy)
           ],
       Properties = [],
       [ {?TYPE_CLIENT , Properties, Tests}
  
positive.code: %% Test cases
  -export(
      [ t_generate_and_store/1
      , t_fetch_expired/1
      , t_storage_error_corrupt/1
      , t_storage_error_io/1
  
negative.code:     ID1          = ID2,
      Secret1      = Secret2,
      Creds1       = Creds2.
  
  t_generate_error(Cfg) ->
      {some, Type} = hope_kv_list:get(Cfg, ?TYPE),
      ok = meck:new(oauth1_random_string),
      FakeGenerate = fun () -> {error, low_entropy} end,
      ok = meck:expect(oauth1_random_string, generate, FakeGenerate),
      {error, low_entropy} = oauth1_credentials:generate_and_store(Type),
      ok = meck:unload(oauth1_random_string).
  
  t_fetch_expired(Cfg) ->
      ok = oauth1_mock_storage:start(),
  