github.com/gabrielperezs/terraform@v0.7.0-rc2.0.20160715084931-f7da2612946f/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  `