private String uploadOneVersion() throws Exception {
    JSONObject headers = new JSONObject();
    FrontendRestRequestServiceTest.setAmbryHeadersForPut(headers, TestUtils.TTL_SECS, !REF_CONTAINER.isCacheable(),
        SERVICE_ID, CONTENT_TYPE, OWNER_ID, null, REF_CONTAINER_NO_UPDATE.getName(), null);
    headers.put(RestUtils.Headers.NAMED_UPSERT, true);
    byte[] content = TestUtils.getRandomBytes(1024);
    RestRequest request = getPutRestRequest(headers, request_path, content);

    RestResponseChannel restResponseChannel = new MockRestResponseChannel();
    FutureResult<Void> future = new FutureResult<>();
    namedBlobPutHandler.handle(request, restResponseChannel, future::done);

    future.get(TIMEOUT_SECS, TimeUnit.SECONDS);
    // in id converter, the callback is invoked before the lastConvertedId is set, we need to wait
    String location = (String) restResponseChannel.getHeader(RestUtils.Headers.LOCATION);
    String blobId =
        RequestPath.parse(location, Collections.emptyMap(), frontendConfig.pathPrefixesToRemove, CLUSTER_NAME)
            .getOperationOrBlobId(true);
    InMemoryRouter.InMemoryBlob blob = router.getActiveBlobs().get(blobId);
    assertNotNull(blob);
    assertEquals("Unexpected blob content stored", ByteBuffer.wrap(content), blob.getBlob());
    return blobId;
  }
Upload a new version for this named blob and return the blob id.
@return The blob id for the new version
@throws Exception
ambry-frontend/src/test/java/com/github/ambry/frontend/NamedBlobDeleteHandlerTest.java