Skip to content

Commit 9addaea

Browse files
author
Matheus Politano
committed
chore: add redirect in acc test and address linter issues
1 parent a5f9f48 commit 9addaea

File tree

6 files changed

+60
-10
lines changed

6 files changed

+60
-10
lines changed

stackit/internal/services/cdn/cdn_acc_test.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,15 @@ var testConfigVarsHttp = config.Variables{
9292
"origin_request_headers_value": config.StringVariable("x-custom-value"),
9393
"certificate": config.StringVariable(string(cert)),
9494
"private_key": config.StringVariable(string(key)),
95+
"redirect_target_url": config.StringVariable("https://example.com"),
96+
"redirect_status_code": config.IntegerVariable(301),
97+
"redirect_matcher_value": config.StringVariable("/shop/*"),
9598
}
9699

97100
func configVarsHttpUpdated() config.Variables {
98101
updatedConfig := maps.Clone(testConfigVarsHttp)
99102
updatedConfig["regions"] = config.ListVariable(config.StringVariable("EU"), config.StringVariable("US"), config.StringVariable("ASIA"))
100-
103+
updatedConfig["redirect_target_url"] = config.StringVariable("https://example.com/updated")
101104
return updatedConfig
102105
}
103106

@@ -157,6 +160,11 @@ func TestAccCDNDistributionHttp(t *testing.T) {
157160
resource.TestCheckResourceAttrSet("stackit_cdn_distribution.distribution", "domains.0.name"),
158161
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "domains.0.type", "managed"),
159162
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "domains.0.status", "ACTIVE"),
163+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.redirects.rules.#", "1"),
164+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.redirects.rules.0.target_url", testutil.ConvertConfigVariable(testConfigVarsHttp["redirect_target_url"])),
165+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.redirects.rules.0.status_code", testutil.ConvertConfigVariable(testConfigVarsHttp["redirect_status_code"])),
166+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.redirects.rules.0.matchers.#", "1"),
167+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.redirects.rules.0.matchers.0.values.0", testutil.ConvertConfigVariable(testConfigVarsHttp["redirect_matcher_value"])),
160168
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.regions.#", "2"),
161169
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.regions.0", "EU"),
162170
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.regions.1", "US"),
@@ -277,6 +285,9 @@ func TestAccCDNDistributionHttp(t *testing.T) {
277285
resource.TestCheckResourceAttr("data.stackit_cdn_distribution.distribution", "config.optimizer.enabled", testutil.ConvertConfigVariable(testConfigVarsHttp["optimizer"])),
278286
resource.TestCheckResourceAttr("data.stackit_cdn_distribution.distribution", "project_id", testutil.ProjectId),
279287
resource.TestCheckResourceAttr("data.stackit_cdn_distribution.distribution", "status", "ACTIVE"),
288+
resource.TestCheckResourceAttr("data.stackit_cdn_distribution.distribution", "config.redirects.rules.#", "1"),
289+
resource.TestCheckResourceAttr("data.stackit_cdn_distribution.distribution", "config.redirects.rules.0.target_url", testutil.ConvertConfigVariable(testConfigVarsHttp["redirect_target_url"])),
290+
resource.TestCheckResourceAttr("data.stackit_cdn_distribution.distribution", "config.redirects.rules.0.status_code", testutil.ConvertConfigVariable(testConfigVarsHttp["redirect_status_code"])),
280291

281292
resource.TestCheckResourceAttr("data.stackit_cdn_custom_domain.custom_domain", "status", "ACTIVE"),
282293
resource.TestCheckResourceAttr("data.stackit_cdn_custom_domain.custom_domain", "name", fullDomainNameHttp),
@@ -319,6 +330,10 @@ func TestAccCDNDistributionHttp(t *testing.T) {
319330
"DE",
320331
),
321332

333+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.redirects.rules.#", "1"),
334+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.redirects.rules.0.target_url", "https://example.com/updated"),
335+
resource.TestCheckResourceAttr("stackit_cdn_distribution.distribution", "config.redirects.rules.0.status_code", testutil.ConvertConfigVariable(testConfigVarsHttp["redirect_status_code"])),
336+
322337
resource.TestCheckResourceAttr("stackit_cdn_custom_domain.custom_domain", "status", "ACTIVE"),
323338
resource.TestCheckResourceAttr("stackit_cdn_custom_domain.custom_domain", "name", fullDomainNameHttp),
324339
resource.TestCheckResourceAttr("stackit_cdn_custom_domain.custom_domain", "certificate.version", "1"),

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ func mapDataSourceFields(ctx context.Context, distribution *cdn.Distribution, mo
411411

412412
tfStatusCode := types.Int32Null()
413413
if r.StatusCode != nil {
414-
tfStatusCode = types.Int32Value(int32(*r.StatusCode))
414+
tfStatusCode = types.Int32Value(int32(*r.StatusCode)) // nolint:gosec // HTTP status codes are safely within int32 bounds
415415
}
416416

417417
tfRuleMatchCond := types.StringNull()

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,12 @@ func TestMapDataSourceFields(t *testing.T) {
4040
optimizer := types.ObjectValueMust(optimizerTypes, map[string]attr.Value{
4141
"enabled": types.BoolValue(true),
4242
})
43-
redirectsAttrTypes := configTypes["redirects"].(basetypes.ObjectType).AttrTypes
43+
// Safely assert the type
44+
redirectsObjType, ok := configTypes["redirects"].(basetypes.ObjectType)
45+
if !ok {
46+
t.Fatalf("configTypes[\"redirects\"] is not of type basetypes.ObjectType")
47+
}
48+
redirectsAttrTypes := redirectsObjType.AttrTypes
4449
config := types.ObjectValueMust(dataSourceConfigTypes, map[string]attr.Value{
4550
"backend": backend,
4651
"regions": regionsFixture,

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,8 @@ func (r *distributionResource) Schema(_ context.Context, _ resource.SchemaReques
346346
"description": schema.StringAttribute{
347347
Description: schemaDescriptions["config_redirects_rule_description"],
348348
Optional: true,
349+
Computed: true,
350+
Default: stringdefault.StaticString(""),
349351
},
350352
"enabled": schema.BoolAttribute{
351353
Optional: true,
@@ -971,7 +973,7 @@ func mapFields(ctx context.Context, distribution *cdn.Distribution, model *Model
971973
return core.DiagsToError(diags)
972974
}
973975

974-
tfValMatchCond := types.StringNull()
976+
tfValMatchCond := types.StringValue("ANY")
975977
if m.ValueMatchCondition != nil {
976978
tfValMatchCond = types.StringValue(string(*m.ValueMatchCondition))
977979
}
@@ -992,12 +994,12 @@ func mapFields(ctx context.Context, distribution *cdn.Distribution, model *Model
992994
return core.DiagsToError(diags)
993995
}
994996

995-
tfDesc := types.StringNull()
997+
tfDesc := types.StringValue("")
996998
if r.Description != nil {
997999
tfDesc = types.StringValue(*r.Description)
9981000
}
9991001

1000-
tfEnabled := types.BoolNull()
1002+
tfEnabled := types.BoolValue(true)
10011003
if r.Enabled != nil {
10021004
tfEnabled = types.BoolValue(*r.Enabled)
10031005
}
@@ -1012,7 +1014,7 @@ func mapFields(ctx context.Context, distribution *cdn.Distribution, model *Model
10121014
tfStatusCode = types.Int32Value(int32(*r.StatusCode))
10131015
}
10141016

1015-
tfRuleMatchCond := types.StringNull()
1017+
tfRuleMatchCond := types.StringValue("ANY")
10161018
if r.RuleMatchCondition != nil {
10171019
tfRuleMatchCond = types.StringValue(string(*r.RuleMatchCondition))
10181020
}

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,11 @@ func TestToCreatePayload(t *testing.T) {
4242
"enabled": types.BoolValue(true),
4343
})
4444

45-
redirectsAttrTypes := configTypes["redirects"].(basetypes.ObjectType).AttrTypes
45+
redirectsObjType, ok := configTypes["redirects"].(basetypes.ObjectType)
46+
if !ok {
47+
t.Fatalf("configTypes[\"redirects\"] is not of type basetypes.ObjectType")
48+
}
49+
redirectsAttrTypes := redirectsObjType.AttrTypes
4650

4751
config := types.ObjectValueMust(configTypes, map[string]attr.Value{
4852
"backend": backend,
@@ -276,7 +280,11 @@ func TestConvertConfig(t *testing.T) {
276280
blockedCountriesFixture := types.ListValueMust(types.StringType, blockedCountries)
277281
optimizer := types.ObjectValueMust(optimizerTypes, map[string]attr.Value{"enabled": types.BoolValue(true)})
278282

279-
redirectsAttrTypes := configTypes["redirects"].(basetypes.ObjectType).AttrTypes
283+
redirectsObjType, ok := configTypes["redirects"].(basetypes.ObjectType)
284+
if !ok {
285+
t.Fatalf("configTypes[\"redirects\"] is not of type basetypes.ObjectType")
286+
}
287+
redirectsAttrTypes := redirectsObjType.AttrTypes
280288

281289
config := types.ObjectValueMust(configTypes, map[string]attr.Value{
282290
"backend": backend,
@@ -524,7 +532,11 @@ func TestMapFields(t *testing.T) {
524532
"enabled": types.BoolValue(true),
525533
})
526534

527-
redirectsAttrTypes := configTypes["redirects"].(basetypes.ObjectType).AttrTypes
535+
redirectsObjType, ok := configTypes["redirects"].(basetypes.ObjectType)
536+
if !ok {
537+
t.Fatalf("configTypes[\"redirects\"] is not of type basetypes.ObjectType")
538+
}
539+
redirectsAttrTypes := redirectsObjType.AttrTypes
528540

529541
config := types.ObjectValueMust(configTypes, map[string]attr.Value{
530542
"backend": backend,

stackit/internal/services/cdn/testdata/resource-http-base.tf

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ variable "origin_request_headers_name" {}
99
variable "origin_request_headers_value" {}
1010
variable "certificate" {}
1111
variable "private_key" {}
12+
variable "redirect_target_url" {}
13+
variable "redirect_status_code" {}
14+
variable "redirect_matcher_value" {}
1215

1316
# dns
1417
variable "dns_zone_name" {}
@@ -39,6 +42,19 @@ resource "stackit_cdn_distribution" "distribution" {
3942
optimizer = {
4043
enabled = var.optimizer
4144
}
45+
redirects = {
46+
rules = [
47+
{
48+
target_url = var.redirect_target_url
49+
status_code = var.redirect_status_code
50+
matchers = [
51+
{
52+
values = [var.redirect_matcher_value]
53+
}
54+
]
55+
}
56+
]
57+
}
4258
backend = {
4359
type = var.backend_http_type
4460
origin_url = var.backend_origin_url

0 commit comments

Comments
 (0)