anchor.diff:      test_utils:mock_expect(Worker, file_meta, get, fun(_) ->
           {ok, #document{value = #file_meta{name = ?S3_SPACE_NAME}}} end),
   
  +    %% each new_user_ctx invocation should return same s3 ctx for s3 storage type
       S3Ctx = ?assertMatch(#s3_user_ctx{access_key = AccessKey, secret_key = SecretKey},
           rpc:call(Worker, luma_provider, new_user_ctx,
               [#helper_init{name = ?S3_HELPER_NAME}, ?SESSION_ID, SpaceUUID])),
       ?assertMatch(S3Ctx, rpc:call(Worker, luma_provider, new_user_ctx,
           [#helper_init{name = ?S3_HELPER_NAME}, ?SESSION_ID, SpaceUUID])),
   
  +    %% amazonaws_iam API should be requested only once for new user
       test_utils:mock_num_calls(Worker, amazonaws_iam, create_user, 5, 1),
       test_utils:mock_num_calls(Worker, amazonaws_iam, create_access_key, 5, 1),
       test_utils:mock_num_calls(Worker, amazonaws_iam, allow_access_to_bucket, 6, 1).
  
positive.code:                 {ok, #document{value = #file_meta{name = ?S3_SPACE_NAME}}}
          end),
  
      PosixCtx = ?assertMatch(#posix_user_ctx{uid = UID}, rpc:call(Worker, luma_proxy, new_user_ctx,
          [#helper_init{name = ?DIRECTIO_HELPER_NAME}, ?SESSION_ID, PosixSpaceUUID])),
      ?assertEqual(PosixCtx, rpc:call(Worker, luma_proxy, new_user_ctx,
          [#helper_init{name = ?DIRECTIO_HELPER_NAME}, ?SESSION_ID, PosixSpaceUUID])),
      ?assertEqual(PosixCtx, rpc:call(Worker, luma_proxy, get_posix_user_ctx,
          [?DIRECTIO_HELPER_NAME, ?SESSION_ID, PosixSpaceUUID])),
      test_utils:mock_num_calls(Worker, http_client, get, 4, 1),
  
      PosixCephCtx = ?assertMatch(#posix_user_ctx{uid = UID}, rpc:call(Worker, luma_proxy, get_posix_user_ctx,
          [?CEPH_HELPER_NAME, ?SESSION_ID, CephSpaceUUID])),
      ?assertEqual(PosixCephCtx, rpc:call(Worker, luma_proxy, get_posix_user_ctx,
          [?CEPH_HELPER_NAME, ?SESSION_ID, CephSpaceUUID])),
  
      PosixS3Ctx = ?assertMatch(#posix_user_ctx{uid = UID}, rpc:call(Worker, luma_proxy, get_posix_user_ctx,
          [?S3_HELPER_NAME, ?SESSION_ID, S3SpaceUUID])),
      ?assertEqual(PosixS3Ctx, rpc:call(Worker, luma_proxy, get_posix_user_ctx,
          [?S3_HELPER_NAME, ?SESSION_ID, S3SpaceUUID])),
  
      ?assertNotEqual(PosixCtx#posix_user_ctx.gid, PosixCephCtx#posix_user_ctx.gid),
      ?assertNotEqual(PosixCtx#posix_user_ctx.gid, PosixS3Ctx#posix_user_ctx.gid),
      ?assertNotEqual(PosixCephCtx#posix_user_ctx.gid, PosixS3Ctx#posix_user_ctx.gid),
  
      test_utils:mock_num_calls(Worker, http_client, get, 4, 3).
  
  ceph_user_provider_test(Config) ->
      [Worker | _] = ?config(op_worker_nodes, Config),
  
negative.code:     AccessKey = <<"AccessKey">>,
      SecretKey = <<"SecretKey">>,
  
      %% mock invocation of amazonaws_iam API calls
      test_utils:mock_new(Worker, amazonaws_iam),
      test_utils:mock_expect(Worker, amazonaws_iam, create_user, fun(_, _, _, _, _) -> ok end),
      test_utils:mock_expect(Worker, amazonaws_iam, create_access_key, fun(_, _, _, _, _) ->
  