From 2877b6ba51f72f05cb2af53fbf2868081a475be2 Mon Sep 17 00:00:00 2001 From: Benjamin Bennett Date: Fri, 21 Jul 2023 15:43:17 +0100 Subject: [PATCH] Adding acceptance test coverage for StaticDirectory(), TestNameDirectory() and TestStepDirectory() (#150) --- config/config.go | 3 + .../random.tf | 0 .../random.tf | 0 .../provider.tf | 0 .../random.tf | 0 .../terraform.tf | 0 .../provider.tf | 0 .../random.tf | 0 .../terraform.tf | 0 .../1/random.tf | 19 ++ .../1/random.tf | 19 ++ .../1/provider.tf | 4 + .../1/random.tf | 8 + .../1/terraform.tf | 11 + .../1/provider.tf | 4 + .../1/random.tf | 8 + .../1/terraform.tf | 11 + .../random.tf | 0 .../1/random.tf | 4 + .../config_directory_test.go | 299 ++++++++++++++++++ .../fixtures/random_id/random.tf | 4 + .../fixtures/random_password_3.2.0/random.tf | 19 ++ .../provider.tf | 4 + .../random.tf | 8 + .../terraform.tf | 11 + .../fixtures/random_password_3.5.1/random.tf | 19 ++ .../provider.tf | 4 + .../random.tf | 8 + .../terraform.tf | 11 + helper/resource/teststep_providers_test.go | 96 ------ helper/resource/teststep_validate_test.go | 4 +- 31 files changed, 480 insertions(+), 98 deletions(-) rename {helper/fixtures/random_password_3.5.1 => config_directory_test/TestTest_ConfigDirectory_TestNameDirectory}/random.tf (100%) rename {helper/fixtures/random_password_3.2.0 => config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist}/random.tf (100%) rename {helper/fixtures/random_password_3.2.0_multiple_files => config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist_MultipleFiles}/provider.tf (100%) rename {helper/fixtures/random_password_3.2.0_multiple_files => config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist_MultipleFiles}/random.tf (100%) rename {helper/fixtures/random_password_3.2.0_multiple_files => config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist_MultipleFiles}/terraform.tf (100%) rename {helper/fixtures/random_password_3.5.1_multiple_files => config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_MultipleFiles}/provider.tf (100%) rename {helper/fixtures/random_password_3.5.1_multiple_files => config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_MultipleFiles}/random.tf (100%) rename {helper/fixtures/random_password_3.5.1_multiple_files => config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_MultipleFiles}/terraform.tf (100%) create mode 100644 config_directory_test/TestTest_ConfigDirectory_TestStepDirectory/1/random.tf create mode 100644 config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist/1/random.tf create mode 100644 config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist_MultipleFiles/1/provider.tf create mode 100644 config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist_MultipleFiles/1/random.tf create mode 100644 config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist_MultipleFiles/1/terraform.tf create mode 100644 config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_MultipleFiles/1/provider.tf create mode 100644 config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_MultipleFiles/1/random.tf create mode 100644 config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_MultipleFiles/1/terraform.tf rename {helper/fixtures/random_id => config_directory_test/TestTest_TestStep_ProviderFactories_ConfigDirectory_TestNameDirectory}/random.tf (100%) create mode 100644 config_directory_test/TestTest_TestStep_ProviderFactories_ConfigDirectory_TestStepDirectory/1/random.tf create mode 100644 config_directory_test/config_directory_test.go create mode 100644 config_directory_test/fixtures/random_id/random.tf create mode 100644 config_directory_test/fixtures/random_password_3.2.0/random.tf create mode 100644 config_directory_test/fixtures/random_password_3.2.0_multiple_files/provider.tf create mode 100644 config_directory_test/fixtures/random_password_3.2.0_multiple_files/random.tf create mode 100644 config_directory_test/fixtures/random_password_3.2.0_multiple_files/terraform.tf create mode 100644 config_directory_test/fixtures/random_password_3.5.1/random.tf create mode 100644 config_directory_test/fixtures/random_password_3.5.1_multiple_files/provider.tf create mode 100644 config_directory_test/fixtures/random_password_3.5.1_multiple_files/random.tf create mode 100644 config_directory_test/fixtures/random_password_3.5.1_multiple_files/terraform.tf diff --git a/config/config.go b/config/config.go index 4078d6bbd..0a15901e9 100644 --- a/config/config.go +++ b/config/config.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package config import ( diff --git a/helper/fixtures/random_password_3.5.1/random.tf b/config_directory_test/TestTest_ConfigDirectory_TestNameDirectory/random.tf similarity index 100% rename from helper/fixtures/random_password_3.5.1/random.tf rename to config_directory_test/TestTest_ConfigDirectory_TestNameDirectory/random.tf diff --git a/helper/fixtures/random_password_3.2.0/random.tf b/config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist/random.tf similarity index 100% rename from helper/fixtures/random_password_3.2.0/random.tf rename to config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist/random.tf diff --git a/helper/fixtures/random_password_3.2.0_multiple_files/provider.tf b/config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist_MultipleFiles/provider.tf similarity index 100% rename from helper/fixtures/random_password_3.2.0_multiple_files/provider.tf rename to config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist_MultipleFiles/provider.tf diff --git a/helper/fixtures/random_password_3.2.0_multiple_files/random.tf b/config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist_MultipleFiles/random.tf similarity index 100% rename from helper/fixtures/random_password_3.2.0_multiple_files/random.tf rename to config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist_MultipleFiles/random.tf diff --git a/helper/fixtures/random_password_3.2.0_multiple_files/terraform.tf b/config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist_MultipleFiles/terraform.tf similarity index 100% rename from helper/fixtures/random_password_3.2.0_multiple_files/terraform.tf rename to config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist_MultipleFiles/terraform.tf diff --git a/helper/fixtures/random_password_3.5.1_multiple_files/provider.tf b/config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_MultipleFiles/provider.tf similarity index 100% rename from helper/fixtures/random_password_3.5.1_multiple_files/provider.tf rename to config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_MultipleFiles/provider.tf diff --git a/helper/fixtures/random_password_3.5.1_multiple_files/random.tf b/config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_MultipleFiles/random.tf similarity index 100% rename from helper/fixtures/random_password_3.5.1_multiple_files/random.tf rename to config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_MultipleFiles/random.tf diff --git a/helper/fixtures/random_password_3.5.1_multiple_files/terraform.tf b/config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_MultipleFiles/terraform.tf similarity index 100% rename from helper/fixtures/random_password_3.5.1_multiple_files/terraform.tf rename to config_directory_test/TestTest_ConfigDirectory_TestNameDirectory_MultipleFiles/terraform.tf diff --git a/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory/1/random.tf b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory/1/random.tf new file mode 100644 index 000000000..b75cfbb6b --- /dev/null +++ b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory/1/random.tf @@ -0,0 +1,19 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +terraform { + required_providers { + random = { + source = "registry.terraform.io/hashicorp/random" + version = "3.5.1" + } + } +} + +provider "random" {} + +resource "random_password" "test" { + length = 8 + + numeric = false +} \ No newline at end of file diff --git a/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist/1/random.tf b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist/1/random.tf new file mode 100644 index 000000000..62dfb2248 --- /dev/null +++ b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist/1/random.tf @@ -0,0 +1,19 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +terraform { + required_providers { + random = { + source = "registry.terraform.io/hashicorp/random" + version = "3.2.0" + } + } +} + +provider "random" {} + +resource "random_password" "test" { + length = 8 + + numeric = false +} \ No newline at end of file diff --git a/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist_MultipleFiles/1/provider.tf b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist_MultipleFiles/1/provider.tf new file mode 100644 index 000000000..4e7b51e38 --- /dev/null +++ b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist_MultipleFiles/1/provider.tf @@ -0,0 +1,4 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +provider "random" {} \ No newline at end of file diff --git a/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist_MultipleFiles/1/random.tf b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist_MultipleFiles/1/random.tf new file mode 100644 index 000000000..6ca8f0bb1 --- /dev/null +++ b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist_MultipleFiles/1/random.tf @@ -0,0 +1,8 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +resource "random_password" "test" { + length = 8 + + numeric = false +} \ No newline at end of file diff --git a/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist_MultipleFiles/1/terraform.tf b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist_MultipleFiles/1/terraform.tf new file mode 100644 index 000000000..52f5ef4ad --- /dev/null +++ b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist_MultipleFiles/1/terraform.tf @@ -0,0 +1,11 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +terraform { + required_providers { + random = { + source = "registry.terraform.io/hashicorp/random" + version = "3.2.0" + } + } +} \ No newline at end of file diff --git a/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_MultipleFiles/1/provider.tf b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_MultipleFiles/1/provider.tf new file mode 100644 index 000000000..4e7b51e38 --- /dev/null +++ b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_MultipleFiles/1/provider.tf @@ -0,0 +1,4 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +provider "random" {} \ No newline at end of file diff --git a/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_MultipleFiles/1/random.tf b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_MultipleFiles/1/random.tf new file mode 100644 index 000000000..6ca8f0bb1 --- /dev/null +++ b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_MultipleFiles/1/random.tf @@ -0,0 +1,8 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +resource "random_password" "test" { + length = 8 + + numeric = false +} \ No newline at end of file diff --git a/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_MultipleFiles/1/terraform.tf b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_MultipleFiles/1/terraform.tf new file mode 100644 index 000000000..1aaa98022 --- /dev/null +++ b/config_directory_test/TestTest_ConfigDirectory_TestStepDirectory_MultipleFiles/1/terraform.tf @@ -0,0 +1,11 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +terraform { + required_providers { + random = { + source = "registry.terraform.io/hashicorp/random" + version = "3.5.1" + } + } +} \ No newline at end of file diff --git a/helper/fixtures/random_id/random.tf b/config_directory_test/TestTest_TestStep_ProviderFactories_ConfigDirectory_TestNameDirectory/random.tf similarity index 100% rename from helper/fixtures/random_id/random.tf rename to config_directory_test/TestTest_TestStep_ProviderFactories_ConfigDirectory_TestNameDirectory/random.tf diff --git a/config_directory_test/TestTest_TestStep_ProviderFactories_ConfigDirectory_TestStepDirectory/1/random.tf b/config_directory_test/TestTest_TestStep_ProviderFactories_ConfigDirectory_TestStepDirectory/1/random.tf new file mode 100644 index 000000000..a47a750cc --- /dev/null +++ b/config_directory_test/TestTest_TestStep_ProviderFactories_ConfigDirectory_TestStepDirectory/1/random.tf @@ -0,0 +1,4 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +resource "random_id" "test" {} \ No newline at end of file diff --git a/config_directory_test/config_directory_test.go b/config_directory_test/config_directory_test.go new file mode 100644 index 000000000..2ff5da21d --- /dev/null +++ b/config_directory_test/config_directory_test.go @@ -0,0 +1,299 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package config_directory_test + +import ( + "context" + "regexp" + "testing" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + "github.com/hashicorp/terraform-plugin-testing/config" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" +) + +func TestTest_ConfigDirectory_StaticDirectory(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + Steps: []resource.TestStep{ + { + ConfigDirectory: config.StaticDirectory(`fixtures/random_password_3.5.1`), + Check: resource.TestCheckResourceAttrSet("random_password.test", "id"), + }, + }, + }) +} + +func TestTest_ConfigDirectory_TestNameDirectory(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + Steps: []resource.TestStep{ + { + ConfigDirectory: config.TestNameDirectory(t), + Check: resource.TestCheckResourceAttrSet("random_password.test", "id"), + }, + }, + }) +} + +func TestTest_ConfigDirectory_TestStepDirectory(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + Steps: []resource.TestStep{ + { + ConfigDirectory: config.TestStepDirectory(t), + Check: resource.TestCheckResourceAttrSet("random_password.test", "id"), + }, + }, + }) +} + +func TestTest_ConfigDirectory_StaticDirectory_MultipleFiles(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + Steps: []resource.TestStep{ + { + ConfigDirectory: config.StaticDirectory(`fixtures/random_password_3.5.1_multiple_files`), + Check: resource.TestCheckResourceAttrSet("random_password.test", "id"), + }, + }, + }) +} + +func TestTest_ConfigDirectory_TestNameDirectory_MultipleFiles(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + Steps: []resource.TestStep{ + { + ConfigDirectory: config.TestNameDirectory(t), + Check: resource.TestCheckResourceAttrSet("random_password.test", "id"), + }, + }, + }) +} + +func TestTest_ConfigDirectory_TestStepDirectory_MultipleFiles(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + Steps: []resource.TestStep{ + { + ConfigDirectory: config.TestStepDirectory(t), + Check: resource.TestCheckResourceAttrSet("random_password.test", "id"), + }, + }, + }) +} + +// TestTest_TestCase_ExternalProviders_ConfigDirectory_AttributeDoesNotExist uses Terraform +// configuration specifying a "numeric" attribute that was introduced in v3.3.0 of the +// random provider password resource. This test confirms that the TestCase ExternalProviders +// is being used when ConfigDirectory is set. +func TestTest_ConfigDirectory_StaticDirectory_AttributeDoesNotExist(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + Steps: []resource.TestStep{ + { + ConfigDirectory: config.StaticDirectory(`fixtures/random_password_3.2.0`), + ExpectError: regexp.MustCompile(`.*An argument named "numeric" is not expected here.`), + }, + }, + }) +} + +// TestTest_TestCase_ExternalProviders_ConfigDirectory_AttributeDoesNotExist uses Terraform +// configuration specifying a "numeric" attribute that was introduced in v3.3.0 of the +// random provider password resource. This test confirms that the TestCase ExternalProviders +// is being used when ConfigDirectory is set. +func TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + Steps: []resource.TestStep{ + { + ConfigDirectory: config.TestNameDirectory(t), + ExpectError: regexp.MustCompile(`.*An argument named "numeric" is not expected here.`), + }, + }, + }) +} + +// TestTest_TestCase_ExternalProviders_ConfigDirectory_AttributeDoesNotExist uses Terraform +// configuration specifying a "numeric" attribute that was introduced in v3.3.0 of the +// random provider password resource. This test confirms that the TestCase ExternalProviders +// is being used when ConfigDirectory is set. +func TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + Steps: []resource.TestStep{ + { + ConfigDirectory: config.TestStepDirectory(t), + ExpectError: regexp.MustCompile(`.*An argument named "numeric" is not expected here.`), + }, + }, + }) +} + +// TestTest_TestCase_ExternalProviders_ConfigDirectory_AttributeDoesNotExist uses Terraform +// configuration specifying a "numeric" attribute that was introduced in v3.3.0 of the +// random provider password resource. This test confirms that the TestCase ExternalProviders +// is being used when ConfigDirectory is set. +func TestTest_ConfigDirectory_StaticDirectory_AttributeDoesNotExist_MultipleFiles(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + Steps: []resource.TestStep{ + { + ConfigDirectory: config.StaticDirectory(`fixtures/random_password_3.2.0_multiple_files`), + ExpectError: regexp.MustCompile(`.*An argument named "numeric" is not expected here.`), + }, + }, + }) +} + +// TestTest_TestCase_ExternalProviders_ConfigDirectory_AttributeDoesNotExist uses Terraform +// configuration specifying a "numeric" attribute that was introduced in v3.3.0 of the +// random provider password resource. This test confirms that the TestCase ExternalProviders +// is being used when ConfigDirectory is set. +func TestTest_ConfigDirectory_TestNameDirectory_AttributeDoesNotExist_MultipleFiles(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + Steps: []resource.TestStep{ + { + ConfigDirectory: config.TestNameDirectory(t), + ExpectError: regexp.MustCompile(`.*An argument named "numeric" is not expected here.`), + }, + }, + }) +} + +// TestTest_TestCase_ExternalProviders_ConfigDirectory_AttributeDoesNotExist uses Terraform +// configuration specifying a "numeric" attribute that was introduced in v3.3.0 of the +// random provider password resource. This test confirms that the TestCase ExternalProviders +// is being used when ConfigDirectory is set. +func TestTest_ConfigDirectory_TestStepDirectory_AttributeDoesNotExist_MultipleFiles(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + Steps: []resource.TestStep{ + { + ConfigDirectory: config.TestStepDirectory(t), + ExpectError: regexp.MustCompile(`.*An argument named "numeric" is not expected here.`), + }, + }, + }) +} + +func TestTest_TestStep_ProviderFactories_ConfigDirectory_StaticDirectory(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + ProviderFactories: map[string]func() (*schema.Provider, error){ + "random": func() (*schema.Provider, error) { //nolint:unparam // required signature + return &schema.Provider{ + ResourcesMap: map[string]*schema.Resource{ + "random_id": { + CreateContext: func(_ context.Context, d *schema.ResourceData, _ interface{}) diag.Diagnostics { + d.SetId(time.Now().String()) + return nil + }, + DeleteContext: func(_ context.Context, _ *schema.ResourceData, _ interface{}) diag.Diagnostics { + return nil + }, + ReadContext: func(_ context.Context, _ *schema.ResourceData, _ interface{}) diag.Diagnostics { + return nil + }, + Schema: map[string]*schema.Schema{}, + }, + }, + }, nil + }, + }, + Steps: []resource.TestStep{ + { + ConfigDirectory: config.StaticDirectory(`fixtures/random_id`), + Check: resource.TestCheckResourceAttrSet("random_id.test", "id"), + }, + }, + }) +} + +func TestTest_TestStep_ProviderFactories_ConfigDirectory_TestNameDirectory(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + ProviderFactories: map[string]func() (*schema.Provider, error){ + "random": func() (*schema.Provider, error) { //nolint:unparam // required signature + return &schema.Provider{ + ResourcesMap: map[string]*schema.Resource{ + "random_id": { + CreateContext: func(_ context.Context, d *schema.ResourceData, _ interface{}) diag.Diagnostics { + d.SetId(time.Now().String()) + return nil + }, + DeleteContext: func(_ context.Context, _ *schema.ResourceData, _ interface{}) diag.Diagnostics { + return nil + }, + ReadContext: func(_ context.Context, _ *schema.ResourceData, _ interface{}) diag.Diagnostics { + return nil + }, + Schema: map[string]*schema.Schema{}, + }, + }, + }, nil + }, + }, + Steps: []resource.TestStep{ + { + ConfigDirectory: config.TestNameDirectory(t), + Check: resource.TestCheckResourceAttrSet("random_id.test", "id"), + }, + }, + }) +} + +func TestTest_TestStep_ProviderFactories_ConfigDirectory_TestStepDirectory(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + ProviderFactories: map[string]func() (*schema.Provider, error){ + "random": func() (*schema.Provider, error) { //nolint:unparam // required signature + return &schema.Provider{ + ResourcesMap: map[string]*schema.Resource{ + "random_id": { + CreateContext: func(_ context.Context, d *schema.ResourceData, _ interface{}) diag.Diagnostics { + d.SetId(time.Now().String()) + return nil + }, + DeleteContext: func(_ context.Context, _ *schema.ResourceData, _ interface{}) diag.Diagnostics { + return nil + }, + ReadContext: func(_ context.Context, _ *schema.ResourceData, _ interface{}) diag.Diagnostics { + return nil + }, + Schema: map[string]*schema.Schema{}, + }, + }, + }, nil + }, + }, + Steps: []resource.TestStep{ + { + ConfigDirectory: config.TestStepDirectory(t), + Check: resource.TestCheckResourceAttrSet("random_id.test", "id"), + }, + }, + }) +} diff --git a/config_directory_test/fixtures/random_id/random.tf b/config_directory_test/fixtures/random_id/random.tf new file mode 100644 index 000000000..a47a750cc --- /dev/null +++ b/config_directory_test/fixtures/random_id/random.tf @@ -0,0 +1,4 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +resource "random_id" "test" {} \ No newline at end of file diff --git a/config_directory_test/fixtures/random_password_3.2.0/random.tf b/config_directory_test/fixtures/random_password_3.2.0/random.tf new file mode 100644 index 000000000..62dfb2248 --- /dev/null +++ b/config_directory_test/fixtures/random_password_3.2.0/random.tf @@ -0,0 +1,19 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +terraform { + required_providers { + random = { + source = "registry.terraform.io/hashicorp/random" + version = "3.2.0" + } + } +} + +provider "random" {} + +resource "random_password" "test" { + length = 8 + + numeric = false +} \ No newline at end of file diff --git a/config_directory_test/fixtures/random_password_3.2.0_multiple_files/provider.tf b/config_directory_test/fixtures/random_password_3.2.0_multiple_files/provider.tf new file mode 100644 index 000000000..4e7b51e38 --- /dev/null +++ b/config_directory_test/fixtures/random_password_3.2.0_multiple_files/provider.tf @@ -0,0 +1,4 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +provider "random" {} \ No newline at end of file diff --git a/config_directory_test/fixtures/random_password_3.2.0_multiple_files/random.tf b/config_directory_test/fixtures/random_password_3.2.0_multiple_files/random.tf new file mode 100644 index 000000000..6ca8f0bb1 --- /dev/null +++ b/config_directory_test/fixtures/random_password_3.2.0_multiple_files/random.tf @@ -0,0 +1,8 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +resource "random_password" "test" { + length = 8 + + numeric = false +} \ No newline at end of file diff --git a/config_directory_test/fixtures/random_password_3.2.0_multiple_files/terraform.tf b/config_directory_test/fixtures/random_password_3.2.0_multiple_files/terraform.tf new file mode 100644 index 000000000..52f5ef4ad --- /dev/null +++ b/config_directory_test/fixtures/random_password_3.2.0_multiple_files/terraform.tf @@ -0,0 +1,11 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +terraform { + required_providers { + random = { + source = "registry.terraform.io/hashicorp/random" + version = "3.2.0" + } + } +} \ No newline at end of file diff --git a/config_directory_test/fixtures/random_password_3.5.1/random.tf b/config_directory_test/fixtures/random_password_3.5.1/random.tf new file mode 100644 index 000000000..b75cfbb6b --- /dev/null +++ b/config_directory_test/fixtures/random_password_3.5.1/random.tf @@ -0,0 +1,19 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +terraform { + required_providers { + random = { + source = "registry.terraform.io/hashicorp/random" + version = "3.5.1" + } + } +} + +provider "random" {} + +resource "random_password" "test" { + length = 8 + + numeric = false +} \ No newline at end of file diff --git a/config_directory_test/fixtures/random_password_3.5.1_multiple_files/provider.tf b/config_directory_test/fixtures/random_password_3.5.1_multiple_files/provider.tf new file mode 100644 index 000000000..4e7b51e38 --- /dev/null +++ b/config_directory_test/fixtures/random_password_3.5.1_multiple_files/provider.tf @@ -0,0 +1,4 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +provider "random" {} \ No newline at end of file diff --git a/config_directory_test/fixtures/random_password_3.5.1_multiple_files/random.tf b/config_directory_test/fixtures/random_password_3.5.1_multiple_files/random.tf new file mode 100644 index 000000000..6ca8f0bb1 --- /dev/null +++ b/config_directory_test/fixtures/random_password_3.5.1_multiple_files/random.tf @@ -0,0 +1,8 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +resource "random_password" "test" { + length = 8 + + numeric = false +} \ No newline at end of file diff --git a/config_directory_test/fixtures/random_password_3.5.1_multiple_files/terraform.tf b/config_directory_test/fixtures/random_password_3.5.1_multiple_files/terraform.tf new file mode 100644 index 000000000..1aaa98022 --- /dev/null +++ b/config_directory_test/fixtures/random_password_3.5.1_multiple_files/terraform.tf @@ -0,0 +1,11 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +terraform { + required_providers { + random = { + source = "registry.terraform.io/hashicorp/random" + version = "3.5.1" + } + } +} \ No newline at end of file diff --git a/helper/resource/teststep_providers_test.go b/helper/resource/teststep_providers_test.go index aee19e918..14a7dccf5 100644 --- a/helper/resource/teststep_providers_test.go +++ b/helper/resource/teststep_providers_test.go @@ -8,7 +8,6 @@ import ( "fmt" "os" "path/filepath" - "regexp" "strconv" "strings" "testing" @@ -23,7 +22,6 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/internal/plugintest" "github.com/hashicorp/terraform-plugin-testing/terraform" ) @@ -1212,100 +1210,6 @@ func TestTest_TestStep_Taint(t *testing.T) { } } -func TestTest_ConfigDirectory(t *testing.T) { - t.Parallel() - - Test(t, TestCase{ - Steps: []TestStep{ - { - ConfigDirectory: config.StaticDirectory(`../fixtures/random_password_3.5.1`), - Check: TestCheckResourceAttrSet("random_password.test", "id"), - }, - }, - }) -} - -func TestTest_ConfigDirectory_MultipleFiles(t *testing.T) { - t.Parallel() - - Test(t, TestCase{ - Steps: []TestStep{ - { - ConfigDirectory: config.StaticDirectory(`../fixtures/random_password_3.5.1_multiple_files`), - Check: TestCheckResourceAttrSet("random_password.test", "id"), - }, - }, - }) -} - -// TestTest_TestCase_ExternalProviders_ConfigDirectory_AttributeDoesNotExist uses Terraform -// configuration specifying a "numeric" attribute that was introduced in v3.3.0 of the -// random provider password resource. This test confirms that the TestCase ExternalProviders -// is being used when ConfigDirectory is set. -func TestTest_ConfigDirectory_AttributeDoesNotExist(t *testing.T) { - t.Parallel() - - Test(t, TestCase{ - Steps: []TestStep{ - { - ConfigDirectory: config.StaticDirectory(`../fixtures/random_password_3.2.0`), - ExpectError: regexp.MustCompile(`.*An argument named "numeric" is not expected here.`), - }, - }, - }) -} - -// TestTest_TestCase_ExternalProviders_ConfigDirectory_AttributeDoesNotExist uses Terraform -// configuration specifying a "numeric" attribute that was introduced in v3.3.0 of the -// random provider password resource. This test confirms that the TestCase ExternalProviders -// is being used when ConfigDirectory is set. -func TestTest_ConfigDirectory_AttributeDoesNotExist_MultipleFiles(t *testing.T) { - t.Parallel() - - Test(t, TestCase{ - Steps: []TestStep{ - { - ConfigDirectory: config.StaticDirectory(`../fixtures/random_password_3.2.0_multiple_files`), - ExpectError: regexp.MustCompile(`.*An argument named "numeric" is not expected here.`), - }, - }, - }) -} - -func TestTest_TestStep_ProviderFactories_ConfigDirectory(t *testing.T) { - t.Parallel() - - Test(t, TestCase{ - ProviderFactories: map[string]func() (*schema.Provider, error){ - "random": func() (*schema.Provider, error) { //nolint:unparam // required signature - return &schema.Provider{ - ResourcesMap: map[string]*schema.Resource{ - "random_id": { - CreateContext: func(_ context.Context, d *schema.ResourceData, _ interface{}) diag.Diagnostics { - d.SetId(time.Now().String()) - return nil - }, - DeleteContext: func(_ context.Context, _ *schema.ResourceData, _ interface{}) diag.Diagnostics { - return nil - }, - ReadContext: func(_ context.Context, _ *schema.ResourceData, _ interface{}) diag.Diagnostics { - return nil - }, - Schema: map[string]*schema.Schema{}, - }, - }, - }, nil - }, - }, - Steps: []TestStep{ - { - ConfigDirectory: config.StaticDirectory(`../fixtures/random_id`), - Check: TestCheckResourceAttrSet("random_id.test", "id"), - }, - }, - }) -} - //nolint:unparam func extractResourceAttr(resourceName string, attributeName string, attributeValue *string) TestCheckFunc { return func(s *terraform.State) error { diff --git a/helper/resource/teststep_validate_test.go b/helper/resource/teststep_validate_test.go index 04423cea7..fd0a56cfc 100644 --- a/helper/resource/teststep_validate_test.go +++ b/helper/resource/teststep_validate_test.go @@ -342,7 +342,7 @@ func TestTestStepValidate(t *testing.T) { }, PlanOnly: true, }, - testStepConfigDirectory: "../fixtures/random_id", + testStepConfigDirectory: "../../config_directory_test/fixtures/random_id", testStepValidateRequest: testStepValidateRequest{TestCaseHasProviders: true}, expectedError: errors.New("TestStep ConfigPlanChecks.PreApply cannot be run with PlanOnly"), }, @@ -382,7 +382,7 @@ func TestTestStepValidate(t *testing.T) { PostRefresh: []plancheck.PlanCheck{&planCheckSpy{}}, }, }, - testStepConfigDirectory: "../fixtures/random_id", + testStepConfigDirectory: "../../config_directory_test/fixtures/random_id", testStepValidateRequest: testStepValidateRequest{TestCaseHasProviders: true}, expectedError: errors.New("TestStep RefreshPlanChecks.PostRefresh must only be specified with RefreshState"), },