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  }