[ASTERIXDB-3207][EXT]: Fix Azure blob storage test cases and use daemon azurite

Change-Id: I05db727d706e43396d7b4548433224e46947ccdf
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17596
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Ian Maxon <imaxon@uci.edu>
Reviewed-by: Michael Blow <mblow@apache.org>
diff --git a/asterixdb/asterix-app/pom.xml b/asterixdb/asterix-app/pom.xml
index ef74df4..d2b1a95 100644
--- a/asterixdb/asterix-app/pom.xml
+++ b/asterixdb/asterix-app/pom.xml
@@ -247,6 +247,31 @@
               </environmentVariables>
             </configuration>
           </execution>
+          <execution>
+            <id>azurite</id>
+            <phase>${azurite.stage}</phase>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+            <configuration>
+              <!--suppress UnresolvedMavenProperty -->
+              <executable>${project.build.directory}/npm/node_modules/.bin/azurite-blob</executable>
+              <workingDirectory>${project.build.directory}</workingDirectory>
+              <environmentVariables>
+                <PATH>${project.build.directory}/npm/node</PATH>
+              </environmentVariables>
+              <arguments>
+                <argument>--blobPort</argument>
+                <argument>15055</argument>
+                <argument>--location</argument>
+                <argument>${project.build.directory}/azurite</argument>
+                <argument>--debug</argument>
+                <argument>${project.build.directory}/azurite/logs/azurite-debug.log</argument>
+              </arguments>
+              <async>true</async>
+              <outputFile>${project.build.directory}/azurite/logs/azurite.log</outputFile>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
       <plugin>
@@ -329,6 +354,36 @@
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>com.github.eirslett</groupId>
+        <artifactId>frontend-maven-plugin</artifactId>
+        <version>1.13.4</version>
+        <configuration>
+          <nodeVersion>v14.15.4</nodeVersion>
+          <npmVersion>6.14.11</npmVersion>
+          <workingDirectory>target/npm</workingDirectory>
+          <installDirectory>target/npm</installDirectory>
+        </configuration>
+        <executions>
+          <execution>
+            <id>install node and yarn</id>
+            <goals>
+              <goal>install-node-and-npm</goal>
+            </goals>
+            <phase>${azurite.npm.install.stage}</phase>
+          </execution>
+          <execution>
+            <id>azurite blob</id>
+            <phase>${azurite.install.stage}</phase>
+            <goals>
+              <goal>npm</goal>
+            </goals>
+            <configuration>
+              <arguments>install azurite</arguments>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
     <pluginManagement>
       <plugins>
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestConstants.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestConstants.java
index a2fbb37..1a5cb66 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestConstants.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestConstants.java
@@ -40,6 +40,10 @@
         // account name
         public static final String ACCOUNT_NAME_PLACEHOLDER = "%azure-accountname%";
         public static final String AZURITE_ACCOUNT_NAME_DEFAULT = "devstoreaccount1";
+        public static final int AZURITE_PORT = 15055;
+        public static final String AZURITE_HOSTNAME = "127.0.0.1:" + AZURITE_PORT;
+        public static final String AZURITE_ENDPOINT =
+                "http://127.0.0.1:" + AZURITE_PORT + "/" + AZURITE_ACCOUNT_NAME_DEFAULT;
 
         // account key
         public static final String ACCOUNT_KEY_PLACEHOLDER = "%azure-accountkey%";
@@ -52,7 +56,7 @@
 
         // blob endpoint
         public static final String BLOB_ENDPOINT_PLACEHOLDER = "%azure-endpoint%";
-        public static final String BLOB_ENDPOINT_DEFAULT = "http://localhost:10000/" + AZURITE_ACCOUNT_NAME_DEFAULT;
+        public static final String BLOB_ENDPOINT_DEFAULT = AZURITE_ENDPOINT;
 
         public static final String MANAGED_IDENTITY_ID_PLACEHOLDER = "%azure-managedidentityid%";
         public static final String MANAGED_IDENTITY_ID_DEFAULT = "myManagedIdentityId";
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
index f1d484e..525899a 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
@@ -861,9 +861,7 @@
             params = upsertParam(params, param.getName(), param.getType(), param.getValue());
         }
 
-        if (!placeholders.isEmpty()) {
-            str = applyExternalDatasetSubstitution(str, placeholders);
-        }
+        str = applyExternalDatasetSubstitution(str, placeholders);
 
         HttpUriRequest method = jsonEncoded ? constructPostMethodJson(str, uri, "statement", params)
                 : constructPostMethodUrl(str, uri, "statement", params);
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/external_dataset/microsoft/AzureBlobStorageExternalDatasetOnePartitionTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/external_dataset/microsoft/AzureBlobStorageExternalDatasetOnePartitionTest.java
index 9e66207..59c375a 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/external_dataset/microsoft/AzureBlobStorageExternalDatasetOnePartitionTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/external_dataset/microsoft/AzureBlobStorageExternalDatasetOnePartitionTest.java
@@ -23,12 +23,10 @@
 import org.apache.asterix.test.runtime.LangExecutionUtil;
 import org.apache.asterix.testframework.context.TestCaseContext;
 import org.junit.FixMethodOrder;
-import org.junit.Ignore;
 import org.junit.runner.RunWith;
 import org.junit.runners.MethodSorters;
 import org.junit.runners.Parameterized;
 
-@Ignore
 @RunWith(Parameterized.class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class AzureBlobStorageExternalDatasetOnePartitionTest extends AzureBlobStorageExternalDatasetTest {
@@ -44,7 +42,8 @@
         TEST_CONFIG_FILE_NAME = "src/test/resources/cc-single.conf";
         PREPARE_PLAYGROUND_CONTAINER = AzureBlobStorageExternalDatasetOnePartitionTest::preparePlaygroundContainer;
         PREPARE_FIXED_DATA_CONTAINER = AzureBlobStorageExternalDatasetOnePartitionTest::prepareFixedDataContainer;
-        PREPARE_MIXED_DATA_CONTAINER = AzureBlobStorageExternalDatasetOnePartitionTest::prepareMixedDataContainer;
+        PREPARE_INCLUDE_EXCLUDE_CONTAINER = AzureBlobStorageExternalDatasetOnePartitionTest::prepareMixedDataContainer;
+        PREPARE_BOM_FILE_BUCKET = AzureBlobStorageExternalDatasetOnePartitionTest::prepareBomDataContainer;
         return LangExecutionUtil.tests(ONLY_TESTS, SUITE_TESTS);
     }
 
@@ -56,4 +55,7 @@
 
     private static void prepareMixedDataContainer() {
     }
+
+    private static void prepareBomDataContainer() {
+    }
 }
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/external_dataset/microsoft/AzureBlobStorageExternalDatasetTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/external_dataset/microsoft/AzureBlobStorageExternalDatasetTest.java
index 7de2d7e..49f40ac 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/external_dataset/microsoft/AzureBlobStorageExternalDatasetTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/external_dataset/microsoft/AzureBlobStorageExternalDatasetTest.java
@@ -18,18 +18,14 @@
  */
 package org.apache.asterix.test.external_dataset.microsoft;
 
-import static org.apache.asterix.test.common.TestConstants.Azure.AZURITE_ACCOUNT_KEY_DEFAULT;
-import static org.apache.asterix.test.common.TestConstants.Azure.AZURITE_ACCOUNT_NAME_DEFAULT;
-import static org.apache.asterix.test.common.TestConstants.Azure.BLOB_ENDPOINT_PLACEHOLDER;
-import static org.apache.asterix.test.common.TestConstants.Azure.sasToken;
-import static org.apache.asterix.test.external_dataset.ExternalDatasetTestUtils.PARQUET_DEFINITION;
-import static org.apache.asterix.test.external_dataset.parquet.BinaryFileConverterUtil.BINARY_GEN_BASEDIR;
+import static org.apache.asterix.test.common.TestConstants.Azure.*;
+import static org.apache.asterix.test.external_dataset.ExternalDatasetTestUtils.*;
 import static org.apache.hyracks.util.file.FileUtil.joinPath;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
-import java.io.InputStream;
+import java.io.IOException;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.nio.file.Files;
@@ -59,10 +55,8 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.junit.AfterClass;
-import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.FixMethodOrder;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.MethodSorters;
@@ -80,7 +74,6 @@
 import com.azure.storage.common.sas.AccountSasSignatureValues;
 
 // TODO(Hussain): Need to run the test manually to ensure new tests (anonymous access) are working fine
-@Ignore
 @RunWith(Parameterized.class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class AzureBlobStorageExternalDatasetTest {
@@ -93,31 +86,21 @@
     static String TEST_CONFIG_FILE_NAME;
     static Runnable PREPARE_PLAYGROUND_CONTAINER;
     static Runnable PREPARE_FIXED_DATA_CONTAINER;
-    static Runnable PREPARE_MIXED_DATA_CONTAINER;
+    static Runnable PREPARE_INCLUDE_EXCLUDE_CONTAINER;
+    static Runnable PREPARE_BOM_FILE_BUCKET;
 
     // Base directory paths for data files
     private static final String JSON_DATA_PATH = joinPath("data", "json");
     private static final String CSV_DATA_PATH = joinPath("data", "csv");
     private static final String TSV_DATA_PATH = joinPath("data", "tsv");
-    private static final String MIXED_DATA_PATH = joinPath("data", "mixed");
     private static final String PARQUET_RAW_DATA_PATH = joinPath("data", "hdfs", "parquet");
 
-    // Service endpoint
-    private static final int BLOB_SERVICE_PORT = 10000;
-    private static final String BLOB_SERVICE_ENDPOINT = "http://192.168.0.100:" + BLOB_SERVICE_PORT;
-
     // Region, container and definitions
     private static final String PLAYGROUND_CONTAINER = "playground";
     private static final String FIXED_DATA_CONTAINER = "fixed-data"; // Do not use, has fixed data
     private static final String INCLUDE_EXCLUDE_CONTAINER = "include-exclude";
+    private static final String BOM_FILE_CONTAINER = "bom-file-container";
     private static final String PUBLIC_ACCESS_CONTAINER = "public-access-container"; // requires no authentication
-    private static final String JSON_DEFINITION = "json-data/reviews/";
-    private static final String CSV_DEFINITION = "csv-data/reviews/";
-    private static final String TSV_DEFINITION = "tsv-data/reviews/";
-
-    // This is used for a test to generate over 1000 number of files
-    private static final String OVER_1000_OBJECTS_PATH = "over-1000-objects";
-    private static final int OVER_1000_OBJECTS_COUNT = 2999;
 
     private static final Set<String> fileNames = new HashSet<>();
 
@@ -125,6 +108,9 @@
     private static BlobServiceClient blobServiceClient;
     private static BlobContainerClient playgroundContainer;
     private static BlobContainerClient publicAccessContainer;
+    private static BlobContainerClient fixedDataContainer;
+    private static BlobContainerClient mixedDataContainer;
+    private static BlobContainerClient bomContainer;
 
     protected TestCaseContext tcCtx;
 
@@ -151,9 +137,10 @@
         SUITE_TESTS = "testsuite_external_dataset_azure_blob_storage.xml";
         ONLY_TESTS = "only_external_dataset.xml";
         TEST_CONFIG_FILE_NAME = "src/main/resources/cc.conf";
-        PREPARE_PLAYGROUND_CONTAINER = AzureBlobStorageExternalDatasetTest::preparePlaygroundContainer;
-        PREPARE_FIXED_DATA_CONTAINER = AzureBlobStorageExternalDatasetTest::prepareFixedDataContainer;
-        PREPARE_MIXED_DATA_CONTAINER = AzureBlobStorageExternalDatasetTest::prepareMixedDataContainer;
+        PREPARE_PLAYGROUND_CONTAINER = ExternalDatasetTestUtils::preparePlaygroundContainer;
+        PREPARE_FIXED_DATA_CONTAINER = ExternalDatasetTestUtils::prepareFixedDataContainer;
+        PREPARE_INCLUDE_EXCLUDE_CONTAINER = ExternalDatasetTestUtils::prepareMixedDataContainer;
+        PREPARE_BOM_FILE_BUCKET = ExternalDatasetTestUtils::prepareBomFileContainer;
         return LangExecutionUtil.tests(ONLY_TESTS, SUITE_TESTS);
     }
 
@@ -179,17 +166,39 @@
         LOGGER.info("Creating Azurite Blob Service client");
         BlobServiceClientBuilder builder = new BlobServiceClientBuilder();
         builder.credential(new StorageSharedKeyCredential(AZURITE_ACCOUNT_NAME_DEFAULT, AZURITE_ACCOUNT_KEY_DEFAULT));
-        builder.endpoint(BLOB_ENDPOINT_PLACEHOLDER);
+        builder.endpoint(AZURITE_ENDPOINT);
         blobServiceClient = builder.buildClient();
         LOGGER.info("Azurite Blob Service client created successfully");
 
+        // delete all existing containers
+        deleteContainersSilently();
+
+        LOGGER.info("Creating containers");
+        playgroundContainer = blobServiceClient.createBlobContainer(PLAYGROUND_CONTAINER);
+        fixedDataContainer = blobServiceClient.createBlobContainer(FIXED_DATA_CONTAINER);
+        mixedDataContainer = blobServiceClient.createBlobContainer(INCLUDE_EXCLUDE_CONTAINER);
+        bomContainer = blobServiceClient.createBlobContainer(BOM_FILE_CONTAINER);
+        publicAccessContainer = blobServiceClient.createBlobContainer(PUBLIC_ACCESS_CONTAINER);
+        publicAccessContainer.setAccessPolicy(PublicAccessType.CONTAINER, null);
+        LOGGER.info("Created containers successfully");
+
+        // Load 20 files in the public access container
+        Path filePath = Paths.get(JSON_DATA_PATH, "single-line", "20-records.json");
+        publicAccessContainer.getBlobClient("20-records.json").uploadFromFile(filePath.toAbsolutePath().toString());
+
         // Generate the SAS token for the SAS test cases
         sasToken = generateSasToken();
 
         // Create the container and upload some json files
+        // Create the bucket and upload some json files
+        setDataPaths(JSON_DATA_PATH, CSV_DATA_PATH, TSV_DATA_PATH);
+        setUploaders(AzureBlobStorageExternalDatasetTest::loadPlaygroundData,
+                AzureBlobStorageExternalDatasetTest::loadFixedData, AzureBlobStorageExternalDatasetTest::loadMixedData,
+                AzureBlobStorageExternalDatasetTest::loadBomData);
         PREPARE_PLAYGROUND_CONTAINER.run();
         PREPARE_FIXED_DATA_CONTAINER.run();
-        PREPARE_MIXED_DATA_CONTAINER.run();
+        PREPARE_INCLUDE_EXCLUDE_CONTAINER.run();
+        PREPARE_BOM_FILE_BUCKET.run();
     }
 
     private static String generateSasToken() {
@@ -200,344 +209,120 @@
         return blobServiceClient.generateAccountSas(new AccountSasSignatureValues(expiry, permission, service, type));
     }
 
-    /**
-     * Creates a container and fills it with some files for testing purpose.
-     */
-    private static void preparePlaygroundContainer() {
-        deleteContainerSilently(PLAYGROUND_CONTAINER);
-
-        LOGGER.info("creating container " + PLAYGROUND_CONTAINER);
-        playgroundContainer = blobServiceClient.createBlobContainer(PLAYGROUND_CONTAINER);
-        publicAccessContainer = blobServiceClient.createBlobContainer(PUBLIC_ACCESS_CONTAINER);
-        publicAccessContainer.setAccessPolicy(PublicAccessType.CONTAINER, null);
-        LOGGER.info("container " + PLAYGROUND_CONTAINER + " created successfully");
-
-        LOGGER.info("Adding JSON files");
-        loadJsonFiles();
-        LOGGER.info("JSON Files added successfully");
-
-        LOGGER.info("Adding CSV files");
-        loadCsvFiles();
-        LOGGER.info("CSV Files added successfully");
-
-        LOGGER.info("Adding TSV files");
-        loadTsvFiles();
-        LOGGER.info("TSV Files added successfully");
-
-        LOGGER.info("Loading " + OVER_1000_OBJECTS_COUNT + " into " + OVER_1000_OBJECTS_PATH);
-        loadLargeNumberOfFiles();
-        LOGGER.info("Added " + OVER_1000_OBJECTS_COUNT + " files into " + OVER_1000_OBJECTS_PATH + " successfully");
-
-        LOGGER.info("Adding Parquet files to the bucket");
-        loadParquetFiles();
-        LOGGER.info("Parquet files added successfully");
-    }
-
-    /**
-     * This container is being filled by fixed data, a test is counting all records. If this container is
-     * changed, the test case will fail and its result will need to be updated each time
-     */
-    private static void prepareFixedDataContainer() {
-        deleteContainerSilently(FIXED_DATA_CONTAINER);
-        LOGGER.info("creating container " + FIXED_DATA_CONTAINER);
-        BlobContainerClient fixedDataContainer = blobServiceClient.createBlobContainer(FIXED_DATA_CONTAINER);
-        LOGGER.info("container " + FIXED_DATA_CONTAINER + " created successfully");
-
-        LOGGER.info("Loading fixed data to " + FIXED_DATA_CONTAINER);
-
-        // Files data
-        Path filePath = Paths.get(JSON_DATA_PATH, "single-line", "20-records.json");
-        fixedDataContainer.getBlobClient("1.json").uploadFromFile(filePath.toString());
-        fixedDataContainer.getBlobClient("2.json").uploadFromFile(filePath.toString());
-        fixedDataContainer.getBlobClient("lvl1/3.json").uploadFromFile(filePath.toString());
-        fixedDataContainer.getBlobClient("lvl1/4.json").uploadFromFile(filePath.toString());
-        fixedDataContainer.getBlobClient("lvl1/lvl2/5.json").uploadFromFile(filePath.toString());
-    }
-
-    private static void loadJsonFiles() {
-        String dataBasePath = JSON_DATA_PATH;
-        String definition = JSON_DEFINITION;
-
-        // Normal format
-        String definitionSegment = "json";
-        loadData(dataBasePath, "single-line", "20-records.json", definition, definitionSegment, false);
-        loadData(dataBasePath, "multi-lines", "20-records.json", definition, definitionSegment, false);
-        loadData(dataBasePath, "multi-lines-with-arrays", "5-records.json", definition, definitionSegment, false);
-        loadData(dataBasePath, "multi-lines-with-nested-objects", "5-records.json", definition, definitionSegment,
-                false);
-
-        definitionSegment = "json-array-of-objects";
-        loadData(dataBasePath, "single-line", "array_of_objects.json", "json-data/", definitionSegment, false, false);
-
-        // gz compressed format
-        definitionSegment = "gz";
-        loadGzData(dataBasePath, "single-line", "20-records.json", definition, definitionSegment, false);
-        loadGzData(dataBasePath, "multi-lines", "20-records.json", definition, definitionSegment, false);
-        loadGzData(dataBasePath, "multi-lines-with-arrays", "5-records.json", definition, definitionSegment, false);
-        loadGzData(dataBasePath, "multi-lines-with-nested-objects", "5-records.json", definition, definitionSegment,
-                false);
-
-        // Mixed normal and gz compressed format
-        definitionSegment = "mixed";
-        loadData(dataBasePath, "single-line", "20-records.json", definition, definitionSegment, false);
-        loadData(dataBasePath, "multi-lines", "20-records.json", definition, definitionSegment, false);
-        loadData(dataBasePath, "multi-lines-with-arrays", "5-records.json", definition, definitionSegment, false);
-        loadData(dataBasePath, "multi-lines-with-nested-objects", "5-records.json", definition, definitionSegment,
-                false);
-        loadGzData(dataBasePath, "single-line", "20-records.json", definition, definitionSegment, false);
-        loadGzData(dataBasePath, "multi-lines", "20-records.json", definition, definitionSegment, false);
-        loadGzData(dataBasePath, "multi-lines-with-arrays", "5-records.json", definition, definitionSegment, false);
-        loadGzData(dataBasePath, "multi-lines-with-nested-objects", "5-records.json", definition, definitionSegment,
-                false);
-    }
-
-    private static void loadCsvFiles() {
-        String dataBasePath = CSV_DATA_PATH;
-        String definition = CSV_DEFINITION;
-
-        // Normal format
-        String definitionSegment = "csv";
-        loadData(dataBasePath, "", "01.csv", definition, definitionSegment, false);
-        loadData(dataBasePath, "", "02.csv", definition, definitionSegment, false);
-
-        // gz compressed format
-        definitionSegment = "gz";
-        loadGzData(dataBasePath, "", "01.csv", definition, definitionSegment, false);
-        loadGzData(dataBasePath, "", "02.csv", definition, definitionSegment, false);
-
-        // Mixed normal and gz compressed format
-        definitionSegment = "mixed";
-        loadData(dataBasePath, "", "01.csv", definition, definitionSegment, false);
-        loadData(dataBasePath, "", "02.csv", definition, definitionSegment, false);
-        loadGzData(dataBasePath, "", "01.csv", definition, definitionSegment, false);
-        loadGzData(dataBasePath, "", "02.csv", definition, definitionSegment, false);
-    }
-
-    private static void loadTsvFiles() {
-        String dataBasePath = TSV_DATA_PATH;
-        String definition = TSV_DEFINITION;
-
-        // Normal format
-        String definitionSegment = "tsv";
-        loadData(dataBasePath, "", "01.tsv", definition, definitionSegment, false);
-        loadData(dataBasePath, "", "02.tsv", definition, definitionSegment, false);
-
-        // gz compressed format
-        definitionSegment = "gz";
-        loadGzData(dataBasePath, "", "01.tsv", definition, definitionSegment, false);
-        loadGzData(dataBasePath, "", "02.tsv", definition, definitionSegment, false);
-
-        // Mixed normal and gz compressed format
-        definitionSegment = "mixed";
-        loadData(dataBasePath, "", "01.tsv", definition, definitionSegment, false);
-        loadData(dataBasePath, "", "02.tsv", definition, definitionSegment, false);
-        loadGzData(dataBasePath, "", "01.tsv", definition, definitionSegment, false);
-        loadGzData(dataBasePath, "", "02.tsv", definition, definitionSegment, false);
-    }
-
-    private static void loadParquetFiles() {
-        String dataBasePath = BINARY_GEN_BASEDIR;
-        String definition = PARQUET_DEFINITION;
-
-        // Normal format
-        String definitionSegment = "";
-        loadData(dataBasePath, "", "dummy_tweet.parquet", definition, definitionSegment, false, false);
-        loadData(dataBasePath, "", "id_age.parquet", definition, definitionSegment, false, false);
-        loadData(dataBasePath, "", "id_age-string.parquet", definition, definitionSegment, false, false);
-        loadData(dataBasePath, "", "id_name.parquet", definition, definitionSegment, false, false);
-        loadData(dataBasePath, "", "id_name_comment.parquet", definition, definitionSegment, false, false);
-        loadData(dataBasePath, "", "heterogeneous_1.parquet", definition, definitionSegment, false, false);
-        loadData(dataBasePath, "", "heterogeneous_2.parquet", definition, definitionSegment, false, false);
-    }
-
-    private static void loadData(String fileBasePath, String filePathSegment, String filename, String definition,
-            String definitionSegment, boolean removeExtension) {
-        loadData(fileBasePath, filePathSegment, filename, definition, definitionSegment, removeExtension, true);
-    }
-
-    private static void loadData(String fileBasePath, String filePathSegment, String filename, String definition,
-            String definitionSegment, boolean removeExtension, boolean copyToSubLevels) {
-        // Files data
-        Path filePath = Paths.get(fileBasePath, filePathSegment, filename);
-
-        // Keep or remove the file extension
-        Assert.assertFalse("Files with no extension are not supported yet for external datasets", removeExtension);
-        String finalFileName;
-        if (removeExtension) {
-            finalFileName = FilenameUtils.removeExtension(filename);
-        } else {
-            finalFileName = filename;
-        }
-
-        // Files base definition
-        filePathSegment = filePathSegment.isEmpty() ? "" : filePathSegment + "/";
-        definitionSegment = definitionSegment.isEmpty() ? "" : definitionSegment + "/";
-        String basePath = definition + filePathSegment + definitionSegment;
-
-        // Load the data
-        playgroundContainer.getBlobClient(basePath + finalFileName).uploadFromFile(filePath.toString());
-        publicAccessContainer.getBlobClient(basePath + finalFileName).uploadFromFile(filePath.toString());
-        if (copyToSubLevels) {
-            playgroundContainer.getBlobClient(basePath + "level1a/" + finalFileName)
-                    .uploadFromFile(filePath.toString());
-            playgroundContainer.getBlobClient(basePath + "level1b/" + finalFileName)
-                    .uploadFromFile(filePath.toString());
-            playgroundContainer.getBlobClient(basePath + "level1a/level2a/" + finalFileName)
-                    .uploadFromFile(filePath.toString());
-            playgroundContainer.getBlobClient(basePath + "level1a/level2b/" + finalFileName)
-                    .uploadFromFile(filePath.toString());
-        }
-    }
-
-    private static void loadGzData(String fileBasePath, String filePathSegment, String filename, String definition,
-            String definitionSegment, boolean removeExtension) {
-        try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-                GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream)) {
-
-            // Files data
-            Path filePath = Paths.get(fileBasePath, filePathSegment, filename);
-
-            // Get the compressed data
-            gzipOutputStream.write(Files.readAllBytes(filePath));
-            gzipOutputStream.close(); // Need to close or data will be invalid
-            byte[] gzipBytes = byteArrayOutputStream.toByteArray();
-
-            // Keep or remove the file extension
-            Assert.assertFalse("Files with no extension are not supported yet for external datasets", removeExtension);
-            String finalFileName;
-            if (removeExtension) {
-                finalFileName = FilenameUtils.removeExtension(filename);
-            } else {
-                finalFileName = filename;
+    private static void loadPlaygroundData(String key, String content, boolean fromFile, boolean gzipped) {
+        if (!fromFile) {
+            try (ByteArrayInputStream inputStream = new ByteArrayInputStream(content.getBytes())) {
+                playgroundContainer.getBlobClient(key).upload(inputStream, inputStream.available());
+            } catch (IOException ex) {
+                throw new IllegalArgumentException(ex.toString());
             }
-            finalFileName += ".gz";
+        } else {
+            if (!gzipped) {
+                playgroundContainer.getBlobClient(key).uploadFromFile(content);
+            } else {
+                try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+                        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream)) {
+                    gzipOutputStream.write(Files.readAllBytes(Paths.get(content)));
+                    gzipOutputStream.close(); // Need to close or data will be invalid
+                    byte[] gzipBytes = byteArrayOutputStream.toByteArray();
 
-            // Files base definition
-            filePathSegment = filePathSegment.isEmpty() ? "" : filePathSegment + "/";
-            definitionSegment = definitionSegment.isEmpty() ? "" : definitionSegment + "/";
-            String basePath = definition + filePathSegment + definitionSegment;
-
-            // Load the data
-            ByteArrayInputStream inputStream = new ByteArrayInputStream(gzipBytes);
-            playgroundContainer.getBlobClient(basePath + finalFileName).upload(inputStream, inputStream.available());
-            inputStream.reset();
-            playgroundContainer.getBlobClient(basePath + "level1a/" + finalFileName).upload(inputStream,
-                    inputStream.available());
-            inputStream.reset();
-            playgroundContainer.getBlobClient(basePath + "level1b/" + finalFileName).upload(inputStream,
-                    inputStream.available());
-            inputStream.reset();
-            playgroundContainer.getBlobClient(basePath + "level1a/level2a/" + finalFileName).upload(inputStream,
-                    inputStream.available());
-            inputStream.reset();
-            playgroundContainer.getBlobClient(basePath + "level1a/level2b/" + finalFileName).upload(inputStream,
-                    inputStream.available());
-            closeInputStreamSilently(inputStream);
-        } catch (Exception ex) {
-            LOGGER.error(ex.getMessage());
+                    try (ByteArrayInputStream inputStream = new ByteArrayInputStream(gzipBytes)) {
+                        playgroundContainer.getBlobClient(key).upload(inputStream, inputStream.available());
+                    } catch (IOException ex) {
+                        throw new IllegalArgumentException(ex.toString());
+                    }
+                } catch (IOException ex) {
+                    throw new IllegalArgumentException(ex.toString());
+                }
+            }
         }
     }
 
-    private static void loadLargeNumberOfFiles() {
-        ByteArrayInputStream inputStream = null;
-        for (int i = 0; i < OVER_1000_OBJECTS_COUNT; i++) {
-            inputStream = new ByteArrayInputStream(("{\"id\":" + i + "}").getBytes());
-            playgroundContainer.getBlobClient(OVER_1000_OBJECTS_PATH + "/" + i + ".json").upload(inputStream,
-                    inputStream.available());
+    private static void loadFixedData(String key, String content, boolean fromFile, boolean gzipped) {
+        if (!fromFile) {
+            try (ByteArrayInputStream inputStream = new ByteArrayInputStream(content.getBytes())) {
+                fixedDataContainer.getBlobClient(key).upload(inputStream, inputStream.available());
+            } catch (IOException ex) {
+                throw new IllegalArgumentException(ex.toString());
+            }
+        } else {
+            if (!gzipped) {
+                fixedDataContainer.getBlobClient(key).uploadFromFile(content);
+            } else {
+                try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+                        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream)) {
+                    gzipOutputStream.write(Files.readAllBytes(Paths.get(content)));
+                    gzipOutputStream.close(); // Need to close or data will be invalid
+                    byte[] gzipBytes = byteArrayOutputStream.toByteArray();
+
+                    try (ByteArrayInputStream inputStream = new ByteArrayInputStream(gzipBytes)) {
+                        fixedDataContainer.getBlobClient(key).upload(inputStream, inputStream.available());
+                    } catch (IOException ex) {
+                        throw new IllegalArgumentException(ex.toString());
+                    }
+                } catch (IOException ex) {
+                    throw new IllegalArgumentException(ex.toString());
+                }
+            }
         }
-        closeInputStreamSilently(inputStream);
     }
 
-    /**
-     * Loads a combination of different file formats in the same path
-     */
-    private static void prepareMixedDataContainer() {
-        deleteContainerSilently(INCLUDE_EXCLUDE_CONTAINER);
-        LOGGER.info("creating container " + INCLUDE_EXCLUDE_CONTAINER);
-        BlobContainerClient includeExcludeContainer = blobServiceClient.createBlobContainer(INCLUDE_EXCLUDE_CONTAINER);
-        LOGGER.info("container " + INCLUDE_EXCLUDE_CONTAINER + " created successfully");
+    private static void loadMixedData(String key, String content, boolean fromFile, boolean gzipped) {
+        if (!fromFile) {
+            try (ByteArrayInputStream inputStream = new ByteArrayInputStream(content.getBytes())) {
+                mixedDataContainer.getBlobClient(key).upload(inputStream, inputStream.available());
+            } catch (IOException ex) {
+                throw new IllegalArgumentException(ex.toString());
+            }
+        } else {
+            if (!gzipped) {
+                mixedDataContainer.getBlobClient(key).uploadFromFile(content);
+            } else {
+                try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+                        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream)) {
+                    gzipOutputStream.write(Files.readAllBytes(Paths.get(content)));
+                    gzipOutputStream.close(); // Need to close or data will be invalid
+                    byte[] gzipBytes = byteArrayOutputStream.toByteArray();
 
-        // JSON
-        ByteArrayInputStream inputStream = new ByteArrayInputStream(("{\"id\":" + 1 + "}").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/json/extension/" + "hello-world-2018.json")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("{\"id\":" + 2 + "}").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/json/extension/" + "hello-world-2019.json")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("{\"id\":" + 3 + "}").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/json/extension/" + "hello-world-2020.json")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("{\"id\":" + 4 + "}").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/json/EXTENSION/" + "goodbye-world-2018.json")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("{\"id\":" + 5 + "}").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/json/EXTENSION/" + "goodbye-world-2019.json")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("{\"id\":" + 6 + "}").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/json/EXTENSION/" + "goodbye-world-2020.json")
-                .upload(inputStream, inputStream.available());
+                    try (ByteArrayInputStream inputStream = new ByteArrayInputStream(gzipBytes)) {
+                        mixedDataContainer.getBlobClient(key).upload(inputStream, inputStream.available());
+                    } catch (IOException ex) {
+                        throw new IllegalArgumentException(ex.toString());
+                    }
+                } catch (IOException ex) {
+                    throw new IllegalArgumentException(ex.toString());
+                }
+            }
+        }
+    }
 
-        // CSV
-        inputStream = new ByteArrayInputStream(("7,\"good\"").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/csv/extension/" + "hello-world-2018.csv")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("8,\"good\"").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/csv/extension/" + "hello-world-2019.csv")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("9,\"good\"").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/csv/extension/" + "hello-world-2020.csv")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("10,\"good\"").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/csv/EXTENSION/" + "goodbye-world-2018.csv")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("11,\"good\"").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/csv/EXTENSION/" + "goodbye-world-2019.csv")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("12,\"good\"").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/csv/EXTENSION/" + "goodbye-world-2020.csv")
-                .upload(inputStream, inputStream.available());
+    private static void loadBomData(String key, String content, boolean fromFile, boolean gzipped) {
+        if (!fromFile) {
+            try (ByteArrayInputStream inputStream = new ByteArrayInputStream(content.getBytes())) {
+                bomContainer.getBlobClient(key).upload(inputStream, inputStream.available());
+            } catch (IOException ex) {
+                throw new IllegalArgumentException(ex.toString());
+            }
+        } else {
+            if (!gzipped) {
+                bomContainer.getBlobClient(key).uploadFromFile(content);
+            } else {
+                try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+                        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream)) {
+                    gzipOutputStream.write(Files.readAllBytes(Paths.get(content)));
+                    gzipOutputStream.close(); // Need to close or data will be invalid
+                    byte[] gzipBytes = byteArrayOutputStream.toByteArray();
 
-        // TSV
-        inputStream = new ByteArrayInputStream(("13\t\"good\"").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/tsv/extension/" + "hello-world-2018.tsv")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("14\t\"good\"").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/tsv/extension/" + "hello-world-2019.tsv")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("15\t\"good\"").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/tsv/extension/" + "hello-world-2020.tsv")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("16\t\"good\"").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/tsv/EXTENSION/" + "goodbye-world-2018.tsv")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("17\t\"good\"").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/tsv/EXTENSION/" + "goodbye-world-2019.tsv")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("18\t\"good\"").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/tsv/EXTENSION/" + "goodbye-world-2020.tsv")
-                .upload(inputStream, inputStream.available());
-
-        // JSON no extension
-        inputStream = new ByteArrayInputStream(("{\"id\":" + 1 + "}").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/json/no-extension/" + "hello-world-2018")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("{\"id\":" + 2 + "}").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/json/no-extension/" + "hello-world-2019")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("{\"id\":" + 3 + "}").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/json/no-extension/" + "hello-world-2020")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("{\"id\":" + 4 + "}").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/json/NO-EXTENSION/" + "goodbye-world-2018")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("{\"id\":" + 5 + "}").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/json/NO-EXTENSION/" + "goodbye-world-2019")
-                .upload(inputStream, inputStream.available());
-        inputStream = new ByteArrayInputStream(("{\"id\":" + 6 + "}").getBytes());
-        includeExcludeContainer.getBlobClient(MIXED_DATA_PATH + "/json/NO-EXTENSION/" + "goodbye-world-2020")
-                .upload(inputStream, inputStream.available());
-
-        closeInputStreamSilently(inputStream);
+                    try (ByteArrayInputStream inputStream = new ByteArrayInputStream(gzipBytes)) {
+                        bomContainer.getBlobClient(key).upload(inputStream, inputStream.available());
+                    } catch (IOException ex) {
+                        throw new IllegalArgumentException(ex.toString());
+                    }
+                } catch (IOException ex) {
+                    throw new IllegalArgumentException(ex.toString());
+                }
+            }
+        }
     }
 
     static class AzureTestExecutor extends TestExecutor {
@@ -565,6 +350,7 @@
                             queryCount, expectedResultFileCtxs, testFile, actualPath);
             }
         }
+
     }
 
     private static void dropRecreateContainer(String containerName, String definition, String files) {
@@ -627,21 +413,22 @@
         LOGGER.info("Done creating container with data");
     }
 
+    private static void deleteContainersSilently() {
+        deleteContainerSilently(PLAYGROUND_CONTAINER);
+        deleteContainerSilently(FIXED_DATA_CONTAINER);
+        deleteContainerSilently(PUBLIC_ACCESS_CONTAINER);
+        deleteContainerSilently(INCLUDE_EXCLUDE_CONTAINER);
+        deleteContainerSilently(BOM_FILE_CONTAINER);
+    }
+
     private static void deleteContainerSilently(String containerName) {
         LOGGER.info("Deleting container " + containerName);
         try {
             blobServiceClient.deleteBlobContainer(containerName);
         } catch (Exception ex) {
             // Do nothing
+            LOGGER.warn("Ignoring encountered error while deleting container {}", ex.getMessage());
         }
         LOGGER.info("Container " + containerName + " deleted successfully");
     }
-
-    private static void closeInputStreamSilently(InputStream inputStream) {
-        try {
-            inputStream.close();
-        } catch (Exception ex) {
-            LOGGER.error(ex.getMessage());
-        }
-    }
 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-allowed/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-allowed/test.000.ddl.sqlpp
index a665d05..911f6d7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-allowed/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-allowed/test.000.ddl.sqlpp
@@ -28,7 +28,6 @@
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
 ("endpoint"="%azure-endpoint%"),
-("container"="public-access"),
-("definition"="json-data/reviews/single-line/json"),
+("container"="public-access-container"),
 ("format"="json")
 );
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/account-key-missing/test.000.ddl.sqlpp
similarity index 95%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/account-key-missing/test.000.ddl.sqlpp
index ca750fa..5951a99 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/account-key-missing/test.000.ddl.sqlpp
@@ -28,7 +28,6 @@
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
 ("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/account-key-missing/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/account-key-missing/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/account-name-missing/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/account-name-missing/test.000.ddl.sqlpp
index ca750fa..ee2e6bf 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/account-name-missing/test.000.ddl.sqlpp
@@ -27,8 +27,7 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("accountKey"="%azure-accountkey%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/account-name-missing/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/account-name-missing/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-certificate-password-present/test.000.ddl.sqlpp
similarity index 91%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-certificate-password-present/test.000.ddl.sqlpp
index ca750fa..1c24d20 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-certificate-password-present/test.000.ddl.sqlpp
@@ -28,7 +28,8 @@
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
 ("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("accountKey"="%azure-accountkey%"),
+("clientCertificatePassword"="%azure-clientcertificatepassword%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-certificate-password-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-certificate-password-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-certificate-present/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-certificate-present/test.000.ddl.sqlpp
index ca750fa..dcb4e07 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-certificate-present/test.000.ddl.sqlpp
@@ -28,7 +28,8 @@
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
 ("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("accountKey"="%azure-accountkey%"),
+("clientCertificate"="%azure-clientcertificate%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-certificate-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-certificate-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-id-present/test.000.ddl.sqlpp
similarity index 94%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-id-present/test.000.ddl.sqlpp
index ca750fa..e0a627f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-id-present/test.000.ddl.sqlpp
@@ -28,7 +28,8 @@
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
 ("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("accountKey"="%azure-accountkey%"),
+("clientId"="%azure-clientid%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-id-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-id-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-secret-present/test.000.ddl.sqlpp
similarity index 93%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-secret-present/test.000.ddl.sqlpp
index ca750fa..21a8e96 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-secret-present/test.000.ddl.sqlpp
@@ -28,7 +28,8 @@
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
 ("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("accountKey"="%azure-accountkey%"),
+("clientSecret"="%azure-clientsecret%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-secret-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/client-secret-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/managed-identity-id-present/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/managed-identity-id-present/test.000.ddl.sqlpp
index ca750fa..6e50d51 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/managed-identity-id-present/test.000.ddl.sqlpp
@@ -28,7 +28,8 @@
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
 ("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("accountKey"="%azure-accountkey%"),
+("managedIdentityId"="%azure-managedidentityid%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/managed-identity-id-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/managed-identity-id-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/shared-access-signature-present/test.000.ddl.sqlpp
similarity index 93%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/shared-access-signature-present/test.000.ddl.sqlpp
index ca750fa..0c85000 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/shared-access-signature-present/test.000.ddl.sqlpp
@@ -28,7 +28,8 @@
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
 ("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("accountKey"="%azure-accountkey%"),
+("sharedAccessSignature"="%azure-sas%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/shared-access-signature-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/shared-access-signature-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/tenant-id-present/test.000.ddl.sqlpp
similarity index 94%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/tenant-id-present/test.000.ddl.sqlpp
index ca750fa..4c9de24 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/tenant-id-present/test.000.ddl.sqlpp
@@ -28,7 +28,8 @@
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
 ("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("accountKey"="%azure-accountkey%"),
+("tenantId"="%azure-tenantid%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/tenant-id-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key/tenant-id-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/client-certificate-present/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/client-certificate-present/test.000.ddl.sqlpp
index ca750fa..f484dc5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/client-certificate-present/test.000.ddl.sqlpp
@@ -27,8 +27,7 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("clientCertificate"="%azure-clientcertificate%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/client-certificate-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/client-certificate-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/client-secret-present/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/client-secret-present/test.000.ddl.sqlpp
index ca750fa..54dfd17 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/client-secret-present/test.000.ddl.sqlpp
@@ -27,8 +27,7 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("clientSecret"="%azure-clientsecret%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/client-secret-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/client-secret-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/tenant-id-present/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/tenant-id-present/test.000.ddl.sqlpp
index ca750fa..1e9ceb4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/tenant-id-present/test.000.ddl.sqlpp
@@ -27,8 +27,7 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("tenantId"="%azure-tenantid%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/tenant-id-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing/tenant-id-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-missing-and-client-certificate-missing/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-missing-and-client-certificate-missing/test.000.ddl.sqlpp
index ca750fa..2eca2bc 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-missing-and-client-certificate-missing/test.000.ddl.sqlpp
@@ -27,8 +27,8 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("clientId"="%azure-clientid%"),
+("tenantId"="%azure-tenantid%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-missing-and-client-certificate-missing/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-missing-and-client-certificate-missing/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-present-client-certificate-password-present/test.000.ddl.sqlpp
similarity index 86%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-present-client-certificate-password-present/test.000.ddl.sqlpp
index ca750fa..a630f5f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-present-client-certificate-password-present/test.000.ddl.sqlpp
@@ -27,8 +27,10 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("clientId"="%azure-clientid%"),
+("clientSecret"="%azure-clientsecret%"),
+("clientCertificatePassword"="%azure-clientcertificatepassword%"),
+("tenantId"="%azure-tenantid%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-present-client-certificate-password-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-present-client-certificate-password-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-present-client-certificate-present/test.000.ddl.sqlpp
similarity index 87%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-present-client-certificate-present/test.000.ddl.sqlpp
index ca750fa..27d0ff6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-present-client-certificate-present/test.000.ddl.sqlpp
@@ -27,8 +27,10 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("clientId"="%azure-clientid%"),
+("clientSecret"="%azure-clientsecret%"),
+("clientCertificate"="%azure-clientcertificate%"),
+("tenantId"="%azure-tenantid%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-present-client-certificate-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/client-secret-present-client-certificate-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/tenant-id-missing/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/tenant-id-missing/test.000.ddl.sqlpp
index ca750fa..3b917ee 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/tenant-id-missing/test.000.ddl.sqlpp
@@ -27,8 +27,8 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("clientId"="%azure-clientid%"),
+("clientSecret"="%azure-clientsecret%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/tenant-id-missing/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id/tenant-id-missing/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-certificate-password-present/test.000.ddl.sqlpp
similarity index 90%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-certificate-password-present/test.000.ddl.sqlpp
index ca750fa..79ea2533 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-certificate-password-present/test.000.ddl.sqlpp
@@ -27,8 +27,8 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("managedIdentityId"="%azure-managedidentityid%"),
+("clientCertificatePassword"="%azure-clientcertificatepassword%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-certificate-password-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-certificate-password-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-certificate-present/test.000.ddl.sqlpp
similarity index 91%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-certificate-present/test.000.ddl.sqlpp
index ca750fa..7855483 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-certificate-present/test.000.ddl.sqlpp
@@ -27,8 +27,8 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("managedIdentityId"="%azure-managedidentityid%"),
+("clientCertificate"="%azure-clientcertificate%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-certificate-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-certificate-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-id-present/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-id-present/test.000.ddl.sqlpp
index ca750fa..1a4a9a6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-id-present/test.000.ddl.sqlpp
@@ -27,8 +27,8 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("managedIdentityId"="%azure-managedidentityid%"),
+("clientId"="%azure-clientid%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-id-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-id-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-secret-present/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-secret-present/test.000.ddl.sqlpp
index ca750fa..195f02d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-secret-present/test.000.ddl.sqlpp
@@ -27,8 +27,8 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("managedIdentityId"="%azure-managedidentityid%"),
+("clientSecret"="%azure-clientsecret%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-secret-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/client-secret-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/tenant-id-present/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/tenant-id-present/test.000.ddl.sqlpp
index ca750fa..f9c84e9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/tenant-id-present/test.000.ddl.sqlpp
@@ -27,8 +27,8 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("managedIdentityId"="%azure-managedidentityid%"),
+("tenantId"="%azure-tenantid%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/tenant-id-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id/tenant-id-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/no-endpoint/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/no-endpoint/test.000.ddl.sqlpp
index ca750fa..bf0c2a7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/no-endpoint/test.000.ddl.sqlpp
@@ -28,8 +28,7 @@
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
 ("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
-("endpoint"="%azure-endpoint%"),
+("accountKey"="%azure-accountkey%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
 ("format"="json")
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/no-endpoint/test.999.ddl.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/no-endpoint/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-certificate-password-present/test.000.ddl.sqlpp
similarity index 91%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-certificate-password-present/test.000.ddl.sqlpp
index ca750fa..c8be6be 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-certificate-password-present/test.000.ddl.sqlpp
@@ -27,8 +27,8 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("sharedAccessSignature"="%azure-sas%"),
+("clientCertificatePassword"="%azure-clientcertificatepassword%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-certificate-password-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-certificate-password-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-certificate-present/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-certificate-present/test.000.ddl.sqlpp
index ca750fa..953a965 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-certificate-present/test.000.ddl.sqlpp
@@ -27,8 +27,8 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("sharedAccessSignature"="%azure-sas%"),
+("clientCertificate"="%azure-clientcertificate%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-certificate-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-certificate-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-id-present/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-id-present/test.000.ddl.sqlpp
index ca750fa..853abcd 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-id-present/test.000.ddl.sqlpp
@@ -27,8 +27,8 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("sharedAccessSignature"="%azure-sas%"),
+("clientId"="%azure-clientid%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-id-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-id-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-secret-present/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-secret-present/test.000.ddl.sqlpp
index ca750fa..0d165a4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-secret-present/test.000.ddl.sqlpp
@@ -27,8 +27,8 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("sharedAccessSignature"="%azure-sas%"),
+("clientSecret"="%azure-clientsecret%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-secret-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/client-secret-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/managed-identity-id-present/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/managed-identity-id-present/test.000.ddl.sqlpp
index ca750fa..aad45e1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/managed-identity-id-present/test.000.ddl.sqlpp
@@ -27,8 +27,8 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("sharedAccessSignature"="%azure-sas%"),
+("managedIdentityId"="%azure-managedidentityid%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/managed-identity-id-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/managed-identity-id-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/tenant-id-present/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/tenant-id-present/test.000.ddl.sqlpp
index ca750fa..9cdf7e2 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/tenant-id-present/test.000.ddl.sqlpp
@@ -27,8 +27,8 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("sharedAccessSignature"="%azure-sas%"),
+("tenantId"="%azure-tenantid%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/tenant-id-present/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature/tenant-id-present/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.000.ddl.sqlpp
deleted file mode 100644
index a2f680f..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/test.000.ddl.sqlpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-drop dataverse test if exists;
-create dataverse test;
-use test;
-
-drop type test if exists;
-create type test as open {
-};
-
-// bad case: more than one authentication method is provided at once
-drop dataset test if exists;
-CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname-1%"="%azure-credentialsvalue-1%"),
-("%azure-credentialsname-2%"="%azure-credentialsvalue-2%"),
-("endpoint"="%azure-endpoint%"),
-("container"="playground"),
-("definition"="json-data/reviews/single-line/json"),
-("format"="json")
-);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/account-name-and-account-key/test.000.ddl.sqlpp
similarity index 95%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/account-name-and-account-key/test.000.ddl.sqlpp
index ca750fa..b8da522 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/account-name-and-account-key/test.000.ddl.sqlpp
@@ -28,7 +28,7 @@
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
 ("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("accountKey"="%azure-accountkey%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-not-allowed/test.001.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/account-name-and-account-key/test.001.query.sqlpp
similarity index 95%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-not-allowed/test.001.query.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/account-name-and-account-key/test.001.query.sqlpp
index 8ec9cc0..3e09017 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-not-allowed/test.001.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/account-name-and-account-key/test.001.query.sqlpp
@@ -18,4 +18,6 @@
  */
 
 use test;
-select count(*) `count` from test;
\ No newline at end of file
+
+select count(*) `count`
+from test;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/account-name-and-account-key/test.999.ddl.sqlpp
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.099.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/account-name-and-account-key/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/shared-access-signature/test.000.ddl.sqlpp
similarity index 92%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/shared-access-signature/test.000.ddl.sqlpp
index ca750fa..d106242 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.000.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/shared-access-signature/test.000.ddl.sqlpp
@@ -27,8 +27,7 @@
 
 drop dataset test if exists;
 CREATE EXTERNAL DATASET test(test) USING AZUREBLOB (
-("accountName"="%azure-accountname%"),
-("%azure-credentialsname%"="%azure-credentialsvalue%"),
+("sharedAccessSignature"="%azure-sas%"),
 ("endpoint"="%azure-endpoint%"),
 ("container"="playground"),
 ("definition"="json-data/reviews/single-line/json"),
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-not-allowed/test.001.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/shared-access-signature/test.001.query.sqlpp
similarity index 95%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-not-allowed/test.001.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/shared-access-signature/test.001.query.sqlpp
index 8ec9cc0..3e09017 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-not-allowed/test.001.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/shared-access-signature/test.001.query.sqlpp
@@ -18,4 +18,6 @@
  */
 
 use test;
-select count(*) `count` from test;
\ No newline at end of file
+
+select count(*) `count`
+from test;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.099.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/shared-access-signature/test.999.ddl.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.099.ddl.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/shared-access-signature/test.999.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.001.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.001.query.sqlpp
deleted file mode 100644
index 8ec9cc0..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/test.001.query.sqlpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-use test;
-select count(*) `count` from test;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-allowed/result.001.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-allowed/result.001.adm
index 187a8cb..6704fc0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-allowed/result.001.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/azure_blob_storage/auth-methods/anonymous-no-auth-public-access-allowed/result.001.adm
@@ -1 +1 @@
-{ "count": 100 }
\ No newline at end of file
+{ "count": 20 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/result.001.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/account-name-and-account-key/result.001.adm
similarity index 100%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/result.001.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/account-name-and-account-key/result.001.adm
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/result.001.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/shared-access-signature/result.001.adm
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/result.001.adm
rename to asterixdb/asterix-app/src/test/resources/runtimets/results/external-dataset/azure_blob_storage/auth-methods/valid-auth-methods/shared-access-signature/result.001.adm
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_azure_blob_storage.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_azure_blob_storage.xml
index ae3b2aa..e94132d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_azure_blob_storage.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_azure_blob_storage.xml
@@ -19,71 +19,196 @@
  !-->
 <test-suite xmlns="urn:xml.testframework.asterix.apache.org" ResultOffsetPath="results" QueryOffsetPath="queries_sqlpp" QueryFileExtension=".sqlpp">
   <test-group name="authentication">
-    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods">
-      <compilation-unit name="valid-auth-methods">
-        <placeholder name="azureblob-credentialsname" value="accountKey" />
-        <placeholder name="azureblob-credentialsvalue" value="%azure-accountkey%" />
-        <output-dir compare="Text">valid-auth-methods</output-dir>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/valid-auth-methods">
+      <compilation-unit name="account-name-and-account-key">
+        <output-dir compare="Clean-JSON">account-name-and-account-key</output-dir>
       </compilation-unit>
     </test-case>
-    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods">
-      <compilation-unit name="valid-auth-methods">
-        <placeholder name="azureblob-credentialsname" value="sharedAccessSignature" />
-        <placeholder name="azureblob-credentialsvalue" value="%azure-sas%" />
-        <output-dir compare="Text">valid-auth-methods</output-dir>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/valid-auth-methods">
+      <compilation-unit name="shared-access-signature">
+        <output-dir compare="Clean-JSON">shared-access-signature</output-dir>
       </compilation-unit>
     </test-case>
-    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods">
-      <compilation-unit name="valid-auth-methods">
-        <placeholder name="azureblob-credentialsname" value="connectionString" />
-        <placeholder name="azureblob-credentialsvalue" value="%azure-connectionstringaccountkey%" />
-        <output-dir compare="Text">valid-auth-methods</output-dir>
+
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods">
+      <compilation-unit name="no-endpoint">
+        <output-dir compare="Clean-JSON">no-endpoint</output-dir>
+        <expected-error>Parameter(s) endpoint must be specified</expected-error>
       </compilation-unit>
     </test-case>
-    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods">
-      <compilation-unit name="valid-auth-methods">
-        <placeholder name="azureblob-credentialsname" value="connectionString" />
-        <placeholder name="azureblob-credentialsvalue" value="%azure-connectionstringsas%" />
-        <output-dir compare="Text">valid-auth-methods</output-dir>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key">
+      <compilation-unit name="account-key-missing">
+        <output-dir compare="Clean-JSON">account-key-missing</output-dir>
+        <expected-error>Parameter 'accountKey' is required if 'accountName' is provided</expected-error>
       </compilation-unit>
     </test-case>
-    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods">
-      <compilation-unit name="invalid-auth-methods">
-        <placeholder name="azureblob-credentialsname-1" value="accountKey" />
-        <placeholder name="azureblob-credentialsvalue-1" value="%azure-accountkey%" />
-        <placeholder name="azureblob-credentialsname-2" value="connectionString" />
-        <placeholder name="azureblob-credentialsvalue-2" value="%azure-connectionstringaccountkey%" />
-        <output-dir compare="Text">invalid-auth-methods</output-dir>
-        <expected-error>ASX1138: Only a single authentication method is allowed: connectionString, accountName &amp; accountKey, or accountName &amp; sharedAccessSignature</expected-error>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key">
+      <compilation-unit name="account-name-missing">
+        <output-dir compare="Clean-JSON">account-name-missing</output-dir>
+        <expected-error>Parameter 'accountName' is required if 'accountKey' is provided</expected-error>
       </compilation-unit>
     </test-case>
-    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods">
-      <compilation-unit name="invalid-auth-methods">
-        <placeholder name="azureblob-credentialsname-1" value="sharedAccessSignature" />
-        <placeholder name="azureblob-credentialsvalue-1" value="%azure-sas%" />
-        <placeholder name="azureblob-credentialsname-2" value="connectionString" />
-        <placeholder name="azureblob-credentialsvalue-2" value="%azure-connectionstringaccountkey%" />
-        <output-dir compare="Text">invalid-auth-methods</output-dir>
-        <expected-error>ASX1138: Only a single authentication method is allowed: connectionString, accountName &amp; accountKey, or accountName &amp; sharedAccessSignature</expected-error>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key">
+      <compilation-unit name="client-certificate-password-present">
+        <output-dir compare="Clean-JSON">client-certificate-password-present</output-dir>
+        <expected-error>Parameter 'clientCertificatePassword' is not allowed if 'accountKey' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key">
+      <compilation-unit name="client-certificate-present">
+        <output-dir compare="Clean-JSON">client-certificate-present</output-dir>
+        <expected-error>Parameter 'clientCertificate' is not allowed if 'accountKey' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key">
+      <compilation-unit name="client-id-present">
+        <output-dir compare="Clean-JSON">client-id-present</output-dir>
+        <expected-error>Parameter 'clientId' is not allowed if 'accountKey' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key">
+      <compilation-unit name="client-secret-present">
+        <output-dir compare="Clean-JSON">client-secret-present</output-dir>
+        <expected-error>Parameter 'clientSecret' is not allowed if 'accountKey' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key">
+      <compilation-unit name="managed-identity-id-present">
+        <output-dir compare="Clean-JSON">managed-identity-id-present</output-dir>
+        <expected-error>Parameter 'managedIdentityId' is not allowed if 'accountKey' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key">
+      <compilation-unit name="shared-access-signature-present">
+        <output-dir compare="Clean-JSON">shared-access-signature-present</output-dir>
+        <expected-error>Parameter 'sharedAccessSignature' is not allowed if 'accountKey' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/account-name-and-account-key">
+      <compilation-unit name="tenant-id-present">
+        <output-dir compare="Clean-JSON">tenant-id-present</output-dir>
+        <expected-error>Parameter 'tenantId' is not allowed if 'accountKey' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature">
+      <compilation-unit name="client-certificate-password-present">
+        <output-dir compare="Clean-JSON">client-certificate-password-present</output-dir>
+        <expected-error>Parameter 'clientCertificatePassword' is not allowed if 'sharedAccessSignature' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature">
+      <compilation-unit name="client-certificate-present">
+        <output-dir compare="Clean-JSON">client-certificate-present</output-dir>
+        <expected-error>Parameter 'clientCertificate' is not allowed if 'sharedAccessSignature' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature">
+      <compilation-unit name="client-id-present">
+        <output-dir compare="Clean-JSON">client-id-present</output-dir>
+        <expected-error>Parameter 'clientId' is not allowed if 'sharedAccessSignature' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature">
+      <compilation-unit name="client-secret-present">
+        <output-dir compare="Clean-JSON">client-secret-present</output-dir>
+        <expected-error>Parameter 'clientSecret' is not allowed if 'sharedAccessSignature' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature">
+      <compilation-unit name="managed-identity-id-present">
+        <output-dir compare="Clean-JSON">managed-identity-id-present</output-dir>
+        <expected-error>Parameter 'managedIdentityId' is not allowed if 'sharedAccessSignature' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/shared-access-signature">
+      <compilation-unit name="tenant-id-present">
+        <output-dir compare="Clean-JSON">tenant-id-present</output-dir>
+        <expected-error>Parameter 'tenantId' is not allowed if 'sharedAccessSignature' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id">
+      <compilation-unit name="client-certificate-password-present">
+        <output-dir compare="Clean-JSON">client-certificate-password-present</output-dir>
+        <expected-error>Parameter 'clientCertificatePassword' is not allowed if 'managedIdentityId' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id">
+      <compilation-unit name="client-certificate-present">
+        <output-dir compare="Clean-JSON">client-certificate-present</output-dir>
+        <expected-error>Parameter 'clientCertificate' is not allowed if 'managedIdentityId' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id">
+      <compilation-unit name="client-id-present">
+        <output-dir compare="Clean-JSON">client-id-present</output-dir>
+        <expected-error>Parameter 'clientId' is not allowed if 'managedIdentityId' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id">
+      <compilation-unit name="client-secret-present">
+        <output-dir compare="Clean-JSON">client-secret-present</output-dir>
+        <expected-error>Parameter 'clientSecret' is not allowed if 'managedIdentityId' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/managed-identity-id">
+      <compilation-unit name="tenant-id-present">
+        <output-dir compare="Clean-JSON">tenant-id-present</output-dir>
+        <expected-error>Parameter 'tenantId' is not allowed if 'managedIdentityId' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id">
+      <compilation-unit name="client-secret-missing-and-client-certificate-missing">
+        <output-dir compare="Clean-JSON">client-secret-missing-and-client-certificate-missing</output-dir>
+        <expected-error>Parameter 'clientSecret' or 'clientCertificate' is required if 'clientId' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id">
+      <compilation-unit name="client-secret-present-client-certificate-password-present">
+        <output-dir compare="Clean-JSON">client-secret-present-client-certificate-password-present</output-dir>
+        <expected-error>Parameter 'clientCertificatePassword' is not allowed if 'clientSecret' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id">
+      <compilation-unit name="client-secret-present-client-certificate-present">
+        <output-dir compare="Clean-JSON">client-secret-present-client-certificate-present</output-dir>
+        <expected-error>The parameters 'clientSecret' and 'clientCertificate' cannot be provided at the same time</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id">
+      <compilation-unit name="tenant-id-missing">
+        <output-dir compare="Clean-JSON">tenant-id-missing</output-dir>
+        <expected-error>Parameter 'tenantId' is required if 'clientId' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing">
+      <compilation-unit name="client-certificate-present">
+        <output-dir compare="Clean-JSON">client-certificate-present</output-dir>
+        <expected-error>Parameter 'clientCertificate' is not allowed if 'sharedAccessSignature' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing">
+      <compilation-unit name="client-secret-present">
+        <output-dir compare="Clean-JSON">client-secret-present</output-dir>
+        <expected-error>Parameter 'clientSecret' is not allowed if 'sharedAccessSignature' is provided</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods/invalid-auth-methods/client-id-missing">
+      <compilation-unit name="tenant-id-present">
+        <output-dir compare="Clean-JSON">tenant-id-present</output-dir>
+        <expected-error>Parameter 'tenantId' is not allowed if 'sharedAccessSignature' is provided</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="external-dataset/azure_blob_storage/auth-methods">
       <compilation-unit name="anonymous-no-auth-public-access-allowed">
-        <output-dir compare="Text">anonymous-no-auth-public-access-allowed</output-dir>
+        <output-dir compare="Clean-JSON">anonymous-no-auth-public-access-allowed</output-dir>
       </compilation-unit>
     </test-case>
     <test-case FilePath="external-dataset/azure_blob_storage/auth-methods">
       <compilation-unit name="anonymous-no-auth-public-access-not-allowed">
-        <output-dir compare="Text">anonymous-no-auth-public-access-not-allowed</output-dir>
+        <output-dir compare="Clean-JSON">anonymous-no-auth-public-access-not-allowed</output-dir>
         <expected-error>Server failed to authenticate the request. Make sure the value of the Authorization header is formed correctly including the signature.</expected-error>
       </compilation-unit>
     </test-case>
-    <test-case FilePath="external-dataset/azure_blob_storage/auth-methods">
-      <compilation-unit name="anonymous-no-auth-no-endpoint">
-        <output-dir compare="Text">anonymous-no-auth-no-endpoint</output-dir>
-        <expected-error>ASX1151: No authentication credentials provided, 'endpoint' field is required for anonymous access</expected-error>
-      </compilation-unit>
-    </test-case>
   </test-group>
   <test-group name="external-dataset">
     <test-case FilePath="external-dataset">
@@ -139,12 +264,12 @@
       </compilation-unit>
     </test-case>
     <!-- Parquet Tests Start -->
-    <test-case FilePath="external-dataset">
-      <compilation-unit name="common/parquet/object-concat">
-        <placeholder name="adapter" value="AZUREBLOB" />
-        <output-dir compare="Text">common/parquet/object-concat</output-dir>
-      </compilation-unit>
-    </test-case>
+<!--    <test-case FilePath="external-dataset">-->
+<!--      <compilation-unit name="common/parquet/object-concat">-->
+<!--        <placeholder name="adapter" value="AZUREBLOB" />-->
+<!--        <output-dir compare="Text">common/parquet/object-concat</output-dir>-->
+<!--      </compilation-unit>-->
+<!--    </test-case>-->
     <!-- Parquet Tests End -->
     <test-case FilePath="external-dataset">
       <compilation-unit name="common/empty-string-definition">
@@ -180,7 +305,7 @@
         <placeholder name="adapter" value="AZUREBLOB" />
         <placeholder name="endpoint" value="http://^invalid-endpoint^" />
         <output-dir compare="Text">common/invalid-endpoint</output-dir>
-        <expected-error>External source error. java.net.URISyntaxException: Illegal character in authority at index 7: http://^invalid-endpoint^</expected-error>
+        <expected-error>Illegal character in authority at index 7: http://^invalid-endpoint^</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="external-dataset">
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_azure_blob_storage_one_partition.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_azure_blob_storage_one_partition.xml
index 32a56b2..bfd2e31 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_azure_blob_storage_one_partition.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_azure_blob_storage_one_partition.xml
@@ -49,17 +49,17 @@
         <output-dir compare="Text">common/csv-warnings</output-dir>
         <expected-warn>Parsing error at data_dir/no_h_missing_fields.csv line 2 field 3: some fields are missing</expected-warn>
         <expected-warn>Parsing error at data_dir/no_h_no_closing_q.csv line 2 field 0: malformed input record ended abruptly</expected-warn>
-        <expected-warn>Parsing error at  line 2 field 0: malformed input record ended abruptly</expected-warn>
+        <expected-warn>Parsing error at line 2 field 0: malformed input record ended abruptly</expected-warn>
 
-        <expected-warn>Parsing error at  line 5 field 3: invalid value</expected-warn>
-        <expected-warn>Parsing error at  line 2 field 1: invalid value</expected-warn>
-        <expected-warn>Parsing error at  line 11 field 1: invalid value</expected-warn>
-        <expected-warn>Parsing error at  line 3 field 1: invalid value</expected-warn>
-        <expected-warn>Parsing error at  line 4 field 1: invalid value</expected-warn>
-        <expected-warn>Parsing error at  line 7 field 7: invalid value</expected-warn>
-        <expected-warn>Parsing error at  line 13 field 7: invalid value</expected-warn>
-        <expected-warn>Parsing error at  line 12 field 3: invalid value</expected-warn>
-        <expected-warn>Parsing error at  line 9 field 6: a quote should be in the beginning</expected-warn>
+        <expected-warn>Parsing error at line 5 field 3: invalid value</expected-warn>
+        <expected-warn>Parsing error at line 2 field 1: invalid value</expected-warn>
+        <expected-warn>Parsing error at line 11 field 1: invalid value</expected-warn>
+        <expected-warn>Parsing error at line 3 field 1: invalid value</expected-warn>
+        <expected-warn>Parsing error at line 4 field 1: invalid value</expected-warn>
+        <expected-warn>Parsing error at line 7 field 7: invalid value</expected-warn>
+        <expected-warn>Parsing error at line 13 field 7: invalid value</expected-warn>
+        <expected-warn>Parsing error at line 12 field 3: invalid value</expected-warn>
+        <expected-warn>Parsing error at line 9 field 6: a quote should be in the beginning</expected-warn>
 
         <expected-warn>Parsing error at data_dir/h_invalid_values.csv line 5 field 3: invalid value</expected-warn>
         <expected-warn>Parsing error at data_dir/h_invalid_values.csv line 2 field 1: invalid value</expected-warn>
diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml
index 30a987e..95ff786 100644
--- a/asterixdb/pom.xml
+++ b/asterixdb/pom.xml
@@ -80,6 +80,9 @@
     <shim.stage>none</shim.stage>
     <pytestlib.stage>none</pytestlib.stage>
     <skip-npm-touch.stage>none</skip-npm-touch.stage>
+    <azurite.npm.install.stage>none</azurite.npm.install.stage>
+    <azurite.install.stage>none</azurite.install.stage>
+    <azurite.stage>none</azurite.stage>
 
     <!-- Versions under dependencymanagement or used in many projects via properties -->
     <algebricks.version>0.3.9-SNAPSHOT</algebricks.version>
@@ -726,6 +729,22 @@
       </properties>
     </profile>
     <profile>
+      <id>azurite-tests</id>
+      <activation>
+        <os>
+          <family>unix</family>
+        </os>
+        <property>
+          <name>!skipTests</name>
+        </property>
+      </activation>
+      <properties>
+        <azurite.npm.install.stage>process-classes</azurite.npm.install.stage>
+        <azurite.install.stage>generate-test-resources</azurite.install.stage>
+        <azurite.stage>process-test-resources</azurite.stage>
+      </properties>
+    </profile>
+    <profile>
       <id>skip-npm</id>
       <activation>
         <property>
diff --git a/hyracks-fullstack/pom.xml b/hyracks-fullstack/pom.xml
index 5ed10e8..fcd7d6c 100644
--- a/hyracks-fullstack/pom.xml
+++ b/hyracks-fullstack/pom.xml
@@ -156,6 +156,12 @@
         <version>${netty.version}</version>
       </dependency>
       <dependency>
+        <groupId>io.netty</groupId>
+        <artifactId>netty-all</artifactId>
+        <version>${netty.version}</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.13.2</version>