anchor.diff:      file_test_utils:await_sync(P2Node, FileGuid),
   
       lfm_test_utils:write_file(P1Node, UserSessIdP1, FileGuid, 0, {rand_content, 20}),
  -    ExpDist1 = [#{
  -        <<"providerId">> => P1Id,
  -        <<"blocks">> => [[0, 20]],
  -        <<"totalBlocksSize">> => 20
  -    }],
  +    ExpDist1 = #file_distribution_get_result{distribution = #reg_distribution{
  +        logical_size = 20,
  +        blocks_per_storage = #{
  +            P1StorageId => [?BLOCK(0, 20)],
  +            P2StorageId => []
  +        }
  +    }},
       wait_for_file_location_sync(P2Node, UserSessIdP2, FileGuid, ExpDist1),
       get_distribution_test_base(FileType, FileGuid, ShareId, ExpDist1, Config),
   
       % Write another block to file on P2 and check returned distribution
   
       lfm_test_utils:write_file(P2Node, UserSessIdP2, FileGuid, 30, {rand_content, 20}),
  -    ExpDist2 = [
  -        #{
  -            <<"providerId">> => P1Id,
  -            <<"blocks">> => [[0, 20]],
  -            <<"totalBlocksSize">> => 20
  -        },
  -        #{
  -            <<"providerId">> => P2Id,
  -            <<"blocks">> => [[30, 20]],
  -            <<"totalBlocksSize">> => 20
  -        }
  -    ],
  +    ExpDist2 = #file_distribution_get_result{distribution = #reg_distribution{
  +        logical_size = 50,
  +        blocks_per_storage = #{
  +            P1StorageId => [?BLOCK(0, 20)],
  +            P2StorageId => [?BLOCK(30, 20)]
  +        }
  +    }},
       wait_for_file_location_sync(P1Node, UserSessIdP1, FileGuid, ExpDist2),
       get_distribution_test_base(FileType, FileGuid, ShareId, ExpDist2, Config).
   
   
  +%% TODO test with dir stats enabled
   get_dir_distribution_test(Config) ->
       [P1Node] = oct_background:get_provider_nodes(krakow),
       [P2Node] = oct_background:get_provider_nodes(paris),
  
positive.code:                     validate_result_fun = CreateValidateGsSuccessfulCallFun(op_file)
                  }
              ],
              data_spec = api_test_utils:add_file_id_errors_for_operations_not_available_in_share_mode(
                  FileGuid, ShareId, undefined
              )
          }
      ])).
  
negative.code: 
  %% @private
  wait_for_file_location_sync(Node, SessId, FileGuid, ExpDistribution) ->
      ?assertEqual(
          ExpDistribution,
          ?rpc(Node, mi_file_metadata:get_distribution(SessId, ?FILE_REF(FileGuid))),
          ?ATTEMPTS
      ).
  
  
  %% @private
  get_distribution_test_base(FileType, FileGuid, ShareId, ExpDistribution, Config) ->
      {ok, FileObjectId} = file_id:guid_to_objectid(FileGuid),
  
      ExpRestDistribution = file_distribution_get_result:to_json(rest, ExpDistribution),
      ValidateRestSuccessfulCallFun = fun(_TestCtx, {ok, RespCode, _RespHeaders, RespBody}) ->
          ?assertEqual({?HTTP_200_OK, ExpRestDistribution}, {RespCode, RespBody})
      end,
  
      ExpGsDistribution = file_distribution_get_result:to_json(gs, ExpDistribution),
      CreateValidateGsSuccessfulCallFun = fun(Type) ->
          ExpGsResponse = ExpGsDistribution#{
              <<"gri">> => gri:serialize(#gri{
  