github.com/erriapo/terraform@v0.6.12-0.20160203182612-0340ea72354f/builtin/providers/cloudstack/resource_cloudstack_network_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 TestAccCloudStackNetwork_basic(t *testing.T) {
    13  	var network cloudstack.Network
    14  
    15  	resource.Test(t, resource.TestCase{
    16  		PreCheck:     func() { testAccPreCheck(t) },
    17  		Providers:    testAccProviders,
    18  		CheckDestroy: testAccCheckCloudStackNetworkDestroy,
    19  		Steps: []resource.TestStep{
    20  			resource.TestStep{
    21  				Config: testAccCloudStackNetwork_basic,
    22  				Check: resource.ComposeTestCheckFunc(
    23  					testAccCheckCloudStackNetworkExists(
    24  						"cloudstack_network.foo", &network),
    25  					testAccCheckCloudStackNetworkBasicAttributes(&network),
    26  					testAccCheckNetworkTags(&network, "terraform-tag", "true"),
    27  				),
    28  			},
    29  		},
    30  	})
    31  }
    32  
    33  func TestAccCloudStackNetwork_vpc(t *testing.T) {
    34  	var network cloudstack.Network
    35  
    36  	resource.Test(t, resource.TestCase{
    37  		PreCheck:     func() { testAccPreCheck(t) },
    38  		Providers:    testAccProviders,
    39  		CheckDestroy: testAccCheckCloudStackNetworkDestroy,
    40  		Steps: []resource.TestStep{
    41  			resource.TestStep{
    42  				Config: testAccCloudStackNetwork_vpc,
    43  				Check: resource.ComposeTestCheckFunc(
    44  					testAccCheckCloudStackNetworkExists(
    45  						"cloudstack_network.foo", &network),
    46  					testAccCheckCloudStackNetworkVPCAttributes(&network),
    47  					resource.TestCheckResourceAttr(
    48  						"cloudstack_network.foo", "vpc", "terraform-vpc"),
    49  				),
    50  			},
    51  		},
    52  	})
    53  }
    54  
    55  func testAccCheckCloudStackNetworkExists(
    56  	n string, network *cloudstack.Network) resource.TestCheckFunc {
    57  	return func(s *terraform.State) error {
    58  		rs, ok := s.RootModule().Resources[n]
    59  		if !ok {
    60  			return fmt.Errorf("Not found: %s", n)
    61  		}
    62  
    63  		if rs.Primary.ID == "" {
    64  			return fmt.Errorf("No network ID is set")
    65  		}
    66  
    67  		cs := testAccProvider.Meta().(*cloudstack.CloudStackClient)
    68  		ntwrk, _, err := cs.Network.GetNetworkByID(rs.Primary.ID)
    69  
    70  		if err != nil {
    71  			return err
    72  		}
    73  
    74  		if ntwrk.Id != rs.Primary.ID {
    75  			return fmt.Errorf("Network not found")
    76  		}
    77  
    78  		*network = *ntwrk
    79  
    80  		return nil
    81  	}
    82  }
    83  
    84  func testAccCheckCloudStackNetworkBasicAttributes(
    85  	network *cloudstack.Network) resource.TestCheckFunc {
    86  	return func(s *terraform.State) error {
    87  
    88  		if network.Name != "terraform-network" {
    89  			return fmt.Errorf("Bad name: %s", network.Name)
    90  		}
    91  
    92  		if network.Displaytext != "terraform-network" {
    93  			return fmt.Errorf("Bad display name: %s", network.Displaytext)
    94  		}
    95  
    96  		if network.Cidr != CLOUDSTACK_NETWORK_2_CIDR {
    97  			return fmt.Errorf("Bad CIDR: %s", network.Cidr)
    98  		}
    99  
   100  		if network.Networkofferingname != CLOUDSTACK_NETWORK_2_OFFERING {
   101  			return fmt.Errorf("Bad network offering: %s", network.Networkofferingname)
   102  		}
   103  
   104  		return nil
   105  	}
   106  }
   107  
   108  func testAccCheckNetworkTags(
   109  	n *cloudstack.Network, key string, value string) resource.TestCheckFunc {
   110  	return func(s *terraform.State) error {
   111  		tags := make(map[string]string)
   112  		for item := range n.Tags {
   113  			tags[n.Tags[item].Key] = n.Tags[item].Value
   114  		}
   115  		return testAccCheckTags(tags, key, value)
   116  	}
   117  }
   118  
   119  func testAccCheckCloudStackNetworkVPCAttributes(
   120  	network *cloudstack.Network) resource.TestCheckFunc {
   121  	return func(s *terraform.State) error {
   122  
   123  		if network.Name != "terraform-network" {
   124  			return fmt.Errorf("Bad name: %s", network.Name)
   125  		}
   126  
   127  		if network.Displaytext != "terraform-network" {
   128  			return fmt.Errorf("Bad display name: %s", network.Displaytext)
   129  		}
   130  
   131  		if network.Cidr != CLOUDSTACK_VPC_NETWORK_CIDR {
   132  			return fmt.Errorf("Bad CIDR: %s", network.Cidr)
   133  		}
   134  
   135  		if network.Networkofferingname != CLOUDSTACK_VPC_NETWORK_OFFERING {
   136  			return fmt.Errorf("Bad network offering: %s", network.Networkofferingname)
   137  		}
   138  
   139  		return nil
   140  	}
   141  }
   142  
   143  func testAccCheckCloudStackNetworkDestroy(s *terraform.State) error {
   144  	cs := testAccProvider.Meta().(*cloudstack.CloudStackClient)
   145  
   146  	for _, rs := range s.RootModule().Resources {
   147  		if rs.Type != "cloudstack_network" {
   148  			continue
   149  		}
   150  
   151  		if rs.Primary.ID == "" {
   152  			return fmt.Errorf("No network ID is set")
   153  		}
   154  
   155  		_, _, err := cs.Network.GetNetworkByID(rs.Primary.ID)
   156  		if err == nil {
   157  			return fmt.Errorf("Network %s still exists", rs.Primary.ID)
   158  		}
   159  	}
   160  
   161  	return nil
   162  }
   163  
   164  var testAccCloudStackNetwork_basic = fmt.Sprintf(`
   165  resource "cloudstack_network" "foo" {
   166  	name = "terraform-network"
   167  	cidr = "%s"
   168  	network_offering = "%s"
   169  	zone = "%s"
   170  	tags = {
   171  		terraform-tag = "true"
   172  	}
   173  }`,
   174  	CLOUDSTACK_NETWORK_2_CIDR,
   175  	CLOUDSTACK_NETWORK_2_OFFERING,
   176  	CLOUDSTACK_ZONE)
   177  
   178  var testAccCloudStackNetwork_vpc = fmt.Sprintf(`
   179  resource "cloudstack_vpc" "foobar" {
   180  	name = "terraform-vpc"
   181  	cidr = "%s"
   182  	vpc_offering = "%s"
   183  	zone = "%s"
   184  }
   185  
   186  resource "cloudstack_network" "foo" {
   187  	name = "terraform-network"
   188  	cidr = "%s"
   189  	network_offering = "%s"
   190  	vpc = "${cloudstack_vpc.foobar.name}"
   191  	zone = "${cloudstack_vpc.foobar.zone}"
   192  }`,
   193  	CLOUDSTACK_VPC_CIDR_1,
   194  	CLOUDSTACK_VPC_OFFERING,
   195  	CLOUDSTACK_ZONE,
   196  	CLOUDSTACK_VPC_NETWORK_CIDR,
   197  	CLOUDSTACK_VPC_NETWORK_OFFERING)