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  }