github.com/joshgarnett/terraform@v0.5.4-0.20160219181435-92dc20bb3594/builtin/providers/aws/resource_aws_rds_cluster_instance_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/hashicorp/terraform/helper/acctest"
     9  	"github.com/hashicorp/terraform/helper/resource"
    10  	"github.com/hashicorp/terraform/terraform"
    11  
    12  	"github.com/aws/aws-sdk-go/aws"
    13  	"github.com/aws/aws-sdk-go/aws/awserr"
    14  	"github.com/aws/aws-sdk-go/service/rds"
    15  )
    16  
    17  func TestAccAWSRDSClusterInstance_basic(t *testing.T) {
    18  	var v rds.DBInstance
    19  
    20  	resource.Test(t, resource.TestCase{
    21  		PreCheck:     func() { testAccPreCheck(t) },
    22  		Providers:    testAccProviders,
    23  		CheckDestroy: testAccCheckAWSClusterDestroy,
    24  		Steps: []resource.TestStep{
    25  			resource.TestStep{
    26  				Config: testAccAWSClusterInstanceConfig,
    27  				Check: resource.ComposeTestCheckFunc(
    28  					testAccCheckAWSClusterInstanceExists("aws_rds_cluster_instance.cluster_instances", &v),
    29  					testAccCheckAWSDBClusterInstanceAttributes(&v),
    30  				),
    31  			},
    32  		},
    33  	})
    34  }
    35  
    36  func testAccCheckAWSClusterInstanceDestroy(s *terraform.State) error {
    37  	for _, rs := range s.RootModule().Resources {
    38  		if rs.Type != "aws_rds_cluster" {
    39  			continue
    40  		}
    41  
    42  		// Try to find the Group
    43  		conn := testAccProvider.Meta().(*AWSClient).rdsconn
    44  		var err error
    45  		resp, err := conn.DescribeDBInstances(
    46  			&rds.DescribeDBInstancesInput{
    47  				DBInstanceIdentifier: aws.String(rs.Primary.ID),
    48  			})
    49  
    50  		if err == nil {
    51  			if len(resp.DBInstances) != 0 &&
    52  				*resp.DBInstances[0].DBInstanceIdentifier == rs.Primary.ID {
    53  				return fmt.Errorf("DB Cluster Instance %s still exists", rs.Primary.ID)
    54  			}
    55  		}
    56  
    57  		// Return nil if the Cluster Instance is already destroyed
    58  		if awsErr, ok := err.(awserr.Error); ok {
    59  			if awsErr.Code() == "DBInstanceNotFound" {
    60  				return nil
    61  			}
    62  		}
    63  
    64  		return err
    65  
    66  	}
    67  
    68  	return nil
    69  }
    70  
    71  func testAccCheckAWSDBClusterInstanceAttributes(v *rds.DBInstance) resource.TestCheckFunc {
    72  	return func(s *terraform.State) error {
    73  
    74  		if *v.Engine != "aurora" {
    75  			return fmt.Errorf("bad engine, expected \"aurora\": %#v", *v.Engine)
    76  		}
    77  
    78  		if !strings.HasPrefix(*v.DBClusterIdentifier, "tf-aurora-cluster") {
    79  			return fmt.Errorf("Bad Cluster Identifier prefix:\nexpected: %s\ngot: %s", "tf-aurora-cluster", *v.DBClusterIdentifier)
    80  		}
    81  
    82  		return nil
    83  	}
    84  }
    85  
    86  func testAccCheckAWSClusterInstanceExists(n string, v *rds.DBInstance) resource.TestCheckFunc {
    87  	return func(s *terraform.State) error {
    88  		rs, ok := s.RootModule().Resources[n]
    89  		if !ok {
    90  			return fmt.Errorf("Not found: %s", n)
    91  		}
    92  
    93  		if rs.Primary.ID == "" {
    94  			return fmt.Errorf("No DB Instance ID is set")
    95  		}
    96  
    97  		conn := testAccProvider.Meta().(*AWSClient).rdsconn
    98  		resp, err := conn.DescribeDBInstances(&rds.DescribeDBInstancesInput{
    99  			DBInstanceIdentifier: aws.String(rs.Primary.ID),
   100  		})
   101  
   102  		if err != nil {
   103  			return err
   104  		}
   105  
   106  		for _, d := range resp.DBInstances {
   107  			if *d.DBInstanceIdentifier == rs.Primary.ID {
   108  				*v = *d
   109  				return nil
   110  			}
   111  		}
   112  
   113  		return fmt.Errorf("DB Cluster (%s) not found", rs.Primary.ID)
   114  	}
   115  }
   116  
   117  // Add some random to the name, to avoid collision
   118  var testAccAWSClusterInstanceConfig = fmt.Sprintf(`
   119  resource "aws_rds_cluster" "default" {
   120    cluster_identifier = "tf-aurora-cluster-test-%d"
   121    availability_zones = ["us-west-2a", "us-west-2b", "us-west-2c"]
   122    database_name      = "mydb"
   123    master_username    = "foo"
   124    master_password    = "mustbeeightcharaters"
   125  }
   126  
   127  resource "aws_rds_cluster_instance" "cluster_instances" {
   128    identifier         = "tf-cluster-instance-%d"
   129    cluster_identifier = "${aws_rds_cluster.default.id}"
   130    instance_class     = "db.r3.large"
   131  }
   132  
   133  `, acctest.RandInt(), acctest.RandInt())