github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/cloudstack/resource_cloudstack_ipaddress_test.go (about)

     1  package cloudstack
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/resource"
     8  	"github.com/hashicorp/terraform/terraform"
     9  	"github.com/xanzy/go-cloudstack/cloudstack"
    10  )
    11  
    12  func TestAccCloudStackIPAddress_basic(t *testing.T) {
    13  	var ipaddr cloudstack.PublicIpAddress
    14  
    15  	resource.Test(t, resource.TestCase{
    16  		PreCheck:     func() { testAccPreCheck(t) },
    17  		Providers:    testAccProviders,
    18  		CheckDestroy: testAccCheckCloudStackIPAddressDestroy,
    19  		Steps: []resource.TestStep{
    20  			resource.TestStep{
    21  				Config: testAccCloudStackIPAddress_basic,
    22  				Check: resource.ComposeTestCheckFunc(
    23  					testAccCheckCloudStackIPAddressExists(
    24  						"cloudstack_ipaddress.foo", &ipaddr),
    25  					testAccCheckCloudStackIPAddressAttributes(&ipaddr),
    26  				),
    27  			},
    28  		},
    29  	})
    30  }
    31  
    32  func TestAccCloudStackIPAddress_vpc(t *testing.T) {
    33  	var ipaddr cloudstack.PublicIpAddress
    34  
    35  	resource.Test(t, resource.TestCase{
    36  		PreCheck:     func() { testAccPreCheck(t) },
    37  		Providers:    testAccProviders,
    38  		CheckDestroy: testAccCheckCloudStackIPAddressDestroy,
    39  		Steps: []resource.TestStep{
    40  			resource.TestStep{
    41  				Config: testAccCloudStackIPAddress_vpc,
    42  				Check: resource.ComposeTestCheckFunc(
    43  					testAccCheckCloudStackIPAddressExists(
    44  						"cloudstack_ipaddress.foo", &ipaddr),
    45  				),
    46  			},
    47  		},
    48  	})
    49  }
    50  
    51  func testAccCheckCloudStackIPAddressExists(
    52  	n string, ipaddr *cloudstack.PublicIpAddress) resource.TestCheckFunc {
    53  	return func(s *terraform.State) error {
    54  		rs, ok := s.RootModule().Resources[n]
    55  		if !ok {
    56  			return fmt.Errorf("Not found: %s", n)
    57  		}
    58  
    59  		if rs.Primary.ID == "" {
    60  			return fmt.Errorf("No IP address ID is set")
    61  		}
    62  
    63  		cs := testAccProvider.Meta().(*cloudstack.CloudStackClient)
    64  		pip, _, err := cs.Address.GetPublicIpAddressByID(rs.Primary.ID)
    65  
    66  		if err != nil {
    67  			return err
    68  		}
    69  
    70  		if pip.Id != rs.Primary.ID {
    71  			return fmt.Errorf("IP address not found")
    72  		}
    73  
    74  		*ipaddr = *pip
    75  
    76  		return nil
    77  	}
    78  }
    79  
    80  func testAccCheckCloudStackIPAddressAttributes(
    81  	ipaddr *cloudstack.PublicIpAddress) resource.TestCheckFunc {
    82  	return func(s *terraform.State) error {
    83  
    84  		if ipaddr.Associatednetworkid != CLOUDSTACK_NETWORK_1 {
    85  			return fmt.Errorf("Bad network ID: %s", ipaddr.Associatednetworkid)
    86  		}
    87  
    88  		return nil
    89  	}
    90  }
    91  
    92  func testAccCheckCloudStackIPAddressDestroy(s *terraform.State) error {
    93  	cs := testAccProvider.Meta().(*cloudstack.CloudStackClient)
    94  
    95  	for _, rs := range s.RootModule().Resources {
    96  		if rs.Type != "cloudstack_ipaddress" {
    97  			continue
    98  		}
    99  
   100  		if rs.Primary.ID == "" {
   101  			return fmt.Errorf("No IP address ID is set")
   102  		}
   103  
   104  		ip, _, err := cs.Address.GetPublicIpAddressByID(rs.Primary.ID)
   105  		if err == nil && ip.Associatednetworkid != "" {
   106  			return fmt.Errorf("Public IP %s still associated", rs.Primary.ID)
   107  		}
   108  	}
   109  
   110  	return nil
   111  }
   112  
   113  var testAccCloudStackIPAddress_basic = fmt.Sprintf(`
   114  resource "cloudstack_ipaddress" "foo" {
   115    network_id = "%s"
   116  }`, CLOUDSTACK_NETWORK_1)
   117  
   118  var testAccCloudStackIPAddress_vpc = fmt.Sprintf(`
   119  resource "cloudstack_vpc" "foobar" {
   120    name = "terraform-vpc"
   121    cidr = "%s"
   122    vpc_offering = "%s"
   123    zone = "%s"
   124  }
   125  
   126  resource "cloudstack_ipaddress" "foo" {
   127    vpc_id = "${cloudstack_vpc.foobar.id}"
   128  }`,
   129  	CLOUDSTACK_VPC_CIDR_1,
   130  	CLOUDSTACK_VPC_OFFERING,
   131  	CLOUDSTACK_ZONE)