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 }`)