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  `