github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/openstack/resource_openstack_networking_subnet_v2_test.go (about)

     1  package openstack
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/resource"
     8  	"github.com/hashicorp/terraform/terraform"
     9  
    10  	"github.com/gophercloud/gophercloud/openstack/networking/v2/subnets"
    11  )
    12  
    13  func TestAccNetworkingV2Subnet_basic(t *testing.T) {
    14  	var subnet subnets.Subnet
    15  
    16  	resource.Test(t, resource.TestCase{
    17  		PreCheck:     func() { testAccPreCheck(t) },
    18  		Providers:    testAccProviders,
    19  		CheckDestroy: testAccCheckNetworkingV2SubnetDestroy,
    20  		Steps: []resource.TestStep{
    21  			resource.TestStep{
    22  				Config: testAccNetworkingV2Subnet_basic,
    23  				Check: resource.ComposeTestCheckFunc(
    24  					testAccCheckNetworkingV2SubnetExists("openstack_networking_subnet_v2.subnet_1", &subnet),
    25  					resource.TestCheckResourceAttr(
    26  						"openstack_networking_subnet_v2.subnet_1", "allocation_pools.0.start", "192.168.199.100"),
    27  				),
    28  			},
    29  			resource.TestStep{
    30  				Config: testAccNetworkingV2Subnet_update,
    31  				Check: resource.ComposeTestCheckFunc(
    32  					resource.TestCheckResourceAttr(
    33  						"openstack_networking_subnet_v2.subnet_1", "name", "subnet_1"),
    34  					resource.TestCheckResourceAttr(
    35  						"openstack_networking_subnet_v2.subnet_1", "gateway_ip", "192.168.199.1"),
    36  					resource.TestCheckResourceAttr(
    37  						"openstack_networking_subnet_v2.subnet_1", "enable_dhcp", "true"),
    38  					resource.TestCheckResourceAttr(
    39  						"openstack_networking_subnet_v2.subnet_1", "allocation_pools.0.start", "192.168.199.150"),
    40  				),
    41  			},
    42  		},
    43  	})
    44  }
    45  
    46  func TestAccNetworkingV2Subnet_enableDHCP(t *testing.T) {
    47  	var subnet subnets.Subnet
    48  
    49  	resource.Test(t, resource.TestCase{
    50  		PreCheck:     func() { testAccPreCheck(t) },
    51  		Providers:    testAccProviders,
    52  		CheckDestroy: testAccCheckNetworkingV2SubnetDestroy,
    53  		Steps: []resource.TestStep{
    54  			resource.TestStep{
    55  				Config: testAccNetworkingV2Subnet_enableDHCP,
    56  				Check: resource.ComposeTestCheckFunc(
    57  					testAccCheckNetworkingV2SubnetExists("openstack_networking_subnet_v2.subnet_1", &subnet),
    58  					resource.TestCheckResourceAttr(
    59  						"openstack_networking_subnet_v2.subnet_1", "enable_dhcp", "true"),
    60  				),
    61  			},
    62  		},
    63  	})
    64  }
    65  
    66  func TestAccNetworkingV2Subnet_disableDHCP(t *testing.T) {
    67  	var subnet subnets.Subnet
    68  
    69  	resource.Test(t, resource.TestCase{
    70  		PreCheck:     func() { testAccPreCheck(t) },
    71  		Providers:    testAccProviders,
    72  		CheckDestroy: testAccCheckNetworkingV2SubnetDestroy,
    73  		Steps: []resource.TestStep{
    74  			resource.TestStep{
    75  				Config: testAccNetworkingV2Subnet_disableDHCP,
    76  				Check: resource.ComposeTestCheckFunc(
    77  					testAccCheckNetworkingV2SubnetExists("openstack_networking_subnet_v2.subnet_1", &subnet),
    78  					resource.TestCheckResourceAttr(
    79  						"openstack_networking_subnet_v2.subnet_1", "enable_dhcp", "false"),
    80  				),
    81  			},
    82  		},
    83  	})
    84  }
    85  
    86  func TestAccNetworkingV2Subnet_noGateway(t *testing.T) {
    87  	var subnet subnets.Subnet
    88  
    89  	resource.Test(t, resource.TestCase{
    90  		PreCheck:     func() { testAccPreCheck(t) },
    91  		Providers:    testAccProviders,
    92  		CheckDestroy: testAccCheckNetworkingV2SubnetDestroy,
    93  		Steps: []resource.TestStep{
    94  			resource.TestStep{
    95  				Config: testAccNetworkingV2Subnet_noGateway,
    96  				Check: resource.ComposeTestCheckFunc(
    97  					testAccCheckNetworkingV2SubnetExists("openstack_networking_subnet_v2.subnet_1", &subnet),
    98  					resource.TestCheckResourceAttr(
    99  						"openstack_networking_subnet_v2.subnet_1", "gateway_ip", ""),
   100  				),
   101  			},
   102  		},
   103  	})
   104  }
   105  
   106  func TestAccNetworkingV2Subnet_impliedGateway(t *testing.T) {
   107  	var subnet subnets.Subnet
   108  
   109  	resource.Test(t, resource.TestCase{
   110  		PreCheck:     func() { testAccPreCheck(t) },
   111  		Providers:    testAccProviders,
   112  		CheckDestroy: testAccCheckNetworkingV2SubnetDestroy,
   113  		Steps: []resource.TestStep{
   114  			resource.TestStep{
   115  				Config: testAccNetworkingV2Subnet_impliedGateway,
   116  				Check: resource.ComposeTestCheckFunc(
   117  					testAccCheckNetworkingV2SubnetExists("openstack_networking_subnet_v2.subnet_1", &subnet),
   118  					resource.TestCheckResourceAttr(
   119  						"openstack_networking_subnet_v2.subnet_1", "gateway_ip", "192.168.199.1"),
   120  				),
   121  			},
   122  		},
   123  	})
   124  }
   125  
   126  func TestAccNetworkingV2Subnet_timeout(t *testing.T) {
   127  	var subnet subnets.Subnet
   128  
   129  	resource.Test(t, resource.TestCase{
   130  		PreCheck:     func() { testAccPreCheck(t) },
   131  		Providers:    testAccProviders,
   132  		CheckDestroy: testAccCheckNetworkingV2SubnetDestroy,
   133  		Steps: []resource.TestStep{
   134  			resource.TestStep{
   135  				Config: testAccNetworkingV2Subnet_timeout,
   136  				Check: resource.ComposeTestCheckFunc(
   137  					testAccCheckNetworkingV2SubnetExists("openstack_networking_subnet_v2.subnet_1", &subnet),
   138  				),
   139  			},
   140  		},
   141  	})
   142  }
   143  
   144  func testAccCheckNetworkingV2SubnetDestroy(s *terraform.State) error {
   145  	config := testAccProvider.Meta().(*Config)
   146  	networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
   147  	if err != nil {
   148  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
   149  	}
   150  
   151  	for _, rs := range s.RootModule().Resources {
   152  		if rs.Type != "openstack_networking_subnet_v2" {
   153  			continue
   154  		}
   155  
   156  		_, err := subnets.Get(networkingClient, rs.Primary.ID).Extract()
   157  		if err == nil {
   158  			return fmt.Errorf("Subnet still exists")
   159  		}
   160  	}
   161  
   162  	return nil
   163  }
   164  
   165  func testAccCheckNetworkingV2SubnetExists(n string, subnet *subnets.Subnet) resource.TestCheckFunc {
   166  	return func(s *terraform.State) error {
   167  		rs, ok := s.RootModule().Resources[n]
   168  		if !ok {
   169  			return fmt.Errorf("Not found: %s", n)
   170  		}
   171  
   172  		if rs.Primary.ID == "" {
   173  			return fmt.Errorf("No ID is set")
   174  		}
   175  
   176  		config := testAccProvider.Meta().(*Config)
   177  		networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
   178  		if err != nil {
   179  			return fmt.Errorf("Error creating OpenStack networking client: %s", err)
   180  		}
   181  
   182  		found, err := subnets.Get(networkingClient, rs.Primary.ID).Extract()
   183  		if err != nil {
   184  			return err
   185  		}
   186  
   187  		if found.ID != rs.Primary.ID {
   188  			return fmt.Errorf("Subnet not found")
   189  		}
   190  
   191  		*subnet = *found
   192  
   193  		return nil
   194  	}
   195  }
   196  
   197  const testAccNetworkingV2Subnet_basic = `
   198  resource "openstack_networking_network_v2" "network_1" {
   199    name = "network_1"
   200    admin_state_up = "true"
   201  }
   202  
   203  resource "openstack_networking_subnet_v2" "subnet_1" {
   204    cidr = "192.168.199.0/24"
   205    network_id = "${openstack_networking_network_v2.network_1.id}"
   206  
   207    allocation_pools {
   208      start = "192.168.199.100"
   209      end = "192.168.199.200"
   210    }
   211  }
   212  `
   213  
   214  const testAccNetworkingV2Subnet_update = `
   215  resource "openstack_networking_network_v2" "network_1" {
   216    name = "network_1"
   217    admin_state_up = "true"
   218  }
   219  
   220  resource "openstack_networking_subnet_v2" "subnet_1" {
   221    name = "subnet_1"
   222    cidr = "192.168.199.0/24"
   223    gateway_ip = "192.168.199.1"
   224    network_id = "${openstack_networking_network_v2.network_1.id}"
   225  
   226    allocation_pools {
   227      start = "192.168.199.150"
   228      end = "192.168.199.200"
   229    }
   230  }
   231  `
   232  
   233  const testAccNetworkingV2Subnet_enableDHCP = `
   234  resource "openstack_networking_network_v2" "network_1" {
   235    name = "network_1"
   236    admin_state_up = "true"
   237  }
   238  
   239  resource "openstack_networking_subnet_v2" "subnet_1" {
   240    name = "subnet_1"
   241    cidr = "192.168.199.0/24"
   242    gateway_ip = "192.168.199.1"
   243    enable_dhcp = true
   244    network_id = "${openstack_networking_network_v2.network_1.id}"
   245  }
   246  `
   247  
   248  const testAccNetworkingV2Subnet_disableDHCP = `
   249  resource "openstack_networking_network_v2" "network_1" {
   250    name = "network_1"
   251    admin_state_up = "true"
   252  }
   253  
   254  resource "openstack_networking_subnet_v2" "subnet_1" {
   255    name = "subnet_1"
   256    cidr = "192.168.199.0/24"
   257    enable_dhcp = false
   258    network_id = "${openstack_networking_network_v2.network_1.id}"
   259  }
   260  `
   261  
   262  const testAccNetworkingV2Subnet_noGateway = `
   263  resource "openstack_networking_network_v2" "network_1" {
   264    name = "network_1"
   265    admin_state_up = "true"
   266  }
   267  
   268  resource "openstack_networking_subnet_v2" "subnet_1" {
   269    name = "subnet_1"
   270    cidr = "192.168.199.0/24"
   271    no_gateway = true
   272    network_id = "${openstack_networking_network_v2.network_1.id}"
   273  }
   274  `
   275  
   276  const testAccNetworkingV2Subnet_impliedGateway = `
   277  resource "openstack_networking_network_v2" "network_1" {
   278    name = "network_1"
   279    admin_state_up = "true"
   280  }
   281  resource "openstack_networking_subnet_v2" "subnet_1" {
   282    name = "subnet_1"
   283    cidr = "192.168.199.0/24"
   284    network_id = "${openstack_networking_network_v2.network_1.id}"
   285  }
   286  `
   287  
   288  const testAccNetworkingV2Subnet_timeout = `
   289  resource "openstack_networking_network_v2" "network_1" {
   290    name = "network_1"
   291    admin_state_up = "true"
   292  }
   293  
   294  resource "openstack_networking_subnet_v2" "subnet_1" {
   295    cidr = "192.168.199.0/24"
   296    network_id = "${openstack_networking_network_v2.network_1.id}"
   297  
   298    allocation_pools {
   299      start = "192.168.199.100"
   300      end = "192.168.199.200"
   301    }
   302  
   303    timeouts {
   304      create = "5m"
   305      delete = "5m"
   306    }
   307  }
   308  `