github.com/chalford/terraform@v0.3.7-0.20150113080010-a78c69a8c81f/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  					resource.TestCheckResourceAttr(
    46  						"cloudstack_ipaddress.foo", "vpc", "terraform-vpc"),
    47  				),
    48  			},
    49  		},
    50  	})
    51  }
    52  
    53  func testAccCheckCloudStackIPAddressExists(
    54  	n string, ipaddr *cloudstack.PublicIpAddress) resource.TestCheckFunc {
    55  	return func(s *terraform.State) error {
    56  		rs, ok := s.RootModule().Resources[n]
    57  		if !ok {
    58  			return fmt.Errorf("Not found: %s", n)
    59  		}
    60  
    61  		if rs.Primary.ID == "" {
    62  			return fmt.Errorf("No IP address ID is set")
    63  		}
    64  
    65  		cs := testAccProvider.Meta().(*cloudstack.CloudStackClient)
    66  		pip, _, err := cs.Address.GetPublicIpAddressByID(rs.Primary.ID)
    67  
    68  		if err != nil {
    69  			return err
    70  		}
    71  
    72  		if pip.Id != rs.Primary.ID {
    73  			return fmt.Errorf("IP address not found")
    74  		}
    75  
    76  		*ipaddr = *pip
    77  
    78  		return nil
    79  	}
    80  }
    81  
    82  func testAccCheckCloudStackIPAddressAttributes(
    83  	ipaddr *cloudstack.PublicIpAddress) resource.TestCheckFunc {
    84  	return func(s *terraform.State) error {
    85  
    86  		if ipaddr.Associatednetworkname != CLOUDSTACK_NETWORK_1 {
    87  			return fmt.Errorf("Bad network: %s", ipaddr.Associatednetworkname)
    88  		}
    89  
    90  		return nil
    91  	}
    92  }
    93  
    94  func testAccCheckCloudStackIPAddressDestroy(s *terraform.State) error {
    95  	cs := testAccProvider.Meta().(*cloudstack.CloudStackClient)
    96  
    97  	for _, rs := range s.RootModule().Resources {
    98  		if rs.Type != "cloudstack_ipaddress" {
    99  			continue
   100  		}
   101  
   102  		if rs.Primary.ID == "" {
   103  			return fmt.Errorf("No IP address ID is set")
   104  		}
   105  
   106  		p := cs.Address.NewDisassociateIpAddressParams(rs.Primary.ID)
   107  		err, _ := cs.Address.DisassociateIpAddress(p)
   108  
   109  		if err != nil {
   110  			return fmt.Errorf(
   111  				"Error disassociating IP address (%s): %s",
   112  				rs.Primary.ID, err)
   113  		}
   114  	}
   115  
   116  	return nil
   117  }
   118  
   119  var testAccCloudStackIPAddress_basic = fmt.Sprintf(`
   120  resource "cloudstack_ipaddress" "foo" {
   121    network = "%s"
   122  }`, CLOUDSTACK_NETWORK_1)
   123  
   124  var testAccCloudStackIPAddress_vpc = fmt.Sprintf(`
   125  resource "cloudstack_vpc" "foobar" {
   126    name = "terraform-vpc"
   127    cidr = "%s"
   128    vpc_offering = "%s"
   129    zone = "%s"
   130  }
   131  
   132  resource "cloudstack_ipaddress" "foo" {
   133    vpc = "${cloudstack_vpc.foobar.name}"
   134  }`,
   135  	CLOUDSTACK_VPC_CIDR,
   136  	CLOUDSTACK_VPC_OFFERING,
   137  	CLOUDSTACK_ZONE)