github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/builtin/providers/aws/resource_aws_rds_cluster_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/acctest"
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  
    11  	"github.com/aws/aws-sdk-go/aws"
    12  	"github.com/aws/aws-sdk-go/aws/awserr"
    13  	"github.com/aws/aws-sdk-go/service/rds"
    14  )
    15  
    16  func TestAccAWSRDSCluster_basic(t *testing.T) {
    17  	var v rds.DBCluster
    18  
    19  	resource.Test(t, resource.TestCase{
    20  		PreCheck:     func() { testAccPreCheck(t) },
    21  		Providers:    testAccProviders,
    22  		CheckDestroy: testAccCheckAWSClusterDestroy,
    23  		Steps: []resource.TestStep{
    24  			resource.TestStep{
    25  				Config: testAccAWSClusterConfig(acctest.RandInt()),
    26  				Check: resource.ComposeTestCheckFunc(
    27  					testAccCheckAWSClusterExists("aws_rds_cluster.default", &v),
    28  					resource.TestCheckResourceAttr(
    29  						"aws_rds_cluster.default", "storage_encrypted", "false"),
    30  				),
    31  			},
    32  		},
    33  	})
    34  }
    35  
    36  func TestAccAWSRDSCluster_encrypted(t *testing.T) {
    37  	var v rds.DBCluster
    38  
    39  	resource.Test(t, resource.TestCase{
    40  		PreCheck:     func() { testAccPreCheck(t) },
    41  		Providers:    testAccProviders,
    42  		CheckDestroy: testAccCheckAWSClusterDestroy,
    43  		Steps: []resource.TestStep{
    44  			resource.TestStep{
    45  				Config: testAccAWSClusterConfig_encrypted(acctest.RandInt()),
    46  				Check: resource.ComposeTestCheckFunc(
    47  					testAccCheckAWSClusterExists("aws_rds_cluster.default", &v),
    48  					resource.TestCheckResourceAttr(
    49  						"aws_rds_cluster.default", "storage_encrypted", "true"),
    50  				),
    51  			},
    52  		},
    53  	})
    54  }
    55  
    56  func TestAccAWSRDSCluster_backupsUpdate(t *testing.T) {
    57  	var v rds.DBCluster
    58  
    59  	ri := acctest.RandInt()
    60  	resource.Test(t, resource.TestCase{
    61  		PreCheck:     func() { testAccPreCheck(t) },
    62  		Providers:    testAccProviders,
    63  		CheckDestroy: testAccCheckAWSClusterDestroy,
    64  		Steps: []resource.TestStep{
    65  			resource.TestStep{
    66  				Config: testAccAWSClusterConfig_backups(ri),
    67  				Check: resource.ComposeTestCheckFunc(
    68  					testAccCheckAWSClusterExists("aws_rds_cluster.default", &v),
    69  					resource.TestCheckResourceAttr(
    70  						"aws_rds_cluster.default", "preferred_backup_window", "07:00-09:00"),
    71  					resource.TestCheckResourceAttr(
    72  						"aws_rds_cluster.default", "backup_retention_period", "5"),
    73  					resource.TestCheckResourceAttr(
    74  						"aws_rds_cluster.default", "preferred_maintenance_window", "tue:04:00-tue:04:30"),
    75  				),
    76  			},
    77  
    78  			resource.TestStep{
    79  				Config: testAccAWSClusterConfig_backupsUpdate(ri),
    80  				Check: resource.ComposeTestCheckFunc(
    81  					testAccCheckAWSClusterExists("aws_rds_cluster.default", &v),
    82  					resource.TestCheckResourceAttr(
    83  						"aws_rds_cluster.default", "preferred_backup_window", "03:00-09:00"),
    84  					resource.TestCheckResourceAttr(
    85  						"aws_rds_cluster.default", "backup_retention_period", "10"),
    86  					resource.TestCheckResourceAttr(
    87  						"aws_rds_cluster.default", "preferred_maintenance_window", "wed:01:00-wed:01:30"),
    88  				),
    89  			},
    90  		},
    91  	})
    92  }
    93  
    94  func testAccCheckAWSClusterDestroy(s *terraform.State) error {
    95  	for _, rs := range s.RootModule().Resources {
    96  		if rs.Type != "aws_rds_cluster" {
    97  			continue
    98  		}
    99  
   100  		// Try to find the Group
   101  		conn := testAccProvider.Meta().(*AWSClient).rdsconn
   102  		var err error
   103  		resp, err := conn.DescribeDBClusters(
   104  			&rds.DescribeDBClustersInput{
   105  				DBClusterIdentifier: aws.String(rs.Primary.ID),
   106  			})
   107  
   108  		if err == nil {
   109  			if len(resp.DBClusters) != 0 &&
   110  				*resp.DBClusters[0].DBClusterIdentifier == rs.Primary.ID {
   111  				return fmt.Errorf("DB Cluster %s still exists", rs.Primary.ID)
   112  			}
   113  		}
   114  
   115  		// Return nil if the cluster is already destroyed
   116  		if awsErr, ok := err.(awserr.Error); ok {
   117  			if awsErr.Code() == "DBClusterNotFoundFault" {
   118  				return nil
   119  			}
   120  		}
   121  
   122  		return err
   123  	}
   124  
   125  	return nil
   126  }
   127  
   128  func testAccCheckAWSClusterExists(n string, v *rds.DBCluster) resource.TestCheckFunc {
   129  	return func(s *terraform.State) error {
   130  		rs, ok := s.RootModule().Resources[n]
   131  		if !ok {
   132  			return fmt.Errorf("Not found: %s", n)
   133  		}
   134  
   135  		if rs.Primary.ID == "" {
   136  			return fmt.Errorf("No DB Instance ID is set")
   137  		}
   138  
   139  		conn := testAccProvider.Meta().(*AWSClient).rdsconn
   140  		resp, err := conn.DescribeDBClusters(&rds.DescribeDBClustersInput{
   141  			DBClusterIdentifier: aws.String(rs.Primary.ID),
   142  		})
   143  
   144  		if err != nil {
   145  			return err
   146  		}
   147  
   148  		for _, c := range resp.DBClusters {
   149  			if *c.DBClusterIdentifier == rs.Primary.ID {
   150  				*v = *c
   151  				return nil
   152  			}
   153  		}
   154  
   155  		return fmt.Errorf("DB Cluster (%s) not found", rs.Primary.ID)
   156  	}
   157  }
   158  
   159  func testAccAWSClusterConfig(n int) string {
   160  	return fmt.Sprintf(`
   161  resource "aws_rds_cluster" "default" {
   162    cluster_identifier = "tf-aurora-cluster-%d"
   163    availability_zones = ["us-west-2a","us-west-2b","us-west-2c"]
   164    database_name = "mydb"
   165    master_username = "foo"
   166    master_password = "mustbeeightcharaters"
   167  }`, n)
   168  }
   169  
   170  func testAccAWSClusterConfig_encrypted(n int) string {
   171  	return fmt.Sprintf(`
   172  resource "aws_rds_cluster" "default" {
   173    cluster_identifier = "tf-aurora-cluster-%d"
   174    availability_zones = ["us-west-2a","us-west-2b","us-west-2c"]
   175    database_name = "mydb"
   176    master_username = "foo"
   177    master_password = "mustbeeightcharaters"
   178    storage_encrypted = true
   179  }`, n)
   180  }
   181  
   182  func testAccAWSClusterConfig_backups(n int) string {
   183  	return fmt.Sprintf(`
   184  resource "aws_rds_cluster" "default" {
   185    cluster_identifier = "tf-aurora-cluster-%d"
   186    availability_zones = ["us-west-2a","us-west-2b","us-west-2c"]
   187    database_name = "mydb"
   188    master_username = "foo"
   189    master_password = "mustbeeightcharaters"
   190    backup_retention_period = 5
   191    preferred_backup_window = "07:00-09:00"
   192    preferred_maintenance_window = "tue:04:00-tue:04:30"
   193  }`, n)
   194  }
   195  
   196  func testAccAWSClusterConfig_backupsUpdate(n int) string {
   197  	return fmt.Sprintf(`
   198  resource "aws_rds_cluster" "default" {
   199    cluster_identifier = "tf-aurora-cluster-%d"
   200    availability_zones = ["us-west-2a","us-west-2b","us-west-2c"]
   201    database_name = "mydb"
   202    master_username = "foo"
   203    master_password = "mustbeeightcharaters"
   204    backup_retention_period = 10
   205    preferred_backup_window = "03:00-09:00"
   206    preferred_maintenance_window = "wed:01:00-wed:01:30"
   207    apply_immediately = true
   208  }`, n)
   209  }