@Override
  protected void validateABSAuthConfigs(AzureCloudConfig azureCloudConfig) {
    if (storageAccountInfo() != null) {
      if (StringUtils.isNullOrEmpty(storageAccountInfo().getStorageScope())) {
        throw new IllegalArgumentException(String.format("Storage account %s is missing the %s setting",
            storageAccountInfo().getName(), AZURE_STORAGE_ACCOUNT_INFO_STORAGE_SCOPE));
      }
      if (StringUtils.isNullOrEmpty(storageAccountInfo().getStorageEndpoint())) {
        throw new IllegalArgumentException(
            String.format("Storage account %s is missing the %s setting", storageAccountInfo().getName(),
                AZURE_STORAGE_ACCOUNT_INFO_STORAGE_ENDPOINT));
      }
      return;
    }
    if (azureCloudConfig.azureStorageAuthority.isEmpty() || azureCloudConfig.azureStorageClientId.isEmpty()
        || azureCloudConfig.azureStorageSecret.isEmpty() || azureCloudConfig.azureStorageEndpoint.isEmpty()
        || azureCloudConfig.azureStorageScope.isEmpty()) {
      throw new IllegalArgumentException(String.format("One of the required configs %s, %s, %s, %s, %s is missing",
          AzureCloudConfig.AZURE_STORAGE_AUTHORITY, AzureCloudConfig.AZURE_STORAGE_CLIENTID,
          AzureCloudConfig.AZURE_STORAGE_ENDPOINT, AzureCloudConfig.AZURE_STORAGE_SECRET,
          AzureCloudConfig.AZURE_STORAGE_SCOPE));
    }
  }
Constructor for {@link ADAuthBasedStorageClient} object for testing.
@param blobServiceAsyncClient {@link BlobServiceAsyncClient} object.
@param blobBatchAsyncClient {@link BlobBatchAsyncClient} object.
@param azureMetrics {@link AzureMetrics} object.
@param blobLayoutStrategy {@link AzureBlobLayoutStrategy} object.
@param azureCloudConfig {@link AzureCloudConfig} object.
@param accessToken {@link AccessToken} object.
ambry-cloud/src/main/java/com/github/ambry/cloud/azure/ADAuthBasedStorageClient.java