aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--container_test.go4
-rw-r--r--object.go10
-rw-r--r--object_test.go61
3 files changed, 69 insertions, 6 deletions
diff --git a/container_test.go b/container_test.go
index 76ff037..f0004a5 100644
--- a/container_test.go
+++ b/container_test.go
@@ -30,7 +30,7 @@ func TestContainerLifecycle(t *testing.T) {
expectString(t, c.Name(), containerName)
if c.Account() != a {
- t.Errorf("expected c.Account() = %#v, go %#v instead\n", a, c.Account())
+ t.Errorf("expected c.Account() = %#v, got %#v instead\n", a, c.Account())
}
exists, err := c.Exists()
@@ -43,7 +43,7 @@ func TestContainerLifecycle(t *testing.T) {
expectBool(t, Is(err, http.StatusNoContent), false)
//DELETE should be idempotent and not return success on non-existence, but
- //OpenStack loves to be inconsistent with everything (including, notably, itself)
+ //OpenStack LOVES to be inconsistent with everything (including, notably, itself)
err = c.Delete(nil, nil)
expectError(t, err, "expected 204 response, got 404 instead: <html><h1>Not Found</h1><p>The resource could not be found.</p></html>")
diff --git a/object.go b/object.go
index 3f1ebe0..fec812a 100644
--- a/object.go
+++ b/object.go
@@ -88,10 +88,12 @@ func (o *Object) Headers() (ObjectHeaders, error) {
}
resp, err := Request{
- Method: "HEAD",
- ContainerName: o.c.name,
- ObjectName: o.name,
- ExpectStatusCodes: []int{204},
+ Method: "HEAD",
+ ContainerName: o.c.name,
+ ObjectName: o.name,
+ //since Openstack LOVES to be inconsistent with everything (incl. itself),
+ //this returns 200 instead of 204
+ ExpectStatusCodes: []int{200},
}.Do(o.c.a.client)
if err != nil {
return ObjectHeaders{}, err
diff --git a/object_test.go b/object_test.go
new file mode 100644
index 0000000..fd47f95
--- /dev/null
+++ b/object_test.go
@@ -0,0 +1,61 @@
+/******************************************************************************
+*
+* Copyright 2018 Stefan Majewsky <majewsky@gmx.net>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+******************************************************************************/
+
+package schwift
+
+import (
+ "bytes"
+ "net/http"
+ "testing"
+)
+
+func TestObjectLifecycle(t *testing.T) {
+ testWithContainer(t, func(c *Container) {
+ objectName := getRandomName()
+ o := c.Object(objectName)
+
+ expectString(t, o.Name(), objectName)
+ if o.Container() != c {
+ t.Errorf("expected o.Container() = %#v, got %#v instead\n", c, o.Container())
+ }
+
+ exists, err := o.Exists()
+ expectError(t, err, "")
+ expectBool(t, exists, false)
+
+ _, err = o.Headers()
+ expectError(t, err, "expected 204 response, got 404 instead")
+ expectBool(t, Is(err, http.StatusNotFound), true)
+ expectBool(t, Is(err, http.StatusNoContent), false)
+
+ //DELETE should be idempotent and not return success on non-existence, but
+ //OpenStack LOVES to be inconsistent with everything (including, notably, itself)
+ err = o.Delete(nil, nil)
+ expectError(t, err, "expected 204 response, got 404 instead: <html><h1>Not Found</h1><p>The resource could not be found.</p></html>")
+
+ err = o.Upload(bytes.NewReader([]byte("test")), nil, nil)
+ expectError(t, err, "")
+
+ exists, err = o.Exists()
+ expectError(t, err, "")
+ expectBool(t, exists, true)
+
+ err = o.Delete(nil, nil)
+ expectError(t, err, "")
+ })
+}