github.com/jrasell/terraform@v0.6.17-0.20160523115548-2652f5232949/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 ), 48 }, 49 }, 50 }) 51 } 52 53 func testAccCheckCloudStackNetworkExists( 54 n string, network *cloudstack.Network) 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 network ID is set") 63 } 64 65 cs := testAccProvider.Meta().(*cloudstack.CloudStackClient) 66 ntwrk, _, err := cs.Network.GetNetworkByID(rs.Primary.ID) 67 68 if err != nil { 69 return err 70 } 71 72 if ntwrk.Id != rs.Primary.ID { 73 return fmt.Errorf("Network not found") 74 } 75 76 *network = *ntwrk 77 78 return nil 79 } 80 } 81 82 func testAccCheckCloudStackNetworkBasicAttributes( 83 network *cloudstack.Network) resource.TestCheckFunc { 84 return func(s *terraform.State) error { 85 86 if network.Name != "terraform-network" { 87 return fmt.Errorf("Bad name: %s", network.Name) 88 } 89 90 if network.Displaytext != "terraform-network" { 91 return fmt.Errorf("Bad display name: %s", network.Displaytext) 92 } 93 94 if network.Cidr != CLOUDSTACK_NETWORK_2_CIDR { 95 return fmt.Errorf("Bad CIDR: %s", network.Cidr) 96 } 97 98 if network.Networkofferingname != CLOUDSTACK_NETWORK_2_OFFERING { 99 return fmt.Errorf("Bad network offering: %s", network.Networkofferingname) 100 } 101 102 return nil 103 } 104 } 105 106 func testAccCheckNetworkTags( 107 n *cloudstack.Network, key string, value string) resource.TestCheckFunc { 108 return func(s *terraform.State) error { 109 tags := make(map[string]string) 110 for item := range n.Tags { 111 tags[n.Tags[item].Key] = n.Tags[item].Value 112 } 113 return testAccCheckTags(tags, key, value) 114 } 115 } 116 117 func testAccCheckCloudStackNetworkVPCAttributes( 118 network *cloudstack.Network) resource.TestCheckFunc { 119 return func(s *terraform.State) error { 120 121 if network.Name != "terraform-network" { 122 return fmt.Errorf("Bad name: %s", network.Name) 123 } 124 125 if network.Displaytext != "terraform-network" { 126 return fmt.Errorf("Bad display name: %s", network.Displaytext) 127 } 128 129 if network.Cidr != CLOUDSTACK_VPC_NETWORK_CIDR { 130 return fmt.Errorf("Bad CIDR: %s", network.Cidr) 131 } 132 133 if network.Networkofferingname != CLOUDSTACK_VPC_NETWORK_OFFERING { 134 return fmt.Errorf("Bad network offering: %s", network.Networkofferingname) 135 } 136 137 return nil 138 } 139 } 140 141 func testAccCheckCloudStackNetworkDestroy(s *terraform.State) error { 142 cs := testAccProvider.Meta().(*cloudstack.CloudStackClient) 143 144 for _, rs := range s.RootModule().Resources { 145 if rs.Type != "cloudstack_network" { 146 continue 147 } 148 149 if rs.Primary.ID == "" { 150 return fmt.Errorf("No network ID is set") 151 } 152 153 _, _, err := cs.Network.GetNetworkByID(rs.Primary.ID) 154 if err == nil { 155 return fmt.Errorf("Network %s still exists", rs.Primary.ID) 156 } 157 } 158 159 return nil 160 } 161 162 var testAccCloudStackNetwork_basic = fmt.Sprintf(` 163 resource "cloudstack_network" "foo" { 164 name = "terraform-network" 165 cidr = "%s" 166 network_offering = "%s" 167 zone = "%s" 168 tags = { 169 terraform-tag = "true" 170 } 171 }`, 172 CLOUDSTACK_NETWORK_2_CIDR, 173 CLOUDSTACK_NETWORK_2_OFFERING, 174 CLOUDSTACK_ZONE) 175 176 var testAccCloudStackNetwork_vpc = fmt.Sprintf(` 177 resource "cloudstack_vpc" "foobar" { 178 name = "terraform-vpc" 179 cidr = "%s" 180 vpc_offering = "%s" 181 zone = "%s" 182 } 183 184 resource "cloudstack_network" "foo" { 185 name = "terraform-network" 186 cidr = "%s" 187 network_offering = "%s" 188 vpc_id = "${cloudstack_vpc.foobar.id}" 189 zone = "${cloudstack_vpc.foobar.zone}" 190 }`, 191 CLOUDSTACK_VPC_CIDR_1, 192 CLOUDSTACK_VPC_OFFERING, 193 CLOUDSTACK_ZONE, 194 CLOUDSTACK_VPC_NETWORK_CIDR, 195 CLOUDSTACK_VPC_NETWORK_OFFERING)