anchor.diff:      % delete hardlink
       ok = lfm_proxy:unlink(P1Node, UserSessIdP1, {guid, LinkGuid}),
   
  -    ?assertDetachedDataset(P1Node, UserSessIdP1, DatasetId, LinkGuid, undefined, LinkPath, ?DIRECTORY_TYPE, ProtectionFlags),
  +    ?assertDetachedDataset(P1Node, UserSessIdP1, DatasetId, LinkGuid, undefined, LinkPath, ?SYMLINK_TYPE, ProtectionFlags),
       ?assertMatch({error, ?ENOENT}, lfm_proxy:get_details(P1Node, UserSessIdP1, {guid, LinkGuid})),
       ?assertMatch({error, ?ENOENT}, lfm_proxy:get_file_eff_dataset_summary(P1Node, UserSessIdP1, {guid, LinkGuid})),
       ?assertNoTopDatasets(P1Node, UserSessIdP1, SpaceId, attached),
  
positive.code:     SpaceId = oct_background:get_space_id(space1),
      SpaceGuid = fslogic_uuid:spaceid_to_space_dir_guid(SpaceId),
      FileName = ?FILE_NAME(),
      ProtectionFlags = ?RAND_PROTECTION_FLAGS(),
      {ok, FileGuid} = lfm_proxy:create(P1Node, UserSessIdP1, SpaceGuid, FileName, ?DEFAULT_DIR_PERMS),
      HardLinkName = <<FileName/binary, <<"_hard_link">>/binary>>,
      LinkPath = filename:join(["/", oct_background:get_space_name(space1), HardLinkName]),
  
negative.code: 
      % delete hardlink
      ok = lfm_proxy:unlink(P1Node, UserSessIdP1, {guid, LinkGuid}),
      ?assertDetachedDataset(P1Node, UserSessIdP1, DatasetId, LinkGuid, undefined, LinkPath, ?SYMLINK_TYPE, ProtectionFlags),
      ?assertMatch({error, ?ENOENT}, lfm_proxy:get_details(P1Node, UserSessIdP1, {guid, LinkGuid})),
      ?assertMatch({error, ?ENOENT}, lfm_proxy:get_file_eff_dataset_summary(P1Node, UserSessIdP1, {guid, LinkGuid})),
      ?assertNoTopDatasets(P1Node, UserSessIdP1, SpaceId, attached),
  
      % reattaching dataset which root dir symlink has been remove should fail
      ?assertMatch({error, ?ENOENT}, reattach(P1Node, UserSessIdP1, DatasetId)).
  
  remove_detached_dataset_if_root_file_has_already_been_deleted(_Config) ->
  