github.com/erriapo/terraform@v0.6.12-0.20160203182612-0340ea72354f/builtin/providers/aws/resource_aws_rds_cluster_instance_test.go (about)

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