github.com/mohanarpit/terraform@v0.6.16-0.20160909104007-291f29853544/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  `