From 4a7a639df1338366422217e1a6f56582a12d2508 Mon Sep 17 00:00:00 2001 From: Gani Georgiev Date: Sun, 9 Mar 2025 20:56:33 +0200 Subject: [PATCH] added s3blob WriterOptions custom headers test --- tools/filesystem/internal/s3blob/s3blob.go | 4 +- .../filesystem/internal/s3blob/s3blob_test.go | 77 +++++++++++++++++++ 2 files changed, 78 insertions(+), 3 deletions(-) diff --git a/tools/filesystem/internal/s3blob/s3blob.go b/tools/filesystem/internal/s3blob/s3blob.go index 756bae27..db2ed952 100644 --- a/tools/filesystem/internal/s3blob/s3blob.go +++ b/tools/filesystem/internal/s3blob/s3blob.go @@ -362,12 +362,10 @@ func (w *writer) open(r io.Reader, closePipeOnError bool) { // AWS doesn't like a nil Body. r = http.NoBody } - var err error w.uploader.Payload = r - err = w.uploader.Upload(w.ctx, w.reqOptions...) - + err := w.uploader.Upload(w.ctx, w.reqOptions...) if err != nil { if closePipeOnError { w.pr.CloseWithError(err) diff --git a/tools/filesystem/internal/s3blob/s3blob_test.go b/tools/filesystem/internal/s3blob/s3blob_test.go index 72a05c9a..9b0e8f18 100644 --- a/tools/filesystem/internal/s3blob/s3blob_test.go +++ b/tools/filesystem/internal/s3blob/s3blob_test.go @@ -516,3 +516,80 @@ func TestDriverNewRangeReader(t *testing.T) { }) } } + +func TestDriverNewTypedWriter(t *testing.T) { + t.Parallel() + + httpClient := tests.NewClient( + &tests.RequestStub{ + Method: http.MethodPut, + URL: "https://test_bucket.example.com/..__0x2f__abc/test/", + Match: func(req *http.Request) bool { + body, err := io.ReadAll(req.Body) + if err != nil { + return false + } + + return string(body) == "test" && tests.ExpectHeaders(req.Header, map[string]string{ + "cache-control": "test_cache_control", + "content-disposition": "test_content_disposition", + "content-encoding": "test_content_encoding", + "content-language": "test_content_language", + "content-type": "test_ct", + "content-md5": "dGVzdA==", + }) + }, + }, + ) + + drv, err := s3blob.New(&s3.S3{ + Bucket: "test_bucket", + Region: "test_region", + Endpoint: "https://example.com", + Client: httpClient, + }) + if err != nil { + t.Fatal(err) + } + + options := &blob.WriterOptions{ + CacheControl: "test_cache_control", + ContentDisposition: "test_content_disposition", + ContentEncoding: "test_content_encoding", + ContentLanguage: "test_content_language", + ContentType: "test_content_type", // should be ignored + ContentMD5: []byte("test"), + Metadata: map[string]string{"@test_meta_a": "@test"}, + } + + w, err := drv.NewTypedWriter(context.Background(), "../abc/test/", "test_ct", options) + if err != nil { + t.Fatal(err) + } + + n, err := w.Write(nil) + if err != nil { + t.Fatal(err) + } + if n != 0 { + t.Fatalf("Expected nil write to result in %d written bytes, got %d", 0, n) + } + + n, err = w.Write([]byte("test")) + if err != nil { + t.Fatal(err) + } + if n != 4 { + t.Fatalf("Expected nil write to result in %d written bytes, got %d", 4, n) + } + + err = w.Close() + if err != nil { + t.Fatal(err) + } + + err = httpClient.AssertNoRemaining() + if err != nil { + t.Fatal(err) + } +}