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  `