github.com/tarrant/terraform@v0.3.8-0.20150402012457-f68c9eee638e/builtin/providers/openstack/resource_openstack_fw_policy_v1_test.go (about)

     1  package openstack
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  	"github.com/rackspace/gophercloud"
    11  	"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/fwaas/policies"
    12  )
    13  
    14  func TestAccFWPolicyV1(t *testing.T) {
    15  	resource.Test(t, resource.TestCase{
    16  		PreCheck:     func() { testAccPreCheck(t) },
    17  		Providers:    testAccProviders,
    18  		CheckDestroy: testAccCheckFWPolicyV1Destroy,
    19  		Steps: []resource.TestStep{
    20  			resource.TestStep{
    21  				Config: testFirewallPolicyConfig,
    22  				Check: resource.ComposeTestCheckFunc(
    23  					testAccCheckFWPolicyV1Exists(
    24  						"openstack_fw_policy_v1.accept_test",
    25  						"", "", 0),
    26  				),
    27  			},
    28  			resource.TestStep{
    29  				Config: testFirewallPolicyConfigAddRules,
    30  				Check: resource.ComposeTestCheckFunc(
    31  					testAccCheckFWPolicyV1Exists(
    32  						"openstack_fw_policy_v1.accept_test",
    33  						"accept_test", "terraform acceptance test", 2),
    34  				),
    35  			},
    36  			resource.TestStep{
    37  				Config: testFirewallPolicyUpdateDeleteRule,
    38  				Check: resource.ComposeTestCheckFunc(
    39  					testAccCheckFWPolicyV1Exists(
    40  						"openstack_fw_policy_v1.accept_test",
    41  						"accept_test", "terraform acceptance test", 1),
    42  				),
    43  			},
    44  		},
    45  	})
    46  }
    47  
    48  func testAccCheckFWPolicyV1Destroy(s *terraform.State) error {
    49  
    50  	config := testAccProvider.Meta().(*Config)
    51  	networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
    52  	if err != nil {
    53  		return fmt.Errorf("(testAccCheckOpenstackFirewallPolicyDestroy) Error creating OpenStack networking client: %s", err)
    54  	}
    55  	for _, rs := range s.RootModule().Resources {
    56  		if rs.Type != "openstack_fw_policy_v1" {
    57  			continue
    58  		}
    59  		_, err = policies.Get(networkingClient, rs.Primary.ID).Extract()
    60  		if err == nil {
    61  			return fmt.Errorf("Firewall policy (%s) still exists.", rs.Primary.ID)
    62  		}
    63  		httpError, ok := err.(*gophercloud.UnexpectedResponseCodeError)
    64  		if !ok || httpError.Actual != 404 {
    65  			return httpError
    66  		}
    67  	}
    68  	return nil
    69  }
    70  
    71  func testAccCheckFWPolicyV1Exists(n, name, description string, ruleCount int) resource.TestCheckFunc {
    72  
    73  	return func(s *terraform.State) error {
    74  
    75  		rs, ok := s.RootModule().Resources[n]
    76  		if !ok {
    77  			return fmt.Errorf("Not found: %s", n)
    78  		}
    79  
    80  		if rs.Primary.ID == "" {
    81  			return fmt.Errorf("No ID is set")
    82  		}
    83  
    84  		config := testAccProvider.Meta().(*Config)
    85  		networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
    86  		if err != nil {
    87  			return fmt.Errorf("(testAccCheckFirewallPolicyExists) Error creating OpenStack networking client: %s", err)
    88  		}
    89  
    90  		var found *policies.Policy
    91  		for i := 0; i < 5; i++ {
    92  			// Firewall policy creation is asynchronous. Retry some times
    93  			// if we get a 404 error. Fail on any other error.
    94  			found, err = policies.Get(networkingClient, rs.Primary.ID).Extract()
    95  			if err != nil {
    96  				httpError, ok := err.(*gophercloud.UnexpectedResponseCodeError)
    97  				if !ok || httpError.Actual != 404 {
    98  					time.Sleep(time.Second)
    99  					continue
   100  				}
   101  			}
   102  			break
   103  		}
   104  
   105  		if err != nil {
   106  			return err
   107  		}
   108  
   109  		if name != found.Name {
   110  			return fmt.Errorf("Expected name <%s>, but found <%s>", name, found.Name)
   111  		}
   112  
   113  		if description != found.Description {
   114  			return fmt.Errorf("Expected description <%s>, but found <%s>", description, found.Description)
   115  		}
   116  
   117  		if ruleCount != len(found.Rules) {
   118  			return fmt.Errorf("Expected rule count <%d>, but found <%d>", ruleCount, len(found.Rules))
   119  		}
   120  
   121  		return nil
   122  	}
   123  }
   124  
   125  const testFirewallPolicyConfig = `
   126  resource "openstack_fw_policy_v1" "accept_test" {
   127  
   128  }
   129  `
   130  
   131  const testFirewallPolicyConfigAddRules = `
   132  resource "openstack_fw_policy_v1" "accept_test" {
   133  	name = "accept_test"
   134  	description =  "terraform acceptance test"
   135  	rules = [
   136  		"${openstack_fw_rule_v1.accept_test_udp_deny.id}",
   137  		"${openstack_fw_rule_v1.accept_test_tcp_allow.id}"
   138  	]
   139  }
   140  
   141  resource "openstack_fw_rule_v1" "accept_test_tcp_allow" {
   142  	protocol = "tcp"
   143  	action = "allow"
   144  }
   145  
   146  resource "openstack_fw_rule_v1" "accept_test_udp_deny" {
   147  	protocol = "udp"
   148  	action = "deny"
   149  }
   150  `
   151  
   152  const testFirewallPolicyUpdateDeleteRule = `
   153  resource "openstack_fw_policy_v1" "accept_test" {
   154  	name = "accept_test"
   155  	description =  "terraform acceptance test"
   156  	rules = [
   157  		"${openstack_fw_rule_v1.accept_test_udp_deny.id}"
   158  	]
   159  }
   160  
   161  resource "openstack_fw_rule_v1" "accept_test_udp_deny" {
   162  	protocol = "udp"
   163  	action = "deny"
   164  }
   165  `