void verifyListNamedBlobs(String accountName, String containerName, String ownerId, String prefix, int numberOfBlobs)
      throws Exception {
    String nextPageToken = null;
    boolean isFirst = true;
    while (numberOfBlobs > 0) {
      int expectedReturnNumber =
          numberOfBlobs > NAMED_BLOB_LIST_RESULT_MAX ? NAMED_BLOB_LIST_RESULT_MAX : numberOfBlobs;
      HttpHeaders headers = new DefaultHttpHeaders();
      headers.add(RestUtils.Headers.SERVICE_ID, accountName);
      headers.add(RestUtils.Headers.OWNER_ID, ownerId);
      headers.add("prefix", prefix);
      if (!isFirst) {
        assertNotNull("nextPageToken should not be null", nextPageToken);
        headers.add("page", nextPageToken);
      }
      FullHttpRequest httpRequest =
          buildRequest(HttpMethod.GET, buildUriForNamedBlobList(accountName, containerName), headers, null);
      NettyClient.ResponseParts responseParts = nettyClient.sendRequest(httpRequest, null, null).get();
      HttpResponse response = getHttpResponse(responseParts);
      assertEquals("Unexpected response status", HttpResponseStatus.OK, response.status());
      assertTrue("No Date header", response.headers().getTimeMillis(HttpHeaderNames.DATE, -1) != -1);
      assertEquals("Content-Type does not match", "application/json",
          response.headers().get(HttpHeaderNames.CONTENT_TYPE));
      assertTrue("Channel should be active", HttpUtil.isKeepAlive(response));
      verifyTrackingHeaders(response);
      int contentLength = response.headers().getInt(HttpHeaderNames.CONTENT_LENGTH);
      byte[] responseContentArray = getContent(responseParts.queue, contentLength).array();
      ObjectMapper objectMapper = new ObjectMapper();
      ListNamedBlobResponse listResponse = objectMapper.readValue(responseContentArray, ListNamedBlobResponse.class);
      assertEquals("Named blob entry number don't match", expectedReturnNumber, listResponse.entries.size());
      nextPageToken = listResponse.getNextPageToken();
      isFirst = false;
      numberOfBlobs -= NAMED_BLOB_LIST_RESULT_MAX;
    }
  }
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