void doDatasetUpdateTtlAndVerify(String accountName, String containerName,
      List<Pair<String, String>> allDatasetVersionPairs, int expectedContentSize, String contentType, String ownerId)
      throws Exception {
    for (Pair<String, String> pair : allDatasetVersionPairs) {
      String datasetName = pair.getFirst();
      String version = pair.getSecond();
      HttpHeaders updateTtlHeaders = new DefaultHttpHeaders();
      updateTtlHeaders.add(RestUtils.Headers.DATASET_VERSION_QUERY_ENABLED, true);
      updateTtlHeaders.add(RestUtils.Headers.BLOB_ID,
          buildUriForDatasetVersion(accountName, containerName, datasetName, version));
      updateTtlHeaders.add(RestUtils.Headers.SERVICE_ID, accountName);

      //Update ttl
      updateDatasetVersionTtl(updateTtlHeaders);

      //Test get dataset version, should be permanent
      HttpHeaders getHeaders = new DefaultHttpHeaders();
      getHeaders.add(RestUtils.Headers.DATASET_VERSION_QUERY_ENABLED, true);

      HttpHeaders expectedGetHeaders = new DefaultHttpHeaders().add(updateTtlHeaders);
      expectedGetHeaders.add(RestUtils.Headers.BLOB_SIZE, expectedContentSize);
      expectedGetHeaders.add(RestUtils.Headers.LIFE_VERSION, "0");
      expectedGetHeaders.add(TARGET_ACCOUNT_NAME, accountName);
      expectedGetHeaders.add(RestUtils.Headers.TARGET_CONTAINER_NAME, containerName);
      expectedGetHeaders.add(RestUtils.Headers.AMBRY_CONTENT_TYPE, contentType);
      expectedGetHeaders.add(OWNER_ID, ownerId);

      getDatasetVersionInfoAndVerify(accountName, containerName, datasetName, version, getHeaders, Utils.Infinite_Time,
          expectedGetHeaders);
    }
  }
Verify Named blob List operation.
@param accountName The account name.
@param containerName The container name
@param ownerId The owner id
@param prefix The prefix of blob name.
@param numberOfBlobs The expected number of named blobs returned by list operation.
@throws Exception
ambry-frontend/src/integration-test/java/com/github/ambry/frontend/FrontendIntegrationTestBase.java