Skip to content

Commit 7d41efe

Browse files
committed
tests/resource/aws_lightsail_domain: Remove hardcoded region and standardize disappears testing
Reference: #16302 Output from acceptance testing in AWS Commercial: ``` --- PASS: TestAccAWSLightsailDomain_disappears (10.22s) --- PASS: TestAccAWSLightsailDomain_basic (10.27s) ``` Output from acceptance testing in AWS GovCloud (US): ``` --- SKIP: TestAccAWSLightsailDomain_basic (1.70s) --- SKIP: TestAccAWSLightsailDomain_disappears (1.70s) ```
1 parent 746cc9c commit 7d41efe

File tree

2 files changed

+108
-31
lines changed

2 files changed

+108
-31
lines changed

aws/lightsail_domain_test.go

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package aws
2+
3+
import (
4+
"context"
5+
"sync"
6+
"testing"
7+
8+
"github.com/aws/aws-sdk-go/aws/endpoints"
9+
"github.com/aws/aws-sdk-go/service/lightsail"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
13+
)
14+
15+
// Lightsail Domains can only be created in specific regions.
16+
17+
// testAccLightsailDomainRegion is the chosen Lightsail Domains testing region
18+
//
19+
// Cached to prevent issues should multiple regions become available.
20+
var testAccLightsailDomainRegion string
21+
22+
// testAccProviderLightsailDomain is the Lightsail Domains provider instance
23+
//
24+
// This Provider can be used in testing code for API calls without requiring
25+
// the use of saving and referencing specific ProviderFactories instances.
26+
//
27+
// testAccPreCheckLightsailDomain(t) must be called before using this provider instance.
28+
var testAccProviderLightsailDomain *schema.Provider
29+
30+
// testAccProviderLightsailDomainConfigure ensures the provider is only configured once
31+
var testAccProviderLightsailDomainConfigure sync.Once
32+
33+
// Prevent panic with testAccCheckResourceDisappears
34+
func init() {
35+
testAccProviderLightsailDomain = Provider()
36+
}
37+
38+
// testAccPreCheckLightsailDomain verifies AWS credentials and that Lightsail Domains is supported
39+
func testAccPreCheckLightsailDomain(t *testing.T) {
40+
testAccPartitionHasServicePreCheck(lightsail.EndpointsID, t)
41+
42+
// Since we are outside the scope of the Terraform configuration we must
43+
// call Configure() to properly initialize the provider configuration.
44+
testAccProviderLightsailDomainConfigure.Do(func() {
45+
region := testAccGetLightsailDomainRegion()
46+
47+
if region == "" {
48+
t.Skip("Lightsail Domains not available in this AWS Partition")
49+
}
50+
51+
config := map[string]interface{}{
52+
"region": region,
53+
}
54+
55+
diags := testAccProviderLightsailDomain.Configure(context.Background(), terraform.NewResourceConfigRaw(config))
56+
57+
if diags != nil && diags.HasError() {
58+
for _, d := range diags {
59+
if d.Severity == diag.Error {
60+
t.Fatalf("error configuring Lightsail Domains provider: %s", d.Summary)
61+
}
62+
}
63+
}
64+
})
65+
}
66+
67+
// testAccLightsailDomainRegionProviderConfig is the Terraform provider configuration for Lightsail Domains region testing
68+
//
69+
// Testing Lightsail Domains assumes no other provider configurations
70+
// are necessary and overwrites the "aws" provider configuration.
71+
func testAccLightsailDomainRegionProviderConfig() string {
72+
return testAccRegionalProviderConfig(testAccGetLightsailDomainRegion())
73+
}
74+
75+
// testAccGetLightsailDomainRegion returns the Lightsail Domains region for testing
76+
func testAccGetLightsailDomainRegion() string {
77+
if testAccLightsailDomainRegion != "" {
78+
return testAccLightsailDomainRegion
79+
}
80+
81+
// AWS Commercial: https://lightsail.aws.amazon.com/ls/docs/en_us/articles/lightsail-how-to-create-dns-entry
82+
// AWS GovCloud (US) - service not supported: https://docs.aws.amazon.com/govcloud-us/latest/UserGuide/using-services.html
83+
// AWS China - service not supported: https://www.amazonaws.cn/en/about-aws/regional-product-services/
84+
switch testAccGetPartition() {
85+
case endpoints.AwsPartitionID:
86+
testAccLightsailDomainRegion = endpoints.UsEast1RegionID
87+
}
88+
89+
return testAccLightsailDomainRegion
90+
}

aws/resource_aws_lightsail_domain_test.go

+18-31
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,17 @@ import (
1616
func TestAccAWSLightsailDomain_basic(t *testing.T) {
1717
var domain lightsail.Domain
1818
lightsailDomainName := fmt.Sprintf("tf-test-lightsail-%s.com", acctest.RandString(5))
19+
resourceName := "aws_lightsail_domain.test"
1920

2021
resource.ParallelTest(t, resource.TestCase{
21-
PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSLightsail(t) },
22-
Providers: testAccProviders,
23-
CheckDestroy: testAccCheckAWSLightsailDomainDestroy,
22+
PreCheck: func() { testAccPreCheck(t); testAccPreCheckLightsailDomain(t) },
23+
ProviderFactories: testAccProviderFactories,
24+
CheckDestroy: testAccCheckAWSLightsailDomainDestroy,
2425
Steps: []resource.TestStep{
2526
{
2627
Config: testAccAWSLightsailDomainConfig_basic(lightsailDomainName),
2728
Check: resource.ComposeAggregateTestCheckFunc(
28-
testAccCheckAWSLightsailDomainExists("aws_lightsail_domain.domain_test", &domain),
29+
testAccCheckAWSLightsailDomainExists(resourceName, &domain),
2930
),
3031
},
3132
},
@@ -35,30 +36,18 @@ func TestAccAWSLightsailDomain_basic(t *testing.T) {
3536
func TestAccAWSLightsailDomain_disappears(t *testing.T) {
3637
var domain lightsail.Domain
3738
lightsailDomainName := fmt.Sprintf("tf-test-lightsail-%s.com", acctest.RandString(5))
38-
39-
domainDestroy := func(*terraform.State) error {
40-
conn := testAccProvider.Meta().(*AWSClient).lightsailconn
41-
_, err := conn.DeleteDomain(&lightsail.DeleteDomainInput{
42-
DomainName: aws.String(lightsailDomainName),
43-
})
44-
45-
if err != nil {
46-
return fmt.Errorf("Error deleting Lightsail Domain in disapear test")
47-
}
48-
49-
return nil
50-
}
39+
resourceName := "aws_lightsail_domain.test"
5140

5241
resource.ParallelTest(t, resource.TestCase{
53-
PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSLightsail(t) },
54-
Providers: testAccProviders,
55-
CheckDestroy: testAccCheckAWSLightsailDomainDestroy,
42+
PreCheck: func() { testAccPreCheck(t); testAccPreCheckLightsailDomain(t) },
43+
ProviderFactories: testAccProviderFactories,
44+
CheckDestroy: testAccCheckAWSLightsailDomainDestroy,
5645
Steps: []resource.TestStep{
5746
{
5847
Config: testAccAWSLightsailDomainConfig_basic(lightsailDomainName),
5948
Check: resource.ComposeAggregateTestCheckFunc(
60-
testAccCheckAWSLightsailDomainExists("aws_lightsail_domain.domain_test", &domain),
61-
domainDestroy,
49+
testAccCheckAWSLightsailDomainExists(resourceName, &domain),
50+
testAccCheckResourceDisappears(testAccProviderLightsailDomain, resourceAwsLightsailDomain(), resourceName),
6251
),
6352
ExpectNonEmptyPlan: true,
6453
},
@@ -77,7 +66,7 @@ func testAccCheckAWSLightsailDomainExists(n string, domain *lightsail.Domain) re
7766
return errors.New("No Lightsail Domain ID is set")
7867
}
7968

80-
conn := testAccProvider.Meta().(*AWSClient).lightsailconn
69+
conn := testAccProviderLightsailDomain.Meta().(*AWSClient).lightsailconn
8170

8271
resp, err := conn.GetDomain(&lightsail.GetDomainInput{
8372
DomainName: aws.String(rs.Primary.ID),
@@ -101,7 +90,7 @@ func testAccCheckAWSLightsailDomainDestroy(s *terraform.State) error {
10190
continue
10291
}
10392

104-
conn := testAccProvider.Meta().(*AWSClient).lightsailconn
93+
conn := testAccProviderLightsailDomain.Meta().(*AWSClient).lightsailconn
10594

10695
resp, err := conn.GetDomain(&lightsail.GetDomainInput{
10796
DomainName: aws.String(rs.Primary.ID),
@@ -126,13 +115,11 @@ func testAccCheckAWSLightsailDomainDestroy(s *terraform.State) error {
126115
}
127116

128117
func testAccAWSLightsailDomainConfig_basic(lightsailDomainName string) string {
129-
return fmt.Sprintf(`
130-
provider "aws" {
131-
region = "us-east-1"
132-
}
133-
134-
resource "aws_lightsail_domain" "domain_test" {
118+
return composeConfig(
119+
testAccLightsailDomainRegionProviderConfig(),
120+
fmt.Sprintf(`
121+
resource "aws_lightsail_domain" "test" {
135122
domain_name = "%s"
136123
}
137-
`, lightsailDomainName) //lintignore:AT004
124+
`, lightsailDomainName))
138125
}

0 commit comments

Comments
 (0)