rename directory from 'storage' to 'objectStorage'; add fix for handling 'text/html' content-type response from 'ListNames'
diff --git a/acceptance/openstack/storage/v1/accounts_test.go b/acceptance/openstack/objectStorage/v1/accounts_test.go
similarity index 93%
rename from acceptance/openstack/storage/v1/accounts_test.go
rename to acceptance/openstack/objectStorage/v1/accounts_test.go
index 64cd165..7a3b046 100644
--- a/acceptance/openstack/storage/v1/accounts_test.go
+++ b/acceptance/openstack/objectStorage/v1/accounts_test.go
@@ -6,7 +6,7 @@
"strings"
"testing"
- "github.com/rackspace/gophercloud/openstack/storage/v1/accounts"
+ "github.com/rackspace/gophercloud/openstack/objectStorage/v1/accounts"
)
func TestAccounts(t *testing.T) {
diff --git a/acceptance/openstack/storage/v1/common.go b/acceptance/openstack/objectStorage/v1/common.go
similarity index 100%
rename from acceptance/openstack/storage/v1/common.go
rename to acceptance/openstack/objectStorage/v1/common.go
diff --git a/acceptance/openstack/storage/v1/containers_test.go b/acceptance/openstack/objectStorage/v1/containers_test.go
similarity index 95%
rename from acceptance/openstack/storage/v1/containers_test.go
rename to acceptance/openstack/objectStorage/v1/containers_test.go
index 3cc367b..1c6393f 100644
--- a/acceptance/openstack/storage/v1/containers_test.go
+++ b/acceptance/openstack/objectStorage/v1/containers_test.go
@@ -7,7 +7,7 @@
"testing"
"github.com/rackspace/gophercloud/acceptance/tools"
- "github.com/rackspace/gophercloud/openstack/storage/v1/containers"
+ "github.com/rackspace/gophercloud/openstack/objectStorage/v1/containers"
"github.com/rackspace/gophercloud/pagination"
)
@@ -58,7 +58,7 @@
}
for _, n := range containerList {
t.Logf("Container: Name [%s] Count [%d] Bytes [%d]",
- n["name"], int(n["count"].(float64)), int(n["bytes"].(float64)))
+ n.Name, n.Count, n.Bytes)
}
return true, nil
diff --git a/acceptance/openstack/storage/v1/objects_test.go b/acceptance/openstack/objectStorage/v1/objects_test.go
similarity index 92%
rename from acceptance/openstack/storage/v1/objects_test.go
rename to acceptance/openstack/objectStorage/v1/objects_test.go
index 239b4d5..5eae02e 100644
--- a/acceptance/openstack/storage/v1/objects_test.go
+++ b/acceptance/openstack/objectStorage/v1/objects_test.go
@@ -8,8 +8,8 @@
"testing"
"github.com/rackspace/gophercloud/acceptance/tools"
- "github.com/rackspace/gophercloud/openstack/storage/v1/containers"
- "github.com/rackspace/gophercloud/openstack/storage/v1/objects"
+ "github.com/rackspace/gophercloud/openstack/objectStorage/v1/containers"
+ "github.com/rackspace/gophercloud/openstack/objectStorage/v1/objects"
"github.com/rackspace/gophercloud/pagination"
)
@@ -64,7 +64,10 @@
}
}()
- pager := objects.List(client, cName, objects.ListOpts{Full: false})
+ pager := objects.List(client, cName, objects.ListOpts{Full: false, Prefix: "test-object-"})
+ if pager.Err != nil {
+ t.Fatalf("Pager error: %v", pager.Err)
+ }
ons := make([]string, 0, len(oNames))
err = pager.EachPage(func(page pagination.Page) (bool, error) {
names, err := objects.ExtractNames(page)
@@ -84,7 +87,10 @@
return
}
- pager = objects.List(client, cName, objects.ListOpts{Full: true})
+ pager = objects.List(client, cName, objects.ListOpts{Full: true, Prefix: "test-object-"})
+ if pager.Err != nil {
+ t.Fatalf("Pager error: %v", pager.Err)
+ }
ois := make([]objects.Object, 0, len(oNames))
err = pager.EachPage(func(page pagination.Page) (bool, error) {
info, err := objects.ExtractInfo(page)
diff --git a/openstack/storage/v1/accounts/accounts.go b/openstack/objectStorage/v1/accounts/accounts.go
similarity index 100%
rename from openstack/storage/v1/accounts/accounts.go
rename to openstack/objectStorage/v1/accounts/accounts.go
diff --git a/openstack/storage/v1/accounts/accounts_test.go b/openstack/objectStorage/v1/accounts/accounts_test.go
similarity index 100%
rename from openstack/storage/v1/accounts/accounts_test.go
rename to openstack/objectStorage/v1/accounts/accounts_test.go
diff --git a/openstack/storage/v1/accounts/doc.go b/openstack/objectStorage/v1/accounts/doc.go
similarity index 100%
rename from openstack/storage/v1/accounts/doc.go
rename to openstack/objectStorage/v1/accounts/doc.go
diff --git a/openstack/storage/v1/accounts/requests.go b/openstack/objectStorage/v1/accounts/requests.go
similarity index 100%
rename from openstack/storage/v1/accounts/requests.go
rename to openstack/objectStorage/v1/accounts/requests.go
diff --git a/openstack/storage/v1/accounts/requests_test.go b/openstack/objectStorage/v1/accounts/requests_test.go
similarity index 100%
rename from openstack/storage/v1/accounts/requests_test.go
rename to openstack/objectStorage/v1/accounts/requests_test.go
diff --git a/openstack/storage/v1/accounts/urls.go b/openstack/objectStorage/v1/accounts/urls.go
similarity index 100%
rename from openstack/storage/v1/accounts/urls.go
rename to openstack/objectStorage/v1/accounts/urls.go
diff --git a/openstack/storage/v1/accounts/urls_test.go b/openstack/objectStorage/v1/accounts/urls_test.go
similarity index 100%
rename from openstack/storage/v1/accounts/urls_test.go
rename to openstack/objectStorage/v1/accounts/urls_test.go
diff --git a/openstack/storage/v1/containers/doc.go b/openstack/objectStorage/v1/containers/doc.go
similarity index 100%
rename from openstack/storage/v1/containers/doc.go
rename to openstack/objectStorage/v1/containers/doc.go
diff --git a/openstack/storage/v1/containers/requests.go b/openstack/objectStorage/v1/containers/requests.go
similarity index 97%
rename from openstack/storage/v1/containers/requests.go
rename to openstack/objectStorage/v1/containers/requests.go
index 35bc1af..013c6ff 100644
--- a/openstack/storage/v1/containers/requests.go
+++ b/openstack/objectStorage/v1/containers/requests.go
@@ -22,14 +22,13 @@
// response to the ExtractInfo or ExtractNames function, respectively.
func List(c *gophercloud.ServiceClient, opts ListOpts) pagination.Pager {
var headers map[string]string
-
query, err := gophercloud.BuildQueryString(opts)
if err != nil {
return pagination.Pager{Err: err}
}
if !opts.Full {
- headers = map[string]string{"Accept": "text/plain"}
+ headers = map[string]string{"Accept": "text/plain", "Content-Type": "text/plain"}
}
createPage := func(r pagination.LastHTTPResponse) pagination.Page {
diff --git a/openstack/storage/v1/containers/requests_test.go b/openstack/objectStorage/v1/containers/requests_test.go
similarity index 92%
rename from openstack/storage/v1/containers/requests_test.go
rename to openstack/objectStorage/v1/containers/requests_test.go
index 93747be..1c9ee11 100644
--- a/openstack/storage/v1/containers/requests_test.go
+++ b/openstack/objectStorage/v1/containers/requests_test.go
@@ -34,6 +34,7 @@
w.Header().Add("Content-Type", "application/json")
r.ParseForm()
+ fmt.Printf("r: %+v\n", r)
marker := r.Form.Get("marker")
switch marker {
case "":
@@ -49,6 +50,8 @@
"name": "marktwain"
}
]`)
+ case "marktwain":
+ fmt.Fprintf(w, `[]`)
default:
t.Fatalf("Unexpected marker: [%s]", marker)
}
@@ -91,8 +94,16 @@
testhelper.TestHeader(t, r, "Accept", "text/plain")
w.Header().Set("Content-Type", "text/plain")
- w.WriteHeader(http.StatusOK)
- fmt.Fprintf(w, "")
+ r.ParseForm()
+ marker := r.Form.Get("marker")
+ switch marker {
+ case "":
+ fmt.Fprintf(w, "janeausten\nmarktwain\n")
+ case "marktwain":
+ fmt.Fprintf(w, ``)
+ default:
+ t.Fatalf("Unexpected marker: [%s]", marker)
+ }
})
client := serviceClient()
@@ -103,7 +114,7 @@
return false, err
}
- expected := []string{"janeausten, marktwain"}
+ expected := []string{"janeausten", "marktwain"}
testhelper.CheckDeepEquals(t, expected, actual)
diff --git a/openstack/storage/v1/containers/results.go b/openstack/objectStorage/v1/containers/results.go
similarity index 93%
rename from openstack/storage/v1/containers/results.go
rename to openstack/objectStorage/v1/containers/results.go
index 283e44a..5df99ed 100644
--- a/openstack/storage/v1/containers/results.go
+++ b/openstack/objectStorage/v1/containers/results.go
@@ -10,9 +10,9 @@
)
type Container struct {
- Bytes int
- Count int
- Name string
+ Bytes int `json:"bytes" mapstructure:"bytes"`
+ Count int `json:"count" mapstructure:"count"`
+ Name string `json:"name" mapstructure:"name"`
}
type commonResult struct {
@@ -84,7 +84,7 @@
results := make([]Container, len(untyped))
for index, each := range untyped {
container := each.(map[string]interface{})
- err := mapstructure.Decode(container, results[index])
+ err := mapstructure.Decode(container, &results[index])
if err != nil {
return results, err
}
diff --git a/openstack/storage/v1/containers/urls.go b/openstack/objectStorage/v1/containers/urls.go
similarity index 100%
rename from openstack/storage/v1/containers/urls.go
rename to openstack/objectStorage/v1/containers/urls.go
diff --git a/openstack/storage/v1/containers/urls_test.go b/openstack/objectStorage/v1/containers/urls_test.go
similarity index 100%
rename from openstack/storage/v1/containers/urls_test.go
rename to openstack/objectStorage/v1/containers/urls_test.go
diff --git a/openstack/storage/v1/objects/doc.go b/openstack/objectStorage/v1/objects/doc.go
similarity index 100%
rename from openstack/storage/v1/objects/doc.go
rename to openstack/objectStorage/v1/objects/doc.go
diff --git a/openstack/storage/v1/objects/requests.go b/openstack/objectStorage/v1/objects/requests.go
similarity index 98%
rename from openstack/storage/v1/objects/requests.go
rename to openstack/objectStorage/v1/objects/requests.go
index 363843c..1622ff7 100644
--- a/openstack/storage/v1/objects/requests.go
+++ b/openstack/objectStorage/v1/objects/requests.go
@@ -35,7 +35,7 @@
}
if !opts.Full {
- headers = map[string]string{"Accept": "text/plain"}
+ headers = map[string]string{"Accept": "text/plain", "Content-Type": "text/plain"}
}
createPage := func(r pagination.LastHTTPResponse) pagination.Page {
diff --git a/openstack/storage/v1/objects/requests_test.go b/openstack/objectStorage/v1/objects/requests_test.go
similarity index 95%
rename from openstack/storage/v1/objects/requests_test.go
rename to openstack/objectStorage/v1/objects/requests_test.go
index 6fe4d30..0c61550 100644
--- a/openstack/storage/v1/objects/requests_test.go
+++ b/openstack/objectStorage/v1/objects/requests_test.go
@@ -5,7 +5,6 @@
"fmt"
"net/http"
"testing"
- "time"
"github.com/rackspace/gophercloud"
"github.com/rackspace/gophercloud/pagination"
@@ -77,7 +76,7 @@
expected := []Object{
Object{
Hash: "451e372e48e0f6b1114fa0724aa79fa1",
- LastModified: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC),
+ LastModified: "2009-11-10 23:00:00 +0000 UTC",
Bytes: 14,
Name: "goodbye",
ContentType: "application/octet-stream",
@@ -100,8 +99,16 @@
testhelper.TestHeader(t, r, "Accept", "text/plain")
w.Header().Add("Content-Type", "text/plain")
- w.WriteHeader(http.StatusOK)
- fmt.Fprintf(w, "")
+ r.ParseForm()
+ marker := r.Form.Get("marker")
+ switch marker {
+ case "":
+ fmt.Fprintf(w, "goodbye\n")
+ case "goodbye":
+ fmt.Fprintf(w, "")
+ default:
+ t.Fatalf("Unexpected marker: [%s]", marker)
+ }
})
client := serviceClient()
@@ -112,7 +119,7 @@
return false, err
}
- expected := []string{"helloworld", "goodbye"}
+ expected := []string{"goodbye"}
testhelper.CheckDeepEquals(t, expected, actual)
diff --git a/openstack/storage/v1/objects/results.go b/openstack/objectStorage/v1/objects/results.go
similarity index 88%
rename from openstack/storage/v1/objects/results.go
rename to openstack/objectStorage/v1/objects/results.go
index 529bbd9..14435b9 100644
--- a/openstack/storage/v1/objects/results.go
+++ b/openstack/objectStorage/v1/objects/results.go
@@ -5,7 +5,6 @@
"io/ioutil"
"net/http"
"strings"
- "time"
"github.com/mitchellh/mapstructure"
"github.com/rackspace/gophercloud/pagination"
@@ -13,11 +12,11 @@
// Object is a structure that holds information related to a storage object.
type Object struct {
- Bytes int `json:"bytes"`
- ContentType string `json:"content_type"`
- Hash string `json:"hash"`
- LastModified time.Time `json:"last_modified"`
- Name string `json:"name"`
+ Bytes int `json:"bytes" mapstructure:"bytes"`
+ ContentType string `json:"content_type" mapstructure:"content_type"`
+ Hash string `json:"hash" mapstructure:"hash"`
+ LastModified string `json:"last_modified" mapstructure:"last_modified"`
+ Name string `json:"name" mapstructure:"name"`
}
// ListResult is a single page of objects that is returned from a call to the List function.
@@ -64,11 +63,10 @@
results := make([]Object, len(untyped))
for index, each := range untyped {
object := each.(map[string]interface{})
- err := mapstructure.Decode(object, results[index])
+ err := mapstructure.Decode(object, &results[index])
if err != nil {
return results, err
}
-
}
return results, nil
}
@@ -77,7 +75,6 @@
func ExtractNames(page pagination.Page) ([]string, error) {
casted := page.(ObjectPage)
ct := casted.Header.Get("Content-Type")
-
switch {
case strings.HasPrefix(ct, "application/json"):
parsed, err := ExtractInfo(page)
@@ -89,6 +86,7 @@
for _, object := range parsed {
names = append(names, object.Name)
}
+
return names, nil
case strings.HasPrefix(ct, "text/plain"):
names := make([]string, 0, 50)
@@ -101,6 +99,8 @@
}
return names, nil
+ case strings.HasPrefix(ct, "text/html"):
+ return []string{}, nil
default:
return nil, fmt.Errorf("Cannot extract names from response with content-type: [%s]", ct)
}
diff --git a/openstack/storage/v1/objects/urls.go b/openstack/objectStorage/v1/objects/urls.go
similarity index 100%
rename from openstack/storage/v1/objects/urls.go
rename to openstack/objectStorage/v1/objects/urls.go
diff --git a/openstack/storage/v1/objects/urls_test.go b/openstack/objectStorage/v1/objects/urls_test.go
similarity index 100%
rename from openstack/storage/v1/objects/urls_test.go
rename to openstack/objectStorage/v1/objects/urls_test.go