From ba8fe3a94c75244c95f761e8ed01555fdd7bd9ac Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Mon, 11 Mar 2024 12:24:20 +0200 Subject: [PATCH] update deps --- http/filestream/filestream.go | 29 ++++++++++++++--------------- http/filestream/filestream_test.go | 10 +++++++--- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/http/filestream/filestream.go b/http/filestream/filestream.go index 311fdfa..1cbf9e0 100644 --- a/http/filestream/filestream.go +++ b/http/filestream/filestream.go @@ -6,7 +6,6 @@ import ( ioutils "github.com/jfrog/gofrog/io" "io" "mime/multipart" - "os" ) const ( @@ -14,9 +13,9 @@ const ( ) // The expected type of function that should be provided to the ReadFilesFromStream func, that returns the writer that should handle each file -type FileHandlerFunc func(fileName string) (writer io.WriteCloser, err error) +type FileWriterFunc func(fileName string) (writer io.WriteCloser, err error) -func ReadFilesFromStream(multipartReader *multipart.Reader, fileHandlerFunc FileHandlerFunc) error { +func ReadFilesFromStream(multipartReader *multipart.Reader, fileWriterFunc FileWriterFunc) error { for { // Read the next file streamed from client fileReader, err := multipartReader.NextPart() @@ -26,7 +25,7 @@ func ReadFilesFromStream(multipartReader *multipart.Reader, fileHandlerFunc File } return fmt.Errorf("failed to read file: %w", err) } - err = readFile(fileReader, fileHandlerFunc) + err = readFile(fileReader, fileWriterFunc) if err != nil { return err } @@ -35,9 +34,9 @@ func ReadFilesFromStream(multipartReader *multipart.Reader, fileHandlerFunc File return nil } -func readFile(fileReader *multipart.Part, fileHandlerFunc FileHandlerFunc) (err error) { +func readFile(fileReader *multipart.Part, fileWriterFunc FileWriterFunc) (err error) { fileName := fileReader.FileName() - fileWriter, err := fileHandlerFunc(fileName) + fileWriter, err := fileWriterFunc(fileName) if err != nil { return err } @@ -48,9 +47,12 @@ func readFile(fileReader *multipart.Part, fileHandlerFunc FileHandlerFunc) (err return err } -func WriteFilesToStream(multipartWriter *multipart.Writer, filePaths []string) (err error) { - for _, filePath := range filePaths { - if err = writeFile(multipartWriter, filePath); err != nil { +// The expected type of function that should be provided to the WriteFilesToStream func, that returns the reader that should handle each file +type FileReaderFunc func(fileName string) (writer io.ReadCloser, err error) + +func WriteFilesToStream(multipartWriter *multipart.Writer, checksumsList []string, fileReaderFunc FileReaderFunc) (err error) { + for _, fileChecksum := range checksumsList { + if err = writeFile(multipartWriter, fileChecksum, fileReaderFunc); err != nil { return } } @@ -60,13 +62,10 @@ func WriteFilesToStream(multipartWriter *multipart.Writer, filePaths []string) ( return multipartWriter.Close() } -func writeFile(multipartWriter *multipart.Writer, filePath string) (err error) { - fileReader, err := os.Open(filePath) - if err != nil { - return fmt.Errorf("failed to open file: %w", err) - } +func writeFile(multipartWriter *multipart.Writer, fileChecksum string, fileReaderFunc FileReaderFunc) (err error) { + fileReader, err := fileReaderFunc(fileChecksum) defer ioutils.Close(fileReader, &err) - fileWriter, err := multipartWriter.CreateFormFile(FileType, filePath) + fileWriter, err := multipartWriter.CreateFormFile(FileType, fileChecksum) if err != nil { return fmt.Errorf("failed to CreateFormFile: %w", err) } diff --git a/http/filestream/filestream_test.go b/http/filestream/filestream_test.go index cb15e01..4ba2390 100644 --- a/http/filestream/filestream_test.go +++ b/http/filestream/filestream_test.go @@ -25,14 +25,14 @@ func TestWriteFilesToStreamAndReadFilesFromStream(t *testing.T) { // Create the multipart writer that will stream our files body := &bytes.Buffer{} multipartWriter := multipart.NewWriter(body) - assert.NoError(t, WriteFilesToStream(multipartWriter, []string{file1, file2})) + assert.NoError(t, WriteFilesToStream(multipartWriter, []string{file1, file2}, simpleFileReader)) // Create local temp dir that will store our files targetDir = t.TempDir() // Create the multipart reader that will read the files from the stream multipartReader := multipart.NewReader(body, multipartWriter.Boundary()) - assert.NoError(t, ReadFilesFromStream(multipartReader, simpleFileHandler)) + assert.NoError(t, ReadFilesFromStream(multipartReader, simpleFileWriter)) // Validate file 1 transferred successfully file1 = filepath.Join(targetDir, "test1.txt") @@ -51,6 +51,10 @@ func TestWriteFilesToStreamAndReadFilesFromStream(t *testing.T) { assert.NoError(t, os.Remove(file2)) } -func simpleFileHandler(fileName string) (fileWriter io.WriteCloser, err error) { +func simpleFileReader(fileName string) (fileWriter io.ReadCloser, err error) { + return os.Open(filepath.Join(targetDir, fileName)) +} + +func simpleFileWriter(fileName string) (fileWriter io.WriteCloser, err error) { return os.Create(filepath.Join(targetDir, fileName)) }