github.com/bradfeehan/terraform@v0.7.0-rc3.0.20170529055808-34b45c5ad841/builtin/providers/aws/resource_aws_lightsail_instance_test.go (about) 1 package aws 2 3 import ( 4 "errors" 5 "fmt" 6 "testing" 7 "time" 8 9 "github.com/aws/aws-sdk-go/aws" 10 "github.com/aws/aws-sdk-go/aws/awserr" 11 "github.com/aws/aws-sdk-go/service/lightsail" 12 "github.com/hashicorp/terraform/helper/acctest" 13 "github.com/hashicorp/terraform/helper/resource" 14 "github.com/hashicorp/terraform/terraform" 15 ) 16 17 func TestAccAWSLightsailInstance_basic(t *testing.T) { 18 var conf lightsail.Instance 19 lightsailName := fmt.Sprintf("tf-test-lightsail-%d", acctest.RandInt()) 20 21 resource.Test(t, resource.TestCase{ 22 PreCheck: func() { testAccPreCheck(t) }, 23 IDRefreshName: "aws_lightsail_instance.lightsail_instance_test", 24 Providers: testAccProviders, 25 CheckDestroy: testAccCheckAWSLightsailInstanceDestroy, 26 Steps: []resource.TestStep{ 27 { 28 Config: testAccAWSLightsailInstanceConfig_basic(lightsailName), 29 Check: resource.ComposeAggregateTestCheckFunc( 30 testAccCheckAWSLightsailInstanceExists("aws_lightsail_instance.lightsail_instance_test", &conf), 31 resource.TestCheckResourceAttrSet("aws_lightsail_instance.lightsail_instance_test", "availability_zone"), 32 resource.TestCheckResourceAttrSet("aws_lightsail_instance.lightsail_instance_test", "blueprint_id"), 33 resource.TestCheckResourceAttrSet("aws_lightsail_instance.lightsail_instance_test", "bundle_id"), 34 resource.TestCheckResourceAttrSet("aws_lightsail_instance.lightsail_instance_test", "key_pair_name"), 35 ), 36 }, 37 }, 38 }) 39 } 40 41 func TestAccAWSLightsailInstance_euRegion(t *testing.T) { 42 var conf lightsail.Instance 43 lightsailName := fmt.Sprintf("tf-test-lightsail-%d", acctest.RandInt()) 44 45 resource.Test(t, resource.TestCase{ 46 PreCheck: func() { testAccPreCheck(t) }, 47 IDRefreshName: "aws_lightsail_instance.lightsail_instance_test", 48 Providers: testAccProviders, 49 CheckDestroy: testAccCheckAWSLightsailInstanceDestroy, 50 Steps: []resource.TestStep{ 51 { 52 Config: testAccAWSLightsailInstanceConfig_euRegion(lightsailName), 53 Check: resource.ComposeAggregateTestCheckFunc( 54 testAccCheckAWSLightsailInstanceExists("aws_lightsail_instance.lightsail_instance_test", &conf), 55 resource.TestCheckResourceAttrSet("aws_lightsail_instance.lightsail_instance_test", "availability_zone"), 56 resource.TestCheckResourceAttrSet("aws_lightsail_instance.lightsail_instance_test", "blueprint_id"), 57 resource.TestCheckResourceAttrSet("aws_lightsail_instance.lightsail_instance_test", "bundle_id"), 58 resource.TestCheckResourceAttrSet("aws_lightsail_instance.lightsail_instance_test", "key_pair_name"), 59 ), 60 }, 61 }, 62 }) 63 } 64 65 func TestAccAWSLightsailInstance_disapear(t *testing.T) { 66 var conf lightsail.Instance 67 lightsailName := fmt.Sprintf("tf-test-lightsail-%d", acctest.RandInt()) 68 69 testDestroy := func(*terraform.State) error { 70 // reach out and DELETE the Instance 71 conn := testAccProvider.Meta().(*AWSClient).lightsailconn 72 _, err := conn.DeleteInstance(&lightsail.DeleteInstanceInput{ 73 InstanceName: aws.String(lightsailName), 74 }) 75 76 if err != nil { 77 return fmt.Errorf("Error deleting Lightsail Instance in disapear test") 78 } 79 80 // sleep 7 seconds to give it time, so we don't have to poll 81 time.Sleep(7 * time.Second) 82 83 return nil 84 } 85 86 resource.Test(t, resource.TestCase{ 87 PreCheck: func() { testAccPreCheck(t) }, 88 Providers: testAccProviders, 89 CheckDestroy: testAccCheckAWSLightsailInstanceDestroy, 90 Steps: []resource.TestStep{ 91 { 92 Config: testAccAWSLightsailInstanceConfig_basic(lightsailName), 93 Check: resource.ComposeTestCheckFunc( 94 testAccCheckAWSLightsailInstanceExists("aws_lightsail_instance.lightsail_instance_test", &conf), 95 testDestroy, 96 ), 97 ExpectNonEmptyPlan: true, 98 }, 99 }, 100 }) 101 } 102 103 func testAccCheckAWSLightsailInstanceExists(n string, res *lightsail.Instance) resource.TestCheckFunc { 104 return func(s *terraform.State) error { 105 rs, ok := s.RootModule().Resources[n] 106 if !ok { 107 return fmt.Errorf("Not found: %s", n) 108 } 109 110 if rs.Primary.ID == "" { 111 return errors.New("No LightsailInstance ID is set") 112 } 113 114 conn := testAccProvider.Meta().(*AWSClient).lightsailconn 115 116 respInstance, err := conn.GetInstance(&lightsail.GetInstanceInput{ 117 InstanceName: aws.String(rs.Primary.Attributes["name"]), 118 }) 119 120 if err != nil { 121 return err 122 } 123 124 if respInstance == nil || respInstance.Instance == nil { 125 return fmt.Errorf("Instance (%s) not found", rs.Primary.Attributes["name"]) 126 } 127 *res = *respInstance.Instance 128 return nil 129 } 130 } 131 132 func testAccCheckAWSLightsailInstanceDestroy(s *terraform.State) error { 133 134 for _, rs := range s.RootModule().Resources { 135 if rs.Type != "aws_lightsail_instance" { 136 continue 137 } 138 139 conn := testAccProvider.Meta().(*AWSClient).lightsailconn 140 141 respInstance, err := conn.GetInstance(&lightsail.GetInstanceInput{ 142 InstanceName: aws.String(rs.Primary.Attributes["name"]), 143 }) 144 145 if err == nil { 146 if respInstance.Instance != nil { 147 return fmt.Errorf("LightsailInstance %q still exists", rs.Primary.ID) 148 } 149 } 150 151 // Verify the error 152 if awsErr, ok := err.(awserr.Error); ok { 153 if awsErr.Code() == "NotFoundException" { 154 return nil 155 } 156 } 157 return err 158 } 159 160 return nil 161 } 162 163 func testAccAWSLightsailInstanceConfig_basic(lightsailName string) string { 164 return fmt.Sprintf(` 165 provider "aws" { 166 region = "us-east-1" 167 } 168 resource "aws_lightsail_instance" "lightsail_instance_test" { 169 name = "%s" 170 availability_zone = "us-east-1b" 171 blueprint_id = "gitlab_8_12_6" 172 bundle_id = "nano_1_0" 173 } 174 `, lightsailName) 175 } 176 177 func testAccAWSLightsailInstanceConfig_euRegion(lightsailName string) string { 178 return fmt.Sprintf(` 179 provider "aws" { 180 region = "eu-west-1" 181 } 182 resource "aws_lightsail_instance" "lightsail_instance_test" { 183 name = "%s" 184 availability_zone = "eu-west-1a" 185 blueprint_id = "joomla_3_6_5" 186 bundle_id = "nano_1_0" 187 } 188 `, lightsailName) 189 }