Adding initial acceptance tests
diff --git a/acceptance/rackspace/lb/v1/lb_test.go b/acceptance/rackspace/lb/v1/lb_test.go
new file mode 100644
index 0000000..7ff736d
--- /dev/null
+++ b/acceptance/rackspace/lb/v1/lb_test.go
@@ -0,0 +1,162 @@
+// +build acceptance lbs
+
+package v1
+
+import (
+ "strconv"
+ "strings"
+ "testing"
+
+ "github.com/rackspace/gophercloud"
+ "github.com/rackspace/gophercloud/acceptance/tools"
+ "github.com/rackspace/gophercloud/pagination"
+ "github.com/rackspace/gophercloud/rackspace/lb/v1/lbs"
+ "github.com/rackspace/gophercloud/rackspace/lb/v1/vips"
+ th "github.com/rackspace/gophercloud/testhelper"
+)
+
+func TestLBs(t *testing.T) {
+ return
+ client := setup(t)
+
+ ids := createLB(t, client, 3)
+
+ listLBProtocols(t, client)
+
+ listLBAlgorithms(t, client)
+
+ listLBs(t, client)
+
+ getLB(t, client, ids[0])
+
+ updateLB(t, client, ids[0])
+
+ deleteLB(t, client, ids[0])
+
+ batchDeleteLBs(t, client, ids[1:])
+}
+
+func createLB(t *testing.T, client *gophercloud.ServiceClient, count int) []int {
+ ids := []int{}
+
+ for i := 0; i < count; i++ {
+ opts := lbs.CreateOpts{
+ Name: tools.RandomString("test_", 5),
+ Port: 80,
+ Protocol: "HTTP",
+ VIPs: []vips.VIP{
+ vips.VIP{Type: vips.PUBLIC},
+ },
+ }
+
+ lb, err := lbs.Create(client, opts).Extract()
+ th.AssertNoErr(t, err)
+
+ t.Logf("Created LB %d - waiting for it to build...", lb.ID)
+ waitForLB(client, lb.ID, lbs.ACTIVE)
+ t.Logf("LB %d has reached ACTIVE state", lb.ID)
+
+ ids = append(ids, lb.ID)
+ }
+
+ return ids
+}
+
+func waitForLB(client *gophercloud.ServiceClient, id int, state lbs.Status) {
+ gophercloud.WaitFor(60, func() (bool, error) {
+ lb, err := lbs.Get(client, id).Extract()
+ if err != nil {
+ return false, err
+ }
+ if lb.Status != state {
+ return false, nil
+ }
+ return true, nil
+ })
+}
+
+func listLBProtocols(t *testing.T, client *gophercloud.ServiceClient) {
+ err := lbs.ListProtocols(client).EachPage(func(page pagination.Page) (bool, error) {
+ pList, err := lbs.ExtractProtocols(page)
+ th.AssertNoErr(t, err)
+
+ for _, p := range pList {
+ t.Logf("Listing protocol: Name [%s]", p.Name)
+ }
+
+ return true, nil
+ })
+ th.AssertNoErr(t, err)
+}
+
+func listLBAlgorithms(t *testing.T, client *gophercloud.ServiceClient) {
+ err := lbs.ListAlgorithms(client).EachPage(func(page pagination.Page) (bool, error) {
+ aList, err := lbs.ExtractAlgorithms(page)
+ th.AssertNoErr(t, err)
+
+ for _, a := range aList {
+ t.Logf("Listing algorithm: Name [%s]", a.Name)
+ }
+
+ return true, nil
+ })
+ th.AssertNoErr(t, err)
+}
+
+func listLBs(t *testing.T, client *gophercloud.ServiceClient) {
+ err := lbs.List(client, lbs.ListOpts{}).EachPage(func(page pagination.Page) (bool, error) {
+ lbList, err := lbs.ExtractLBs(page)
+ th.AssertNoErr(t, err)
+
+ for _, lb := range lbList {
+ t.Logf("Listing LB: ID [%d] Name [%s] Protocol [%s] Status [%s] Node count [%d] Port [%d]",
+ lb.ID, lb.Name, lb.Protocol, lb.Status, lb.NodeCount, lb.Port)
+ }
+
+ return true, nil
+ })
+
+ th.AssertNoErr(t, err)
+}
+
+func getLB(t *testing.T, client *gophercloud.ServiceClient, id int) {
+ lb, err := lbs.Get(client, id).Extract()
+ th.AssertNoErr(t, err)
+ t.Logf("Getting LB %d: Created [%s] VIPs [%#v] Logging [%#v] Persistence [%#v] SourceAddrs [%#v]",
+ lb.ID, lb.Created, lb.VIPs, lb.ConnectionLogging, lb.SessionPersistence, lb.SourceAddrs)
+}
+
+func updateLB(t *testing.T, client *gophercloud.ServiceClient, id int) {
+ opts := lbs.UpdateOpts{
+ Name: tools.RandomString("new_", 5),
+ Protocol: "TCP",
+ HalfClosed: lbs.Enabled,
+ Algorithm: "RANDOM",
+ Port: 8080,
+ Timeout: 100,
+ HTTPSRedirect: lbs.Disabled,
+ }
+
+ err := lbs.Update(client, id, opts).ExtractErr()
+ th.AssertNoErr(t, err)
+
+ t.Logf("Updating LB %d - waiting for it to finish", id)
+ waitForLB(client, id, lbs.ACTIVE)
+ t.Logf("LB %d has reached ACTIVE state", id)
+}
+
+func deleteLB(t *testing.T, client *gophercloud.ServiceClient, id int) {
+ err := lbs.Delete(client, id).ExtractErr()
+ th.AssertNoErr(t, err)
+ t.Logf("Deleted %d", id)
+}
+
+func batchDeleteLBs(t *testing.T, client *gophercloud.ServiceClient, ids []int) {
+ err := lbs.BulkDelete(client, ids).ExtractErr()
+ th.AssertNoErr(t, err)
+ strIDs := []string{}
+ for _, id := range ids {
+ strIDs = append(strIDs, strconv.Itoa(id))
+ }
+ t.Logf("Deleted %s", strings.Join(strIDs, ", "))
+}