github.com/leeclow-ops/gophercloud@v1.2.1/acceptance/openstack/networking/v2/extensions/layer3/portforwardings_test.go (about) 1 package layer3 2 3 import ( 4 "testing" 5 6 "github.com/leeclow-ops/gophercloud/acceptance/clients" 7 networking "github.com/leeclow-ops/gophercloud/acceptance/openstack/networking/v2" 8 "github.com/leeclow-ops/gophercloud/acceptance/tools" 9 "github.com/leeclow-ops/gophercloud/openstack/networking/v2/extensions/layer3/floatingips" 10 "github.com/leeclow-ops/gophercloud/openstack/networking/v2/extensions/layer3/portforwarding" 11 th "github.com/leeclow-ops/gophercloud/testhelper" 12 ) 13 14 func TestLayer3PortForwardingsCreateDelete(t *testing.T) { 15 clients.RequirePortForwarding(t) 16 17 client, err := clients.NewNetworkV2Client() 18 th.AssertNoErr(t, err) 19 20 choices, err := clients.AcceptanceTestChoicesFromEnv() 21 th.AssertNoErr(t, err) 22 23 // Create Network 24 network, err := networking.CreateNetwork(t, client) 25 th.AssertNoErr(t, err) 26 defer networking.DeleteNetwork(t, client, network.ID) 27 28 subnet, err := networking.CreateSubnet(t, client, network.ID) 29 th.AssertNoErr(t, err) 30 defer networking.DeleteSubnet(t, client, subnet.ID) 31 32 router, err := CreateExternalRouter(t, client) 33 th.AssertNoErr(t, err) 34 defer DeleteRouter(t, client, router.ID) 35 36 port, err := networking.CreatePort(t, client, network.ID, subnet.ID) 37 th.AssertNoErr(t, err) 38 // not required, since "DeleteRouterInterface" below removes the port 39 // defer networking.DeletePort(t, client, port.ID) 40 41 _, err = CreateRouterInterface(t, client, port.ID, router.ID) 42 th.AssertNoErr(t, err) 43 defer DeleteRouterInterface(t, client, port.ID, router.ID) 44 45 fip, err := CreateFloatingIP(t, client, choices.ExternalNetworkID, "") 46 th.AssertNoErr(t, err) 47 defer DeleteFloatingIP(t, client, fip.ID) 48 49 newFip, err := floatingips.Get(client, fip.ID).Extract() 50 th.AssertNoErr(t, err) 51 52 tools.PrintResource(t, newFip) 53 54 pf, err := CreatePortForwarding(t, client, fip.ID, port.ID, port.FixedIPs) 55 th.AssertNoErr(t, err) 56 defer DeletePortForwarding(t, client, fip.ID, pf.ID) 57 tools.PrintResource(t, pf) 58 59 newPf, err := portforwarding.Get(client, fip.ID, pf.ID).Extract() 60 th.AssertNoErr(t, err) 61 62 updateOpts := portforwarding.UpdateOpts{ 63 Protocol: "udp", 64 InternalPort: 30, 65 ExternalPort: 678, 66 } 67 68 _, err = portforwarding.Update(client, fip.ID, newPf.ID, updateOpts).Extract() 69 th.AssertNoErr(t, err) 70 71 newPf, err = portforwarding.Get(client, fip.ID, pf.ID).Extract() 72 th.AssertNoErr(t, err) 73 74 allPages, err := portforwarding.List(client, portforwarding.ListOpts{}, fip.ID).AllPages() 75 th.AssertNoErr(t, err) 76 77 allPFs, err := portforwarding.ExtractPortForwardings(allPages) 78 th.AssertNoErr(t, err) 79 80 var found bool 81 for _, pf := range allPFs { 82 if pf.ID == newPf.ID { 83 found = true 84 } 85 } 86 87 th.AssertEquals(t, true, found) 88 89 }