github.com/jsoriano/terraform@v0.6.7-0.20151026070445-8b70867fdd95/builtin/providers/aws/resource_aws_rds_cluster_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"math/rand"
     6  	"testing"
     7  	"time"
     8  
     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 TestAccAWSRDSCluster_basic(t *testing.T) {
    18  	var v rds.DBCluster
    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: testAccAWSClusterConfig,
    27  				Check: resource.ComposeTestCheckFunc(
    28  					testAccCheckAWSClusterExists("aws_rds_cluster.default", &v),
    29  				),
    30  			},
    31  		},
    32  	})
    33  }
    34  
    35  func testAccCheckAWSClusterDestroy(s *terraform.State) error {
    36  	for _, rs := range s.RootModule().Resources {
    37  		if rs.Type != "aws_rds_cluster" {
    38  			continue
    39  		}
    40  
    41  		// Try to find the Group
    42  		conn := testAccProvider.Meta().(*AWSClient).rdsconn
    43  		var err error
    44  		resp, err := conn.DescribeDBClusters(
    45  			&rds.DescribeDBClustersInput{
    46  				DBClusterIdentifier: aws.String(rs.Primary.ID),
    47  			})
    48  
    49  		if err == nil {
    50  			if len(resp.DBClusters) != 0 &&
    51  				*resp.DBClusters[0].DBClusterIdentifier == rs.Primary.ID {
    52  				return fmt.Errorf("DB Cluster %s still exists", rs.Primary.ID)
    53  			}
    54  		}
    55  
    56  		// Return nil if the cluster is already destroyed
    57  		if awsErr, ok := err.(awserr.Error); ok {
    58  			if awsErr.Code() == "DBClusterNotFound" {
    59  				return nil
    60  			}
    61  		}
    62  
    63  		return err
    64  	}
    65  
    66  	return nil
    67  }
    68  
    69  func testAccCheckAWSClusterExists(n string, v *rds.DBCluster) resource.TestCheckFunc {
    70  	return func(s *terraform.State) error {
    71  		rs, ok := s.RootModule().Resources[n]
    72  		if !ok {
    73  			return fmt.Errorf("Not found: %s", n)
    74  		}
    75  
    76  		if rs.Primary.ID == "" {
    77  			return fmt.Errorf("No DB Instance ID is set")
    78  		}
    79  
    80  		conn := testAccProvider.Meta().(*AWSClient).rdsconn
    81  		resp, err := conn.DescribeDBClusters(&rds.DescribeDBClustersInput{
    82  			DBClusterIdentifier: aws.String(rs.Primary.ID),
    83  		})
    84  
    85  		if err != nil {
    86  			return err
    87  		}
    88  
    89  		for _, c := range resp.DBClusters {
    90  			if *c.DBClusterIdentifier == rs.Primary.ID {
    91  				*v = *c
    92  				return nil
    93  			}
    94  		}
    95  
    96  		return fmt.Errorf("DB Cluster (%s) not found", rs.Primary.ID)
    97  	}
    98  }
    99  
   100  // Add some random to the name, to avoid collision
   101  var testAccAWSClusterConfig = fmt.Sprintf(`
   102  resource "aws_rds_cluster" "default" {
   103    cluster_identifier = "tf-aurora-cluster-%d"
   104    availability_zones = ["us-west-2a","us-west-2b","us-west-2c"]
   105    database_name = "mydb"
   106    master_username = "foo"
   107    master_password = "mustbeeightcharaters"
   108  }`, rand.New(rand.NewSource(time.Now().UnixNano())).Int())