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)