github.com/peterbale/terraform@v0.9.0-beta2.0.20170315142748-5723acd55547/builtin/providers/azure/resource_azure_sql_database_server_firewall_rule_test.go (about) 1 package azure 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 "time" 8 9 "github.com/Azure/azure-sdk-for-go/management/sql" 10 "github.com/hashicorp/terraform/helper/resource" 11 "github.com/hashicorp/terraform/terraform" 12 ) 13 14 func TestAccAzureSqlDatabaseServerFirewallRuleBasic(t *testing.T) { 15 name := "azure_sql_database_server_firewall_rule.foo" 16 17 resource.Test(t, resource.TestCase{ 18 PreCheck: func() { testAccPreCheck(t) }, 19 Providers: testAccProviders, 20 CheckDestroy: testAccAzureDatabaseServerFirewallRuleDeleted(testAccAzureSqlServerNames), 21 Steps: []resource.TestStep{ 22 resource.TestStep{ 23 Config: testAccAzureDatabaseServerFirewallRuleBasicConfig, 24 Check: resource.ComposeTestCheckFunc( 25 testAccAzureSqlDatabaseServerGetNames, 26 testAccAzureSqlDatabaseServersNumber(1), 27 testAccAzureDatabaseServerFirewallRuleExists(name, testAccAzureSqlServerNames), 28 resource.TestCheckResourceAttr(name, "name", "terraform-testing-rule"), 29 resource.TestCheckResourceAttr(name, "start_ip", "10.0.0.0"), 30 resource.TestCheckResourceAttr(name, "end_ip", "10.0.0.255"), 31 ), 32 }, 33 }, 34 }) 35 } 36 37 func TestAccAzureSqlDatabaseServerFirewallRuleAdvanced(t *testing.T) { 38 name1 := "azure_sql_database_server_firewall_rule.foo" 39 name2 := "azure_sql_database_server_firewall_rule.bar" 40 41 resource.Test(t, resource.TestCase{ 42 PreCheck: func() { testAccPreCheck(t) }, 43 Providers: testAccProviders, 44 CheckDestroy: testAccAzureDatabaseServerFirewallRuleDeleted(testAccAzureSqlServerNames), 45 Steps: []resource.TestStep{ 46 resource.TestStep{ 47 Config: testAccAzureDatabaseServerFirewallRuleAdvancedConfig, 48 Check: resource.ComposeTestCheckFunc( 49 testAccAzureSqlDatabaseServerGetNames, 50 testAccAzureSqlDatabaseServersNumber(2), 51 //testAccAzureDatabaseServerFirewallRuleExists(name1, testAccAzureSqlServerNames), 52 resource.TestCheckResourceAttr(name1, "name", "terraform-testing-rule1"), 53 resource.TestCheckResourceAttr(name1, "start_ip", "10.0.0.0"), 54 resource.TestCheckResourceAttr(name1, "end_ip", "10.0.0.255"), 55 //testAccAzureDatabaseServerFirewallRuleExists(name2, testAccAzureSqlServerNames), 56 resource.TestCheckResourceAttr(name2, "name", "terraform-testing-rule2"), 57 resource.TestCheckResourceAttr(name2, "start_ip", "200.0.0.0"), 58 resource.TestCheckResourceAttr(name2, "end_ip", "200.255.255.255"), 59 ), 60 }, 61 }, 62 }) 63 } 64 65 func TestAccAzureSqlDatabaseServerFirewallRuleUpdate(t *testing.T) { 66 name1 := "azure_sql_database_server_firewall_rule.foo" 67 name2 := "azure_sql_database_server_firewall_rule.bar" 68 69 resource.Test(t, resource.TestCase{ 70 PreCheck: func() { testAccPreCheck(t) }, 71 Providers: testAccProviders, 72 CheckDestroy: testAccAzureDatabaseServerFirewallRuleDeleted(testAccAzureSqlServerNames), 73 Steps: []resource.TestStep{ 74 resource.TestStep{ 75 Config: testAccAzureDatabaseServerFirewallRuleAdvancedConfig, 76 Check: resource.ComposeTestCheckFunc( 77 testAccAzureSqlDatabaseServerGetNames, 78 testAccAzureSqlDatabaseServersNumber(2), 79 //testAccAzureDatabaseServerFirewallRuleExists(name1, testAccAzureSqlServerNames), 80 resource.TestCheckResourceAttr(name1, "name", "terraform-testing-rule1"), 81 resource.TestCheckResourceAttr(name1, "start_ip", "10.0.0.0"), 82 resource.TestCheckResourceAttr(name1, "end_ip", "10.0.0.255"), 83 //testAccAzureDatabaseServerFirewallRuleExists(name2, testAccAzureSqlServerNames), 84 resource.TestCheckResourceAttr(name2, "name", "terraform-testing-rule2"), 85 resource.TestCheckResourceAttr(name2, "start_ip", "200.0.0.0"), 86 resource.TestCheckResourceAttr(name2, "end_ip", "200.255.255.255"), 87 ), 88 }, 89 resource.TestStep{ 90 Config: testAccAzureDatabaseServerFirewallRuleUpdateConfig, 91 Check: resource.ComposeTestCheckFunc( 92 testAccAzureSqlDatabaseServerGetNames, 93 testAccAzureSqlDatabaseServersNumber(2), 94 //testAccAzureDatabaseServerFirewallRuleExists(name1, testAccAzureSqlServerNames), 95 resource.TestCheckResourceAttr(name1, "name", "terraform-testing-rule1"), 96 resource.TestCheckResourceAttr(name1, "start_ip", "11.0.0.0"), 97 resource.TestCheckResourceAttr(name1, "end_ip", "11.0.0.255"), 98 ), 99 }, 100 }, 101 }) 102 } 103 104 func testAccAzureDatabaseServerFirewallRuleExists(name string, servers []string) resource.TestCheckFunc { 105 return func(s *terraform.State) error { 106 res, ok := s.RootModule().Resources[name] 107 if !ok { 108 return fmt.Errorf("Azure Database Server Firewall Rule %q doesn't exist.", name) 109 } 110 111 if res.Primary.ID == "" { 112 return fmt.Errorf("Azure Database Server Firewall Rule %q res ID not set.", name) 113 } 114 115 sqlClient := testAccProvider.Meta().(*Client).sqlClient 116 117 for _, server := range servers { 118 var rules sql.ListFirewallRulesResponse 119 120 err := resource.Retry(15*time.Minute, func() *resource.RetryError { 121 var erri error 122 rules, erri = sqlClient.ListFirewallRules(server) 123 if erri != nil { 124 return resource.RetryableError( 125 fmt.Errorf("Error listing Azure Database Server Firewall Rules for Server %q: %s", server, erri)) 126 } 127 128 return nil 129 }) 130 if err != nil { 131 return err 132 } 133 134 var found bool 135 for _, rule := range rules.FirewallRules { 136 if rule.Name == res.Primary.ID { 137 found = true 138 break 139 } 140 } 141 if !found { 142 return fmt.Errorf("Azure Database Server Firewall Rule %q doesn't exists on server %q.", res.Primary.ID, server) 143 } 144 } 145 146 return nil 147 } 148 } 149 150 func testAccAzureDatabaseServerFirewallRuleDeleted(servers []string) resource.TestCheckFunc { 151 return func(s *terraform.State) error { 152 for _, resource := range s.RootModule().Resources { 153 if resource.Type != "azure_sql_database_server_firewall_rule" { 154 continue 155 } 156 157 if resource.Primary.ID == "" { 158 return fmt.Errorf("Azure Database Server Firewall Rule resource ID not set.") 159 } 160 161 sqlClient := testAccProvider.Meta().(*Client).sqlClient 162 163 for _, server := range servers { 164 rules, err := sqlClient.ListFirewallRules(server) 165 if err != nil { 166 // ¯\_(ツ)_/¯ 167 if strings.Contains(err.Error(), "Cannot open server") { 168 return nil 169 } 170 return fmt.Errorf("Error listing Azure Database Server Firewall Rules for Server %q: %s", server, err) 171 } 172 173 for _, rule := range rules.FirewallRules { 174 if rule.Name == resource.Primary.ID { 175 return fmt.Errorf("Azure Database Server Firewall Rule %q still exists on Server %q.", resource.Primary.ID, err) 176 } 177 } 178 } 179 } 180 181 return nil 182 } 183 } 184 185 var testAccAzureDatabaseServerFirewallRuleBasicConfig = ` 186 resource "azure_sql_database_server" "foo" { 187 location = "West US" 188 username = "SuperUser" 189 password = "SuperSEKR3T" 190 version = "2.0" 191 } 192 193 resource "azure_sql_database_server_firewall_rule" "foo" { 194 name = "terraform-testing-rule" 195 depends_on = ["azure_sql_database_server.foo"] 196 start_ip = "10.0.0.0" 197 end_ip = "10.0.0.255" 198 database_server_names = ["${azure_sql_database_server.foo.name}"] 199 } 200 ` 201 202 var testAccAzureDatabaseServerFirewallRuleAdvancedConfig = ` 203 resource "azure_sql_database_server" "foo" { 204 location = "West US" 205 username = "SuperUser" 206 password = "SuperSEKR3T" 207 version = "2.0" 208 } 209 210 resource "azure_sql_database_server" "bar" { 211 location = "West US" 212 username = "SuperUser" 213 password = "SuperSEKR3T" 214 version = "2.0" 215 } 216 217 resource "azure_sql_database_server_firewall_rule" "foo" { 218 name = "terraform-testing-rule1" 219 start_ip = "10.0.0.0" 220 end_ip = "10.0.0.255" 221 database_server_names = ["${azure_sql_database_server.foo.name}", "${azure_sql_database_server.bar.name}"] 222 } 223 224 resource "azure_sql_database_server_firewall_rule" "bar" { 225 name = "terraform-testing-rule2" 226 start_ip = "200.0.0.0" 227 end_ip = "200.255.255.255" 228 database_server_names = ["${azure_sql_database_server.foo.name}", "${azure_sql_database_server.bar.name}"] 229 } 230 ` 231 232 var testAccAzureDatabaseServerFirewallRuleUpdateConfig = ` 233 resource "azure_sql_database_server" "foo" { 234 location = "West US" 235 username = "SuperUser" 236 password = "SuperSEKR3T" 237 version = "2.0" 238 } 239 240 resource "azure_sql_database_server" "bar" { 241 location = "West US" 242 username = "SuperUser" 243 password = "SuperSEKR3T" 244 version = "2.0" 245 } 246 247 resource "azure_sql_database_server_firewall_rule" "foo" { 248 name = "terraform-testing-rule1" 249 start_ip = "11.0.0.0" 250 end_ip = "11.0.0.255" 251 database_server_names = ["${azure_sql_database_server.foo.name}"] 252 } 253 `