void verifyOperationsAfterDelete(String blobId, HttpHeaders expectedHeaders, boolean isPrivate, String accountName,
      String containerName, ByteBuffer expectedContent, byte[] usermetadata, boolean avoidTtlUpdate,
      Container container) throws Exception {
    HttpHeaders headers = new DefaultHttpHeaders().add(RestUtils.Headers.GET_OPTION, GetOption.None.toString());
    FullHttpRequest httpRequest = buildRequest(HttpMethod.GET, blobId, null, null);
    verifyDeleted(httpRequest, HttpResponseStatus.GONE);
    httpRequest = buildRequest(HttpMethod.GET, blobId, headers, null);
    verifyDeleted(httpRequest, HttpResponseStatus.GONE);

    httpRequest = buildRequest(HttpMethod.HEAD, blobId, null, null);
    verifyDeleted(httpRequest, HttpResponseStatus.GONE);
    httpRequest = buildRequest(HttpMethod.HEAD, blobId, headers, null);
    verifyDeleted(httpRequest, HttpResponseStatus.GONE);

    if (avoidTtlUpdate) {
      headers = new DefaultHttpHeaders().set(RestUtils.Headers.BLOB_ID, blobId)
          .set(RestUtils.Headers.SERVICE_ID, "verifyOperationsAfterDelete");
      httpRequest = buildRequest(HttpMethod.PUT, "/" + Operations.UPDATE_TTL, headers, null);
      verifyDeleted(httpRequest, HttpResponseStatus.GONE);
    }

    httpRequest = buildRequest(HttpMethod.DELETE, blobId, null, null);
    verifyDeleted(httpRequest, HttpResponseStatus.ACCEPTED);

    GetOption[] options = {GetOption.Include_Deleted_Blobs, GetOption.Include_All};
    for (GetOption option : options) {
      getBlobAndVerify(blobId, null, option, false, expectedHeaders, isPrivate, expectedContent, accountName,
          containerName, container);
      getNotModifiedBlobAndVerify(blobId, option, isPrivate, container);
      getUserMetadataAndVerify(blobId, option, expectedHeaders, usermetadata, container);
      getBlobInfoAndVerify(blobId, option, expectedHeaders, isPrivate, accountName, containerName, usermetadata,
          container);
      getHeadAndVerify(blobId, null, option, expectedHeaders, isPrivate, accountName, containerName);
    }
  }
Verifies that the right response code is returned for GET, HEAD, TTL update and DELETE once a blob is deleted.
@param blobId the ID of the blob that was deleted.
@param expectedHeaders the expected headers in the response if the right options are provided.
@param isPrivate {@code true} if the blob is expected to be private
@param accountName the expected account name in {@code response}.
@param containerName the expected container name in {@code response}.
@param expectedContent the expected content of the blob if the right options are provided.
@param usermetadata if non-null, this is expected to come as the body.
@param avoidTtlUpdate {@code true} to avoid doing ttl update.
@throws Exception
ambry-frontend/src/integration-test/java/com/github/ambry/frontend/FrontendIntegrationTestBase.java