]> git.immae.eu Git - github/fretlink/terraform-provider-mailgun.git/blob - mailgun/resource_mailgun_domain_test.go
bug fix and test for route
[github/fretlink/terraform-provider-mailgun.git] / mailgun / resource_mailgun_domain_test.go
1 package mailgun
2
3 import (
4 "context"
5 "fmt"
6 "github.com/hashicorp/terraform/helper/resource"
7 "github.com/hashicorp/terraform/terraform"
8 "github.com/mailgun/mailgun-go"
9 "os"
10 "strconv"
11 "testing"
12 "time"
13 )
14
15
16 type fullDomain struct {
17 domainResponse mailgun.DomainResponse
18 domainConnection mailgun.DomainConnection
19 domainTracking mailgun.DomainTracking
20 ipAddress []string
21 credentials []mailgun.Credential
22 }
23
24 func getFullDomain(mg *mailgun.MailgunImpl, domainName string) (*fullDomain, error) {
25 ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
26 defer cancel()
27 mg = mailgun.NewMailgun(domainName, mg.APIKey())
28
29 var domain fullDomain
30 var err error
31 domain.domainResponse, err = mg.GetDomain(ctx, domainName)
32 if err != nil {
33 return nil, fmt.Errorf("Error Getting mailgun domain Details for %s: Error: %s", domainName, err)
34 }
35
36 domain.domainConnection, err = mg.GetDomainConnection(ctx, domainName)
37 if err != nil {
38 return nil, fmt.Errorf("Error Getting mailgun domain connection Details for %s: Error: %s", domainName, err)
39 }
40
41 domain.domainTracking, err = mg.GetDomainTracking(ctx, domainName)
42 if err != nil {
43 return nil, fmt.Errorf("Error Getting mailgun domain tracking Details for %s: Error: %s", domainName, err)
44 }
45
46 ipAddress, err := mg.ListDomainIPS(ctx)
47 if err != nil {
48 return nil, fmt.Errorf("Error Getting mailgun domain ips2 for %s: Error: %s", domainName, err)
49 }
50 ips := make([]string, len(ipAddress))
51 for i, r := range ipAddress {
52 ips[i] = r.IP
53
54 }
55 domain.ipAddress = ips
56 domain.credentials, err = ListCredentials(domainName, mg.APIKey())
57 if err != nil {
58 return nil, fmt.Errorf("Error Getting mailgun credentials for %s: Error: %s", domainName, err)
59 }
60 return &domain, nil
61 }
62
63 func TestAccMailgunDomain_basic(t *testing.T) {
64 var domain fullDomain
65
66 resource.Test(t, resource.TestCase{
67 PreCheck: func() { testAccPreCheck(t) },
68 Providers: testAccProviders,
69 CheckDestroy: testAccDomainCheckDestroy(&domain),
70 Steps: []resource.TestStep{
71 {
72 Config: interpolateTerraformTemplateDomain(testAccDomainConfig_basic),
73 Check: resource.ComposeTestCheckFunc(
74 testAccDomainCheckExists("mailgun_domain.exemple", &domain),
75 testAccDomainCheckAttributes("mailgun_domain.exemple", &domain),
76 ),
77 },
78 },
79 })
80 }
81
82 func TestAccMailgunDomain_withUpdate(t *testing.T) {
83 var domain fullDomain
84
85 resource.Test(t, resource.TestCase{
86 PreCheck: func() { testAccPreCheck(t) },
87 Providers: testAccProviders,
88 CheckDestroy: testAccDomainCheckDestroy(&domain),
89 Steps: []resource.TestStep{
90 {
91 Config: interpolateTerraformTemplateDomain(testAccDomainConfig_basic),
92 Check: resource.ComposeTestCheckFunc(
93 testAccDomainCheckExists("mailgun_domain.exemple", &domain),
94 testAccDomainCheckAttributes("mailgun_domain.exemple", &domain),
95 ),
96 },
97
98 {
99 Config: interpolateTerraformTemplateDomain(testAccDomainConfig_update),
100 Check: resource.ComposeTestCheckFunc(
101 testAccDomainCheckExists("mailgun_domain.exemple", &domain),
102 testAccDomainCheckAttributes("mailgun_domain.exemple", &domain),
103 ),
104 },
105 },
106 })
107 }
108
109 func testAccDomainCheckExists(rn string, domain *fullDomain) resource.TestCheckFunc {
110 return func(s *terraform.State) error {
111 rs, ok := s.RootModule().Resources[rn]
112 if !ok {
113 return fmt.Errorf("resource not found: %s", rn)
114 }
115
116 if rs.Primary.ID == "" {
117 return fmt.Errorf("domainID not set")
118 }
119
120 mg := testAccProvider.Meta().(*mailgun.MailgunImpl)
121
122 domainId := rs.Primary.ID
123
124 gotDomain, err := getFullDomain(mg, domainId)
125 if err != nil {
126 return fmt.Errorf("error getting domain: %s", err)
127 }
128
129 *domain = *gotDomain
130
131 return nil
132 }
133 }
134
135 func testAccDomainCheckAttributes(rn string, domain *fullDomain) resource.TestCheckFunc {
136 return func(s *terraform.State) error {
137 attrs := s.RootModule().Resources[rn].Primary.Attributes
138
139 check := func(key, stateValue, domainValue string) error {
140 if domainValue != stateValue {
141 return fmt.Errorf("different values for %s in state (%s) and in mailgun (%s)",
142 key, stateValue, domainValue)
143 }
144 return nil
145 }
146
147 for key, value := range attrs {
148 var err error
149
150 switch key {
151 case "name":
152 err = check(key, value, domain.domainResponse.Domain.Name)
153 case "smtp_password":
154 err = check(key, value, domain.domainResponse.Domain.SMTPPassword)
155 case "smtp_login":
156 err = check(key, value, domain.domainResponse.Domain.SMTPLogin)
157 case "wildcard":
158 err = check(key, value, strconv.FormatBool(domain.domainResponse.Domain.Wildcard))
159 case "state":
160 err = check(key, value, domain.domainResponse.Domain.State)
161 case "open_tracking_settings_active":
162 err = check(key, value, strconv.FormatBool(domain.domainTracking.Open.Active))
163 case "click_tracking_settings_active":
164 err = check(key, value, strconv.FormatBool(domain.domainTracking.Click.Active))
165 case "unsubscribe_tracking_settings_active":
166 err = check(key, value, strconv.FormatBool(domain.domainTracking.Unsubscribe.Active))
167 case "unsubscribe_tracking_settings_html_footer":
168 err = check(key, value, domain.domainTracking.Unsubscribe.HTMLFooter)
169 case "unsubscribe_tracking_settings_text_footer":
170 err = check(key, value, domain.domainTracking.Unsubscribe.TextFooter)
171 case "skip_verification":
172 err = check(key, value, strconv.FormatBool(domain.domainConnection.SkipVerification))
173 case "require_tls":
174 err = check(key, value, strconv.FormatBool(domain.domainConnection.RequireTLS))
175 }
176 if err != nil {
177 return err
178 }
179 }
180 return nil
181 }
182 }
183
184 func testAccDomainCheckDestroy(domain *fullDomain) resource.TestCheckFunc {
185 return func(s *terraform.State) error {
186 mg := testAccProvider.Meta().(*mailgun.MailgunImpl)
187 ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
188 defer cancel()
189
190 _, err := mg.GetDomain(ctx, domain.domainResponse.Domain.Name)
191 if err == nil {
192 return fmt.Errorf("domain still exists")
193 }
194
195 return nil
196 }
197 }
198
199 func interpolateTerraformTemplateDomain(template string) string {
200 domainName := ""
201
202 if v := os.Getenv("MAILGUN_DOMAIN"); v != "" {
203 domainName = v
204 }
205
206 return fmt.Sprintf(template, domainName)
207 }
208
209 const testAccDomainConfig_basic = `
210 resource "mailgun_domain" "exemple" {
211 name="%s"
212 wildcard=true
213 credentials{
214 login="aaaaaaa"
215 password="adfshfjqdskjhgfksdgfkqgfk"
216 }
217 }
218 `
219
220 const testAccDomainConfig_update = `
221 resource "mailgun_domain" "exemple" {
222 name="%s"
223 credentials{
224 login="aaaaaaa"
225 password="adfshfjqdskjhgfksdgfkqgfk"
226 }
227
228 }
229 `
230