github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/aws/resource_aws_spot_datafeed_subscription_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "testing" 6 "time" 7 8 "github.com/aws/aws-sdk-go/aws/awserr" 9 "github.com/aws/aws-sdk-go/service/ec2" 10 "github.com/hashicorp/terraform/helper/acctest" 11 "github.com/hashicorp/terraform/helper/resource" 12 "github.com/hashicorp/terraform/terraform" 13 ) 14 15 func TestAccAWSSpotDatafeedSubscription_basic(t *testing.T) { 16 var subscription ec2.SpotDatafeedSubscription 17 ri := acctest.RandInt() 18 19 resource.Test(t, resource.TestCase{ 20 PreCheck: func() { testAccPreCheck(t) }, 21 Providers: testAccProviders, 22 CheckDestroy: testAccCheckAWSSpotDatafeedSubscriptionDestroy, 23 Steps: []resource.TestStep{ 24 resource.TestStep{ 25 Config: testAccAWSSpotDatafeedSubscription(ri), 26 Check: resource.ComposeTestCheckFunc( 27 testAccCheckAWSSpotDatafeedSubscriptionExists("aws_spot_datafeed_subscription.default", &subscription), 28 ), 29 }, 30 }, 31 }) 32 } 33 34 func testAccCheckAWSSpotDatafeedSubscriptionDisappears(subscription *ec2.SpotDatafeedSubscription) resource.TestCheckFunc { 35 return func(s *terraform.State) error { 36 conn := testAccProvider.Meta().(*AWSClient).ec2conn 37 38 _, err := conn.DeleteSpotDatafeedSubscription(&ec2.DeleteSpotDatafeedSubscriptionInput{}) 39 if err != nil { 40 return err 41 } 42 43 return resource.Retry(40*time.Minute, func() *resource.RetryError { 44 _, err := conn.DescribeSpotDatafeedSubscription(&ec2.DescribeSpotDatafeedSubscriptionInput{}) 45 if err != nil { 46 cgw, ok := err.(awserr.Error) 47 if ok && cgw.Code() == "InvalidSpotDatafeed.NotFound" { 48 return nil 49 } 50 return resource.NonRetryableError( 51 fmt.Errorf("Error retrieving Spot Datafeed Subscription: %s", err)) 52 } 53 return resource.RetryableError(fmt.Errorf("Waiting for Spot Datafeed Subscription")) 54 }) 55 } 56 } 57 58 func TestAccAWSSpotDatafeedSubscription_disappears(t *testing.T) { 59 var subscription ec2.SpotDatafeedSubscription 60 ri := acctest.RandInt() 61 62 resource.Test(t, resource.TestCase{ 63 PreCheck: func() { testAccPreCheck(t) }, 64 Providers: testAccProviders, 65 CheckDestroy: testAccCheckAWSSpotDatafeedSubscriptionDestroy, 66 Steps: []resource.TestStep{ 67 resource.TestStep{ 68 Config: testAccAWSSpotDatafeedSubscription(ri), 69 Check: resource.ComposeTestCheckFunc( 70 testAccCheckAWSSpotDatafeedSubscriptionExists("aws_spot_datafeed_subscription.default", &subscription), 71 testAccCheckAWSSpotDatafeedSubscriptionDisappears(&subscription), 72 ), 73 ExpectNonEmptyPlan: true, 74 }, 75 }, 76 }) 77 } 78 79 func testAccCheckAWSSpotDatafeedSubscriptionExists(n string, subscription *ec2.SpotDatafeedSubscription) resource.TestCheckFunc { 80 return func(s *terraform.State) error { 81 rs, ok := s.RootModule().Resources[n] 82 if !ok { 83 return fmt.Errorf("Not found: %s", n) 84 } 85 86 if rs.Primary.ID == "" { 87 return fmt.Errorf("No policy ID is set") 88 } 89 90 conn := testAccProvider.Meta().(*AWSClient).ec2conn 91 92 resp, err := conn.DescribeSpotDatafeedSubscription(&ec2.DescribeSpotDatafeedSubscriptionInput{}) 93 if err != nil { 94 return err 95 } 96 97 *subscription = *resp.SpotDatafeedSubscription 98 99 return nil 100 } 101 } 102 103 func testAccCheckAWSSpotDatafeedSubscriptionDestroy(s *terraform.State) error { 104 conn := testAccProvider.Meta().(*AWSClient).ec2conn 105 106 for _, rs := range s.RootModule().Resources { 107 if rs.Type != "aws_spot_datafeed_subscription" { 108 continue 109 } 110 111 // Try to get subscription 112 _, err := conn.DescribeSpotDatafeedSubscription(&ec2.DescribeSpotDatafeedSubscriptionInput{}) 113 if err == nil { 114 return fmt.Errorf("still exist.") 115 } 116 117 awsErr, ok := err.(awserr.Error) 118 if !ok { 119 return err 120 } 121 if awsErr.Code() != "InvalidSpotDatafeed.NotFound" { 122 return err 123 } 124 } 125 126 return nil 127 } 128 129 func testAccAWSSpotDatafeedSubscription(randInt int) string { 130 return fmt.Sprintf(` 131 resource "aws_s3_bucket" "default" { 132 bucket = "tf-spot-datafeed-%d" 133 } 134 135 resource "aws_spot_datafeed_subscription" "default" { 136 bucket = "${aws_s3_bucket.default.bucket}" 137 } 138 `, randInt) 139 }