github.com/ndarilek/terraform@v0.3.8-0.20150320140257-d3135c1b2bac/builtin/providers/aws/resource_aws_db_instance_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/resource"
     8  	"github.com/hashicorp/terraform/terraform"
     9  
    10  	"github.com/hashicorp/aws-sdk-go/aws"
    11  	"github.com/hashicorp/aws-sdk-go/gen/rds"
    12  )
    13  
    14  func TestAccAWSDBInstance(t *testing.T) {
    15  	var v rds.DBInstance
    16  
    17  	resource.Test(t, resource.TestCase{
    18  		PreCheck:     func() { testAccPreCheck(t) },
    19  		Providers:    testAccProviders,
    20  		CheckDestroy: testAccCheckAWSDBInstanceDestroy,
    21  		Steps: []resource.TestStep{
    22  			resource.TestStep{
    23  				Config: testAccAWSDBInstanceConfig,
    24  				Check: resource.ComposeTestCheckFunc(
    25  					testAccCheckAWSDBInstanceExists("aws_db_instance.bar", &v),
    26  					testAccCheckAWSDBInstanceAttributes(&v),
    27  					resource.TestCheckResourceAttr(
    28  						"aws_db_instance.bar", "identifier", "foobarbaz-test-terraform"),
    29  					resource.TestCheckResourceAttr(
    30  						"aws_db_instance.bar", "allocated_storage", "10"),
    31  					resource.TestCheckResourceAttr(
    32  						"aws_db_instance.bar", "engine", "mysql"),
    33  					resource.TestCheckResourceAttr(
    34  						"aws_db_instance.bar", "engine_version", "5.6.21"),
    35  					resource.TestCheckResourceAttr(
    36  						"aws_db_instance.bar", "instance_class", "db.t1.micro"),
    37  					resource.TestCheckResourceAttr(
    38  						"aws_db_instance.bar", "name", "baz"),
    39  					resource.TestCheckResourceAttr(
    40  						"aws_db_instance.bar", "username", "foo"),
    41  					resource.TestCheckResourceAttr(
    42  						"aws_db_instance.bar", "parameter_group_name", "default.mysql5.6"),
    43  				),
    44  			},
    45  		},
    46  	})
    47  }
    48  
    49  func testAccCheckAWSDBInstanceDestroy(s *terraform.State) error {
    50  	conn := testAccProvider.Meta().(*AWSClient).rdsconn
    51  
    52  	for _, rs := range s.RootModule().Resources {
    53  		if rs.Type != "aws_db_instance" {
    54  			continue
    55  		}
    56  
    57  		// Try to find the Group
    58  		resp, err := conn.DescribeDBInstances(
    59  			&rds.DescribeDBInstancesMessage{
    60  				DBInstanceIdentifier: aws.String(rs.Primary.ID),
    61  			})
    62  
    63  		if err == nil {
    64  			if len(resp.DBInstances) != 0 &&
    65  				*resp.DBInstances[0].DBInstanceIdentifier == rs.Primary.ID {
    66  				return fmt.Errorf("DB Instance still exists")
    67  			}
    68  		}
    69  
    70  		// Verify the error
    71  		newerr, ok := err.(*aws.APIError)
    72  		if !ok {
    73  			return err
    74  		}
    75  		if newerr.Code != "InvalidDBInstance.NotFound" {
    76  			return err
    77  		}
    78  	}
    79  
    80  	return nil
    81  }
    82  
    83  func testAccCheckAWSDBInstanceAttributes(v *rds.DBInstance) resource.TestCheckFunc {
    84  	return func(s *terraform.State) error {
    85  
    86  		if *v.Engine != "mysql" {
    87  			return fmt.Errorf("bad engine: %#v", *v.Engine)
    88  		}
    89  
    90  		if *v.EngineVersion != "5.6.21" {
    91  			return fmt.Errorf("bad engine_version: %#v", *v.EngineVersion)
    92  		}
    93  
    94  		if *v.BackupRetentionPeriod != 0 {
    95  			return fmt.Errorf("bad backup_retention_period: %#v", *v.BackupRetentionPeriod)
    96  		}
    97  
    98  		return nil
    99  	}
   100  }
   101  
   102  func testAccCheckAWSDBInstanceExists(n string, v *rds.DBInstance) resource.TestCheckFunc {
   103  	return func(s *terraform.State) error {
   104  		rs, ok := s.RootModule().Resources[n]
   105  		if !ok {
   106  			return fmt.Errorf("Not found: %s", n)
   107  		}
   108  
   109  		if rs.Primary.ID == "" {
   110  			return fmt.Errorf("No DB Instance ID is set")
   111  		}
   112  
   113  		conn := testAccProvider.Meta().(*AWSClient).rdsconn
   114  
   115  		opts := rds.DescribeDBInstancesMessage{
   116  			DBInstanceIdentifier: aws.String(rs.Primary.ID),
   117  		}
   118  
   119  		resp, err := conn.DescribeDBInstances(&opts)
   120  
   121  		if err != nil {
   122  			return err
   123  		}
   124  
   125  		if len(resp.DBInstances) != 1 ||
   126  			*resp.DBInstances[0].DBInstanceIdentifier != rs.Primary.ID {
   127  			return fmt.Errorf("DB Instance not found")
   128  		}
   129  
   130  		*v = resp.DBInstances[0]
   131  
   132  		return nil
   133  	}
   134  }
   135  
   136  const testAccAWSDBInstanceConfig = `
   137  resource "aws_db_instance" "bar" {
   138  	identifier = "foobarbaz-test-terraform"
   139  
   140  	allocated_storage = 10
   141  	engine = "mysql"
   142  	engine_version = "5.6.21"
   143  	instance_class = "db.t1.micro"
   144  	name = "baz"
   145  	password = "barbarbarbar"
   146  	username = "foo"
   147  
   148  	backup_retention_period = 0
   149  
   150  	parameter_group_name = "default.mysql5.6"
   151  }
   152  `