diff options
| -rw-r--r-- | container_test.go | 4 | ||||
| -rw-r--r-- | object.go | 10 | ||||
| -rw-r--r-- | object_test.go | 61 |
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>") @@ -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, "") + }) +} |
