/Godeps/_workspace/src/github.com/rackspace/gophercloud/acceptance/openstack/compute/v2/floatingip_test.go
Go | 107 lines | 86 code | 20 blank | 1 comment | 18 complexity | af180a1e7466600a6f4ff91260ed532c MD5 | raw file
- // +build acceptance compute servers
- package v2
- import (
- "os"
- "testing"
- "github.com/rackspace/gophercloud"
- "github.com/rackspace/gophercloud/acceptance/tools"
- "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/floatingip"
- "github.com/rackspace/gophercloud/openstack/compute/v2/servers"
- th "github.com/rackspace/gophercloud/testhelper"
- )
- func createFIPServer(t *testing.T, client *gophercloud.ServiceClient, choices *ComputeChoices) (*servers.Server, error) {
- if testing.Short() {
- t.Skip("Skipping test that requires server creation in short mode.")
- }
- name := tools.RandomString("ACPTTEST", 16)
- t.Logf("Attempting to create server: %s\n", name)
- pwd := tools.MakeNewPassword("")
- server, err := servers.Create(client, servers.CreateOpts{
- Name: name,
- FlavorRef: choices.FlavorID,
- ImageRef: choices.ImageID,
- AdminPass: pwd,
- }).Extract()
- if err != nil {
- t.Fatalf("Unable to create server: %v", err)
- }
- th.AssertEquals(t, pwd, server.AdminPass)
- return server, err
- }
- func createFloatingIP(t *testing.T, client *gophercloud.ServiceClient) (*floatingip.FloatingIP, error) {
- pool := os.Getenv("OS_POOL_NAME")
- fip, err := floatingip.Create(client, &floatingip.CreateOpts{
- Pool: pool,
- }).Extract()
- th.AssertNoErr(t, err)
- t.Logf("Obtained Floating IP: %v", fip.IP)
- return fip, err
- }
- func associateFloatingIP(t *testing.T, client *gophercloud.ServiceClient, serverId string, fip *floatingip.FloatingIP) {
- err := floatingip.Associate(client, serverId, fip.IP).ExtractErr()
- th.AssertNoErr(t, err)
- t.Logf("Associated floating IP %v from instance %v", fip.IP, serverId)
- defer func() {
- err = floatingip.Disassociate(client, serverId, fip.IP).ExtractErr()
- th.AssertNoErr(t, err)
- t.Logf("Disassociated floating IP %v from instance %v", fip.IP, serverId)
- }()
- floatingIp, err := floatingip.Get(client, fip.ID).Extract()
- th.AssertNoErr(t, err)
- t.Logf("Floating IP %v is associated with Fixed IP %v", fip.IP, floatingIp.FixedIP)
- }
- func TestFloatingIP(t *testing.T) {
- pool := os.Getenv("OS_POOL_NAME")
- if pool == "" {
- t.Fatalf("OS_POOL_NAME must be set")
- }
- choices, err := ComputeChoicesFromEnv()
- if err != nil {
- t.Fatal(err)
- }
- client, err := newClient()
- if err != nil {
- t.Fatalf("Unable to create a compute client: %v", err)
- }
- server, err := createFIPServer(t, client, choices)
- if err != nil {
- t.Fatalf("Unable to create server: %v", err)
- }
- defer func() {
- servers.Delete(client, server.ID)
- t.Logf("Server deleted.")
- }()
- if err = waitForStatus(client, server, "ACTIVE"); err != nil {
- t.Fatalf("Unable to wait for server: %v", err)
- }
- fip, err := createFloatingIP(t, client)
- if err != nil {
- t.Fatalf("Unable to create floating IP: %v", err)
- }
- defer func() {
- err = floatingip.Delete(client, fip.ID).ExtractErr()
- th.AssertNoErr(t, err)
- t.Logf("Floating IP deleted.")
- }()
- associateFloatingIP(t, client, server.ID, fip)
- }