github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/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_shardCount(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(testAccKinesisStreamConfigUpdateShardCount, ri) 44 45 resource.Test(t, resource.TestCase{ 46 PreCheck: func() { testAccPreCheck(t) }, 47 Providers: testAccProviders, 48 CheckDestroy: testAccCheckKinesisStreamDestroy, 49 Steps: []resource.TestStep{ 50 resource.TestStep{ 51 Config: config, 52 Check: resource.ComposeTestCheckFunc( 53 testAccCheckKinesisStreamExists("aws_kinesis_stream.test_stream", &stream), 54 testAccCheckAWSKinesisStreamAttributes(&stream), 55 resource.TestCheckResourceAttr( 56 "aws_kinesis_stream.test_stream", "shard_count", "2"), 57 ), 58 }, 59 60 resource.TestStep{ 61 Config: updateConfig, 62 Check: resource.ComposeTestCheckFunc( 63 testAccCheckKinesisStreamExists("aws_kinesis_stream.test_stream", &stream), 64 testAccCheckAWSKinesisStreamAttributes(&stream), 65 resource.TestCheckResourceAttr( 66 "aws_kinesis_stream.test_stream", "shard_count", "4"), 67 ), 68 }, 69 }, 70 }) 71 } 72 73 func TestAccAWSKinesisStream_retentionPeriod(t *testing.T) { 74 var stream kinesis.StreamDescription 75 76 ri := rand.New(rand.NewSource(time.Now().UnixNano())).Int() 77 config := fmt.Sprintf(testAccKinesisStreamConfig, ri) 78 updateConfig := fmt.Sprintf(testAccKinesisStreamConfigUpdateRetentionPeriod, ri) 79 decreaseConfig := fmt.Sprintf(testAccKinesisStreamConfigDecreaseRetentionPeriod, ri) 80 81 resource.Test(t, resource.TestCase{ 82 PreCheck: func() { testAccPreCheck(t) }, 83 Providers: testAccProviders, 84 CheckDestroy: testAccCheckKinesisStreamDestroy, 85 Steps: []resource.TestStep{ 86 resource.TestStep{ 87 Config: config, 88 Check: resource.ComposeTestCheckFunc( 89 testAccCheckKinesisStreamExists("aws_kinesis_stream.test_stream", &stream), 90 testAccCheckAWSKinesisStreamAttributes(&stream), 91 resource.TestCheckResourceAttr( 92 "aws_kinesis_stream.test_stream", "retention_period", "24"), 93 ), 94 }, 95 96 resource.TestStep{ 97 Config: updateConfig, 98 Check: resource.ComposeTestCheckFunc( 99 testAccCheckKinesisStreamExists("aws_kinesis_stream.test_stream", &stream), 100 testAccCheckAWSKinesisStreamAttributes(&stream), 101 resource.TestCheckResourceAttr( 102 "aws_kinesis_stream.test_stream", "retention_period", "100"), 103 ), 104 }, 105 106 resource.TestStep{ 107 Config: decreaseConfig, 108 Check: resource.ComposeTestCheckFunc( 109 testAccCheckKinesisStreamExists("aws_kinesis_stream.test_stream", &stream), 110 testAccCheckAWSKinesisStreamAttributes(&stream), 111 resource.TestCheckResourceAttr( 112 "aws_kinesis_stream.test_stream", "retention_period", "28"), 113 ), 114 }, 115 }, 116 }) 117 } 118 119 func testAccCheckKinesisStreamExists(n string, stream *kinesis.StreamDescription) resource.TestCheckFunc { 120 return func(s *terraform.State) error { 121 rs, ok := s.RootModule().Resources[n] 122 if !ok { 123 return fmt.Errorf("Not found: %s", n) 124 } 125 126 if rs.Primary.ID == "" { 127 return fmt.Errorf("No Kinesis ID is set") 128 } 129 130 conn := testAccProvider.Meta().(*AWSClient).kinesisconn 131 describeOpts := &kinesis.DescribeStreamInput{ 132 StreamName: aws.String(rs.Primary.Attributes["name"]), 133 } 134 resp, err := conn.DescribeStream(describeOpts) 135 if err != nil { 136 return err 137 } 138 139 *stream = *resp.StreamDescription 140 141 return nil 142 } 143 } 144 145 func testAccCheckAWSKinesisStreamAttributes(stream *kinesis.StreamDescription) resource.TestCheckFunc { 146 return func(s *terraform.State) error { 147 if !strings.HasPrefix(*stream.StreamName, "terraform-kinesis-test") { 148 return fmt.Errorf("Bad Stream name: %s", *stream.StreamName) 149 } 150 for _, rs := range s.RootModule().Resources { 151 if rs.Type != "aws_kinesis_stream" { 152 continue 153 } 154 if *stream.StreamARN != rs.Primary.Attributes["arn"] { 155 return fmt.Errorf("Bad Stream ARN\n\t expected: %s\n\tgot: %s\n", rs.Primary.Attributes["arn"], *stream.StreamARN) 156 } 157 shard_count := strconv.Itoa(len(stream.Shards)) 158 if shard_count != rs.Primary.Attributes["shard_count"] { 159 return fmt.Errorf("Bad Stream Shard Count\n\t expected: %s\n\tgot: %s\n", rs.Primary.Attributes["shard_count"], shard_count) 160 } 161 } 162 return nil 163 } 164 } 165 166 func testAccCheckKinesisStreamDestroy(s *terraform.State) error { 167 for _, rs := range s.RootModule().Resources { 168 if rs.Type != "aws_kinesis_stream" { 169 continue 170 } 171 conn := testAccProvider.Meta().(*AWSClient).kinesisconn 172 describeOpts := &kinesis.DescribeStreamInput{ 173 StreamName: aws.String(rs.Primary.Attributes["name"]), 174 } 175 resp, err := conn.DescribeStream(describeOpts) 176 if err == nil { 177 if resp.StreamDescription != nil && *resp.StreamDescription.StreamStatus != "DELETING" { 178 return fmt.Errorf("Error: Stream still exists") 179 } 180 } 181 182 return nil 183 184 } 185 186 return nil 187 } 188 189 var testAccKinesisStreamConfig = ` 190 resource "aws_kinesis_stream" "test_stream" { 191 name = "terraform-kinesis-test-%d" 192 shard_count = 2 193 tags { 194 Name = "tf-test" 195 } 196 } 197 ` 198 199 var testAccKinesisStreamConfigUpdateShardCount = ` 200 resource "aws_kinesis_stream" "test_stream" { 201 name = "terraform-kinesis-test-%d" 202 shard_count = 4 203 tags { 204 Name = "tf-test" 205 } 206 } 207 ` 208 209 var testAccKinesisStreamConfigUpdateRetentionPeriod = ` 210 resource "aws_kinesis_stream" "test_stream" { 211 name = "terraform-kinesis-test-%d" 212 shard_count = 2 213 retention_period = 100 214 tags { 215 Name = "tf-test" 216 } 217 } 218 ` 219 220 var testAccKinesisStreamConfigDecreaseRetentionPeriod = ` 221 resource "aws_kinesis_stream" "test_stream" { 222 name = "terraform-kinesis-test-%d" 223 shard_count = 2 224 retention_period = 28 225 tags { 226 Name = "tf-test" 227 } 228 } 229 `