This repository has been archived by the owner on Aug 1, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 185
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
22 changed files
with
2,591 additions
and
33 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Here be acceptance tests for the image service API. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
// +build acceptance imageservice | ||
|
||
package v2 | ||
|
||
import ( | ||
"bytes" | ||
"os" | ||
"testing" | ||
|
||
"github.com/rackspace/gophercloud" | ||
"github.com/rackspace/gophercloud/acceptance/tools" | ||
"github.com/rackspace/gophercloud/openstack" | ||
"github.com/rackspace/gophercloud/openstack/imageservice/v2/images" | ||
th "github.com/rackspace/gophercloud/testhelper" | ||
) | ||
|
||
func newClient(t *testing.T) *gophercloud.ServiceClient { | ||
|
||
authURL := os.Getenv("OS_AUTH_URL") | ||
username := os.Getenv("OS_USERNAME") | ||
password := os.Getenv("OS_PASSWORD") | ||
tenantName := os.Getenv("OS_TENANT_NAME") | ||
tenantID := os.Getenv("OS_TENANT_ID") | ||
domainName := os.Getenv("OS_DOMAIN_NAME") | ||
regionName := os.Getenv("OS_REGION_NAME") | ||
|
||
t.Logf("Credentials used: OS_AUTH_URL='%s' OS_USERNAME='%s' OS_PASSWORD='*****' OS_TENANT_NAME='%s' OS_TENANT_NAME='%s' OS_REGION_NAME='%s' OS_TENANT_ID='%s' \n", | ||
authURL, username, tenantName, domainName, regionName, tenantID) | ||
|
||
client, err := openstack.NewClient(authURL) | ||
th.AssertNoErr(t, err) | ||
|
||
ao := gophercloud.AuthOptions{ | ||
Username: username, | ||
Password: password, | ||
TenantName: tenantName, | ||
TenantID: tenantID, | ||
DomainName: domainName, | ||
} | ||
|
||
err = openstack.AuthenticateV3(client, ao) | ||
th.AssertNoErr(t, err) | ||
t.Logf("Token is %v", client.TokenID) | ||
|
||
c, err := openstack.NewImageServiceV2(client, gophercloud.EndpointOpts{ | ||
Region: regionName, | ||
}) | ||
th.AssertNoErr(t, err) | ||
return c | ||
} | ||
|
||
func createTestImage(t *testing.T, client *gophercloud.ServiceClient) images.Image { | ||
//creating image | ||
imageName := tools.RandomString("ACCPT", 16) | ||
containerFormat := "ami" | ||
createResult := images.Create(client, images.CreateOpts{Name: imageName, | ||
ContainerFormat: containerFormat, | ||
DiskFormat: containerFormat}) | ||
th.AssertNoErr(t, createResult.Err) | ||
image, err := createResult.Extract() | ||
th.AssertNoErr(t, err) | ||
t.Logf("Image %v", image) | ||
|
||
//checking status | ||
image, err = images.Get(client, image.ID).Extract() | ||
th.AssertNoErr(t, err) | ||
th.AssertEquals(t, image.Status, images.ImageStatusQueued) | ||
|
||
//uploading image data | ||
data := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9} | ||
uploadResult := images.Upload(client, image.ID, bytes.NewReader(data)) | ||
th.AssertNoErr(t, uploadResult.Err) | ||
|
||
//checking status | ||
image, err = images.Get(client, image.ID).Extract() | ||
th.AssertNoErr(t, err) | ||
th.AssertEquals(t, image.Status, images.ImageStatusActive) | ||
th.AssertEquals(t, image.SizeBytes, 9) | ||
return *image | ||
} | ||
|
||
func deleteImage(t *testing.T, client *gophercloud.ServiceClient, image images.Image) { | ||
//deteting image | ||
deleteResult := images.Delete(client, image.ID) | ||
th.AssertNoErr(t, deleteResult.Err) | ||
} |
152 changes: 152 additions & 0 deletions
152
acceptance/openstack/imageservice/v2/imageservice_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,152 @@ | ||
// +build acceptance imageservice | ||
|
||
package v2 | ||
|
||
import ( | ||
"bytes" | ||
"io/ioutil" | ||
"testing" | ||
|
||
"github.com/rackspace/gophercloud/acceptance/tools" | ||
"github.com/rackspace/gophercloud/openstack/imageservice/v2/images" | ||
"github.com/rackspace/gophercloud/pagination" | ||
th "github.com/rackspace/gophercloud/testhelper" | ||
) | ||
|
||
func TestListImages(t *testing.T) { | ||
client := newClient(t) | ||
|
||
t.Logf("Id\tName\tOwner\tChecksum\tSizeBytes") | ||
|
||
pager := images.List(client, nil) | ||
count, pages := 0, 0 | ||
pager.EachPage(func(page pagination.Page) (bool, error) { | ||
pages++ | ||
t.Logf("---") | ||
|
||
images, err := images.ExtractImages(page) | ||
if err != nil { | ||
return false, err | ||
} | ||
|
||
for _, i := range images { | ||
t.Logf("%s\t%s\t%s\t%s\t%v\t\n", i.ID, i.Name, i.Owner, i.Checksum, i.SizeBytes) | ||
count++ | ||
} | ||
|
||
return true, nil | ||
}) | ||
|
||
t.Logf("--------\n%d images listed on %d pages.\n", count, pages) | ||
} | ||
|
||
func TestListImagesFilter(t *testing.T) { | ||
client := newClient(t) | ||
t.Logf("Id\tName\tOwner\tChecksum\tSizeBytes") | ||
|
||
pager := images.List(client, images.ListOpts{Limit: 1}) | ||
count, pages := 0, 0 | ||
pager.EachPage(func(page pagination.Page) (bool, error) { | ||
pages++ | ||
t.Logf("---") | ||
|
||
images, err := images.ExtractImages(page) | ||
if err != nil { | ||
return false, err | ||
} | ||
|
||
for _, i := range images { | ||
t.Logf("%s\t%s\t%s\t%s\t%v\t\n", i.ID, i.Name, i.Owner, i.Checksum, i.SizeBytes) | ||
count++ | ||
} | ||
|
||
return true, nil | ||
}) | ||
|
||
t.Logf("--------\n%d images listed on %d pages.\n", count, pages) | ||
|
||
} | ||
|
||
func TestCreateDeleteImage(t *testing.T) { | ||
client := newClient(t) | ||
imageName := tools.RandomString("ACCPT", 16) | ||
containerFormat := "ami" | ||
createResult := images.Create(client, images.CreateOpts{Name: &imageName, | ||
ContainerFormat: &containerFormat, | ||
DiskFormat: &containerFormat}) | ||
|
||
th.AssertNoErr(t, createResult.Err) | ||
image, err := createResult.Extract() | ||
th.AssertNoErr(t, err) | ||
|
||
t.Logf("Image %v", image) | ||
|
||
image, err = images.Get(client, image.ID).Extract() | ||
th.AssertNoErr(t, err) | ||
|
||
th.AssertEquals(t, image.Status, images.ImageStatusQueued) | ||
|
||
deleteResult := images.Delete(client, image.ID) | ||
th.AssertNoErr(t, deleteResult.Err) | ||
} | ||
|
||
func TestUploadDownloadImage(t *testing.T) { | ||
client := newClient(t) | ||
|
||
//creating image | ||
imageName := tools.RandomString("ACCPT", 16) | ||
containerFormat := "ami" | ||
createResult := images.Create(client, images.CreateOpts{Name: &imageName, | ||
ContainerFormat: &containerFormat, | ||
DiskFormat: &containerFormat}) | ||
th.AssertNoErr(t, createResult.Err) | ||
image, err := createResult.Extract() | ||
th.AssertNoErr(t, err) | ||
t.Logf("Image %v", image) | ||
|
||
//checking status | ||
image, err = images.Get(client, image.ID).Extract() | ||
th.AssertNoErr(t, err) | ||
th.AssertEquals(t, image.Status, images.ImageStatusQueued) | ||
|
||
//uploading image data | ||
data := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9} | ||
putImageResult := images.PutImageData(client, image.ID, bytes.NewReader(data)) | ||
th.AssertNoErr(t, putImageResult.Err) | ||
|
||
//checking status | ||
image, err = images.Get(client, image.ID).Extract() | ||
th.AssertNoErr(t, err) | ||
th.AssertEquals(t, image.Status, images.ImageStatusActive) | ||
th.AssertEquals(t, *image.SizeBytes, 9) | ||
|
||
//downloading image data | ||
reader, err := images.GetImageData(client, image.ID).Extract() | ||
th.AssertNoErr(t, err) | ||
receivedData, err := ioutil.ReadAll(reader) | ||
t.Logf("Received data %v", receivedData) | ||
th.AssertNoErr(t, err) | ||
th.AssertByteArrayEquals(t, data, receivedData) | ||
|
||
//deteting image | ||
deleteResult := images.Delete(client, image.ID) | ||
th.AssertNoErr(t, deleteResult.Err) | ||
|
||
} | ||
|
||
func TestUpdateImage(t *testing.T) { | ||
client := newClient(t) | ||
|
||
//creating image | ||
image := createTestImage(t, client) | ||
|
||
t.Logf("Image tags %v", image.Tags) | ||
|
||
tags := []string{"acceptance-testing"} | ||
updatedImage, err := images.Update(client, image.ID, images.UpdateOpts{ | ||
images.ReplaceImageTags{ | ||
NewTags: tags}}).Extract() | ||
th.AssertNoErr(t, err) | ||
t.Logf("Received tags '%v'", tags) | ||
th.AssertDeepEquals(t, updatedImage.Tags, tags) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
// +build acceptance imageservice | ||
|
||
package v2 | ||
|
||
import ( | ||
"os" | ||
"testing" | ||
|
||
members "github.com/rackspace/gophercloud/openstack/imageservice/v2/members" | ||
th "github.com/rackspace/gophercloud/testhelper" | ||
) | ||
|
||
func TestImageMemberCreateListDelete(t *testing.T) { | ||
client := newClient(t) | ||
|
||
//creating image | ||
image := createTestImage(t, client) | ||
defer deleteImage(t, client, image) | ||
|
||
//creating member | ||
member, err := members.Create(client, image.ID, "tenant").Extract() | ||
th.AssertNoErr(t, err) | ||
th.AssertNotNil(t, member) | ||
|
||
t.Logf("Member has been created for image %s", image.ID) | ||
|
||
//listing member | ||
var mems *[]members.ImageMember | ||
mems, err = members.List(client, image.ID).Extract() | ||
th.AssertNoErr(t, err) | ||
th.AssertNotNil(t, mems) | ||
th.AssertEquals(t, 1, len(*mems)) | ||
|
||
t.Logf("Members after adding one %v", mems) | ||
|
||
//checking just created member | ||
m := (*mems)[0] | ||
th.AssertEquals(t, "pending", m.Status) | ||
th.AssertEquals(t, "tenant", m.MemberID) | ||
|
||
//deleting member | ||
deleteResult := members.Delete(client, image.ID, "tenant") | ||
th.AssertNoErr(t, deleteResult.Err) | ||
|
||
//listing member | ||
mems, err = members.List(client, image.ID).Extract() | ||
th.AssertNoErr(t, err) | ||
th.AssertNotNil(t, mems) | ||
th.AssertEquals(t, 0, len(*mems)) | ||
|
||
t.Logf("Members after deleting one %v", mems) | ||
} | ||
|
||
func TestImageMemberDetailsAndUpdate(t *testing.T) { | ||
// getting current tenant id | ||
memberTenantID := os.Getenv("OS_TENANT_ID") | ||
if memberTenantID == "" { | ||
t.Fatalf("Please define OS_TENANT_ID for image member updating test was '%s'", memberTenantID) | ||
} | ||
|
||
client := newClient(t) | ||
|
||
//creating image | ||
image := createTestImage(t, client) | ||
defer deleteImage(t, client, image) | ||
|
||
//creating member | ||
member, err := members.Create(client, image.ID, memberTenantID).Extract() | ||
th.AssertNoErr(t, err) | ||
th.AssertNotNil(t, member) | ||
|
||
//checking image member details | ||
member, err = members.Get(client, image.ID, memberTenantID).Extract() | ||
th.AssertNoErr(t, err) | ||
th.AssertNotNil(t, member) | ||
|
||
th.AssertEquals(t, memberTenantID, member.MemberID) | ||
th.AssertEquals(t, "pending", member.Status) | ||
|
||
t.Logf("Updating image's %s member status for tenant %s to 'accepted' ", image.ID, memberTenantID) | ||
|
||
//updating image | ||
member, err = members.Update(client, image.ID, memberTenantID, "accepted").Extract() | ||
th.AssertNoErr(t, err) | ||
th.AssertNotNil(t, member) | ||
th.AssertEquals(t, "accepted", member.Status) | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
package v2 |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
This provides a Go API which wraps any service implementing the [OpenStack Image Service API, version 2](http://developer.openstack.org/api-ref-image-v2.html). |
Oops, something went wrong.