diff --git a/sdk/spring/azure-spring-boot-test-keyvault-certificate/CHANGELOG.md b/sdk/spring/azure-spring-boot-test-keyvault-certificate/CHANGELOG.md
new file mode 100644
index 0000000000000..46314a46d1801
--- /dev/null
+++ b/sdk/spring/azure-spring-boot-test-keyvault-certificate/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Release History
+
+## 1.0.0 (Unreleased)
+
+
diff --git a/sdk/spring/azure-spring-boot-test-keyvault-certificate/README.md b/sdk/spring/azure-spring-boot-test-keyvault-certificate/README.md
new file mode 100644
index 0000000000000..bc18d9e9c993c
--- /dev/null
+++ b/sdk/spring/azure-spring-boot-test-keyvault-certificate/README.md
@@ -0,0 +1,8 @@
+# Azure Spring Boot Integration tests client library for Java
+
+## Key concepts
+## Getting started
+## Examples
+## Troubleshooting
+## Next steps
+## Contributing
diff --git a/sdk/spring/azure-spring-boot-test-keyvault-certificate/pom.xml b/sdk/spring/azure-spring-boot-test-keyvault-certificate/pom.xml
new file mode 100644
index 0000000000000..01896f9ca854f
--- /dev/null
+++ b/sdk/spring/azure-spring-boot-test-keyvault-certificate/pom.xml
@@ -0,0 +1,41 @@
+
+
+
+ 4.0.0
+
+
+ com.azure.spring
+ azure-spring-boot-test-parent
+ 1.0.0
+ ../azure-spring-boot-test-parent
+
+
+ com.azure.spring
+ azure-spring-boot-test-keyvault-certificate
+ 1.0.0
+
+
+
+ com.azure.spring
+ azure-spring-boot-starter-keyvault-certificates
+ 3.0.0-beta.8
+
+
+ com.azure.spring
+ azure-spring-boot-test-core
+ 1.0.0
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
diff --git a/sdk/spring/azure-spring-boot-test-keyvault-certificate/src/test/java/com/azure/spring/test/keyvault/KeyVaultCertificateIT.java b/sdk/spring/azure-spring-boot-test-keyvault-certificate/src/test/java/com/azure/spring/test/keyvault/KeyVaultCertificateIT.java
new file mode 100644
index 0000000000000..5395f3cbcf1bc
--- /dev/null
+++ b/sdk/spring/azure-spring-boot-test-keyvault-certificate/src/test/java/com/azure/spring/test/keyvault/KeyVaultCertificateIT.java
@@ -0,0 +1,148 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+package com.azure.spring.test.keyvault;
+
+import com.azure.security.keyvault.jca.KeyVaultLoadStoreParameter;
+import com.azure.spring.test.AppRunner;
+import com.azure.spring.test.keyvault.app.DummyApp;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.ssl.PrivateKeyDetails;
+import org.apache.http.ssl.PrivateKeyStrategy;
+import org.apache.http.ssl.SSLContexts;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
+
+import javax.net.ssl.SSLContext;
+import java.net.Socket;
+import java.security.KeyStore;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import static com.azure.spring.test.keyvault.PropertyConvertorUtils.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class KeyVaultCertificateIT {
+
+ private RestTemplate restTemplate;
+
+ private static AppRunner app;
+
+ @BeforeAll
+ public static void setEnvironmentProperty() {
+ PropertyConvertorUtils.putEnvironmentPropertyToSystemProperty(
+ Arrays.asList("CERTIFICATE_AZURE_KEYVAULT_URI",
+ "CERTIFICATE_AZURE_KEYVAULT_TENANT_ID",
+ "CERTIFICATE_AZURE_KEYVAULT_CLIENT_ID",
+ "CERTIFICATE_AZURE_KEYVAULT_CLIENT_SECRET")
+ );
+ }
+
+ public static KeyStore getAzureKeyVaultKeyStore() throws Exception {
+ KeyStore trustStore = KeyStore.getInstance("AzureKeyVault");
+ KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter(
+ System.getProperty("azure.keyvault.uri"),
+ System.getProperty("azure.keyvault.tenant-id"),
+ System.getProperty("azure.keyvault.client-id"),
+ System.getProperty("azure.keyvault.client-secret"));
+ trustStore.load(parameter);
+ return trustStore;
+ }
+
+ private void setRestTemplate(SSLContext sslContext) {
+ SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext,
+ (hostname, session) -> true);
+ CloseableHttpClient httpClient = HttpClients.custom()
+ .setSSLSocketFactory(socketFactory)
+ .build();
+ HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
+
+ restTemplate = new RestTemplate(requestFactory);
+ }
+
+ public void setRestTemplate() throws Exception {
+ KeyStore keyStore = getAzureKeyVaultKeyStore();
+ SSLContext sslContext = SSLContexts.custom()
+ .loadTrustMaterial(keyStore, null)
+ .build();
+ setRestTemplate(sslContext);
+ }
+
+ public void setMTLSRestTemplate() throws Exception {
+ KeyStore keyStore = getAzureKeyVaultKeyStore();
+ SSLContext sslContext = SSLContexts.custom()
+ .loadTrustMaterial(keyStore, null)
+ .loadKeyMaterial(keyStore, "".toCharArray(), new ClientPrivateKeyStrategy())
+ .build();
+ setRestTemplate(sslContext);
+ }
+
+ public void startAppRunner(Map properties) {
+ app = new AppRunner(DummyApp.class);
+ properties.forEach(app::property);
+ app.start();
+ }
+
+ public Map getDefaultMap() {
+ Map properties = new HashMap<>();
+ properties.put("azure.keyvault.uri", AZURE_KEYVAULT_URI);
+ properties.put("azure.keyvault.client-id", SPRING_CLIENT_ID);
+ properties.put("azure.keyvault.client-secret", SPRING_CLIENT_SECRET);
+ properties.put("azure.keyvault.tenant-id", SPRING_TENANT_ID);
+ properties.put("server.ssl.key-alias", "myalias");
+ properties.put("server.ssl.key-store-type", "AzureKeyVault");
+ return properties;
+ }
+
+ /**
+ * Test the Spring Boot Health indicator integration.
+ */
+ @Test
+ public void testSpringBootWebApplication() throws Exception {
+ Map properties = getDefaultMap();
+ startAppRunner(properties);
+
+ setRestTemplate();
+ sendRequest();
+ }
+
+ @AfterAll
+ public static void destroy() {
+ app.close();
+ }
+
+ /**
+ * Test the Spring Boot Health indicator integration.
+ */
+ @Test
+ public void testSpringBootMTLSWebApplication() throws Exception {
+
+ Map properties = getDefaultMap();
+ properties.put("server.ssl.client-auth", "need");
+ properties.put("server.ssl.trust-store-type", "AzureKeyVault");
+
+ startAppRunner(properties);
+
+ setMTLSRestTemplate();
+ sendRequest();
+ }
+
+ public void sendRequest() {
+ final String response = restTemplate.getForObject(
+ "https://localhost:" + app.port() + "", String.class);
+ assertEquals(response, "Hello World");
+ }
+
+ private static class ClientPrivateKeyStrategy implements PrivateKeyStrategy {
+ @Override
+ public String chooseAlias(Map map, Socket socket) {
+ return "myalias"; // It should be your certificate alias used in client-side
+ }
+ }
+
+}
diff --git a/sdk/spring/azure-spring-boot-test-keyvault-certificate/src/test/java/com/azure/spring/test/keyvault/PropertyConvertorUtils.java b/sdk/spring/azure-spring-boot-test-keyvault-certificate/src/test/java/com/azure/spring/test/keyvault/PropertyConvertorUtils.java
new file mode 100644
index 0000000000000..45a33687476e5
--- /dev/null
+++ b/sdk/spring/azure-spring-boot-test-keyvault-certificate/src/test/java/com/azure/spring/test/keyvault/PropertyConvertorUtils.java
@@ -0,0 +1,29 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.spring.test.keyvault;
+
+import java.util.List;
+
+public class PropertyConvertorUtils {
+
+ public static final String CERTIFICATE_PREFIX = "certificate_";
+
+ public static final String AZURE_KEYVAULT_URI = System.getenv("CERTIFICATE_AZURE_KEYVAULT_URI");
+ public static final String SPRING_CLIENT_ID = System.getenv("CERTIFICATE_AZURE_KEYVAULT_CLIENT_ID");
+ public static final String SPRING_CLIENT_SECRET = System.getenv("CERTIFICATE_AZURE_KEYVAULT_CLIENT_SECRET");
+ public static final String SPRING_TENANT_ID = System.getenv("CERTIFICATE_AZURE_KEYVAULT_TENANT_ID");
+ public static void putEnvironmentPropertyToSystemProperty(List key) {
+ key.forEach(
+ environmentPropertyKey -> {
+ String value = System.getenv(environmentPropertyKey);
+ String systemPropertyKey = environmentPropertyKey
+ .toLowerCase()
+ .replaceFirst(CERTIFICATE_PREFIX, "")
+ .replaceFirst("azure_keyvault_", "azure.keyvault.")
+ .replaceAll("_", "-");
+ System.getProperties().put(systemPropertyKey, value);
+ }
+ );
+ }
+}
diff --git a/sdk/spring/azure-spring-boot-test-keyvault-certificate/src/test/java/com/azure/spring/test/keyvault/app/DummyApp.java b/sdk/spring/azure-spring-boot-test-keyvault-certificate/src/test/java/com/azure/spring/test/keyvault/app/DummyApp.java
new file mode 100644
index 0000000000000..f6bd21361970a
--- /dev/null
+++ b/sdk/spring/azure-spring-boot-test-keyvault-certificate/src/test/java/com/azure/spring/test/keyvault/app/DummyApp.java
@@ -0,0 +1,19 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.spring.test.keyvault.app;
+
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@SpringBootApplication
+public class DummyApp {
+
+ @GetMapping("/")
+ public String helloWorld() {
+ return "Hello World";
+ }
+
+}
diff --git a/sdk/spring/azure-spring-boot-test-keyvault-certificate/test-resources.json b/sdk/spring/azure-spring-boot-test-keyvault-certificate/test-resources.json
new file mode 100644
index 0000000000000..ed27053c28670
--- /dev/null
+++ b/sdk/spring/azure-spring-boot-test-keyvault-certificate/test-resources.json
@@ -0,0 +1,316 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "parameters": {
+ "baseName": {
+ "type": "String"
+ },
+ "tenantId": {
+ "type": "String",
+ "defaultValue": "[subscription().tenantId]"
+ },
+ "testApplicationOid": {
+ "type": "String"
+ },
+ "endpointSuffix": {
+ "type": "String",
+ "defaultValue": "vault.azure.net"
+ },
+ "testApplicationId": {
+ "type": "String"
+ },
+ "testApplicationSecret": {
+ "type": "String"
+ },
+ "enabledForDeployment": {
+ "type": "bool",
+ "defaultValue": false,
+ "allowedValues": [
+ true,
+ false
+ ]
+ },
+ "enabledForDiskEncryption": {
+ "type": "bool",
+ "defaultValue": false,
+ "allowedValues": [
+ true,
+ false
+ ]
+ },
+ "enabledForTemplateDeployment": {
+ "type": "bool",
+ "defaultValue": false,
+ "allowedValues": [
+ true,
+ false
+ ]
+ },
+ "skuName": {
+ "type": "string",
+ "defaultValue": "Standard",
+ "allowedValues": [
+ "Standard",
+ "Premium"
+ ]
+ },
+ "identityName": {
+ "type": "string",
+ "defaultValue": "identityForKeyVault"
+ },
+ "certificateName": {
+ "type": "string",
+ "defaultValue": "myalias"
+ },
+ "subjectName": {
+ "type": "string",
+ "defaultValue": "CN=contoso.com"
+ },
+ "utcValue": {
+ "type": "string",
+ "defaultValue": "[utcNow()]"
+ }
+ },
+ "variables": {
+ "keyVaultName": "[parameters('baseName')]",
+ "azureKeyVaultUrl": "[format('https://{0}.{1}/', parameters('baseName'), parameters('endpointSuffix'))]",
+ "bootstrapRoleAssignmentId": "[guid(concat(resourceGroup().id, 'contributor'))]",
+ "contributorRoleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]"
+ },
+ "resources": [
+ {
+ "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
+ "apiVersion": "2018-11-30",
+ "name": "[parameters('identityName')]",
+ "location": "[resourceGroup().location]"
+ },
+ {
+ "type": "Microsoft.Authorization/roleAssignments",
+ "apiVersion": "2018-09-01-preview",
+ "name": "[variables('bootstrapRoleAssignmentId')]",
+ "dependsOn": [
+ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identityName'))]"
+ ],
+ "properties": {
+ "roleDefinitionId": "[variables('contributorRoleDefinitionId')]",
+ "principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identityName')), '2018-11-30').principalId]",
+ "scope": "[resourceGroup().id]",
+ "principalType": "ServicePrincipal"
+ }
+ },
+ {
+ "type": "Microsoft.KeyVault/vaults",
+ "apiVersion": "2018-02-14",
+ "name": "[parameters('baseName')]",
+ "location": "[resourceGroup().location]",
+ "properties": {
+ "sku": {
+ "family": "A",
+ "name": "standard"
+ },
+ "tenantId": "[parameters('tenantId')]",
+ "accessPolicies": [
+ {
+ "tenantId": "[parameters('tenantId')]",
+ "objectId": "[parameters('testApplicationOid')]",
+ "permissions": {
+ "keys": [
+ "backup",
+ "create",
+ "decrypt",
+ "delete",
+ "encrypt",
+ "get",
+ "import",
+ "list",
+ "purge",
+ "recover",
+ "restore",
+ "sign",
+ "unwrapKey",
+ "update",
+ "verify",
+ "wrapKey"
+ ],
+ "secrets": [
+ "backup",
+ "delete",
+ "get",
+ "list",
+ "purge",
+ "recover",
+ "restore",
+ "set"
+ ],
+ "certificates": [
+ "backup",
+ "create",
+ "delete",
+ "deleteissuers",
+ "get",
+ "getissuers",
+ "import",
+ "list",
+ "listissuers",
+ "managecontacts",
+ "manageissuers",
+ "purge",
+ "recover",
+ "restore",
+ "setissuers",
+ "update"
+ ]
+ }
+ },
+ {
+ "objectId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identityName')), '2018-11-30').principalId]",
+ "tenantId": "[parameters('tenantId')]",
+ "permissions": {
+ "keys": [
+ "backup",
+ "create",
+ "decrypt",
+ "delete",
+ "encrypt",
+ "get",
+ "import",
+ "list",
+ "purge",
+ "recover",
+ "restore",
+ "sign",
+ "unwrapKey",
+ "update",
+ "verify",
+ "wrapKey"
+ ],
+ "secrets": [
+ "backup",
+ "delete",
+ "get",
+ "list",
+ "purge",
+ "recover",
+ "restore",
+ "set"
+ ],
+ "certificates": [
+ "backup",
+ "create",
+ "delete",
+ "deleteissuers",
+ "get",
+ "getissuers",
+ "import",
+ "list",
+ "listissuers",
+ "managecontacts",
+ "manageissuers",
+ "purge",
+ "recover",
+ "restore",
+ "setissuers",
+ "update"
+ ]
+ }
+ }
+ ],
+ "enabledForDeployment": "[parameters('enabledForDeployment')]",
+ "enabledForDiskEncryption": "[parameters('enabledForDiskEncryption')]",
+ "enabledForTemplateDeployment": "[parameters('enabledForTemplateDeployment')]",
+ "enableSoftDelete": true,
+ "networkAcls": {
+ "defaultAction": "Allow",
+ "bypass": "AzureServices"
+ }
+ }
+ },
+ {
+ "type": "Microsoft.Resources/deploymentScripts",
+ "apiVersion": "2020-10-01",
+ "name": "createAddCertificate",
+ "location": "[resourceGroup().location]",
+ "dependsOn": [
+ "[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]",
+ "[resourceId('Microsoft.Authorization/roleAssignments', variables('bootstrapRoleAssignmentId'))]"
+ ],
+ "identity": {
+ "type": "UserAssigned",
+ "userAssignedIdentities": {
+ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identityName'))]": {
+ }
+ }
+ },
+ "kind": "AzurePowerShell",
+ "properties": {
+ "forceUpdateTag": "[parameters('utcValue')]",
+ "azPowerShellVersion": "5.0",
+ "timeout": "PT30M",
+ "arguments": "[format(' -vaultName {0} -certificateName {1} -subjectName {2}', variables('keyVaultName'), parameters('certificateName'), parameters('subjectName'))]",
+ "scriptContent": "
+ param(
+ [string] [Parameter(Mandatory=$true)] $vaultName,
+ [string] [Parameter(Mandatory=$true)] $certificateName,
+ [string] [Parameter(Mandatory=$true)] $subjectName
+ )
+
+ $ErrorActionPreference = 'Stop'
+ $DeploymentScriptOutputs = @{}
+
+ $policy = New-AzKeyVaultCertificatePolicy -SubjectName $subjectName -IssuerName Self -ValidityInMonths 12 -Verbose
+
+ Add-AzKeyVaultCertificate -VaultName $vaultName -Name $certificateName -CertificatePolicy $policy -Verbose
+
+ $newCert = Get-AzKeyVaultCertificate -VaultName $vaultName -Name $certificateName
+
+ $tries = 0
+ do {
+ Write-Host 'Waiting for certificate creation completion...'
+ Start-Sleep -Seconds 10
+ $operation = Get-AzKeyVaultCertificateOperation -VaultName $vaultName -Name $certificateName
+ $tries++
+
+ if ($operation.Status -eq 'failed') {
+ throw 'Creating certificate $certificateName in vault $vaultName failed with error $($operation.ErrorMessage)'
+ }
+
+ if ($tries -gt 120) {
+ throw 'Timed out waiting for creation of certificate $certificateName in vault $vaultName'
+ }
+ } while ($operation.Status -ne 'completed')
+
+ $DeploymentScriptOutputs['certThumbprint'] = $newCert.Thumbprint
+ $newCert | Out-String
+ ",
+ "cleanupPreference": "OnSuccess",
+ "retentionInterval": "P1D"
+ }
+ }
+ ],
+ "outputs": {
+ "CERTIFICATE_AZURE_KEYVAULT_ENDPOINT": {
+ "type": "string",
+ "value": "[variables('azureKeyVaultUrl')]"
+ },
+ "CERTIFICATE_AZURE_KEYVAULT_URI": {
+ "type": "string",
+ "value": "[variables('azureKeyVaultUrl')]"
+ },
+ "CERTIFICATE_AZURE_KEYVAULT_TENANT_ID": {
+ "type": "string",
+ "value": "[parameters('tenantId')]"
+ },
+ "CERTIFICATE_AZURE_KEYVAULT_CLIENT_ID": {
+ "type": "string",
+ "value": "[parameters('testApplicationId')]"
+ },
+ "CERTIFICATE_AZURE_KEYVAULT_CLIENT_SECRET": {
+ "type": "string",
+ "value": "[parameters('testApplicationSecret')]"
+ },
+ "CERTIFICATE_AZURE_KEYVAULT_CERTIFICATE_NAME": {
+ "type": "string",
+ "value": "[parameters('certificateName')]"
+ }
+ }
+}
diff --git a/sdk/spring/pom.xml b/sdk/spring/pom.xml
index 8e00410904444..be28c0c71e36b 100644
--- a/sdk/spring/pom.xml
+++ b/sdk/spring/pom.xml
@@ -136,33 +136,32 @@
azure-identity-spring
+ azure-spring-boot
+ azure-spring-boot-samples/azure-appconfiguration-conversion-sample-complete
+ azure-spring-boot-samples/azure-appconfiguration-conversion-sample-initial
+ azure-spring-boot-samples/azure-appconfiguration-sample
azure-spring-boot-samples/azure-cloud-foundry-service-sample
azure-spring-boot-samples/azure-spring-boot-sample-active-directory-b2c-oidc
- azure-spring-boot-samples/azure-spring-boot-sample-active-directory-resource-server-by-filter-stateless
+ azure-spring-boot-samples/azure-spring-boot-sample-active-directory-resource-server
azure-spring-boot-samples/azure-spring-boot-sample-active-directory-resource-server-by-filter
+ azure-spring-boot-samples/azure-spring-boot-sample-active-directory-resource-server-by-filter-stateless
azure-spring-boot-samples/azure-spring-boot-sample-active-directory-resource-server-obo
- azure-spring-boot-samples/azure-spring-boot-sample-active-directory-resource-server
azure-spring-boot-samples/azure-spring-boot-sample-active-directory-webapp
azure-spring-boot-samples/azure-spring-boot-sample-cosmos
- azure-spring-boot-samples/azure-spring-boot-sample-keyvault-certificates-server-side
+ azure-spring-boot-samples/azure-spring-boot-sample-cosmos-multi-database-multi-account
+ azure-spring-boot-samples/azure-spring-boot-sample-cosmos-multi-database-single-account
azure-spring-boot-samples/azure-spring-boot-sample-keyvault-certificates-client-side
+ azure-spring-boot-samples/azure-spring-boot-sample-keyvault-certificates-server-side
azure-spring-boot-samples/azure-spring-boot-sample-keyvault-secrets
azure-spring-boot-samples/azure-spring-boot-sample-mediaservices
+ azure-spring-boot-samples/azure-spring-boot-sample-servicebus
azure-spring-boot-samples/azure-spring-boot-sample-servicebus-jms-queue
azure-spring-boot-samples/azure-spring-boot-sample-servicebus-jms-topic
- azure-spring-boot-samples/azure-spring-boot-sample-servicebus
azure-spring-boot-samples/azure-spring-boot-sample-storage-resource
azure-spring-boot-samples/azure-spring-cloud-sample-cache
- azure-spring-boot-samples/azure-appconfiguration-conversion-sample-complete
- azure-spring-boot-samples/azure-appconfiguration-conversion-sample-initial
- azure-spring-boot-samples/azure-appconfiguration-sample
azure-spring-boot-samples/azure-spring-cloud-sample-eventhubs-binder
- azure-spring-boot-samples/azure-spring-boot-sample-cosmos-multi-database-multi-account
- azure-spring-boot-samples/azure-spring-boot-sample-cosmos-multi-database-single-account
azure-spring-boot-samples/azure-spring-cloud-sample-eventhubs-kafka
azure-spring-boot-samples/azure-spring-cloud-sample-eventhubs-multibinders
- azure-spring-boot-samples/feature-management-web-sample
- azure-spring-boot-samples/feature-management-sample
azure-spring-boot-samples/azure-spring-cloud-sample-eventhubs-operation
azure-spring-boot-samples/azure-spring-cloud-sample-messaging-eventhubs
azure-spring-boot-samples/azure-spring-cloud-sample-messaging-servicebus
@@ -174,35 +173,37 @@
azure-spring-boot-samples/azure-spring-integration-sample-eventhubs
azure-spring-boot-samples/azure-spring-integration-sample-servicebus
azure-spring-boot-samples/azure-spring-integration-sample-storage-queue
- azure-spring-boot-starter-active-directory-b2c
+ azure-spring-boot-samples/feature-management-sample
+ azure-spring-boot-samples/feature-management-web-sample
+ azure-spring-boot-starter
azure-spring-boot-starter-active-directory
+ azure-spring-boot-starter-active-directory-b2c
azure-spring-boot-starter-cosmos
azure-spring-boot-starter-keyvault-certificates
azure-spring-boot-starter-keyvault-secrets
azure-spring-boot-starter-servicebus-jms
azure-spring-boot-starter-storage
- azure-spring-boot-starter
+ azure-spring-boot-test-aad
+ azure-spring-boot-test-aad-b2c
azure-spring-boot-test-aad-obo
- azure-spring-boot-test-aad-resource-server-by-filter
azure-spring-boot-test-aad-resource-server
- azure-spring-boot-test-aad
+ azure-spring-boot-test-aad-resource-server-by-filter
azure-spring-boot-test-application
- azure-spring-boot-test-aad-b2c
- azure-spring-boot-test-selenium-common
azure-spring-boot-test-core
azure-spring-boot-test-cosmos
- azure-spring-boot-test-keyvault/pom.xml
+ azure-spring-boot-test-keyvault-certificate
azure-spring-boot-test-keyvault/pom-reactive.xml
+ azure-spring-boot-test-keyvault/pom.xml
azure-spring-boot-test-parent
+ azure-spring-boot-test-selenium-common
azure-spring-boot-test-servicebus-jms
azure-spring-boot-test-storage
- azure-spring-boot
azure-spring-cloud-autoconfigure
azure-spring-cloud-context
azure-spring-cloud-messaging
azure-spring-cloud-starter-cache
- azure-spring-cloud-starter-eventhubs-kafka
azure-spring-cloud-starter-eventhubs
+ azure-spring-cloud-starter-eventhubs-kafka
azure-spring-cloud-starter-servicebus
azure-spring-cloud-starter-storage-queue
azure-spring-cloud-storage
diff --git a/sdk/spring/spring-test-template.yml b/sdk/spring/spring-test-template.yml
index 486ea71bef354..2a2889a226e12 100644
--- a/sdk/spring/spring-test-template.yml
+++ b/sdk/spring/spring-test-template.yml
@@ -5,6 +5,7 @@ parameters:
TestResourceDirectories:
- spring/azure-spring-boot-test-cosmos
- spring/azure-spring-boot-test-keyvault
+ - spring/azure-spring-boot-test-keyvault-certificate
- spring/azure-spring-boot-test-servicebus-jms
- spring/azure-spring-boot-test-storage
- spring/azure-spring-cloud-test-eventhubs
@@ -39,6 +40,9 @@ parameters:
- name: azure-spring-boot-test-keyvault
groupId: com.azure.spring
safeName: azurespringboottestkeyvault
+ - name: azure-spring-boot-test-keyvault-certificate
+ groupId: com.azure.spring
+ safeName: azurespringboottestkeyvaultcertificate
- name: azure-spring-boot-test-keyvault-reactive
groupId: com.azure.spring
safeName: azurespringboottestkeyvaultreactive