anchor.diff:      {ok, Code3, _Headers3, Response3} = do_request(WorkerP2, filename:join(TestDirName, TestFileName), get, RequestHeaders3, []),
       ?assertEqual(200, Code3),
   
  -    CdmiResponse3 = maps:to_list(json_utils:decode(Response3)),
  -    ?assertEqual(TestFileNameBin, proplists:get_value(<<"objectName">>, CdmiResponse3)),
  -    FileId = proplists:get_value(<<"objectID">>, CdmiResponse3),
  +    CdmiResponse3 = json_utils:decode(Response3),
  +    ?assertMatch(#{<<"objectName">> := TestFileNameBin}, CdmiResponse3),
  +    FileId = maps:get(<<"objectID">>, CdmiResponse3, undefined),
       ?assertNotEqual(FileId, undefined),
       ?assert(is_binary(FileId)),
  -    ?assertEqual(<<"/", (list_to_binary(SpaceName))/binary, "/", ShortTestDirNameBin/binary, "/">>, proplists:get_value(<<"parentURI">>, CdmiResponse3)),
  -    ?assertEqual(DirId, proplists:get_value(<<"parentID">>, CdmiResponse3)),
  -    ?assertEqual(<<"cdmi_capabilities/dataobject/">>, proplists:get_value(<<"capabilitiesURI">>, CdmiResponse3)),
  +    ParentURI1 = <<"/", (list_to_binary(SpaceName))/binary, "/", ShortTestDirNameBin/binary, "/">>,
  +    ?assertMatch(#{<<"parentURI">> := ParentURI1}, CdmiResponse3),
  +    ?assertMatch(#{<<"parentID">> := DirId}, CdmiResponse3),
  +    ?assertMatch(#{<<"capabilitiesURI">> := <<"cdmi_capabilities/dataobject/">>}, CdmiResponse3),
       %%------------------------------
   
       %%---- get / by objectid -------
       RequestHeaders4 = [?CDMI_VERSION_HEADER, user_1_token_header(Config)],
       {ok, Code4, _Headers4, Response4} = do_request(WorkerP2, "cdmi_objectid/" ++ binary_to_list(RootId) ++ "/", get, RequestHeaders4, []),
       ?assertEqual(200, Code4),
  -    CdmiResponse4 = maps:to_list(json_utils:decode(Response4)),
  -    Meta1 = proplists:delete(<<"cdmi_atime">>, maps:to_list(proplists:get_value(<<"metadata">>, CdmiResponse1))),
  -    CdmiResponse1WithoutAtime = [{<<"metadata">>, Meta1} | proplists:delete(<<"metadata">>, CdmiResponse1)],
  -    Meta4 = proplists:delete(<<"cdmi_atime">>, maps:to_list(proplists:get_value(<<"metadata">>, CdmiResponse4))),
  -    CdmiResponse4WithoutAtime = [{<<"metadata">>, Meta4} | proplists:delete(<<"metadata">>, CdmiResponse4)],
  +    CdmiResponse4 = json_utils:decode(Response4),
  +    Meta1 = maps:remove(<<"cdmi_atime">>, maps:get(<<"metadata">>, CdmiResponse1)),
  +    CdmiResponse1WithoutAtime = maps:put(<<"metadata">>, Meta1, CdmiResponse1),
  +    Meta4 = maps:remove(<<"cdmi_atime">>, maps:get(<<"metadata">>, CdmiResponse4)),
  +    CdmiResponse4WithoutAtime = maps:put(<<"metadata">>, Meta4, CdmiResponse4),
       ?assertEqual(CdmiResponse1WithoutAtime, CdmiResponse4WithoutAtime), % should be the same as in 1 (except access time)
       %%------------------------------
   
  
positive.code: 
      % upload first chunk of file
      RequestHeaders1 = [user_1_token_header(Config), ?CDMI_VERSION_HEADER, ?OBJECT_CONTENT_TYPE_HEADER, {"X-CDMI-Partial", "true"}],
      RequestBody1 = json_utils:encode(maps:from_list([{<<"value">>, Chunk1}])),
      {ok, Code1, _Headers1, Response1} = do_request(Workers, FileName, put, RequestHeaders1, RequestBody1),
      ?assertEqual(201, Code1),
      CdmiResponse1 = maps:to_list(json_utils:decode(Response1)),
      ?assertEqual(<<"Processing">>, proplists:get_value(<<"completionStatus">>, CdmiResponse1)),
  
      % upload second chunk of file
      RequestBody2 = json_utils:encode(maps:from_list([{<<"value">>, base64:encode(Chunk2)}])),
      {ok, Code2, _Headers2, _Response2} = do_request(Workers, FileName ++ "?value:4-4", put, RequestHeaders1, RequestBody2),
      ?assertEqual(204, Code2),
  
      % upload third chunk of file
      RequestHeaders3 = [user_1_token_header(Config), ?CDMI_VERSION_HEADER, ?OBJECT_CONTENT_TYPE_HEADER],
      RequestBody3 = json_utils:encode(maps:from_list([{<<"value">>, base64:encode(Chunk3)}])),
      {ok, Code3, _Headers3, _Response3} = do_request(Workers, FileName ++ "?value:5-9", put, RequestHeaders3, RequestBody3),
      ?assertEqual(204, Code3),
  
  
negative.code:     %%------------------------------
  
      %%-- create forbidden by acl ---
      Ace4 = #{
          <<"acetype">> => acl_logic:bitmask_to_binary(?allow_mask),
          <<"identifier">> => <<UserName1/binary, "#", UserId1/binary>>,
          <<"aceflags">> => acl_logic:bitmask_to_binary(?no_flags_mask),
          <<"acemask">> => acl_logic:bitmask_to_binary(?execute_mask)
      },
      Ace5 = #{
          <<"acetype">> => acl_logic:bitmask_to_binary(?deny_mask),
          <<"identifier">> => <<UserName1/binary, "#", UserId1/binary>>,
          <<"aceflags">> => acl_logic:bitmask_to_binary(?no_flags_mask),
          <<"acemask">> => acl_logic:bitmask_to_binary(?write_mask)
      },
      RequestBody18 = #{<<"metadata">> => #{<<"cdmi_acl">> => [Ace4, Ace5]}},
      RawRequestBody18 = json_utils:encode(RequestBody18),
      RequestHeaders18 = [user_1_token_header(Config), ?CONTAINER_CONTENT_TYPE_HEADER, ?CDMI_VERSION_HEADER],
  
  