github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/compute/v2/floatingip_test.go (about)

     1  //go:build acceptance || compute || servers
     2  // +build acceptance compute servers
     3  
     4  package v2
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/gophercloud/gophercloud/internal/acceptance/clients"
    10  	"github.com/gophercloud/gophercloud/internal/acceptance/tools"
    11  	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/floatingips"
    12  	"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
    13  	th "github.com/gophercloud/gophercloud/testhelper"
    14  )
    15  
    16  func TestFloatingIPsCreateDelete(t *testing.T) {
    17  	client, err := clients.NewComputeV2Client()
    18  	th.AssertNoErr(t, err)
    19  
    20  	floatingIP, err := CreateFloatingIP(t, client)
    21  	th.AssertNoErr(t, err)
    22  	defer DeleteFloatingIP(t, client, floatingIP)
    23  
    24  	tools.PrintResource(t, floatingIP)
    25  
    26  	allPages, err := floatingips.List(client).AllPages()
    27  	th.AssertNoErr(t, err)
    28  
    29  	allFloatingIPs, err := floatingips.ExtractFloatingIPs(allPages)
    30  	th.AssertNoErr(t, err)
    31  
    32  	var found bool
    33  	for _, fip := range allFloatingIPs {
    34  		tools.PrintResource(t, floatingIP)
    35  
    36  		if fip.ID == floatingIP.ID {
    37  			found = true
    38  		}
    39  	}
    40  
    41  	th.AssertEquals(t, found, true)
    42  
    43  	fip, err := floatingips.Get(client, floatingIP.ID).Extract()
    44  	th.AssertNoErr(t, err)
    45  
    46  	th.AssertEquals(t, floatingIP.ID, fip.ID)
    47  }
    48  
    49  func TestFloatingIPsAssociate(t *testing.T) {
    50  	clients.RequireLong(t)
    51  
    52  	client, err := clients.NewComputeV2Client()
    53  	th.AssertNoErr(t, err)
    54  
    55  	server, err := CreateServer(t, client)
    56  	th.AssertNoErr(t, err)
    57  	defer DeleteServer(t, client, server)
    58  
    59  	floatingIP, err := CreateFloatingIP(t, client)
    60  	th.AssertNoErr(t, err)
    61  	defer DeleteFloatingIP(t, client, floatingIP)
    62  
    63  	tools.PrintResource(t, floatingIP)
    64  
    65  	err = AssociateFloatingIP(t, client, floatingIP, server)
    66  	th.AssertNoErr(t, err)
    67  	defer DisassociateFloatingIP(t, client, floatingIP, server)
    68  
    69  	newFloatingIP, err := floatingips.Get(client, floatingIP.ID).Extract()
    70  	th.AssertNoErr(t, err)
    71  
    72  	t.Logf("Floating IP %s is associated with Fixed IP %s", floatingIP.IP, newFloatingIP.FixedIP)
    73  
    74  	tools.PrintResource(t, newFloatingIP)
    75  
    76  	th.AssertEquals(t, newFloatingIP.InstanceID, server.ID)
    77  }
    78  
    79  func TestFloatingIPsFixedIPAssociate(t *testing.T) {
    80  	clients.RequireLong(t)
    81  
    82  	client, err := clients.NewComputeV2Client()
    83  	th.AssertNoErr(t, err)
    84  
    85  	choices, err := clients.AcceptanceTestChoicesFromEnv()
    86  	th.AssertNoErr(t, err)
    87  
    88  	server, err := CreateServer(t, client)
    89  	th.AssertNoErr(t, err)
    90  	defer DeleteServer(t, client, server)
    91  
    92  	newServer, err := servers.Get(client, server.ID).Extract()
    93  	th.AssertNoErr(t, err)
    94  
    95  	floatingIP, err := CreateFloatingIP(t, client)
    96  	th.AssertNoErr(t, err)
    97  	defer DeleteFloatingIP(t, client, floatingIP)
    98  
    99  	tools.PrintResource(t, floatingIP)
   100  
   101  	var fixedIP string
   102  	for _, networkAddresses := range newServer.Addresses[choices.NetworkName].([]interface{}) {
   103  		address := networkAddresses.(map[string]interface{})
   104  		if address["OS-EXT-IPS:type"] == "fixed" {
   105  			if address["version"].(float64) == 4 {
   106  				fixedIP = address["addr"].(string)
   107  			}
   108  		}
   109  	}
   110  
   111  	err = AssociateFloatingIPWithFixedIP(t, client, floatingIP, newServer, fixedIP)
   112  	th.AssertNoErr(t, err)
   113  	defer DisassociateFloatingIP(t, client, floatingIP, newServer)
   114  
   115  	newFloatingIP, err := floatingips.Get(client, floatingIP.ID).Extract()
   116  	th.AssertNoErr(t, err)
   117  
   118  	t.Logf("Floating IP %s is associated with Fixed IP %s", floatingIP.IP, newFloatingIP.FixedIP)
   119  
   120  	tools.PrintResource(t, newFloatingIP)
   121  
   122  	th.AssertEquals(t, newFloatingIP.InstanceID, server.ID)
   123  	th.AssertEquals(t, newFloatingIP.FixedIP, fixedIP)
   124  }