Skip to content

Commit 65f07f3

Browse files
committed
update deps
1 parent 4b1d373 commit 65f07f3

File tree

2 files changed

+61
-44
lines changed

2 files changed

+61
-44
lines changed

http/multipart/multipart.go

Lines changed: 8 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,20 @@ package multipart
33
import (
44
"errors"
55
"fmt"
6-
"github.com/cespare/xxhash"
76
ioutils "github.com/jfrog/gofrog/io"
8-
"hash"
97
"io"
108
"mime/multipart"
119
"os"
1210
)
1311

14-
type FileWriterFunc func(fileName string) (io.Writer, error)
12+
type FileWriterFunc func(fileName string) (io.WriteCloser, error)
1513

1614
func ReadFilesFromStream(multipartReader *multipart.Reader, fileWriterFunc FileWriterFunc) error {
1715
for {
1816
// Read the next file streamed from client
1917
fileReader, err := multipartReader.NextPart()
2018
if err != nil {
21-
if err == io.EOF {
19+
if errors.Is(err, io.EOF) {
2220
break
2321
}
2422
return fmt.Errorf("failed to read file: %w", err)
@@ -32,19 +30,21 @@ func ReadFilesFromStream(multipartReader *multipart.Reader, fileWriterFunc FileW
3230
if _, err = io.Copy(fileWriter, fileReader); err != nil {
3331
return fmt.Errorf("failed writing '%s' file: %w", fileName, err)
3432
}
33+
ioutils.Close(fileWriter, &err)
3534
}
3635
return nil
3736
}
3837

39-
func WriteFilesToStream(writer io.Writer, filesList []string) error {
40-
multipartWriter := multipart.NewWriter(writer)
41-
for _, filePath := range filesList {
38+
func WriteFilesToStream(multipartWriter *multipart.Writer, filePaths []string) (err error) {
39+
defer ioutils.Close(multipartWriter, &err)
40+
41+
for _, filePath := range filePaths {
4242
fileReader, err := os.Open(filePath)
4343
if err != nil {
4444
return fmt.Errorf("failed to open file: %w", err)
4545
}
4646
defer ioutils.Close(fileReader, &err)
47-
fileWriter, err := multipartWriter.CreateFormFile("fieldname", filePath)
47+
fileWriter, err := multipartWriter.CreateFormFile("file", filePath)
4848
if err != nil {
4949
return fmt.Errorf("failed to CreateFormFile: %w", err)
5050
}
@@ -55,39 +55,3 @@ func WriteFilesToStream(writer io.Writer, filesList []string) error {
5555
}
5656
return nil
5757
}
58-
59-
func getFileWriter(fileName string) (fileWriter io.Writer, err error) {
60-
lockfileMock := map[string]string{
61-
"SDFDSFSDFSDFDSF": "file1",
62-
"XXSDFDSFSDFSDFDSF": "file2",
63-
}
64-
realFileName := lockfileMock[fileName]
65-
fileWriter, err = os.Create(realFileName)
66-
if err != nil {
67-
return nil, fmt.Errorf("create file: %w", err)
68-
}
69-
// Currently we are using the file name as the hash
70-
fileHash := fileName
71-
return io.MultiWriter(fileWriter, NewHashWrapper(fileHash)), nil
72-
}
73-
74-
type HashWrapper struct {
75-
hash hash.Hash64
76-
actualChecksum string
77-
}
78-
79-
func NewHashWrapper(actualChecksum string) *HashWrapper {
80-
return &HashWrapper{hash: xxhash.New(), actualChecksum: actualChecksum}
81-
}
82-
83-
func (hw *HashWrapper) Write(p []byte) (n int, err error) {
84-
n, err = hw.hash.Write(p)
85-
if fmt.Sprintf("%x", hw.hash.Sum(nil)) != hw.actualChecksum {
86-
err = errors.New("checksum mismatch")
87-
}
88-
return
89-
}
90-
91-
func myMain(filepath string) {
92-
ReadFilesFromStream(nil, getFileWriter)
93-
}

http/multipart/multipart_test.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package multipart
2+
3+
import (
4+
"bytes"
5+
"github.com/stretchr/testify/assert"
6+
"io"
7+
"mime/multipart"
8+
"os"
9+
"path"
10+
"path/filepath"
11+
"testing"
12+
)
13+
14+
var targetDir string
15+
16+
func TestReadFilesFromStream(t *testing.T) {
17+
sourceDir := t.TempDir()
18+
19+
// Create 2 file to be transferred via our multipart stream
20+
file1 := path.Join(sourceDir, "test1.txt")
21+
file2 := path.Join(sourceDir, "test2.txt")
22+
file1Content := []byte("test content1")
23+
file2Content := []byte("test content2")
24+
assert.NoError(t, os.WriteFile(file1, file1Content, 0644))
25+
assert.NoError(t, os.WriteFile(file2, file2Content, 0644))
26+
27+
// Create the multipart writer that will stream our files
28+
body := &bytes.Buffer{}
29+
multipartWriter := multipart.NewWriter(body)
30+
assert.NoError(t, WriteFilesToStream(multipartWriter, []string{file1, file2}))
31+
32+
// Create local temp dir that will store our files
33+
targetDir = t.TempDir()
34+
35+
// Create the multipart reader that will read the files from the stream
36+
multipartReader := multipart.NewReader(body, multipartWriter.Boundary())
37+
assert.NoError(t, ReadFilesFromStream(multipartReader, getFileWriter))
38+
39+
// Validate file 1 transferred successfully
40+
content, err := os.ReadFile(filepath.Join(targetDir, "test1.txt"))
41+
assert.NoError(t, err)
42+
assert.Equal(t, file1Content, content)
43+
44+
// Validate file 2 transferred successfully
45+
content, err = os.ReadFile(filepath.Join(targetDir, "test2.txt"))
46+
assert.NoError(t, err)
47+
assert.Equal(t, file2Content, content)
48+
49+
}
50+
51+
func getFileWriter(fileName string) (fileWriter io.WriteCloser, err error) {
52+
return os.Create(filepath.Join(targetDir, fileName))
53+
}

0 commit comments

Comments
 (0)