private void doTtlUpdate(int correlationId, String clientId, BlobId blobId, long expiresAtMs, long opTimeMs,
      ServerErrorCode expectedErrorCode)
      throws InterruptedException, IOException, MessageFormatException, StoreException {
    TtlUpdateRequest request = new TtlUpdateRequest(correlationId, clientId, blobId, expiresAtMs, opTimeMs);
    sendAndVerifyOperationRequest(request, expectedErrorCode, true).release();
    if (expectedErrorCode == ServerErrorCode.NoError) {
      verifyTtlUpdate(request.getBlobId(), expiresAtMs, opTimeMs, MockStorageManager.messageWriteSetReceived);
    }
  }
Does a TTL update and checks for success if {@code expectedErrorCode} is {@link ServerErrorCode#NoError}. Else,
checks for failure with the code {@code expectedErrorCode}.
@param correlationId the correlation ID to use in the request
@param clientId the client ID to use in the request
@param blobId the blob ID to use in the request
@param expiresAtMs the expiry time (ms) to use in the request
@param opTimeMs the operation time (ms) to use in the request
@param expectedErrorCode the expected {@link ServerErrorCode}
@throws InterruptedException
@throws IOException
@throws MessageFormatException
ambry-server/src/test/java/com/github/ambry/server/AmbryServerRequestsTest.java