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