github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/openstack/resource_openstack_networking_router_route_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/extensions/layer3/routers"
    11  	"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
    12  	"github.com/gophercloud/gophercloud/openstack/networking/v2/subnets"
    13  )
    14  
    15  func TestAccNetworkingV2RouterRoute_basic(t *testing.T) {
    16  	var router routers.Router
    17  	var network [2]networks.Network
    18  	var subnet [2]subnets.Subnet
    19  
    20  	resource.Test(t, resource.TestCase{
    21  		PreCheck:  func() { testAccPreCheck(t) },
    22  		Providers: testAccProviders,
    23  		Steps: []resource.TestStep{
    24  			resource.TestStep{
    25  				Config: testAccNetworkingV2RouterRoute_create,
    26  				Check: resource.ComposeTestCheckFunc(
    27  					testAccCheckNetworkingV2RouterExists("openstack_networking_router_v2.router_1", &router),
    28  					testAccCheckNetworkingV2NetworkExists(
    29  						"openstack_networking_network_v2.network_1", &network[0]),
    30  					testAccCheckNetworkingV2SubnetExists(
    31  						"openstack_networking_subnet_v2.subnet_1", &subnet[0]),
    32  					testAccCheckNetworkingV2NetworkExists(
    33  						"openstack_networking_network_v2.network_1", &network[1]),
    34  					testAccCheckNetworkingV2SubnetExists(
    35  						"openstack_networking_subnet_v2.subnet_1", &subnet[1]),
    36  					testAccCheckNetworkingV2RouterInterfaceExists(
    37  						"openstack_networking_router_interface_v2.int_1"),
    38  					testAccCheckNetworkingV2RouterInterfaceExists(
    39  						"openstack_networking_router_interface_v2.int_2"),
    40  					testAccCheckNetworkingV2RouterRouteExists(
    41  						"openstack_networking_router_route_v2.router_route_1"),
    42  				),
    43  			},
    44  			resource.TestStep{
    45  				Config: testAccNetworkingV2RouterRoute_update,
    46  				Check: resource.ComposeTestCheckFunc(
    47  					testAccCheckNetworkingV2RouterRouteExists(
    48  						"openstack_networking_router_route_v2.router_route_1"),
    49  					testAccCheckNetworkingV2RouterRouteExists(
    50  						"openstack_networking_router_route_v2.router_route_2"),
    51  				),
    52  			},
    53  			resource.TestStep{
    54  				Config: testAccNetworkingV2RouterRoute_destroy,
    55  				Check: resource.ComposeTestCheckFunc(
    56  					testAccCheckNetworkingV2RouterRouteEmpty("openstack_networking_router_v2.router_1"),
    57  				),
    58  			},
    59  		},
    60  	})
    61  }
    62  
    63  func testAccCheckNetworkingV2RouterRouteEmpty(n string) resource.TestCheckFunc {
    64  	return func(s *terraform.State) error {
    65  		rs, ok := s.RootModule().Resources[n]
    66  		if !ok {
    67  			return fmt.Errorf("Not found: %s", n)
    68  		}
    69  
    70  		if rs.Primary.ID == "" {
    71  			return fmt.Errorf("No ID is set")
    72  		}
    73  
    74  		config := testAccProvider.Meta().(*Config)
    75  		networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
    76  		if err != nil {
    77  			return fmt.Errorf("Error creating OpenStack networking client: %s", err)
    78  		}
    79  
    80  		router, err := routers.Get(networkingClient, rs.Primary.ID).Extract()
    81  		if err != nil {
    82  			return err
    83  		}
    84  
    85  		if router.ID != rs.Primary.ID {
    86  			return fmt.Errorf("Router not found")
    87  		}
    88  
    89  		if len(router.Routes) != 0 {
    90  			return fmt.Errorf("Invalid number of route entries: %d", len(router.Routes))
    91  		}
    92  
    93  		return nil
    94  	}
    95  }
    96  
    97  func testAccCheckNetworkingV2RouterRouteExists(n string) resource.TestCheckFunc {
    98  	return func(s *terraform.State) error {
    99  		rs, ok := s.RootModule().Resources[n]
   100  		if !ok {
   101  			return fmt.Errorf("Not found: %s", n)
   102  		}
   103  
   104  		if rs.Primary.ID == "" {
   105  			return fmt.Errorf("No ID is set")
   106  		}
   107  
   108  		config := testAccProvider.Meta().(*Config)
   109  		networkingClient, err := config.networkingV2Client(OS_REGION_NAME)
   110  		if err != nil {
   111  			return fmt.Errorf("Error creating OpenStack networking client: %s", err)
   112  		}
   113  
   114  		router, err := routers.Get(networkingClient, rs.Primary.Attributes["router_id"]).Extract()
   115  		if err != nil {
   116  			return err
   117  		}
   118  
   119  		if router.ID != rs.Primary.Attributes["router_id"] {
   120  			return fmt.Errorf("Router for route not found")
   121  		}
   122  
   123  		var found bool = false
   124  		for _, r := range router.Routes {
   125  			if r.DestinationCIDR == rs.Primary.Attributes["destination_cidr"] && r.NextHop == rs.Primary.Attributes["next_hop"] {
   126  				found = true
   127  			}
   128  		}
   129  		if !found {
   130  			return fmt.Errorf("Could not find route for destination CIDR: %s, next hop: %s", rs.Primary.Attributes["destination_cidr"], rs.Primary.Attributes["next_hop"])
   131  		}
   132  
   133  		return nil
   134  	}
   135  }
   136  
   137  const testAccNetworkingV2RouterRoute_create = `
   138  resource "openstack_networking_router_v2" "router_1" {
   139    name = "router_1"
   140    admin_state_up = "true"
   141  }
   142  
   143  resource "openstack_networking_network_v2" "network_1" {
   144    name = "network_1"
   145    admin_state_up = "true"
   146  }
   147  
   148  resource "openstack_networking_subnet_v2" "subnet_1" {
   149    cidr = "192.168.199.0/24"
   150    ip_version = 4
   151    network_id = "${openstack_networking_network_v2.network_1.id}"
   152  }
   153  
   154  resource "openstack_networking_port_v2" "port_1" {
   155    name = "port_1"
   156    admin_state_up = "true"
   157    network_id = "${openstack_networking_network_v2.network_1.id}"
   158  
   159    fixed_ip {
   160      subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
   161      ip_address = "192.168.199.1"
   162    }
   163  }
   164  
   165  resource "openstack_networking_router_interface_v2" "int_1" {
   166    router_id = "${openstack_networking_router_v2.router_1.id}"
   167    port_id = "${openstack_networking_port_v2.port_1.id}"
   168  }
   169  
   170  resource "openstack_networking_network_v2" "network_2" {
   171    name = "network_2"
   172    admin_state_up = "true"
   173  }
   174  
   175  resource "openstack_networking_subnet_v2" "subnet_2" {
   176    cidr = "192.168.200.0/24"
   177    ip_version = 4
   178    network_id = "${openstack_networking_network_v2.network_2.id}"
   179  }
   180  
   181  resource "openstack_networking_port_v2" "port_2" {
   182    name = "port_2"
   183    admin_state_up = "true"
   184    network_id = "${openstack_networking_network_v2.network_2.id}"
   185  
   186    fixed_ip {
   187      subnet_id = "${openstack_networking_subnet_v2.subnet_2.id}"
   188      ip_address = "192.168.200.1"
   189    }
   190  }
   191  
   192  resource "openstack_networking_router_interface_v2" "int_2" {
   193    router_id = "${openstack_networking_router_v2.router_1.id}"
   194    port_id = "${openstack_networking_port_v2.port_2.id}"
   195  }
   196  
   197  resource "openstack_networking_router_route_v2" "router_route_1" {
   198    destination_cidr = "10.0.1.0/24"
   199    next_hop = "192.168.199.254"
   200  
   201    depends_on = ["openstack_networking_router_interface_v2.int_1"]
   202    router_id = "${openstack_networking_router_v2.router_1.id}"
   203  }
   204  `
   205  
   206  const testAccNetworkingV2RouterRoute_update = `
   207  resource "openstack_networking_router_v2" "router_1" {
   208    name = "router_1"
   209    admin_state_up = "true"
   210  }
   211  
   212  resource "openstack_networking_network_v2" "network_1" {
   213    name = "network_1"
   214    admin_state_up = "true"
   215  }
   216  
   217  resource "openstack_networking_subnet_v2" "subnet_1" {
   218    cidr = "192.168.199.0/24"
   219    ip_version = 4
   220    network_id = "${openstack_networking_network_v2.network_1.id}"
   221  }
   222  
   223  resource "openstack_networking_port_v2" "port_1" {
   224    name = "port_1"
   225    admin_state_up = "true"
   226    network_id = "${openstack_networking_network_v2.network_1.id}"
   227  
   228    fixed_ip {
   229      subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
   230      ip_address = "192.168.199.1"
   231    }
   232  }
   233  
   234  resource "openstack_networking_router_interface_v2" "int_1" {
   235    router_id = "${openstack_networking_router_v2.router_1.id}"
   236    port_id = "${openstack_networking_port_v2.port_1.id}"
   237  }
   238  
   239  resource "openstack_networking_network_v2" "network_2" {
   240    name = "network_2"
   241    admin_state_up = "true"
   242  }
   243  
   244  resource "openstack_networking_subnet_v2" "subnet_2" {
   245    cidr = "192.168.200.0/24"
   246    ip_version = 4
   247    network_id = "${openstack_networking_network_v2.network_2.id}"
   248  }
   249  
   250  resource "openstack_networking_port_v2" "port_2" {
   251    name = "port_2"
   252    admin_state_up = "true"
   253    network_id = "${openstack_networking_network_v2.network_2.id}"
   254  
   255    fixed_ip {
   256      subnet_id = "${openstack_networking_subnet_v2.subnet_2.id}"
   257      ip_address = "192.168.200.1"
   258    }
   259  }
   260  
   261  resource "openstack_networking_router_interface_v2" "int_2" {
   262    router_id = "${openstack_networking_router_v2.router_1.id}"
   263    port_id = "${openstack_networking_port_v2.port_2.id}"
   264  }
   265  
   266  resource "openstack_networking_router_route_v2" "router_route_1" {
   267    destination_cidr = "10.0.1.0/24"
   268    next_hop = "192.168.199.254"
   269  
   270    depends_on = ["openstack_networking_router_interface_v2.int_1"]
   271    router_id = "${openstack_networking_router_v2.router_1.id}"
   272  }
   273  
   274  resource "openstack_networking_router_route_v2" "router_route_2" {
   275    destination_cidr = "10.0.2.0/24"
   276    next_hop = "192.168.200.254"
   277  
   278    depends_on = ["openstack_networking_router_interface_v2.int_2"]
   279    router_id = "${openstack_networking_router_v2.router_1.id}"
   280  }
   281  `
   282  
   283  const testAccNetworkingV2RouterRoute_destroy = `
   284  resource "openstack_networking_router_v2" "router_1" {
   285    name = "router_1"
   286    admin_state_up = "true"
   287  }
   288  
   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    ip_version = 4
   297    network_id = "${openstack_networking_network_v2.network_1.id}"
   298  }
   299  
   300  resource "openstack_networking_port_v2" "port_1" {
   301    name = "port_1"
   302    admin_state_up = "true"
   303    network_id = "${openstack_networking_network_v2.network_1.id}"
   304  
   305    fixed_ip {
   306      subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
   307      ip_address = "192.168.199.1"
   308    }
   309  }
   310  
   311  resource "openstack_networking_router_interface_v2" "int_1" {
   312    router_id = "${openstack_networking_router_v2.router_1.id}"
   313    port_id = "${openstack_networking_port_v2.port_1.id}"
   314  }
   315  
   316  resource "openstack_networking_network_v2" "network_2" {
   317    name = "network_2"
   318    admin_state_up = "true"
   319  }
   320  
   321  resource "openstack_networking_subnet_v2" "subnet_2" {
   322    ip_version = 4
   323    cidr = "192.168.200.0/24"
   324    network_id = "${openstack_networking_network_v2.network_2.id}"
   325  }
   326  
   327  resource "openstack_networking_port_v2" "port_2" {
   328    name = "port_2"
   329    admin_state_up = "true"
   330    network_id = "${openstack_networking_network_v2.network_2.id}"
   331  
   332    fixed_ip {
   333      subnet_id = "${openstack_networking_subnet_v2.subnet_2.id}"
   334      ip_address = "192.168.200.1"
   335    }
   336  }
   337  
   338  resource "openstack_networking_router_interface_v2" "int_2" {
   339    router_id = "${openstack_networking_router_v2.router_1.id}"
   340    port_id = "${openstack_networking_port_v2.port_2.id}"
   341  }
   342  `