github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/networking/v2/extensions/layer3/routers_test.go (about) 1 //go:build acceptance || networking || layer3 || router 2 // +build acceptance networking layer3 router 3 4 package layer3 5 6 import ( 7 "testing" 8 9 "github.com/gophercloud/gophercloud/internal/acceptance/clients" 10 networking "github.com/gophercloud/gophercloud/internal/acceptance/openstack/networking/v2" 11 "github.com/gophercloud/gophercloud/internal/acceptance/tools" 12 "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers" 13 th "github.com/gophercloud/gophercloud/testhelper" 14 ) 15 16 func TestLayer3RouterCreateDelete(t *testing.T) { 17 client, err := clients.NewNetworkV2Client() 18 th.AssertNoErr(t, err) 19 20 network, err := networking.CreateNetwork(t, client) 21 th.AssertNoErr(t, err) 22 defer networking.DeleteNetwork(t, client, network.ID) 23 24 router, err := CreateRouter(t, client, network.ID) 25 th.AssertNoErr(t, err) 26 defer DeleteRouter(t, client, router.ID) 27 28 tools.PrintResource(t, router) 29 30 newName := tools.RandomString("TESTACC-", 8) 31 newDescription := "" 32 updateOpts := routers.UpdateOpts{ 33 Name: newName, 34 Description: &newDescription, 35 } 36 37 _, err = routers.Update(client, router.ID, updateOpts).Extract() 38 th.AssertNoErr(t, err) 39 40 newRouter, err := routers.Get(client, router.ID).Extract() 41 th.AssertNoErr(t, err) 42 43 tools.PrintResource(t, newRouter) 44 th.AssertEquals(t, newRouter.Name, newName) 45 th.AssertEquals(t, newRouter.Description, newDescription) 46 47 listOpts := routers.ListOpts{} 48 allPages, err := routers.List(client, listOpts).AllPages() 49 th.AssertNoErr(t, err) 50 51 allRouters, err := routers.ExtractRouters(allPages) 52 th.AssertNoErr(t, err) 53 54 var found bool 55 for _, router := range allRouters { 56 if router.ID == newRouter.ID { 57 found = true 58 } 59 } 60 61 th.AssertEquals(t, found, true) 62 } 63 64 func TestLayer3ExternalRouterCreateDelete(t *testing.T) { 65 clients.RequireAdmin(t) 66 67 client, err := clients.NewNetworkV2Client() 68 th.AssertNoErr(t, err) 69 70 router, err := CreateExternalRouter(t, client) 71 th.AssertNoErr(t, err) 72 defer DeleteRouter(t, client, router.ID) 73 74 tools.PrintResource(t, router) 75 76 efi := []routers.ExternalFixedIP{} 77 for _, extIP := range router.GatewayInfo.ExternalFixedIPs { 78 efi = append(efi, 79 routers.ExternalFixedIP{ 80 IPAddress: extIP.IPAddress, 81 SubnetID: extIP.SubnetID, 82 }, 83 ) 84 } 85 // Add a new external router IP 86 efi = append(efi, 87 routers.ExternalFixedIP{ 88 SubnetID: router.GatewayInfo.ExternalFixedIPs[0].SubnetID, 89 }, 90 ) 91 92 enableSNAT := true 93 gatewayInfo := routers.GatewayInfo{ 94 NetworkID: router.GatewayInfo.NetworkID, 95 EnableSNAT: &enableSNAT, 96 ExternalFixedIPs: efi, 97 } 98 99 newName := tools.RandomString("TESTACC-", 8) 100 newDescription := "" 101 updateOpts := routers.UpdateOpts{ 102 Name: newName, 103 Description: &newDescription, 104 GatewayInfo: &gatewayInfo, 105 } 106 107 _, err = routers.Update(client, router.ID, updateOpts).Extract() 108 th.AssertNoErr(t, err) 109 110 newRouter, err := routers.Get(client, router.ID).Extract() 111 th.AssertNoErr(t, err) 112 113 tools.PrintResource(t, newRouter) 114 th.AssertEquals(t, newRouter.Name, newName) 115 th.AssertEquals(t, newRouter.Description, newDescription) 116 th.AssertEquals(t, *newRouter.GatewayInfo.EnableSNAT, enableSNAT) 117 th.AssertDeepEquals(t, newRouter.GatewayInfo.ExternalFixedIPs, efi) 118 119 // Test Gateway removal 120 updateOpts = routers.UpdateOpts{ 121 GatewayInfo: &routers.GatewayInfo{}, 122 } 123 124 newRouter, err = routers.Update(client, router.ID, updateOpts).Extract() 125 th.AssertNoErr(t, err) 126 th.AssertDeepEquals(t, newRouter.GatewayInfo, routers.GatewayInfo{}) 127 128 } 129 130 func TestLayer3RouterInterface(t *testing.T) { 131 clients.RequireAdmin(t) 132 133 client, err := clients.NewNetworkV2Client() 134 th.AssertNoErr(t, err) 135 136 // Create Network 137 network, err := networking.CreateNetwork(t, client) 138 th.AssertNoErr(t, err) 139 defer networking.DeleteNetwork(t, client, network.ID) 140 141 subnet, err := networking.CreateSubnet(t, client, network.ID) 142 th.AssertNoErr(t, err) 143 defer networking.DeleteSubnet(t, client, subnet.ID) 144 145 tools.PrintResource(t, subnet) 146 147 router, err := CreateExternalRouter(t, client) 148 th.AssertNoErr(t, err) 149 defer DeleteRouter(t, client, router.ID) 150 151 aiOpts := routers.AddInterfaceOpts{ 152 SubnetID: subnet.ID, 153 } 154 155 iface, err := routers.AddInterface(client, router.ID, aiOpts).Extract() 156 th.AssertNoErr(t, err) 157 158 tools.PrintResource(t, router) 159 tools.PrintResource(t, iface) 160 161 riOpts := routers.RemoveInterfaceOpts{ 162 SubnetID: subnet.ID, 163 } 164 165 _, err = routers.RemoveInterface(client, router.ID, riOpts).Extract() 166 th.AssertNoErr(t, err) 167 } 168 169 func TestLayer3RouterAgents(t *testing.T) { 170 t.Skip("TestLayer3RouterAgents needs to be re-worked to work with both ML2/OVS and OVN") 171 clients.RequireAdmin(t) 172 173 client, err := clients.NewNetworkV2Client() 174 th.AssertNoErr(t, err) 175 176 network, err := networking.CreateNetwork(t, client) 177 th.AssertNoErr(t, err) 178 defer networking.DeleteNetwork(t, client, network.ID) 179 180 router, err := CreateRouter(t, client, network.ID) 181 th.AssertNoErr(t, err) 182 defer DeleteRouter(t, client, router.ID) 183 184 tools.PrintResource(t, router) 185 186 newName := tools.RandomString("TESTACC-", 8) 187 newDescription := "" 188 updateOpts := routers.UpdateOpts{ 189 Name: newName, 190 Description: &newDescription, 191 } 192 193 _, err = routers.Update(client, router.ID, updateOpts).Extract() 194 th.AssertNoErr(t, err) 195 196 _, err = routers.Get(client, router.ID).Extract() 197 th.AssertNoErr(t, err) 198 199 // Test ListL3Agents for HA or not HA router 200 l3AgentsPages, err := routers.ListL3Agents(client, router.ID).AllPages() 201 th.AssertNoErr(t, err) 202 l3Agents, err := routers.ExtractL3Agents(l3AgentsPages) 203 th.AssertNoErr(t, err) 204 205 tools.PrintResource(t, l3Agents) 206 207 var found bool 208 for _, agent := range l3Agents { 209 if agent.Binary == "neutron-l3-agent" { 210 found = true 211 } 212 } 213 214 th.AssertEquals(t, found, true) 215 }