github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/builtin/providers/aws/resource_aws_kinesis_firehose_delivery_stream_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "log" 6 "math/rand" 7 "os" 8 "strings" 9 "testing" 10 "time" 11 12 "github.com/aws/aws-sdk-go/aws" 13 "github.com/aws/aws-sdk-go/service/firehose" 14 "github.com/hashicorp/terraform/helper/resource" 15 "github.com/hashicorp/terraform/terraform" 16 ) 17 18 func TestAccAWSKinesisFirehoseDeliveryStream_basic(t *testing.T) { 19 var stream firehose.DeliveryStreamDescription 20 ri := rand.New(rand.NewSource(time.Now().UnixNano())).Int() 21 config := fmt.Sprintf(testAccKinesisFirehoseDeliveryStreamConfig_basic, 22 os.Getenv("AWS_ACCOUNT_ID"), ri, ri) 23 24 resource.Test(t, resource.TestCase{ 25 PreCheck: func() { 26 testAccPreCheck(t) 27 if os.Getenv("AWS_ACCOUNT_ID") == "" { 28 t.Fatal("AWS_ACCOUNT_ID must be set") 29 } 30 }, 31 Providers: testAccProviders, 32 CheckDestroy: testAccCheckKinesisFirehoseDeliveryStreamDestroy, 33 Steps: []resource.TestStep{ 34 resource.TestStep{ 35 Config: config, 36 Check: resource.ComposeTestCheckFunc( 37 testAccCheckKinesisFirehoseDeliveryStreamExists("aws_kinesis_firehose_delivery_stream.test_stream", &stream), 38 testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(&stream), 39 ), 40 }, 41 }, 42 }) 43 } 44 45 func TestAccAWSKinesisFirehoseDeliveryStream_s3ConfigUpdates(t *testing.T) { 46 var stream firehose.DeliveryStreamDescription 47 48 ri := rand.New(rand.NewSource(time.Now().UnixNano())).Int() 49 preconfig := fmt.Sprintf(testAccKinesisFirehoseDeliveryStreamConfig_s3, 50 os.Getenv("AWS_ACCOUNT_ID"), ri, ri) 51 postConfig := fmt.Sprintf(testAccKinesisFirehoseDeliveryStreamConfig_s3Updates, 52 os.Getenv("AWS_ACCOUNT_ID"), ri, ri) 53 54 resource.Test(t, resource.TestCase{ 55 PreCheck: func() { 56 testAccPreCheck(t) 57 if os.Getenv("AWS_ACCOUNT_ID") == "" { 58 t.Fatal("AWS_ACCOUNT_ID must be set") 59 } 60 }, 61 Providers: testAccProviders, 62 CheckDestroy: testAccCheckKinesisFirehoseDeliveryStreamDestroy, 63 Steps: []resource.TestStep{ 64 resource.TestStep{ 65 Config: preconfig, 66 Check: resource.ComposeTestCheckFunc( 67 testAccCheckKinesisFirehoseDeliveryStreamExists("aws_kinesis_firehose_delivery_stream.test_stream", &stream), 68 testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(&stream), 69 resource.TestCheckResourceAttr( 70 "aws_kinesis_firehose_delivery_stream.test_stream", "s3_buffer_size", "5"), 71 resource.TestCheckResourceAttr( 72 "aws_kinesis_firehose_delivery_stream.test_stream", "s3_buffer_interval", "300"), 73 resource.TestCheckResourceAttr( 74 "aws_kinesis_firehose_delivery_stream.test_stream", "s3_data_compression", "UNCOMPRESSED"), 75 ), 76 }, 77 78 resource.TestStep{ 79 Config: postConfig, 80 Check: resource.ComposeTestCheckFunc( 81 testAccCheckKinesisFirehoseDeliveryStreamExists("aws_kinesis_firehose_delivery_stream.test_stream", &stream), 82 testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(&stream), 83 resource.TestCheckResourceAttr( 84 "aws_kinesis_firehose_delivery_stream.test_stream", "s3_buffer_size", "10"), 85 resource.TestCheckResourceAttr( 86 "aws_kinesis_firehose_delivery_stream.test_stream", "s3_buffer_interval", "400"), 87 resource.TestCheckResourceAttr( 88 "aws_kinesis_firehose_delivery_stream.test_stream", "s3_data_compression", "GZIP"), 89 ), 90 }, 91 }, 92 }) 93 } 94 95 func testAccCheckKinesisFirehoseDeliveryStreamExists(n string, stream *firehose.DeliveryStreamDescription) resource.TestCheckFunc { 96 return func(s *terraform.State) error { 97 rs, ok := s.RootModule().Resources[n] 98 log.Printf("State: %#v", s.RootModule().Resources) 99 if !ok { 100 return fmt.Errorf("Not found: %s", n) 101 } 102 103 if rs.Primary.ID == "" { 104 return fmt.Errorf("No Kinesis Firehose ID is set") 105 } 106 107 conn := testAccProvider.Meta().(*AWSClient).firehoseconn 108 describeOpts := &firehose.DescribeDeliveryStreamInput{ 109 DeliveryStreamName: aws.String(rs.Primary.Attributes["name"]), 110 } 111 resp, err := conn.DescribeDeliveryStream(describeOpts) 112 if err != nil { 113 return err 114 } 115 116 *stream = *resp.DeliveryStreamDescription 117 118 return nil 119 } 120 } 121 122 func testAccCheckAWSKinesisFirehoseDeliveryStreamAttributes(stream *firehose.DeliveryStreamDescription) resource.TestCheckFunc { 123 return func(s *terraform.State) error { 124 if !strings.HasPrefix(*stream.DeliveryStreamName, "terraform-kinesis-firehose") { 125 return fmt.Errorf("Bad Stream name: %s", *stream.DeliveryStreamName) 126 } 127 for _, rs := range s.RootModule().Resources { 128 if rs.Type != "aws_kinesis_firehose_delivery_stream" { 129 continue 130 } 131 if *stream.DeliveryStreamARN != rs.Primary.Attributes["arn"] { 132 return fmt.Errorf("Bad Delivery Stream ARN\n\t expected: %s\n\tgot: %s\n", rs.Primary.Attributes["arn"], *stream.DeliveryStreamARN) 133 } 134 } 135 return nil 136 } 137 } 138 139 func testAccCheckKinesisFirehoseDeliveryStreamDestroy(s *terraform.State) error { 140 for _, rs := range s.RootModule().Resources { 141 if rs.Type != "aws_kinesis_firehose_delivery_stream" { 142 continue 143 } 144 conn := testAccProvider.Meta().(*AWSClient).firehoseconn 145 describeOpts := &firehose.DescribeDeliveryStreamInput{ 146 DeliveryStreamName: aws.String(rs.Primary.Attributes["name"]), 147 } 148 resp, err := conn.DescribeDeliveryStream(describeOpts) 149 if err == nil { 150 if resp.DeliveryStreamDescription != nil && *resp.DeliveryStreamDescription.DeliveryStreamStatus != "DELETING" { 151 return fmt.Errorf("Error: Delivery Stream still exists") 152 } 153 } 154 155 return nil 156 157 } 158 159 return nil 160 } 161 162 var testAccKinesisFirehoseDeliveryStreamConfig_basic = ` 163 resource "aws_iam_role" "firehose" { 164 name = "terraform_acctest_firehose_delivery_role" 165 assume_role_policy = <<EOF 166 { 167 "Version": "2012-10-17", 168 "Statement": [ 169 { 170 "Sid": "", 171 "Effect": "Allow", 172 "Principal": { 173 "Service": "firehose.amazonaws.com" 174 }, 175 "Action": "sts:AssumeRole", 176 "Condition": { 177 "StringEquals": { 178 "sts:ExternalId": "%s" 179 } 180 } 181 } 182 ] 183 } 184 EOF 185 } 186 187 resource "aws_s3_bucket" "bucket" { 188 bucket = "tf-test-bucket-%d" 189 acl = "private" 190 } 191 192 resource "aws_iam_role_policy" "firehose" { 193 name = "terraform_acctest_firehose_delivery_policy" 194 role = "${aws_iam_role.firehose.id}" 195 policy = <<EOF 196 { 197 "Version": "2012-10-17", 198 "Statement": [ 199 { 200 "Sid": "", 201 "Effect": "Allow", 202 "Action": [ 203 "s3:AbortMultipartUpload", 204 "s3:GetBucketLocation", 205 "s3:GetObject", 206 "s3:ListBucket", 207 "s3:ListBucketMultipartUploads", 208 "s3:PutObject" 209 ], 210 "Resource": [ 211 "arn:aws:s3:::${aws_s3_bucket.bucket.id}", 212 "arn:aws:s3:::${aws_s3_bucket.bucket.id}/*" 213 ] 214 } 215 ] 216 } 217 EOF 218 } 219 220 resource "aws_kinesis_firehose_delivery_stream" "test_stream" { 221 depends_on = ["aws_iam_role_policy.firehose"] 222 name = "terraform-kinesis-firehose-basictest-%d" 223 destination = "s3" 224 role_arn = "${aws_iam_role.firehose.arn}" 225 s3_bucket_arn = "${aws_s3_bucket.bucket.arn}" 226 }` 227 228 var testAccKinesisFirehoseDeliveryStreamConfig_s3 = ` 229 resource "aws_iam_role" "firehose" { 230 name = "terraform_acctest_firehose_delivery_role_s3" 231 assume_role_policy = <<EOF 232 { 233 "Version": "2012-10-17", 234 "Statement": [ 235 { 236 "Sid": "", 237 "Effect": "Allow", 238 "Principal": { 239 "Service": "firehose.amazonaws.com" 240 }, 241 "Action": "sts:AssumeRole", 242 "Condition": { 243 "StringEquals": { 244 "sts:ExternalId": "%s" 245 } 246 } 247 } 248 ] 249 } 250 EOF 251 } 252 253 resource "aws_s3_bucket" "bucket" { 254 bucket = "tf-test-bucket-%d" 255 acl = "private" 256 } 257 258 resource "aws_iam_role_policy" "firehose" { 259 name = "terraform_acctest_firehose_delivery_policy_s3" 260 role = "${aws_iam_role.firehose.id}" 261 policy = <<EOF 262 { 263 "Version": "2012-10-17", 264 "Statement": [ 265 { 266 "Sid": "", 267 "Effect": "Allow", 268 "Action": [ 269 "s3:AbortMultipartUpload", 270 "s3:GetBucketLocation", 271 "s3:GetObject", 272 "s3:ListBucket", 273 "s3:ListBucketMultipartUploads", 274 "s3:PutObject" 275 ], 276 "Resource": [ 277 "arn:aws:s3:::${aws_s3_bucket.bucket.id}", 278 "arn:aws:s3:::${aws_s3_bucket.bucket.id}/*" 279 ] 280 } 281 ] 282 } 283 EOF 284 } 285 286 resource "aws_kinesis_firehose_delivery_stream" "test_stream" { 287 depends_on = ["aws_iam_role_policy.firehose"] 288 name = "terraform-kinesis-firehose-s3test-%d" 289 destination = "s3" 290 role_arn = "${aws_iam_role.firehose.arn}" 291 s3_bucket_arn = "${aws_s3_bucket.bucket.arn}" 292 }` 293 294 var testAccKinesisFirehoseDeliveryStreamConfig_s3Updates = ` 295 resource "aws_iam_role" "firehose" { 296 name = "terraform_acctest_firehose_delivery_role_s3" 297 assume_role_policy = <<EOF 298 { 299 "Version": "2012-10-17", 300 "Statement": [ 301 { 302 "Sid": "", 303 "Effect": "Allow", 304 "Principal": { 305 "Service": "firehose.amazonaws.com" 306 }, 307 "Action": "sts:AssumeRole", 308 "Condition": { 309 "StringEquals": { 310 "sts:ExternalId": "%s" 311 } 312 } 313 } 314 ] 315 } 316 EOF 317 } 318 319 resource "aws_s3_bucket" "bucket" { 320 bucket = "tf-test-bucket-%d" 321 acl = "private" 322 } 323 324 resource "aws_iam_role_policy" "firehose" { 325 name = "terraform_acctest_firehose_delivery_policy_s3" 326 role = "${aws_iam_role.firehose.id}" 327 policy = <<EOF 328 { 329 "Version": "2012-10-17", 330 "Statement": [ 331 { 332 "Sid": "", 333 "Effect": "Allow", 334 "Action": [ 335 "s3:AbortMultipartUpload", 336 "s3:GetBucketLocation", 337 "s3:GetObject", 338 "s3:ListBucket", 339 "s3:ListBucketMultipartUploads", 340 "s3:PutObject" 341 ], 342 "Resource": [ 343 "arn:aws:s3:::${aws_s3_bucket.bucket.id}", 344 "arn:aws:s3:::${aws_s3_bucket.bucket.id}/*" 345 ] 346 } 347 ] 348 } 349 EOF 350 } 351 352 resource "aws_kinesis_firehose_delivery_stream" "test_stream" { 353 depends_on = ["aws_iam_role_policy.firehose"] 354 name = "terraform-kinesis-firehose-s3test-%d" 355 destination = "s3" 356 role_arn = "${aws_iam_role.firehose.arn}" 357 s3_bucket_arn = "${aws_s3_bucket.bucket.arn}" 358 s3_buffer_size = 10 359 s3_buffer_interval = 400 360 s3_data_compression = "GZIP" 361 }`