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 `