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  }