github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/networking/v2/extensions/layer3/floatingips_test.go (about) 1 //go:build acceptance || networking || layer3 || floatingips 2 // +build acceptance networking layer3 floatingips 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/floatingips" 13 "github.com/gophercloud/gophercloud/openstack/networking/v2/subnets" 14 th "github.com/gophercloud/gophercloud/testhelper" 15 ) 16 17 func TestLayer3FloatingIPsCreateDelete(t *testing.T) { 18 client, err := clients.NewNetworkV2Client() 19 th.AssertNoErr(t, err) 20 21 choices, err := clients.AcceptanceTestChoicesFromEnv() 22 th.AssertNoErr(t, err) 23 24 fip, err := CreateFloatingIP(t, client, choices.ExternalNetworkID, "") 25 th.AssertNoErr(t, err) 26 defer DeleteFloatingIP(t, client, fip.ID) 27 28 newFip, err := floatingips.Get(client, fip.ID).Extract() 29 th.AssertNoErr(t, err) 30 31 tools.PrintResource(t, newFip) 32 33 allPages, err := floatingips.List(client, floatingips.ListOpts{}).AllPages() 34 th.AssertNoErr(t, err) 35 36 allFIPs, err := floatingips.ExtractFloatingIPs(allPages) 37 th.AssertNoErr(t, err) 38 39 var found bool 40 for _, fip := range allFIPs { 41 if fip.ID == newFip.ID { 42 found = true 43 } 44 } 45 46 th.AssertEquals(t, found, true) 47 } 48 49 func TestLayer3FloatingIPsExternalCreateDelete(t *testing.T) { 50 clients.RequireAdmin(t) 51 52 client, err := clients.NewNetworkV2Client() 53 th.AssertNoErr(t, err) 54 55 choices, err := clients.AcceptanceTestChoicesFromEnv() 56 th.AssertNoErr(t, err) 57 58 // Create Network 59 network, err := networking.CreateNetwork(t, client) 60 th.AssertNoErr(t, err) 61 defer networking.DeleteNetwork(t, client, network.ID) 62 63 subnet, err := networking.CreateSubnet(t, client, network.ID) 64 th.AssertNoErr(t, err) 65 defer networking.DeleteSubnet(t, client, subnet.ID) 66 67 router, err := CreateExternalRouter(t, client) 68 th.AssertNoErr(t, err) 69 defer DeleteRouter(t, client, router.ID) 70 71 port, err := networking.CreatePort(t, client, network.ID, subnet.ID) 72 th.AssertNoErr(t, err) 73 // not required, since "DeleteRouterInterface" below removes the port 74 // defer networking.DeletePort(t, client, port.ID) 75 76 _, err = CreateRouterInterface(t, client, port.ID, router.ID) 77 th.AssertNoErr(t, err) 78 defer DeleteRouterInterface(t, client, port.ID, router.ID) 79 80 fip, err := CreateFloatingIP(t, client, choices.ExternalNetworkID, port.ID) 81 th.AssertNoErr(t, err) 82 defer DeleteFloatingIP(t, client, fip.ID) 83 84 newFip, err := floatingips.Get(client, fip.ID).Extract() 85 th.AssertNoErr(t, err) 86 87 tools.PrintResource(t, newFip) 88 89 // Disassociate the floating IP 90 updateOpts := floatingips.UpdateOpts{ 91 PortID: new(string), 92 } 93 94 _, err = floatingips.Update(client, fip.ID, updateOpts).Extract() 95 th.AssertNoErr(t, err) 96 97 newFip, err = floatingips.Get(client, fip.ID).Extract() 98 th.AssertNoErr(t, err) 99 100 tools.PrintResource(t, newFip) 101 102 th.AssertEquals(t, newFip.PortID, "") 103 } 104 105 func TestLayer3FloatingIPsWithFixedIPsExternalCreateDelete(t *testing.T) { 106 clients.RequireAdmin(t) 107 108 client, err := clients.NewNetworkV2Client() 109 th.AssertNoErr(t, err) 110 111 choices, err := clients.AcceptanceTestChoicesFromEnv() 112 th.AssertNoErr(t, err) 113 114 // Create Network 115 network, err := networking.CreateNetwork(t, client) 116 th.AssertNoErr(t, err) 117 defer networking.DeleteNetwork(t, client, network.ID) 118 119 subnet, err := networking.CreateSubnet(t, client, network.ID) 120 th.AssertNoErr(t, err) 121 defer networking.DeleteSubnet(t, client, subnet.ID) 122 123 router, err := CreateExternalRouter(t, client) 124 th.AssertNoErr(t, err) 125 defer DeleteRouter(t, client, router.ID) 126 127 port, err := networking.CreatePortWithMultipleFixedIPs(t, client, network.ID, subnet.ID) 128 th.AssertNoErr(t, err) 129 defer networking.DeletePort(t, client, port.ID) 130 131 var fixedIPs []string 132 for _, fixedIP := range port.FixedIPs { 133 fixedIPs = append(fixedIPs, fixedIP.IPAddress) 134 } 135 136 iface, err := CreateRouterInterfaceOnSubnet(t, client, subnet.ID, router.ID) 137 th.AssertNoErr(t, err) 138 defer DeleteRouterInterface(t, client, iface.PortID, router.ID) 139 140 fip, err := CreateFloatingIPWithFixedIP(t, client, choices.ExternalNetworkID, port.ID, fixedIPs[0]) 141 th.AssertNoErr(t, err) 142 defer DeleteFloatingIP(t, client, fip.ID) 143 144 newFip, err := floatingips.Get(client, fip.ID).Extract() 145 th.AssertNoErr(t, err) 146 147 tools.PrintResource(t, newFip) 148 149 // Associate the floating IP with another fixed IP 150 updateOpts := floatingips.UpdateOpts{ 151 PortID: &port.ID, 152 FixedIP: fixedIPs[1], 153 } 154 155 _, err = floatingips.Update(client, fip.ID, updateOpts).Extract() 156 th.AssertNoErr(t, err) 157 158 newFip, err = floatingips.Get(client, fip.ID).Extract() 159 th.AssertNoErr(t, err) 160 161 tools.PrintResource(t, newFip) 162 163 th.AssertEquals(t, newFip.FixedIP, fixedIPs[1]) 164 165 // Disassociate the floating IP 166 updateOpts = floatingips.UpdateOpts{ 167 PortID: new(string), 168 } 169 170 _, err = floatingips.Update(client, fip.ID, updateOpts).Extract() 171 th.AssertNoErr(t, err) 172 } 173 174 func TestLayer3FloatingIPsCreateDeleteBySubnetID(t *testing.T) { 175 clients.RequireAdmin(t) 176 177 client, err := clients.NewNetworkV2Client() 178 th.AssertNoErr(t, err) 179 180 choices, err := clients.AcceptanceTestChoicesFromEnv() 181 th.AssertNoErr(t, err) 182 183 listOpts := subnets.ListOpts{ 184 NetworkID: choices.ExternalNetworkID, 185 IPVersion: 4, 186 } 187 188 subnetPages, err := subnets.List(client, listOpts).AllPages() 189 th.AssertNoErr(t, err) 190 191 allSubnets, err := subnets.ExtractSubnets(subnetPages) 192 th.AssertNoErr(t, err) 193 194 createOpts := floatingips.CreateOpts{ 195 FloatingNetworkID: choices.ExternalNetworkID, 196 SubnetID: allSubnets[0].ID, 197 } 198 199 fip, err := floatingips.Create(client, createOpts).Extract() 200 th.AssertNoErr(t, err) 201 202 tools.PrintResource(t, fip) 203 204 DeleteFloatingIP(t, client, fip.ID) 205 }