### Question:
AzureCloudDestination implements CloudDestination { @Override public short updateBlobExpiration(BlobId blobId, long expirationTime, CloudUpdateValidator cloudUpdateValidator) throws CloudStorageException { UpdateResponse updateResponse = updateBlobMetadata(blobId, Collections.singletonMap(CloudBlobMetadata.FIELD_EXPIRATION_TIME, expirationTime), cloudUpdateValidator); return updateResponse.metadata.containsKey(CloudBlobMetadata.FIELD_LIFE_VERSION) ? Short.parseShort( updateResponse.metadata.get(CloudBlobMetadata.FIELD_LIFE_VERSION)) : 0; } AzureCloudDestination(CloudConfig cloudConfig, AzureCloudConfig azureCloudConfig, String clusterName,
      VcrMetrics vcrMetrics, AzureMetrics azureMetrics, AzureReplicationFeed.FeedType azureReplicationFeedType);   AzureCloudDestination(BlobServiceClient storageClient, BlobBatchClient blobBatchClient,
      AsyncDocumentClient asyncDocumentClient, String cosmosCollectionLink, String clusterName,
      AzureMetrics azureMetrics, AzureReplicationFeed.FeedType azureReplicationFeedType, boolean isVcr); @Override boolean uploadBlob(BlobId blobId, long inputLength, CloudBlobMetadata cloudBlobMetadata,
      InputStream blobInputStream); @Override void downloadBlob(BlobId blobId, OutputStream outputStream); @Override boolean deleteBlob(BlobId blobId, long deletionTime, short lifeVersion,
      CloudUpdateValidator cloudUpdateValidator); @Override short updateBlobExpiration(BlobId blobId, long expirationTime, CloudUpdateValidator cloudUpdateValidator); @Override short undeleteBlob(BlobId blobId, short lifeVersion, CloudUpdateValidator cloudUpdateValidator); @Override Map<String, CloudBlobMetadata> getBlobMetadata(List<BlobId> blobIds); @Override void close(); @Override void stopCompaction(); @Override FindResult findEntriesSince(String partitionPath, FindToken findToken, long maxTotalSizeOfEntries); @Override int compactPartition(String partitionPath); @Override void persistTokens(String partitionPath, String tokenFileName, InputStream inputStream); @Override boolean retrieveTokens(String partitionPath, String tokenFileName, OutputStream outputStream); int getQueryBatchSize();  }### Answer:
@Test public void testExpire() throws Exception { mockBlobExistence(true); try { azureDest.updateBlobExpiration(blobId, expirationTime, dummyCloudUpdateValidator); } catch (Exception ex) { fail("Expected success, instead for exception " + ex.toString()); } assertEquals(1, azureMetrics.blobUpdatedCount.getCount()); assertEquals(0, azureMetrics.blobUpdateErrorCount.getCount()); assertEquals(1, azureMetrics.blobUpdateTime.getCount()); assertEquals(1, azureMetrics.documentReadTime.getCount()); assertEquals(1, azureMetrics.documentUpdateTime.getCount()); }
@Test public void testUpdateBlobNotFound() { BlobStorageException ex = mockStorageException(BlobErrorCode.BLOB_NOT_FOUND); when(mockBlockBlobClient.getPropertiesWithResponse(any(), any(), any())).thenThrow(ex); expectCloudStorageException(() -> azureDest.updateBlobExpiration(blobId, expirationTime, dummyCloudUpdateValidator), BlobStorageException.class); assertEquals(1, azureMetrics.blobUpdateErrorCount.getCount()); assertEquals(1, azureMetrics.storageErrorCount.getCount()); }