From b9d06e5c21135a0acc540973b9f95314f3ade62c Mon Sep 17 00:00:00 2001 From: magodo Date: Wed, 15 Jan 2020 22:55:14 +0800 Subject: [PATCH] Fix parallel acctest race on `Provider` We should not initialize providers for every test, in which case it might cause the global provider not same as the actual used provider in each test. And might results into panic when user trying to retrive meta from global provider when testing resource exist/destroy. --- azurerm/internal/acceptance/data.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/azurerm/internal/acceptance/data.go b/azurerm/internal/acceptance/data.go index bde5d2ddf460..3e79ea88bee1 100644 --- a/azurerm/internal/acceptance/data.go +++ b/azurerm/internal/acceptance/data.go @@ -5,6 +5,7 @@ import ( "math" "os" "strconv" + "sync" "testing" "github.com/Azure/go-autorest/autorest/azure" @@ -17,6 +18,8 @@ import ( "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/provider" ) +var once sync.Once + type TestData struct { // Locations is a set of Azure Regions which should be used for this Test Locations Regions @@ -48,13 +51,15 @@ type TestData struct { // BuildTestData generates some test data for the given resource func BuildTestData(t *testing.T, resourceType string, resourceLabel string) TestData { - azureProvider := provider.AzureProvider().(*schema.Provider) + once.Do(func() { + azureProvider := provider.AzureProvider().(*schema.Provider) - AzureProvider = azureProvider - SupportedProviders = map[string]terraform.ResourceProvider{ - "azurerm": azureProvider, - "azuread": azuread.Provider().(*schema.Provider), - } + AzureProvider = azureProvider + SupportedProviders = map[string]terraform.ResourceProvider{ + "azurerm": azureProvider, + "azuread": azuread.Provider().(*schema.Provider), + } + }) env, err := Environment() if err != nil {