The server test passes again.
diff --git a/openstack/compute/v2/images/images_test.go b/openstack/compute/v2/images/images_test.go
index ee3b79e..76ffbec 100644
--- a/openstack/compute/v2/images/images_test.go
+++ b/openstack/compute/v2/images/images_test.go
@@ -8,7 +8,7 @@
const (
// This example was taken from: http://docs.openstack.org/api/openstack-compute/2/content/Rebuild_Server-d1e3538.html
- simpleImageJson = `{
+ simpleImageJSON = `{
"id": "52415800-8b69-11e0-9b19-734f6f006e54",
"name": "CentOS 5.2",
"links": [{
@@ -21,14 +21,14 @@
}`
)
-func TestGetImage(t *testing.T) {
+func TestExtractImage(t *testing.T) {
var simpleImageMap map[string]interface{}
- err := json.Unmarshal([]byte(simpleImageJson), &simpleImageMap)
+ err := json.Unmarshal([]byte(simpleImageJSON), &simpleImageMap)
if err != nil {
t.Fatal(err)
}
- image, err := GetImage(simpleImageMap)
+ image, err := ExtractImage(simpleImageMap)
if err != nil {
t.Fatal(err)
}
diff --git a/openstack/compute/v2/servers/servers.go b/openstack/compute/v2/servers/servers.go
index e2352ce..fd11d4c 100644
--- a/openstack/compute/v2/servers/servers.go
+++ b/openstack/compute/v2/servers/servers.go
@@ -65,9 +65,12 @@
// ExtractServers interprets the results of a single page from a List() call, producing a slice of Server entities.
func ExtractServers(page pagination.Page) ([]Server, error) {
casted := page.(ListPage).Body
- var servers []Server
- err := mapstructure.Decode(servers, casted)
- return servers, err
+
+ var response struct {
+ Servers []Server `mapstructure:"servers"`
+ }
+ err := mapstructure.Decode(casted, &response)
+ return response.Servers, err
}
// ExtractServer interprets the result of a call expected to return data on a single server.
diff --git a/openstack/compute/v2/servers/servers_test.go b/openstack/compute/v2/servers/servers_test.go
index b4a094c..106d9b5 100644
--- a/openstack/compute/v2/servers/servers_test.go
+++ b/openstack/compute/v2/servers/servers_test.go
@@ -6,183 +6,182 @@
)
// Taken from: http://docs.openstack.org/api/openstack-compute/2/content/List_Servers-d1e2078.html
-const goodListServersResult = `{
-"servers": [
+const goodListServersResult = `
{
-"id": "52415800-8b69-11e0-9b19-734f6af67565",
-"tenant_id": "1234",
-"user_id": "5678",
-"name": "sample-server",
-"updated": "2010-10-10T12:00:00Z",
-"created": "2010-08-10T12:00:00Z",
-"hostId": "e4d909c290d0fb1ca068ffaddf22cbd0",
-"status": "BUILD",
-"progress": 60,
-"accessIPv4" : "67.23.10.132",
-"accessIPv6" : "::babe:67.23.10.132",
-"image" : {
-"id": "52415800-8b69-11e0-9b19-734f6f006e54",
-"links": [
-{
-"rel": "self",
-"href": "http://servers.api.openstack.org/v2/1234/images/52415800-8b69-11e0-9b19-734f6f006e54"
-},
-{
-"rel": "bookmark",
-"href": "http://servers.api.openstack.org/1234/images/52415800-8b69-11e0-9b19-734f6f006e54"
+ "servers": [
+ {
+ "id": "52415800-8b69-11e0-9b19-734f6af67565",
+ "tenant_id": "1234",
+ "user_id": "5678",
+ "name": "sample-server",
+ "updated": "2010-10-10T12:00:00Z",
+ "created": "2010-08-10T12:00:00Z",
+ "hostId": "e4d909c290d0fb1ca068ffaddf22cbd0",
+ "status": "BUILD",
+ "progress": 60,
+ "accessIPv4": "67.23.10.132",
+ "accessIPv6": "::babe:67.23.10.132",
+ "image": {
+ "id": "52415800-8b69-11e0-9b19-734f6f006e54",
+ "links": [
+ {
+ "rel": "self",
+ "href": "http://servers.api.openstack.org/v2/1234/images/52415800-8b69-11e0-9b19-734f6f006e54"
+ },
+ {
+ "rel": "bookmark",
+ "href": "http://servers.api.openstack.org/1234/images/52415800-8b69-11e0-9b19-734f6f006e54"
+ }
+ ]
+ },
+ "flavor": {
+ "id": "52415800-8b69-11e0-9b19-734f216543fd",
+ "links": [
+ {
+ "rel": "self",
+ "href": "http://servers.api.openstack.org/v2/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd"
+ },
+ {
+ "rel": "bookmark",
+ "href": "http://servers.api.openstack.org/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd"
+ }
+ ]
+ },
+ "addresses": {
+ "public": [
+ {
+ "version": 4,
+ "addr": "67.23.10.132"
+ },
+ {
+ "version": 6,
+ "addr": "::babe:67.23.10.132"
+ },
+ {
+ "version": 4,
+ "addr": "67.23.10.131"
+ },
+ {
+ "version": 6,
+ "addr": "::babe:4317:0A83"
+ }
+ ],
+ "private": [
+ {
+ "version": 4,
+ "addr": "10.176.42.16"
+ },
+ {
+ "version": 6,
+ "addr": "::babe:10.176.42.16"
+ }
+ ]
+ },
+ "metadata": {
+ "Server Label": "Web Head 1",
+ "Image Version": "2.1"
+ },
+ "links": [
+ {
+ "rel": "self",
+ "href": "http://servers.api.openstack.org/v2/1234/servers/52415800-8b69-11e0-9b19-734f6af67565"
+ },
+ {
+ "rel": "bookmark",
+ "href": "http://servers.api.openstack.org/1234/servers/52415800-8b69-11e0-9b19-734f6af67565"
+ }
+ ]
+ },
+ {
+ "id": "52415800-8b69-11e0-9b19-734f1f1350e5",
+ "user_id": "5678",
+ "name": "sample-server2",
+ "tenant_id": "1234",
+ "updated": "2010-10-10T12:00:00Z",
+ "created": "2010-08-10T12:00:00Z",
+ "hostId": "9e107d9d372bb6826bd81d3542a419d6",
+ "status": "ACTIVE",
+ "accessIPv4": "67.23.10.133",
+ "accessIPv6": "::babe:67.23.10.133",
+ "image": {
+ "id": "52415800-8b69-11e0-9b19-734f5736d2a2",
+ "links": [
+ {
+ "rel": "self",
+ "href": "http://servers.api.openstack.org/v2/1234/images/52415800-8b69-11e0-9b19-734f5736d2a2"
+ },
+ {
+ "rel": "bookmark",
+ "href": "http://servers.api.openstack.org/1234/images/52415800-8b69-11e0-9b19-734f5736d2a2"
+ }
+ ]
+ },
+ "flavor": {
+ "id": "52415800-8b69-11e0-9b19-734f216543fd",
+ "links": [
+ {
+ "rel": "self",
+ "href": "http://servers.api.openstack.org/v2/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd"
+ },
+ {
+ "rel": "bookmark",
+ "href": "http://servers.api.openstack.org/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd"
+ }
+ ]
+ },
+ "addresses": {
+ "public": [
+ {
+ "version": 4,
+ "addr": "67.23.10.133"
+ },
+ {
+ "version": 6,
+ "addr": "::babe:67.23.10.133"
+ }
+ ],
+ "private": [
+ {
+ "version": 4,
+ "addr": "10.176.42.17"
+ },
+ {
+ "version": 6,
+ "addr": "::babe:10.176.42.17"
+ }
+ ]
+ },
+ "metadata": {
+ "Server Label": "DB 1"
+ },
+ "links": [
+ {
+ "rel": "self",
+ "href": "http://servers.api.openstack.org/v2/1234/servers/52415800-8b69-11e0-9b19-734f1f1350e5"
+ },
+ {
+ "rel": "bookmark",
+ "href": "http://servers.api.openstack.org/1234/servers/52415800-8b69-11e0-9b19-734f1f1350e5"
+ }
+ ]
+ }
+ ]
}
-]
-},
-"flavor" : {
-"id": "52415800-8b69-11e0-9b19-734f216543fd",
-"links": [
-{
-"rel": "self",
-"href": "http://servers.api.openstack.org/v2/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd"
-},
-{
-"rel": "bookmark",
-"href": "http://servers.api.openstack.org/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd"
-}
-]
-},
-"addresses": {
-"public" : [
-{
-"version": 4,
-"addr": "67.23.10.132"
-},
-{
-"version": 6,
-"addr": "::babe:67.23.10.132"
-},
-{
-"version": 4,
-"addr": "67.23.10.131"
-},
-{
-"version": 6,
-"addr": "::babe:4317:0A83"
-}
-],
-"private" : [
-{
-"version": 4,
-"addr": "10.176.42.16"
-},
-{
-"version": 6,
-"addr": "::babe:10.176.42.16"
-}
-]
-},
-"metadata": {
-"Server Label": "Web Head 1",
-"Image Version": "2.1"
-},
-"links": [
-{
-"rel": "self",
-"href": "http://servers.api.openstack.org/v2/1234/servers/52415800-8b69-11e0-9b19-734f6af67565"
-},
-{
-"rel": "bookmark",
-"href": "http://servers.api.openstack.org/1234/servers/52415800-8b69-11e0-9b19-734f6af67565"
-}
-]
-},
-{
-"id": "52415800-8b69-11e0-9b19-734f1f1350e5",
-"user_id": "5678",
-"name": "sample-server2",
-"tenant_id": "1234",
-"updated": "2010-10-10T12:00:00Z",
-"created": "2010-08-10T12:00:00Z",
-"hostId": "9e107d9d372bb6826bd81d3542a419d6",
-"status": "ACTIVE",
-"accessIPv4" : "67.23.10.133",
-"accessIPv6" : "::babe:67.23.10.133",
-"image" : {
-"id": "52415800-8b69-11e0-9b19-734f5736d2a2",
-"links": [
-{
-"rel": "self",
-"href": "http://servers.api.openstack.org/v2/1234/images/52415800-8b69-11e0-9b19-734f5736d2a2"
-},
-{
-"rel": "bookmark",
-"href": "http://servers.api.openstack.org/1234/images/52415800-8b69-11e0-9b19-734f5736d2a2"
-}
-]
-},
-"flavor" : {
-"id": "52415800-8b69-11e0-9b19-734f216543fd",
-"links": [
-{
-"rel": "self",
-"href": "http://servers.api.openstack.org/v2/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd"
-},
-{
-"rel": "bookmark",
-"href": "http://servers.api.openstack.org/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd"
-}
-]
-},
-"addresses": {
-"public" : [
-{
-"version": 4,
-"addr": "67.23.10.133"
-},
-{
-"version": 6,
-"addr": "::babe:67.23.10.133"
-}
-],
-"private" : [
-{
-"version": 4,
-"addr": "10.176.42.17"
-},
-{
-"version": 6,
-"addr": "::babe:10.176.42.17"
-}
-]
-},
-"metadata": {
-"Server Label": "DB 1"
-},
-"links": [
-{
-"rel": "self",
-"href": "http://servers.api.openstack.org/v2/1234/servers/52415800-8b69-11e0-9b19-734f1f1350e5"
-},
-{
-"rel": "bookmark",
-"href": "http://servers.api.openstack.org/1234/servers/52415800-8b69-11e0-9b19-734f1f1350e5"
-}
-]
-}
-]
-}`
+`
-func TestGetServer(t *testing.T) {
- var listResults map[string]interface{}
- err := json.Unmarshal([]byte(goodListServersResult), &listResults)
+func TestExtractServers(t *testing.T) {
+ var listPage ListPage
+ err := json.Unmarshal([]byte(goodListServersResult), &listPage.MarkerPageBase.LastHTTPResponse.Body)
if err != nil {
- t.Error(err)
- return
+ t.Fatalf("Error decoding JSON fixture: %v", err)
}
- svrs, err := GetServers(listResults)
+ svrs, err := ExtractServers(listPage)
if err != nil {
- t.Error(err)
- return
+ t.Fatalf("Error extracting servers: %v", err)
}
if len(svrs) != 2 {
- t.Errorf("Expected 2 servers; got %d", len(svrs))
- return
+ t.Fatalf("Expected 2 servers; got %d", len(svrs))
}
}