github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/azure/resource_azure_sql_database_server_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  // testAccAzureSqlServerName is a helper variable in which to store
    12  // the randomly-generated name of the SQL Server after it is created.
    13  // The anonymous function is there because go is too good to &"" directly.
    14  var testAccAzureSqlServerName *string = func(s string) *string { return &s }("")
    15  var testAccAzureSqlServerNames []string = []string{}
    16  
    17  func TestAccAzureSqlDatabaseServer(t *testing.T) {
    18  	name := "azure_sql_database_server.foo"
    19  	resource.Test(t, resource.TestCase{
    20  		PreCheck:     func() { testAccPreCheck(t) },
    21  		Providers:    testAccProviders,
    22  		CheckDestroy: testAccCheckAzureSqlDatabaseServerDeleted,
    23  		Steps: []resource.TestStep{
    24  			resource.TestStep{
    25  				Config: testAccAzureSqlDatabaseServerConfig,
    26  				Check: resource.ComposeTestCheckFunc(
    27  					testAccAzureSqlDatabaseServerGetName,
    28  					testAccCheckAzureSqlDatabaseServerExists(name),
    29  					resource.TestCheckResourceAttrPtr(name, "name", testAccAzureSqlServerName),
    30  					resource.TestCheckResourceAttr(name, "username", "SuperUser"),
    31  					resource.TestCheckResourceAttr(name, "password", "SuperSEKR3T"),
    32  					resource.TestCheckResourceAttr(name, "version", "2.0"),
    33  				),
    34  			},
    35  		},
    36  	})
    37  }
    38  
    39  func testAccCheckAzureSqlDatabaseServerExists(name string) resource.TestCheckFunc {
    40  	return func(s *terraform.State) error {
    41  		resource, ok := s.RootModule().Resources[name]
    42  		if !ok {
    43  			return fmt.Errorf("SQL Server %s doesn't exist.", name)
    44  		}
    45  
    46  		if resource.Primary.ID == "" {
    47  			return fmt.Errorf("SQL Server %s resource ID not set.", name)
    48  		}
    49  
    50  		sqlClient := testAccProvider.Meta().(*Client).sqlClient
    51  		servers, err := sqlClient.ListServers()
    52  		if err != nil {
    53  			return fmt.Errorf("Error issuing Azure SQL Server list request: %s", err)
    54  		}
    55  
    56  		for _, srv := range servers.DatabaseServers {
    57  			if srv.Name == resource.Primary.ID {
    58  				return nil
    59  			}
    60  		}
    61  
    62  		return fmt.Errorf("SQL Server %s doesn't exist.", name)
    63  	}
    64  }
    65  
    66  func testAccCheckAzureSqlDatabaseServerDeleted(s *terraform.State) error {
    67  	for _, resource := range s.RootModule().Resources {
    68  		if resource.Type != "azure_sql_database_server" {
    69  			continue
    70  		}
    71  
    72  		if resource.Primary.ID == "" {
    73  			return fmt.Errorf("SQL Server resource ID not set.")
    74  		}
    75  
    76  		sqlClient := testAccProvider.Meta().(*Client).sqlClient
    77  		servers, err := sqlClient.ListServers()
    78  		if err != nil {
    79  			return fmt.Errorf("Error issuing Azure SQL Server list request: %s", err)
    80  		}
    81  
    82  		for _, srv := range servers.DatabaseServers {
    83  			if srv.Name == resource.Primary.ID {
    84  				return fmt.Errorf("SQL Server %s still exists.", resource.Primary.ID)
    85  			}
    86  		}
    87  	}
    88  	return nil
    89  }
    90  
    91  // testAccAzureSqlDatabaseServerGetName is ahelper function which reads the current
    92  // state form Terraform and sets the testAccAzureSqlServerName variable
    93  // to the ID (which is actually the name) of the newly created server.
    94  // It is modeled as a resource.TestCheckFunc so as to be easily-embeddable in
    95  // test cases and run live.
    96  func testAccAzureSqlDatabaseServerGetName(s *terraform.State) error {
    97  	for _, resource := range s.RootModule().Resources {
    98  		if resource.Type != "azure_sql_database_server" {
    99  			continue
   100  		}
   101  
   102  		if resource.Primary.ID == "" {
   103  			return fmt.Errorf("Azure SQL Server resource ID not set.")
   104  		}
   105  
   106  		*testAccAzureSqlServerName = resource.Primary.ID
   107  		return nil
   108  	}
   109  
   110  	return fmt.Errorf("No Azure SQL Servers found.")
   111  }
   112  
   113  // testAccAzureSqlDatabaseServerGetNames is the same as the above; only it gets
   114  // all the servers' names.
   115  func testAccAzureSqlDatabaseServerGetNames(s *terraform.State) error {
   116  	testAccAzureSqlServerNames = []string{}
   117  
   118  	for _, resource := range s.RootModule().Resources {
   119  		if resource.Type != "azure_sql_database_server" {
   120  			continue
   121  		}
   122  
   123  		if resource.Primary.ID == "" {
   124  			return fmt.Errorf("Azure SQL Server resource ID not set.")
   125  		}
   126  
   127  		testAccAzureSqlServerNames = append(testAccAzureSqlServerNames, resource.Primary.ID)
   128  	}
   129  
   130  	if len(testAccAzureSqlServerNames) == 0 {
   131  		return fmt.Errorf("No Azure SQL Servers found.")
   132  	}
   133  
   134  	return nil
   135  }
   136  
   137  // testAccAzureSqlDatabaseServersNumber checks if the numbers of servers is
   138  // exactly equal to the given number. It is modeled as a resource.TestCheckFunc
   139  // to be easily embeddable in test checks.
   140  func testAccAzureSqlDatabaseServersNumber(n int) resource.TestCheckFunc {
   141  	return func(_ *terraform.State) error {
   142  		if len(testAccAzureSqlServerNames) != n {
   143  			return fmt.Errorf("Erroneous number of Azure Sql Database Servers. Expected %d; have %d.", n,
   144  				len(testAccAzureSqlServerNames))
   145  		}
   146  
   147  		return nil
   148  	}
   149  }
   150  
   151  const testAccAzureSqlDatabaseServerConfig = `
   152  resource "azure_sql_database_server" "foo" {
   153      location = "West US"
   154      username = "SuperUser"
   155      password = "SuperSEKR3T"
   156      version = "2.0"
   157  }
   158  `