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)