github.com/armen/terraform@v0.5.2-0.20150529052519-caa8117a08f1/builtin/providers/cloudstack/resource_cloudstack_vpn_customer_gateway_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 TestAccCloudStackVPNCustomerGateway_basic(t *testing.T) { 13 var vpnCustomerGateway cloudstack.VpnCustomerGateway 14 15 resource.Test(t, resource.TestCase{ 16 PreCheck: func() { testAccPreCheck(t) }, 17 Providers: testAccProviders, 18 CheckDestroy: testAccCheckCloudStackVPNCustomerGatewayDestroy, 19 Steps: []resource.TestStep{ 20 resource.TestStep{ 21 Config: testAccCloudStackVPNCustomerGateway_basic, 22 Check: resource.ComposeTestCheckFunc( 23 testAccCheckCloudStackVPNCustomerGatewayExists( 24 "cloudstack_vpn_customer_gateway.foo", &vpnCustomerGateway), 25 testAccCheckCloudStackVPNCustomerGatewayAttributes(&vpnCustomerGateway), 26 resource.TestCheckResourceAttr( 27 "cloudstack_vpn_customer_gateway.foo", "name", "terraform-foo"), 28 resource.TestCheckResourceAttr( 29 "cloudstack_vpn_customer_gateway.bar", "name", "terraform-bar"), 30 resource.TestCheckResourceAttr( 31 "cloudstack_vpn_customer_gateway.foo", "ike_policy", "aes256-sha1"), 32 resource.TestCheckResourceAttr( 33 "cloudstack_vpn_customer_gateway.bar", "esp_policy", "aes256-sha1"), 34 ), 35 }, 36 }, 37 }) 38 } 39 40 func TestAccCloudStackVPNCustomerGateway_update(t *testing.T) { 41 var vpnCustomerGateway cloudstack.VpnCustomerGateway 42 43 resource.Test(t, resource.TestCase{ 44 PreCheck: func() { testAccPreCheck(t) }, 45 Providers: testAccProviders, 46 CheckDestroy: testAccCheckCloudStackVPNCustomerGatewayDestroy, 47 Steps: []resource.TestStep{ 48 resource.TestStep{ 49 Config: testAccCloudStackVPNCustomerGateway_basic, 50 Check: resource.ComposeTestCheckFunc( 51 testAccCheckCloudStackVPNCustomerGatewayExists( 52 "cloudstack_vpn_customer_gateway.foo", &vpnCustomerGateway), 53 testAccCheckCloudStackVPNCustomerGatewayAttributes(&vpnCustomerGateway), 54 resource.TestCheckResourceAttr( 55 "cloudstack_vpn_customer_gateway.foo", "name", "terraform-foo"), 56 resource.TestCheckResourceAttr( 57 "cloudstack_vpn_customer_gateway.bar", "name", "terraform-bar"), 58 resource.TestCheckResourceAttr( 59 "cloudstack_vpn_customer_gateway.foo", "ike_policy", "aes256-sha1"), 60 resource.TestCheckResourceAttr( 61 "cloudstack_vpn_customer_gateway.bar", "esp_policy", "aes256-sha1"), 62 ), 63 }, 64 65 resource.TestStep{ 66 Config: testAccCloudStackVPNCustomerGateway_update, 67 Check: resource.ComposeTestCheckFunc( 68 testAccCheckCloudStackVPNCustomerGatewayExists( 69 "cloudstack_vpn_customer_gateway.foo", &vpnCustomerGateway), 70 testAccCheckCloudStackVPNCustomerGatewayUpdatedAttributes(&vpnCustomerGateway), 71 resource.TestCheckResourceAttr( 72 "cloudstack_vpn_customer_gateway.foo", "name", "terraform-foo-bar"), 73 resource.TestCheckResourceAttr( 74 "cloudstack_vpn_customer_gateway.bar", "name", "terraform-bar-foo"), 75 resource.TestCheckResourceAttr( 76 "cloudstack_vpn_customer_gateway.foo", "ike_policy", "3des-md5"), 77 resource.TestCheckResourceAttr( 78 "cloudstack_vpn_customer_gateway.bar", "esp_policy", "3des-md5"), 79 ), 80 }, 81 }, 82 }) 83 } 84 85 func testAccCheckCloudStackVPNCustomerGatewayExists( 86 n string, vpnCustomerGateway *cloudstack.VpnCustomerGateway) resource.TestCheckFunc { 87 return func(s *terraform.State) error { 88 rs, ok := s.RootModule().Resources[n] 89 if !ok { 90 return fmt.Errorf("Not found: %s", n) 91 } 92 93 if rs.Primary.ID == "" { 94 return fmt.Errorf("No VPN CustomerGateway ID is set") 95 } 96 97 cs := testAccProvider.Meta().(*cloudstack.CloudStackClient) 98 v, _, err := cs.VPN.GetVpnCustomerGatewayByID(rs.Primary.ID) 99 100 if err != nil { 101 return err 102 } 103 104 if v.Id != rs.Primary.ID { 105 return fmt.Errorf("VPN CustomerGateway not found") 106 } 107 108 *vpnCustomerGateway = *v 109 110 return nil 111 } 112 } 113 114 func testAccCheckCloudStackVPNCustomerGatewayAttributes( 115 vpnCustomerGateway *cloudstack.VpnCustomerGateway) resource.TestCheckFunc { 116 return func(s *terraform.State) error { 117 118 if vpnCustomerGateway.Esppolicy != "aes256-sha1" { 119 return fmt.Errorf("Bad ESP policy: %s", vpnCustomerGateway.Esppolicy) 120 } 121 122 if vpnCustomerGateway.Ikepolicy != "aes256-sha1" { 123 return fmt.Errorf("Bad IKE policy: %s", vpnCustomerGateway.Ikepolicy) 124 } 125 126 if vpnCustomerGateway.Ipsecpsk != "terraform" { 127 return fmt.Errorf("Bad IPSEC pre-shared key: %s", vpnCustomerGateway.Ipsecpsk) 128 } 129 130 return nil 131 } 132 } 133 134 func testAccCheckCloudStackVPNCustomerGatewayUpdatedAttributes( 135 vpnCustomerGateway *cloudstack.VpnCustomerGateway) resource.TestCheckFunc { 136 return func(s *terraform.State) error { 137 138 if vpnCustomerGateway.Esppolicy != "3des-md5" { 139 return fmt.Errorf("Bad ESP policy: %s", vpnCustomerGateway.Esppolicy) 140 } 141 142 if vpnCustomerGateway.Ikepolicy != "3des-md5" { 143 return fmt.Errorf("Bad IKE policy: %s", vpnCustomerGateway.Ikepolicy) 144 } 145 146 if vpnCustomerGateway.Ipsecpsk != "terraform" { 147 return fmt.Errorf("Bad IPSEC pre-shared key: %s", vpnCustomerGateway.Ipsecpsk) 148 } 149 150 return nil 151 } 152 } 153 154 func testAccCheckCloudStackVPNCustomerGatewayDestroy(s *terraform.State) error { 155 cs := testAccProvider.Meta().(*cloudstack.CloudStackClient) 156 157 for _, rs := range s.RootModule().Resources { 158 if rs.Type != "cloudstack_vpn_customer_gateway" { 159 continue 160 } 161 162 if rs.Primary.ID == "" { 163 return fmt.Errorf("No VPN Customer Gateway ID is set") 164 } 165 166 p := cs.VPN.NewDeleteVpnCustomerGatewayParams(rs.Primary.ID) 167 _, err := cs.VPN.DeleteVpnCustomerGateway(p) 168 169 if err != nil { 170 return fmt.Errorf( 171 "Error deleting VPN Customer Gateway (%s): %s", 172 rs.Primary.ID, err) 173 } 174 } 175 176 return nil 177 } 178 179 var testAccCloudStackVPNCustomerGateway_basic = fmt.Sprintf(` 180 resource "cloudstack_vpc" "foo" { 181 name = "terraform-vpc-foo" 182 cidr = "%s" 183 vpc_offering = "%s" 184 zone = "%s" 185 } 186 187 resource "cloudstack_vpc" "bar" { 188 name = "terraform-vpc-bar" 189 cidr = "%s" 190 vpc_offering = "%s" 191 zone = "%s" 192 } 193 194 resource "cloudstack_vpn_gateway" "foo" { 195 vpc = "${cloudstack_vpc.foo.name}" 196 } 197 198 resource "cloudstack_vpn_gateway" "bar" { 199 vpc = "${cloudstack_vpc.bar.name}" 200 } 201 202 resource "cloudstack_vpn_customer_gateway" "foo" { 203 name = "terraform-foo" 204 cidr = "${cloudstack_vpc.foo.cidr}" 205 esp_policy = "aes256-sha1" 206 gateway = "${cloudstack_vpn_gateway.foo.public_ip}" 207 ike_policy = "aes256-sha1" 208 ipsec_psk = "terraform" 209 } 210 211 resource "cloudstack_vpn_customer_gateway" "bar" { 212 name = "terraform-bar" 213 cidr = "${cloudstack_vpc.bar.cidr}" 214 esp_policy = "aes256-sha1" 215 gateway = "${cloudstack_vpn_gateway.bar.public_ip}" 216 ike_policy = "aes256-sha1" 217 ipsec_psk = "terraform" 218 }`, 219 CLOUDSTACK_VPC_CIDR_1, 220 CLOUDSTACK_VPC_OFFERING, 221 CLOUDSTACK_ZONE, 222 CLOUDSTACK_VPC_CIDR_2, 223 CLOUDSTACK_VPC_OFFERING, 224 CLOUDSTACK_ZONE) 225 226 var testAccCloudStackVPNCustomerGateway_update = fmt.Sprintf(` 227 resource "cloudstack_vpc" "foo" { 228 name = "terraform-vpc-foo" 229 cidr = "%s" 230 vpc_offering = "%s" 231 zone = "%s" 232 } 233 234 resource "cloudstack_vpc" "bar" { 235 name = "terraform-vpc-bar" 236 cidr = "%s" 237 vpc_offering = "%s" 238 zone = "%s" 239 } 240 241 resource "cloudstack_vpn_gateway" "foo" { 242 vpc = "${cloudstack_vpc.foo.name}" 243 } 244 245 resource "cloudstack_vpn_gateway" "bar" { 246 vpc = "${cloudstack_vpc.bar.name}" 247 } 248 249 resource "cloudstack_vpn_customer_gateway" "foo" { 250 name = "terraform-foo-bar" 251 cidr = "${cloudstack_vpc.foo.cidr}" 252 esp_policy = "3des-md5" 253 gateway = "${cloudstack_vpn_gateway.foo.public_ip}" 254 ike_policy = "3des-md5" 255 ipsec_psk = "terraform" 256 } 257 258 resource "cloudstack_vpn_customer_gateway" "bar" { 259 name = "terraform-bar-foo" 260 cidr = "${cloudstack_vpc.bar.cidr}" 261 esp_policy = "3des-md5" 262 gateway = "${cloudstack_vpn_gateway.bar.public_ip}" 263 ike_policy = "3des-md5" 264 ipsec_psk = "terraform" 265 }`, 266 CLOUDSTACK_VPC_CIDR_1, 267 CLOUDSTACK_VPC_OFFERING, 268 CLOUDSTACK_ZONE, 269 CLOUDSTACK_VPC_CIDR_2, 270 CLOUDSTACK_VPC_OFFERING, 271 CLOUDSTACK_ZONE)