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 }