Skip to content
This repository was archived by the owner on Aug 1, 2023. It is now read-only.

Commit 761cff8

Browse files
committed
Merge pull request #361 from jamiehannaford/cloud-dbs
[rfr] Rackspace Cloud Databases and OpenStack Trove services
2 parents 154dc4c + 2e695a3 commit 761cff8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+7153
-0
lines changed

acceptance/openstack/db/v1/common.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// +build acceptance db
2+
3+
package v1
4+
5+
import (
6+
"os"
7+
"testing"
8+
9+
"github.com/rackspace/gophercloud"
10+
"github.com/rackspace/gophercloud/openstack"
11+
"github.com/rackspace/gophercloud/openstack/db/v1/instances"
12+
th "github.com/rackspace/gophercloud/testhelper"
13+
)
14+
15+
func newClient(t *testing.T) *gophercloud.ServiceClient {
16+
ao, err := openstack.AuthOptionsFromEnv()
17+
th.AssertNoErr(t, err)
18+
19+
client, err := openstack.AuthenticatedClient(ao)
20+
th.AssertNoErr(t, err)
21+
22+
c, err := openstack.NewDBV1(client, gophercloud.EndpointOpts{
23+
Region: os.Getenv("OS_REGION_NAME"),
24+
})
25+
th.AssertNoErr(t, err)
26+
27+
return c
28+
}
29+
30+
type context struct {
31+
test *testing.T
32+
client *gophercloud.ServiceClient
33+
instanceID string
34+
DBIDs []string
35+
users []string
36+
}
37+
38+
func newContext(t *testing.T) context {
39+
return context{
40+
test: t,
41+
client: newClient(t),
42+
}
43+
}
44+
45+
func (c context) Logf(msg string, args ...interface{}) {
46+
if len(args) > 0 {
47+
c.test.Logf(msg, args...)
48+
} else {
49+
c.test.Log(msg)
50+
}
51+
}
52+
53+
func (c context) AssertNoErr(err error) {
54+
th.AssertNoErr(c.test, err)
55+
}
56+
57+
func (c context) WaitUntilActive(id string) {
58+
err := gophercloud.WaitFor(60, func() (bool, error) {
59+
inst, err := instances.Get(c.client, id).Extract()
60+
if err != nil {
61+
return false, err
62+
}
63+
if inst.Status == "ACTIVE" {
64+
return true, nil
65+
}
66+
return false, nil
67+
})
68+
69+
c.AssertNoErr(err)
70+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// +build acceptance db
2+
3+
package v1
4+
5+
import (
6+
db "github.com/rackspace/gophercloud/openstack/db/v1/databases"
7+
"github.com/rackspace/gophercloud/pagination"
8+
)
9+
10+
func (c context) createDBs() {
11+
opts := db.BatchCreateOpts{
12+
db.CreateOpts{Name: "db1"},
13+
db.CreateOpts{Name: "db2"},
14+
db.CreateOpts{Name: "db3"},
15+
}
16+
17+
err := db.Create(c.client, c.instanceID, opts).ExtractErr()
18+
c.AssertNoErr(err)
19+
c.Logf("Created three databases on instance %s: db1, db2, db3", c.instanceID)
20+
}
21+
22+
func (c context) listDBs() {
23+
c.Logf("Listing databases on instance %s", c.instanceID)
24+
25+
err := db.List(c.client, c.instanceID).EachPage(func(page pagination.Page) (bool, error) {
26+
dbList, err := db.ExtractDBs(page)
27+
c.AssertNoErr(err)
28+
29+
for _, db := range dbList {
30+
c.Logf("DB: %#v", db)
31+
}
32+
33+
return true, nil
34+
})
35+
36+
c.AssertNoErr(err)
37+
}
38+
39+
func (c context) deleteDBs() {
40+
for _, id := range []string{"db1", "db2", "db3"} {
41+
err := db.Delete(c.client, c.instanceID, id).ExtractErr()
42+
c.AssertNoErr(err)
43+
c.Logf("Deleted DB %s", id)
44+
}
45+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// +build acceptance db
2+
3+
package v1
4+
5+
import (
6+
"github.com/rackspace/gophercloud/openstack/db/v1/flavors"
7+
"github.com/rackspace/gophercloud/pagination"
8+
)
9+
10+
func (c context) listFlavors() {
11+
c.Logf("Listing flavors")
12+
13+
err := flavors.List(c.client).EachPage(func(page pagination.Page) (bool, error) {
14+
flavorList, err := flavors.ExtractFlavors(page)
15+
c.AssertNoErr(err)
16+
17+
for _, f := range flavorList {
18+
c.Logf("Flavor: ID [%s] Name [%s] RAM [%d]", f.ID, f.Name, f.RAM)
19+
}
20+
21+
return true, nil
22+
})
23+
24+
c.AssertNoErr(err)
25+
}
26+
27+
func (c context) getFlavor() {
28+
flavor, err := flavors.Get(c.client, "1").Extract()
29+
c.Logf("Getting flavor %s", flavor.ID)
30+
c.AssertNoErr(err)
31+
}
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
// +build acceptance db
2+
3+
package v1
4+
5+
import (
6+
"os"
7+
"testing"
8+
9+
"github.com/rackspace/gophercloud/acceptance/tools"
10+
"github.com/rackspace/gophercloud/openstack/db/v1/instances"
11+
"github.com/rackspace/gophercloud/pagination"
12+
th "github.com/rackspace/gophercloud/testhelper"
13+
)
14+
15+
const envDSType = "DATASTORE_TYPE_ID"
16+
17+
func TestRunner(t *testing.T) {
18+
c := newContext(t)
19+
20+
// FLAVOR tests
21+
c.listFlavors()
22+
c.getFlavor()
23+
24+
// INSTANCE tests
25+
c.createInstance()
26+
c.listInstances()
27+
c.getInstance()
28+
c.isRootEnabled()
29+
c.enableRootUser()
30+
c.isRootEnabled()
31+
c.restartInstance()
32+
//c.resizeInstance()
33+
//c.resizeVol()
34+
35+
// DATABASE tests
36+
c.createDBs()
37+
c.listDBs()
38+
39+
// USER tests
40+
c.createUsers()
41+
c.listUsers()
42+
43+
// TEARDOWN
44+
c.deleteUsers()
45+
c.deleteDBs()
46+
c.deleteInstance()
47+
}
48+
49+
func (c context) createInstance() {
50+
if os.Getenv(envDSType) == "" {
51+
c.test.Fatalf("%s must be set as an environment var", envDSType)
52+
}
53+
54+
opts := instances.CreateOpts{
55+
FlavorRef: "2",
56+
Size: 5,
57+
Name: tools.RandomString("gopher_db", 5),
58+
Datastore: &instances.DatastoreOpts{Type: os.Getenv(envDSType)},
59+
}
60+
61+
instance, err := instances.Create(c.client, opts).Extract()
62+
th.AssertNoErr(c.test, err)
63+
64+
c.Logf("Restarting %s. Waiting...", instance.ID)
65+
c.WaitUntilActive(instance.ID)
66+
c.Logf("Created Instance %s", instance.ID)
67+
68+
c.instanceID = instance.ID
69+
}
70+
71+
func (c context) listInstances() {
72+
c.Logf("Listing instances")
73+
74+
err := instances.List(c.client).EachPage(func(page pagination.Page) (bool, error) {
75+
instanceList, err := instances.ExtractInstances(page)
76+
c.AssertNoErr(err)
77+
78+
for _, i := range instanceList {
79+
c.Logf("Instance: ID [%s] Name [%s] Status [%s] VolSize [%d] Datastore Type [%s]",
80+
i.ID, i.Name, i.Status, i.Volume.Size, i.Datastore.Type)
81+
}
82+
83+
return true, nil
84+
})
85+
86+
c.AssertNoErr(err)
87+
}
88+
89+
func (c context) getInstance() {
90+
instance, err := instances.Get(c.client, c.instanceID).Extract()
91+
c.AssertNoErr(err)
92+
c.Logf("Getting instance: %s", instance.ID)
93+
}
94+
95+
func (c context) deleteInstance() {
96+
err := instances.Delete(c.client, c.instanceID).ExtractErr()
97+
c.AssertNoErr(err)
98+
c.Logf("Deleted instance %s", c.instanceID)
99+
}
100+
101+
func (c context) enableRootUser() {
102+
_, err := instances.EnableRootUser(c.client, c.instanceID).Extract()
103+
c.AssertNoErr(err)
104+
c.Logf("Enabled root user on %s", c.instanceID)
105+
}
106+
107+
func (c context) isRootEnabled() {
108+
enabled, err := instances.IsRootEnabled(c.client, c.instanceID)
109+
c.AssertNoErr(err)
110+
c.Logf("Is root enabled? %d", enabled)
111+
}
112+
113+
func (c context) restartInstance() {
114+
id := c.instanceID
115+
err := instances.Restart(c.client, id).ExtractErr()
116+
c.AssertNoErr(err)
117+
c.Logf("Restarting %s. Waiting...", id)
118+
c.WaitUntilActive(id)
119+
c.Logf("Restarted %s", id)
120+
}
121+
122+
func (c context) resizeInstance() {
123+
id := c.instanceID
124+
err := instances.Resize(c.client, id, "3").ExtractErr()
125+
c.AssertNoErr(err)
126+
c.Logf("Resizing %s. Waiting...", id)
127+
c.WaitUntilActive(id)
128+
c.Logf("Resized %s with flavorRef %s", id, "2")
129+
}
130+
131+
func (c context) resizeVol() {
132+
id := c.instanceID
133+
err := instances.ResizeVolume(c.client, id, 4).ExtractErr()
134+
c.AssertNoErr(err)
135+
c.Logf("Resizing volume of %s. Waiting...", id)
136+
c.WaitUntilActive(id)
137+
c.Logf("Resized the volume of %s to %d GB", id, 2)
138+
}

acceptance/openstack/db/v1/pkg.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package v1
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// +build acceptance db
2+
3+
package v1
4+
5+
import (
6+
"github.com/rackspace/gophercloud/acceptance/tools"
7+
db "github.com/rackspace/gophercloud/openstack/db/v1/databases"
8+
u "github.com/rackspace/gophercloud/openstack/db/v1/users"
9+
"github.com/rackspace/gophercloud/pagination"
10+
)
11+
12+
func (c context) createUsers() {
13+
users := []string{
14+
tools.RandomString("user_", 5),
15+
tools.RandomString("user_", 5),
16+
tools.RandomString("user_", 5),
17+
}
18+
19+
db1 := db.CreateOpts{Name: "db1"}
20+
db2 := db.CreateOpts{Name: "db2"}
21+
db3 := db.CreateOpts{Name: "db3"}
22+
23+
opts := u.BatchCreateOpts{
24+
u.CreateOpts{
25+
Name: users[0],
26+
Password: tools.RandomString("", 5),
27+
Databases: db.BatchCreateOpts{db1, db2, db3},
28+
},
29+
u.CreateOpts{
30+
Name: users[1],
31+
Password: tools.RandomString("", 5),
32+
Databases: db.BatchCreateOpts{db1, db2},
33+
},
34+
u.CreateOpts{
35+
Name: users[2],
36+
Password: tools.RandomString("", 5),
37+
Databases: db.BatchCreateOpts{db3},
38+
},
39+
}
40+
41+
err := u.Create(c.client, c.instanceID, opts).ExtractErr()
42+
c.AssertNoErr(err)
43+
c.Logf("Created three users on instance %s: %s, %s, %s", c.instanceID, users[0], users[1], users[2])
44+
c.users = users
45+
}
46+
47+
func (c context) listUsers() {
48+
c.Logf("Listing databases on instance %s", c.instanceID)
49+
50+
err := db.List(c.client, c.instanceID).EachPage(func(page pagination.Page) (bool, error) {
51+
dbList, err := db.ExtractDBs(page)
52+
c.AssertNoErr(err)
53+
54+
for _, db := range dbList {
55+
c.Logf("DB: %#v", db)
56+
}
57+
58+
return true, nil
59+
})
60+
61+
c.AssertNoErr(err)
62+
}
63+
64+
func (c context) deleteUsers() {
65+
for _, id := range c.DBIDs {
66+
err := db.Delete(c.client, c.instanceID, id).ExtractErr()
67+
c.AssertNoErr(err)
68+
c.Logf("Deleted DB %s", id)
69+
}
70+
}

0 commit comments

Comments
 (0)