From 29fc59495d0d2942f80e84d79be9246e922895b1 Mon Sep 17 00:00:00 2001 From: Muhammad Talal Anwar Date: Thu, 6 Sep 2018 14:03:43 +0200 Subject: fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 970a6bf..00767a0 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ frustrated with the inflexible API design of [`ncw/swift`](https://github.com/nc bottom](#why-another-swift-client-library) for details. This library is currently in **beta**: It's already used by some projects, and I'm working towards a -stable 1.0 version with API compatbility promises, but [a few things are still +stable 1.0 version with API compatibility promises, but [a few things are still missing](https://github.com/majewsky/schwift/issues/1). ## Installation -- cgit v1.2.3 From 0591e531c8d424373039701ffa571d8ac4e162e8 Mon Sep 17 00:00:00 2001 From: Muhammad Talal Anwar Date: Thu, 6 Sep 2018 14:04:03 +0200 Subject: add support for RequestOptions in lo.Append() --- largeobject.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/largeobject.go b/largeobject.go index 0d22734..f58828c 100644 --- a/largeobject.go +++ b/largeobject.go @@ -661,7 +661,7 @@ func (lo *LargeObject) AddSegment(segment SegmentInfo) error { // //This function uploads segment objects, so it may return any error that //Object.Upload() returns, see documentation over there. -func (lo *LargeObject) Append(contents io.Reader, segmentSizeBytes int64) error { +func (lo *LargeObject) Append(contents io.Reader, segmentSizeBytes int64, opts *RequestOptions) error { if segmentSizeBytes < 0 { panic("segmentSizeBytes may not be negative") } @@ -690,7 +690,7 @@ func (lo *LargeObject) Append(contents io.Reader, segmentSizeBytes int64) error } obj := lo.NextSegmentObject() - err := obj.Upload(&tracker, nil, nil) + err := obj.Upload(&tracker, nil, opts) if err != nil { return err } -- cgit v1.2.3 From bc05e125f4850bedbe19c5ab29d4767139c846df Mon Sep 17 00:00:00 2001 From: Muhammad Talal Anwar Date: Thu, 6 Sep 2018 14:05:25 +0200 Subject: add test for large object expiration --- tests/largeobject_test.go | 73 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 54 insertions(+), 19 deletions(-) diff --git a/tests/largeobject_test.go b/tests/largeobject_test.go index a8c18e6..dc8ed9d 100644 --- a/tests/largeobject_test.go +++ b/tests/largeobject_test.go @@ -23,6 +23,7 @@ import ( "fmt" "strings" "testing" + "time" "github.com/majewsky/schwift" ) @@ -52,7 +53,7 @@ func TestLargeObjectsBasic(t *testing.T) { Strategy: strategy, }, nil) expectSuccess(t, err) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1+segment2)), 128)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1+segment2)), 128, nil)) expectSuccess(t, lo.WriteManifest(nil)) expectObjectContent(t, obj, []byte(segment1+segment2)) @@ -74,7 +75,7 @@ func TestLargeObjectsBasic(t *testing.T) { expectSuccess(t, err) expectLargeObjectSetup(t, lo, strategy, fmt.Sprintf("%s/%s-segments/", c.Name(), strategyStr)) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment3+segment4)), 128)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment3+segment4)), 128, nil)) expectSuccess(t, lo.WriteManifest(nil)) expectObjectContent(t, obj, []byte(segment1+segment2+segment3+segment4)) @@ -118,7 +119,7 @@ func TestLargeObjectsBasic(t *testing.T) { expectSuccess(t, err) expectObjectNames(t, names) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment3+segment4)), 128)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment3+segment4)), 128, nil)) expectSuccess(t, lo.WriteManifest(nil)) expectObjectContent(t, obj, []byte(segment3+segment4)) @@ -139,6 +140,40 @@ func TestLargeObjectsBasic(t *testing.T) { }) } +func TestLargeObjectExpiration(t *testing.T) { + testWithContainer(t, func(c *schwift.Container) { + foreachLargeObjectStrategy(func(strategy schwift.LargeObjectStrategy, strategyStr string) { + segment1 := getRandomSegmentContent(128) + segment2 := getRandomSegmentContent(128) + + obj := c.Object(strategyStr + "-largeobject") + lo, err := obj.AsNewLargeObject(schwift.SegmentingOptions{ + SegmentContainer: c, + SegmentPrefix: strategyStr + "-segments/", + Strategy: strategy, + }, nil) + expectSuccess(t, err) + + delay := time.Duration(3600) * time.Second + expirationTime := time.Now().Add(delay) + headers := schwift.NewObjectHeaders() + headers.ExpiresAt().Set(expirationTime) + + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1+segment2)), 128, headers.ToOpts())) + expectSuccess(t, lo.WriteManifest(headers.ToOpts())) + + //check object expiration + hdr, err := obj.Headers() + expectSuccess(t, err) + objectExpiration := hdr.ExpiresAt().Get().Format("2006-01-02 15:04:05 +00:00 MST") + expectString(t, objectExpiration, expirationTime.Format("2006-01-02 15:04:05 +00:00 MST")) + + //check segment expiration + + }) + }) +} + func TestTruncateDuringOverwrite(t *testing.T) { foreachLargeObjectStrategy(func(strategy schwift.LargeObjectStrategy, strategyStr string) { testWithContainer(t, func(c *schwift.Container) { @@ -154,8 +189,8 @@ func TestTruncateDuringOverwrite(t *testing.T) { segment1 := getRandomSegmentContent(128) segment2 := getRandomSegmentContent(128) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0)) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0, nil)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0, nil)) expectSuccess(t, lo.WriteManifest(nil)) expectObjectExistence(t, c.Object("segments/0000000000000001"), true) @@ -169,8 +204,8 @@ func TestTruncateDuringOverwrite(t *testing.T) { DeleteSegments: true, }) expectSuccess(t, err) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0)) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0, nil)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0, nil)) expectSuccess(t, lo.WriteManifest(nil)) expectObjectExistence(t, c.Object("segments/0000000000000001"), false) @@ -203,9 +238,9 @@ func TestSLOWithDataSegment(t *testing.T) { dataSegment := schwift.SegmentInfo{Data: []byte("---")} segment2 := getRandomSegmentContent(128) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0, nil)) expectSuccess(t, lo.AddSegment(dataSegment)) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0, nil)) expectSuccess(t, lo.WriteManifest(nil)) expectObjectContent(t, o, []byte(segment1+string(dataSegment.Data)+segment2)) @@ -303,8 +338,8 @@ func TestSLOGuessSegmentPrefix(t *testing.T) { segment1 := getRandomSegmentContent(128) segment2 := getRandomSegmentContent(128) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0)) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0, nil)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0, nil)) expectSuccess(t, lo.WriteManifest(nil)) //now create a fresh SLO and check if it infers the correct SegmentPrefix @@ -330,8 +365,8 @@ func TestDeleteLargeObjectAndKeepSegments(t *testing.T) { segment1 := getRandomSegmentContent(128) segment2 := getRandomSegmentContent(128) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0)) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0, nil)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0, nil)) expectSuccess(t, lo.WriteManifest(nil)) //test deletion that keeps segments @@ -363,8 +398,8 @@ func TestDeleteLargeObjectIncludingSegments(t *testing.T) { segment1 := getRandomSegmentContent(128) segment2 := getRandomSegmentContent(128) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0)) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0, nil)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0, nil)) expectSuccess(t, lo.WriteManifest(nil)) //test deletion that keeps segments @@ -394,8 +429,8 @@ func TestOverwriteLargeObjectAndKeepSegments(t *testing.T) { segment1 := getRandomSegmentContent(128) segment2 := getRandomSegmentContent(128) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0)) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0, nil)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0, nil)) expectSuccess(t, lo.WriteManifest(nil)) //test overwriting that keeps segments @@ -427,8 +462,8 @@ func TestOverwriteLargeObjectIncludingSegments(t *testing.T) { segment1 := getRandomSegmentContent(128) segment2 := getRandomSegmentContent(128) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0)) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1)), 0, nil)) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment2)), 0, nil)) expectSuccess(t, lo.WriteManifest(nil)) //test overwriting that deletes segments -- cgit v1.2.3 From 127cfdcd847fef24f606b5c548fe90dc2b46549e Mon Sep 17 00:00:00 2001 From: Muhammad Talal Anwar Date: Thu, 6 Sep 2018 14:53:01 +0200 Subject: add test for segment expiration --- tests/largeobject_test.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/largeobject_test.go b/tests/largeobject_test.go index dc8ed9d..1932741 100644 --- a/tests/largeobject_test.go +++ b/tests/largeobject_test.go @@ -143,9 +143,7 @@ func TestLargeObjectsBasic(t *testing.T) { func TestLargeObjectExpiration(t *testing.T) { testWithContainer(t, func(c *schwift.Container) { foreachLargeObjectStrategy(func(strategy schwift.LargeObjectStrategy, strategyStr string) { - segment1 := getRandomSegmentContent(128) - segment2 := getRandomSegmentContent(128) - + segment := getRandomSegmentContent(128) obj := c.Object(strategyStr + "-largeobject") lo, err := obj.AsNewLargeObject(schwift.SegmentingOptions{ SegmentContainer: c, @@ -159,7 +157,7 @@ func TestLargeObjectExpiration(t *testing.T) { headers := schwift.NewObjectHeaders() headers.ExpiresAt().Set(expirationTime) - expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment1+segment2)), 128, headers.ToOpts())) + expectSuccess(t, lo.Append(bytes.NewReader([]byte(segment)), 128, headers.ToOpts())) expectSuccess(t, lo.WriteManifest(headers.ToOpts())) //check object expiration @@ -169,6 +167,10 @@ func TestLargeObjectExpiration(t *testing.T) { expectString(t, objectExpiration, expirationTime.Format("2006-01-02 15:04:05 +00:00 MST")) //check segment expiration + hdr, err = c.Object(strategyStr + "-segments/0000000000000001").Headers() + expectSuccess(t, err) + objectExpiration = hdr.ExpiresAt().Get().Format("2006-01-02 15:04:05 +00:00 MST") + expectString(t, objectExpiration, expirationTime.Format("2006-01-02 15:04:05 +00:00 MST")) }) }) -- cgit v1.2.3