From b698287d0655420713bf6edfbc8de53da7c5a236 Mon Sep 17 00:00:00 2001 From: Stefan Majewsky Date: Mon, 30 Apr 2018 13:47:38 +0200 Subject: add DeleteOptions to Object.Delete() --- tests/largeobject_test.go | 71 +++++++++++++++++++++++++++++++++++++++++++++++ tests/object_test.go | 4 +-- tests/shared_test.go | 2 +- 3 files changed, 74 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/largeobject_test.go b/tests/largeobject_test.go index 8e57e0d..758083d 100644 --- a/tests/largeobject_test.go +++ b/tests/largeobject_test.go @@ -300,6 +300,77 @@ func TestSLOGuessSegmentPrefix(t *testing.T) { }) } +func TestDeleteLargeObjectAndKeepSegments(t *testing.T) { + foreachLargeObjectStrategy(func(strategy schwift.LargeObjectStrategy, strategyStr string) { + testWithContainer(t, func(c *schwift.Container) { + obj := c.Object("largeobject") + + //setup phase: create an SLO + lo, err := obj.AsLargeObject() + expectSuccess(t, err) + lo.SegmentContainer = c + lo.SegmentPrefix = "foo/bar/baz/" + w, err := lo.Open(schwift.OpenTruncate) + expectSuccess(t, err) + + segment1 := getRandomSegmentContent(128) + segment2 := getRandomSegmentContent(128) + _, err = w.Write([]byte(segment1)) + expectSuccess(t, err) + _, err = w.Write([]byte(segment2)) + expectSuccess(t, err) + expectSuccess(t, w.Close()) + + //test deletion that keeps segments + expectSuccess(t, obj.Delete(nil, nil)) + + iter := c.Objects() + iter.Prefix = lo.SegmentPrefix + names, err := iter.Collect() + expectSuccess(t, err) + expectObjectNames(t, names, + "foo/bar/baz/0000000000000001", + "foo/bar/baz/0000000000000002") + }) + }) +} + +func TestDeleteLargeObjectIncludingSegments(t *testing.T) { + foreachLargeObjectStrategy(func(strategy schwift.LargeObjectStrategy, strategyStr string) { + testWithContainer(t, func(c *schwift.Container) { + obj := c.Object("largeobject") + + //setup phase: create an SLO + lo, err := obj.AsLargeObject() + expectSuccess(t, err) + lo.SegmentContainer = c + lo.SegmentPrefix = "foo/bar/baz/" + w, err := lo.Open(schwift.OpenTruncate) + expectSuccess(t, err) + + segment1 := getRandomSegmentContent(128) + segment2 := getRandomSegmentContent(128) + _, err = w.Write([]byte(segment1)) + expectSuccess(t, err) + _, err = w.Write([]byte(segment2)) + expectSuccess(t, err) + expectSuccess(t, w.Close()) + + //test deletion that keeps segments + expectSuccess(t, obj.Delete(&schwift.DeleteOptions{DeleteSegments: true}, nil)) + + iter := c.Objects() + iter.Prefix = lo.SegmentPrefix + names, err := iter.Collect() + expectSuccess(t, err) + expectObjectNames(t, names) + }) + }) +} + +//////////////////////////////////////////////////////////////////////////////// +// helpers + func expectLargeObject(t *testing.T, obj *schwift.Object, expected []schwift.SegmentInfo) { t.Helper() expectObjectExistence(t, obj, true) diff --git a/tests/object_test.go b/tests/object_test.go index 39fdba2..6291527 100644 --- a/tests/object_test.go +++ b/tests/object_test.go @@ -48,7 +48,7 @@ func TestObjectLifecycle(t *testing.T) { //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) + err = o.Delete(nil, nil) expectError(t, err, "expected 204 response, got 404 instead:

Not Found

The resource could not be found.

") err = o.Upload(bytes.NewReader([]byte("test")), nil) @@ -56,7 +56,7 @@ func TestObjectLifecycle(t *testing.T) { expectObjectExistence(t, o, true) - err = o.Delete(nil) + err = o.Delete(nil, nil) expectSuccess(t, err) }) } diff --git a/tests/shared_test.go b/tests/shared_test.go index 7867d70..c6b15e4 100644 --- a/tests/shared_test.go +++ b/tests/shared_test.go @@ -99,7 +99,7 @@ func testWithContainer(t *testing.T, testCode func(c *schwift.Container)) { expectSuccess(t, err) if exists { expectSuccess(t, container.Objects().Foreach(func(o *schwift.Object) error { - return o.Delete(nil) + return o.Delete(nil, nil) })) err = container.Delete(nil) expectSuccess(t, err) -- cgit v1.2.3