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