Skip to content

Commit

Permalink
Two more test scenarios and fixes for it
Browse files Browse the repository at this point in the history
  • Loading branch information
fformica committed Jun 7, 2024
1 parent 01b1b2b commit 413fa87
Show file tree
Hide file tree
Showing 3 changed files with 158 additions and 7 deletions.
3 changes: 2 additions & 1 deletion ns1/examples/redirect.tf
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@

resource "ns1_redirect_certificate" "example" {
domain = "www.example.com"
domain = "*.example.com"
}

resource "ns1_redirect" "example" {
certificate_id = "${ns1_redirect_certificate.example.id}"
domain = "www.example.com"
path = "/from/path"
target = "https://url.com/target/path"
Expand Down
23 changes: 19 additions & 4 deletions ns1/resource_redirect.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ func redirectConfigResource() *schema.Resource {
"certificate_id": {
Type: schema.TypeString,
Optional: true,
Computed: true,
},
"forwarding_mode": {
Type: schema.TypeString,
Expand Down Expand Up @@ -175,6 +176,8 @@ func RedirectConfigCreate(d *schema.ResourceData, meta interface{}) error {
getBoolp(d, "query_forwarding"),
)

r.CertificateID = getStringp(d, "certificate_id")

cfg, resp, err := client.Redirects.Create(r)
if err != nil {
return ConvertToNs1Error(resp, err)
Expand Down Expand Up @@ -235,8 +238,8 @@ func RedirectConfigUpdate(d *schema.ResourceData, meta interface{}) error {
)
id := d.Id()
r.ID = &id
certId := d.Get("certificate_id").(string)
r.CertificateID = &certId

r.CertificateID = getStringp(d, "certificate_id")

cfg, resp, err := client.Redirects.Update(r)
if err != nil {
Expand Down Expand Up @@ -340,15 +343,27 @@ func validateURL(val interface{}, key string) (warns []string, errs []error) {

// return nil if the value is not set, a valid pointer if it is
func getBoolp(d *schema.ResourceData, key string) *bool {
val, exists := d.GetOk(key)
if exists {
val := d.Get(key)
if val != nil {
ret := val.(bool)
return &ret
} else {
return nil
}
}

// return nil if the value is not set, a valid pointer if it is
func getStringp(d *schema.ResourceData, key string) *string {
val := d.Get(key)
if val != nil {
ret := val.(string)
if ret != "" {
return &ret
}
}
return nil
}

// return nil if the value is not set, a valid pointer if it is
func getFwTypep(d *schema.ResourceData, key string) *redirect.ForwardingType {
val := d.Get(key).(string)
Expand Down
139 changes: 137 additions & 2 deletions ns1/resource_redirect_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,72 @@ func TestAccRedirectConfig_basic(t *testing.T) {
})
}

func TestAccRedirectConfig_untracked_cert(t *testing.T) {
var redirect redirect.Configuration
rString := acctest.RandStringFromCharSet(15, acctest.CharSetAlphaNum)
domainName := fmt.Sprintf("terraform-test-%s.io", rString)

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckRedirectDestroy,
Steps: []resource.TestStep{
{
Config: testAccRedirectNoCert(rString),
Check: resource.ComposeTestCheckFunc(
testAccCheckRedirectConfigExists("ns1_redirect.it", &redirect),
testAccCheckRedirectConfigDomain(&redirect, "test."+domainName),
testAccCheckRedirectConfigFwType(&redirect, "masking"),
testAccCheckRedirectConfigTags(&redirect, []string{}),
),
},
{
Config: testAccRedirectNoCertUpdated(rString),
Check: resource.ComposeTestCheckFunc(
testAccCheckRedirectConfigExists("ns1_redirect.it", &redirect),
testAccCheckRedirectConfigDomain(&redirect, "test."+domainName),
testAccCheckRedirectConfigFwType(&redirect, "permanent"),
testAccCheckRedirectConfigTags(&redirect, []string{}),
),
},
},
})
}

func TestAccRedirectConfig_http_to_https(t *testing.T) {
var redirect redirect.Configuration
rString := acctest.RandStringFromCharSet(15, acctest.CharSetAlphaNum)
domainName := fmt.Sprintf("terraform-test-%s.io", rString)

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckRedirectDestroy,
Steps: []resource.TestStep{
{
Config: testAccRedirectHTTP(rString),
Check: resource.ComposeTestCheckFunc(
testAccCheckRedirectConfigExists("ns1_redirect.it", &redirect),
testAccCheckRedirectConfigDomain(&redirect, "test."+domainName),
testAccCheckRedirectConfigFwType(&redirect, "permanent"),
testAccCheckRedirectConfigHTTPS(&redirect, false),
testAccCheckRedirectConfigCertIdPresent(&redirect, false),
),
},
{
Config: testAccRedirectNoCertUpdated(rString),
Check: resource.ComposeTestCheckFunc(
testAccCheckRedirectConfigExists("ns1_redirect.it", &redirect),
testAccCheckRedirectConfigDomain(&redirect, "test."+domainName),
testAccCheckRedirectConfigFwType(&redirect, "permanent"),
testAccCheckRedirectConfigHTTPS(&redirect, true),
testAccCheckRedirectConfigCertIdPresent(&redirect, true),
),
},
},
})
}

func testAccRedirectBasic(rString string) string {
return fmt.Sprintf(`
resource "ns1_redirect" "it" {
Expand Down Expand Up @@ -104,6 +170,57 @@ resource "ns1_zone" "test" {
`, rString)
}

func testAccRedirectNoCert(rString string) string {
return fmt.Sprintf(`
resource "ns1_redirect" "it" {
domain = "test.${ns1_zone.test.zone}"
path = "/from/path/*"
target = "https://url.com/target/path"
forwarding_mode = "capture"
forwarding_type = "masking"
}
resource "ns1_zone" "test" {
zone = "terraform-test-%s.io"
}
`, rString)
}

func testAccRedirectNoCertUpdated(rString string) string {
return fmt.Sprintf(`
resource "ns1_redirect" "it" {
domain = "test.${ns1_zone.test.zone}"
path = "/from/path/*"
target = "https://url.com/target/path"
forwarding_mode = "capture"
forwarding_type = "permanent"
https_enabled = true
https_forced = true
tags = []
}
resource "ns1_zone" "test" {
zone = "terraform-test-%s.io"
}
`, rString)
}

func testAccRedirectHTTP(rString string) string {
return fmt.Sprintf(`
resource "ns1_redirect" "it" {
domain = "test.${ns1_zone.test.zone}"
path = "/from/path/*"
target = "https://url.com/target/path"
https_enabled = false
https_forced = false
}
resource "ns1_zone" "test" {
zone = "terraform-test-%s.io"
}
`, rString)
}

func testAccCheckRedirectDestroy(s *terraform.State) error {
client := testAccProvider.Meta().(*ns1.Client)

Expand Down Expand Up @@ -173,7 +290,7 @@ func testAccCheckRedirectConfigExists(n string, cfg *redirect.Configuration) res
func testAccCheckRedirectConfigDomain(cfg *redirect.Configuration, expected string) resource.TestCheckFunc {
return func(s *terraform.State) error {
if cfg.Domain != expected {
return fmt.Errorf("Name: got: %s want: %s", cfg.Domain, expected)
return fmt.Errorf("Domain: got: %s want: %s", cfg.Domain, expected)
}
return nil
}
Expand All @@ -182,7 +299,25 @@ func testAccCheckRedirectConfigDomain(cfg *redirect.Configuration, expected stri
func testAccCheckRedirectConfigFwType(cfg *redirect.Configuration, expected string) resource.TestCheckFunc {
return func(s *terraform.State) error {
if cfg.ForwardingType.String() != expected {
return fmt.Errorf("Name: got: %s want: %s", cfg.ForwardingType.String(), expected)
return fmt.Errorf("ForwardingType: got: %s want: %s", cfg.ForwardingType.String(), expected)
}
return nil
}
}

func testAccCheckRedirectConfigHTTPS(cfg *redirect.Configuration, expected bool) resource.TestCheckFunc {
return func(s *terraform.State) error {
if *cfg.HttpsEnabled != expected {
return fmt.Errorf("HttpsEnabled: got: %t want: %t", *cfg.HttpsEnabled, expected)
}
return nil
}
}

func testAccCheckRedirectConfigCertIdPresent(cfg *redirect.Configuration, expected bool) resource.TestCheckFunc {
return func(s *terraform.State) error {
if (cfg.CertificateID != nil) != expected {
return fmt.Errorf("CertificateID present: got: %t want: %t", cfg.CertificateID != nil, expected)
}
return nil
}
Expand Down

0 comments on commit 413fa87

Please sign in to comment.