github.com/articulate/terraform@v0.6.13-0.20160303003731-8d31c93862de/builtin/providers/aws/resource_aws_kinesis_stream_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "math/rand" 6 "strconv" 7 "strings" 8 "testing" 9 "time" 10 11 "github.com/aws/aws-sdk-go/aws" 12 "github.com/aws/aws-sdk-go/service/kinesis" 13 "github.com/hashicorp/terraform/helper/resource" 14 "github.com/hashicorp/terraform/terraform" 15 ) 16 17 func TestAccAWSKinesisStream_basic(t *testing.T) { 18 var stream kinesis.StreamDescription 19 20 config := fmt.Sprintf(testAccKinesisStreamConfig, rand.New(rand.NewSource(time.Now().UnixNano())).Int()) 21 22 resource.Test(t, resource.TestCase{ 23 PreCheck: func() { testAccPreCheck(t) }, 24 Providers: testAccProviders, 25 CheckDestroy: testAccCheckKinesisStreamDestroy, 26 Steps: []resource.TestStep{ 27 resource.TestStep{ 28 Config: config, 29 Check: resource.ComposeTestCheckFunc( 30 testAccCheckKinesisStreamExists("aws_kinesis_stream.test_stream", &stream), 31 testAccCheckAWSKinesisStreamAttributes(&stream), 32 ), 33 }, 34 }, 35 }) 36 } 37 38 func TestAccAWSKinesisStream_retentionPeriod(t *testing.T) { 39 var stream kinesis.StreamDescription 40 41 ri := rand.New(rand.NewSource(time.Now().UnixNano())).Int() 42 config := fmt.Sprintf(testAccKinesisStreamConfig, ri) 43 updateConfig := fmt.Sprintf(testAccKinesisStreamConfigUpdateRetentionPeriod, ri) 44 decreaseConfig := fmt.Sprintf(testAccKinesisStreamConfigDecreaseRetentionPeriod, ri) 45 46 resource.Test(t, resource.TestCase{ 47 PreCheck: func() { testAccPreCheck(t) }, 48 Providers: testAccProviders, 49 CheckDestroy: testAccCheckKinesisStreamDestroy, 50 Steps: []resource.TestStep{ 51 resource.TestStep{ 52 Config: config, 53 Check: resource.ComposeTestCheckFunc( 54 testAccCheckKinesisStreamExists("aws_kinesis_stream.test_stream", &stream), 55 testAccCheckAWSKinesisStreamAttributes(&stream), 56 resource.TestCheckResourceAttr( 57 "aws_kinesis_stream.test_stream", "retention_period", "24"), 58 ), 59 }, 60 61 resource.TestStep{ 62 Config: updateConfig, 63 Check: resource.ComposeTestCheckFunc( 64 testAccCheckKinesisStreamExists("aws_kinesis_stream.test_stream", &stream), 65 testAccCheckAWSKinesisStreamAttributes(&stream), 66 resource.TestCheckResourceAttr( 67 "aws_kinesis_stream.test_stream", "retention_period", "100"), 68 ), 69 }, 70 71 resource.TestStep{ 72 Config: decreaseConfig, 73 Check: resource.ComposeTestCheckFunc( 74 testAccCheckKinesisStreamExists("aws_kinesis_stream.test_stream", &stream), 75 testAccCheckAWSKinesisStreamAttributes(&stream), 76 resource.TestCheckResourceAttr( 77 "aws_kinesis_stream.test_stream", "retention_period", "28"), 78 ), 79 }, 80 }, 81 }) 82 } 83 84 func testAccCheckKinesisStreamExists(n string, stream *kinesis.StreamDescription) resource.TestCheckFunc { 85 return func(s *terraform.State) error { 86 rs, ok := s.RootModule().Resources[n] 87 if !ok { 88 return fmt.Errorf("Not found: %s", n) 89 } 90 91 if rs.Primary.ID == "" { 92 return fmt.Errorf("No Kinesis ID is set") 93 } 94 95 conn := testAccProvider.Meta().(*AWSClient).kinesisconn 96 describeOpts := &kinesis.DescribeStreamInput{ 97 StreamName: aws.String(rs.Primary.Attributes["name"]), 98 } 99 resp, err := conn.DescribeStream(describeOpts) 100 if err != nil { 101 return err 102 } 103 104 *stream = *resp.StreamDescription 105 106 return nil 107 } 108 } 109 110 func testAccCheckAWSKinesisStreamAttributes(stream *kinesis.StreamDescription) resource.TestCheckFunc { 111 return func(s *terraform.State) error { 112 if !strings.HasPrefix(*stream.StreamName, "terraform-kinesis-test") { 113 return fmt.Errorf("Bad Stream name: %s", *stream.StreamName) 114 } 115 for _, rs := range s.RootModule().Resources { 116 if rs.Type != "aws_kinesis_stream" { 117 continue 118 } 119 if *stream.StreamARN != rs.Primary.Attributes["arn"] { 120 return fmt.Errorf("Bad Stream ARN\n\t expected: %s\n\tgot: %s\n", rs.Primary.Attributes["arn"], *stream.StreamARN) 121 } 122 shard_count := strconv.Itoa(len(stream.Shards)) 123 if shard_count != rs.Primary.Attributes["shard_count"] { 124 return fmt.Errorf("Bad Stream Shard Count\n\t expected: %s\n\tgot: %s\n", rs.Primary.Attributes["shard_count"], shard_count) 125 } 126 } 127 return nil 128 } 129 } 130 131 func testAccCheckKinesisStreamDestroy(s *terraform.State) error { 132 for _, rs := range s.RootModule().Resources { 133 if rs.Type != "aws_kinesis_stream" { 134 continue 135 } 136 conn := testAccProvider.Meta().(*AWSClient).kinesisconn 137 describeOpts := &kinesis.DescribeStreamInput{ 138 StreamName: aws.String(rs.Primary.Attributes["name"]), 139 } 140 resp, err := conn.DescribeStream(describeOpts) 141 if err == nil { 142 if resp.StreamDescription != nil && *resp.StreamDescription.StreamStatus != "DELETING" { 143 return fmt.Errorf("Error: Stream still exists") 144 } 145 } 146 147 return nil 148 149 } 150 151 return nil 152 } 153 154 var testAccKinesisStreamConfig = ` 155 resource "aws_kinesis_stream" "test_stream" { 156 name = "terraform-kinesis-test-%d" 157 shard_count = 2 158 tags { 159 Name = "tf-test" 160 } 161 } 162 ` 163 164 var testAccKinesisStreamConfigUpdateRetentionPeriod = ` 165 resource "aws_kinesis_stream" "test_stream" { 166 name = "terraform-kinesis-test-%d" 167 shard_count = 2 168 retention_period = 100 169 tags { 170 Name = "tf-test" 171 } 172 } 173 ` 174 175 var testAccKinesisStreamConfigDecreaseRetentionPeriod = ` 176 resource "aws_kinesis_stream" "test_stream" { 177 name = "terraform-kinesis-test-%d" 178 shard_count = 2 179 retention_period = 28 180 tags { 181 Name = "tf-test" 182 } 183 } 184 `