Skip to content

Commit 47e290c

Browse files
committed
acceptance test
1 parent 22883bd commit 47e290c

File tree

9 files changed

+278
-68
lines changed

9 files changed

+278
-68
lines changed

docs/data-sources/cdn_distribution.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,15 @@ data "stackit_cdn_distribution" "example" {
4545

4646
Read-Only:
4747

48-
- `backend` (Attributes List) The configured backend for the distribution (see [below for nested schema](#nestedatt--config--backend))
48+
- `backend` (Attributes) The configured backend for the distribution (see [below for nested schema](#nestedatt--config--backend))
4949
- `regions` (List of String)
5050

5151
<a id="nestedatt--config--backend"></a>
5252
### Nested Schema for `config.backend`
5353

5454
Read-Only:
5555

56-
- `origin_request_headers` (List of String) The configured origin request headers for the backend
56+
- `origin_request_headers` (Map of String) The configured origin request headers for the backend
5757
- `origin_url` (String) The configured backend type for the distribution
5858
- `type` (String) the
5959

docs/index.md

+1
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ Note: AWS specific checks must be skipped as they do not work on STACKIT. For de
153153

154154
- `argus_custom_endpoint` (String, Deprecated) Custom endpoint for the Argus service
155155
- `authorization_custom_endpoint` (String) Custom endpoint for the Membership service
156+
- `cdn_custom_endpoint` (String) Custom endpoint for the CDN service
156157
- `credentials_path` (String) Path of JSON from where the credentials are read. Takes precedence over the env var `STACKIT_CREDENTIALS_PATH`. Default value is `~/.stackit/credentials.json`.
157158
- `default_region` (String) Region will be used as the default location for regional services. Not all services require a region, some are global
158159
- `dns_custom_endpoint` (String) Custom endpoint for the DNS service

docs/resources/cdn_distribution.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ resource "stackit_cdn_distribution" "example_distribution" {
5252

5353
Required:
5454

55-
- `backend` (Attributes List) The configured backend for the distribution (see [below for nested schema](#nestedatt--config--backend))
55+
- `backend` (Attributes) The configured backend for the distribution (see [below for nested schema](#nestedatt--config--backend))
5656
- `regions` (List of String)
5757

5858
<a id="nestedatt--config--backend"></a>
@@ -65,7 +65,7 @@ Required:
6565

6666
Optional:
6767

68-
- `origin_request_headers` (List of String) The configured origin request headers for the backend
68+
- `origin_request_headers` (Map of String) The configured origin request headers for the backend
6969

7070

7171

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
package cdn_test
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"strings"
7+
"testing"
8+
9+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
10+
"github.com/hashicorp/terraform-plugin-testing/terraform"
11+
"github.com/stackitcloud/stackit-sdk-go/core/config"
12+
"github.com/stackitcloud/stackit-sdk-go/services/cdn"
13+
"github.com/stackitcloud/stackit-sdk-go/services/cdn/wait"
14+
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
15+
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil"
16+
)
17+
18+
var instanceResource = map[string]string{
19+
"project_id": testutil.ProjectId,
20+
"config_backend_type": "http",
21+
"config_backend_origin_url": "https://test-backend-1.cdn-dev.runs.onstackit.cloud",
22+
"config_regions": "\"EU\", \"US\"",
23+
"config_regions_updated": "\"EU\", \"US\", \"ASIA\"",
24+
}
25+
26+
func configResources(regions string) string {
27+
return fmt.Sprintf(`
28+
%s
29+
30+
resource "stackit_cdn_distribution" "distribution" {
31+
project_id = "%s"
32+
config = {
33+
backend = {
34+
type = "http"
35+
origin_url = "%s"
36+
}
37+
regions = [%s]
38+
}
39+
}
40+
`, testutil.CdnProviderConfig(), testutil.ProjectId, instanceResource["config_backend_origin_url"], regions)
41+
}
42+
43+
func configDatasources(regions string) string {
44+
return fmt.Sprintf(`
45+
%s
46+
47+
data "stackit_cdn_distribution" "distribution" {
48+
project_id = stackit_cdn_distribution.distribution.project_id
49+
distribution_id = stackit_cdn_distribution.distribution.distribution_id
50+
}
51+
`, configResources(regions))
52+
}
53+
54+
func TestAccCDNDistributionResource(t *testing.T) {
55+
resource.Test(t, resource.TestCase{
56+
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
57+
CheckDestroy: testAccCheckCDNDistributionDestroy,
58+
Steps: []resource.TestStep{
59+
// Create
60+
{
61+
Config: configResources(instanceResource["config_regions"]),
62+
Check: resource.ComposeAggregateTestCheckFunc(
63+
resource.TestCheckResourceAttrSet("stackit_cdn_distribution.distribution", "distribution_id"),
64+
resource.TestCheckResourceAttrSet("stackit_cdn_distribution.distribution", "created_at"),
65+
resource.TestCheckResourceAttrSet("stackit_cdn_distribution.distribution", "updated_at"),
66+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "domains.#", "1"),
67+
resource.TestCheckResourceAttrSet("stackit_cdn_distribution.distribution", "domains.0.name"),
68+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "domains.0.status", "ACTIVE"),
69+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.regions.#", "2"),
70+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.regions.0", "EU"),
71+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.regions.1", "US"),
72+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "project_id", testutil.ProjectId),
73+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "status", "ACTIVE"),
74+
),
75+
},
76+
// Import
77+
{
78+
ResourceName: "stackit_cdn_distribution.distribution",
79+
ImportStateIdFunc: func(s *terraform.State) (string, error) {
80+
r, ok := s.RootModule().Resources["stackit_cdn_distribution.distribution"]
81+
if !ok {
82+
return "", fmt.Errorf("couldn't find resource stackit_cdn_distribution.distribution")
83+
}
84+
distributionId, ok := r.Primary.Attributes["distribution_id"]
85+
if !ok {
86+
return "", fmt.Errorf("couldn't find attribute distribution_id")
87+
}
88+
89+
return fmt.Sprintf("%s,%s", testutil.ProjectId, distributionId), nil
90+
},
91+
ImportState: true,
92+
ImportStateVerify: true,
93+
},
94+
// Data Source
95+
{
96+
Config: configDatasources(instanceResource["config_regions"]),
97+
Check: resource.ComposeAggregateTestCheckFunc(
98+
resource.TestCheckResourceAttrSet("stackit_cdn_distribution.distribution", "distribution_id"),
99+
resource.TestCheckResourceAttrSet("stackit_cdn_distribution.distribution", "created_at"),
100+
resource.TestCheckResourceAttrSet("stackit_cdn_distribution.distribution", "updated_at"),
101+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "domains.#", "1"),
102+
resource.TestCheckResourceAttrSet("stackit_cdn_distribution.distribution", "domains.0.name"),
103+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "domains.0.status", "ACTIVE"),
104+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.regions.#", "2"),
105+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.regions.0", "EU"),
106+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.regions.1", "US"),
107+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "project_id", testutil.ProjectId),
108+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "status", "ACTIVE"),
109+
),
110+
},
111+
// Update
112+
{
113+
Config: configResources(instanceResource["config_regions_updated"]),
114+
Check: resource.ComposeAggregateTestCheckFunc(
115+
resource.TestCheckResourceAttrSet("stackit_cdn_distribution.distribution", "distribution_id"),
116+
resource.TestCheckResourceAttrSet("stackit_cdn_distribution.distribution", "created_at"),
117+
resource.TestCheckResourceAttrSet("stackit_cdn_distribution.distribution", "updated_at"),
118+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "domains.#", "1"),
119+
resource.TestCheckResourceAttrSet("stackit_cdn_distribution.distribution", "domains.0.name"),
120+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "domains.0.status", "ACTIVE"),
121+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.regions.#", "3"),
122+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.regions.0", "EU"),
123+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.regions.1", "US"),
124+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.regions.2", "ASIA"),
125+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "project_id", testutil.ProjectId),
126+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "status", "ACTIVE"),
127+
),
128+
},
129+
},
130+
})
131+
}
132+
func testAccCheckCDNDistributionDestroy(s *terraform.State) error {
133+
ctx := context.Background()
134+
var client *cdn.APIClient
135+
var err error
136+
if testutil.MongoDBFlexCustomEndpoint == "" {
137+
client, err = cdn.NewAPIClient()
138+
} else {
139+
client, err = cdn.NewAPIClient(
140+
config.WithEndpoint(testutil.MongoDBFlexCustomEndpoint),
141+
)
142+
}
143+
if err != nil {
144+
return fmt.Errorf("creating client: %w", err)
145+
}
146+
147+
distributionsToDestroy := []string{}
148+
for _, rs := range s.RootModule().Resources {
149+
if rs.Type != "stackit_mongodbflex_instance" {
150+
continue
151+
}
152+
distributionId := strings.Split(rs.Primary.ID, core.Separator)[1]
153+
distributionsToDestroy = append(distributionsToDestroy, distributionId)
154+
}
155+
156+
for _, dist := range distributionsToDestroy {
157+
_, err := client.DeleteDistribution(ctx, testutil.ProjectId, dist).Execute()
158+
if err != nil {
159+
return fmt.Errorf("destroying CDN distribution %s during CheckDestroy: %w", dist, err)
160+
}
161+
_, err = wait.DeleteDistributionWaitHandler(ctx, client, testutil.ProjectId, dist).WaitWithContext(ctx)
162+
if err != nil {
163+
return fmt.Errorf("destroying CDN distribution %s during CheckDestroy: waiting for deletion %w", dist, err)
164+
}
165+
}
166+
return nil
167+
}

stackit/internal/services/cdn/distribution/datasource.go

+14-16
Original file line numberDiff line numberDiff line change
@@ -161,24 +161,22 @@ func (r *distributionDataSource) Schema(_ context.Context, _ datasource.SchemaRe
161161
Computed: true,
162162
Description: descriptions["config"],
163163
Attributes: map[string]schema.Attribute{
164-
"backend": schema.ListNestedAttribute{
164+
"backend": schema.SingleNestedAttribute{
165165
Computed: true,
166166
Description: descriptions["config_backend"],
167-
NestedObject: schema.NestedAttributeObject{
168-
Attributes: map[string]schema.Attribute{
169-
"type": schema.StringAttribute{
170-
Computed: true,
171-
Description: descriptions["config_backend_type"],
172-
},
173-
"origin_url": schema.StringAttribute{
174-
Computed: true,
175-
Description: descriptions["config_backend_origin_url"],
176-
},
177-
"origin_request_headers": schema.ListAttribute{
178-
Computed: true,
179-
Description: descriptions["config_backend_origin_request_headers"],
180-
ElementType: types.StringType,
181-
},
167+
Attributes: map[string]schema.Attribute{
168+
"type": schema.StringAttribute{
169+
Computed: true,
170+
Description: descriptions["config_backend_type"],
171+
},
172+
"origin_url": schema.StringAttribute{
173+
Computed: true,
174+
Description: descriptions["config_backend_origin_url"],
175+
},
176+
"origin_request_headers": schema.MapAttribute{
177+
Computed: true,
178+
Description: descriptions["config_backend_origin_request_headers"],
179+
ElementType: types.StringType,
182180
},
183181
},
184182
},

0 commit comments

Comments
 (0)