Skip to content

Commit 1c4ecba

Browse files
committed
use shared functionality for file mock
1 parent 15f2bbc commit 1c4ecba

File tree

2 files changed

+59
-47
lines changed

2 files changed

+59
-47
lines changed

pkg/http/mock.go

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package http
22

33
import (
44
"fmt"
5-
"net/http/httputil"
5+
"mime/multipart"
66

77
"github.com/bakito/batch-job-controller/pkg/config"
88
"github.com/bakito/batch-job-controller/pkg/metrics"
@@ -47,42 +47,28 @@ type mockServer struct {
4747
}
4848

4949
func (s *mockServer) postResult(ctx *gin.Context) {
50-
processPostResult(
51-
ctx,
52-
s.Server,
53-
func(
54-
ctx *gin.Context,
55-
postLog logr.Logger,
56-
results *metrics.Results,
57-
node string,
58-
executionID string,
59-
body []byte,
50+
processPostResult(ctx, s.Server,
51+
func(ctx *gin.Context, postLog logr.Logger, results *metrics.Results, node string, executionID string, body []byte,
6052
) error {
6153
return nil
6254
},
6355
)
6456
}
6557

6658
func (s *mockServer) postFile(ctx *gin.Context) {
67-
node, executionID := nodeAndID(ctx)
68-
postLog := s.Log.WithValues(
69-
"node", node,
70-
"id", executionID,
59+
processPostedFiles(ctx, s.Server,
60+
func(ctx *gin.Context, postLog logr.Logger, executionID string, node string, file *multipart.FileHeader) error {
61+
return nil
62+
},
63+
func(ctx *gin.Context, postLog logr.Logger, executionID string, node string, fileName string, body []byte) error {
64+
return nil
65+
},
7166
)
72-
postLog.Info("Got file(s)")
73-
b, _ := httputil.DumpRequest(ctx.Request, true)
74-
println(string(b))
7567
}
7668

7769
func (s *mockServer) postEvent(ctx *gin.Context) {
78-
processPostedEvent(
79-
ctx,
80-
s.Server,
81-
func(ctx *gin.Context,
82-
postLog logr.Logger,
83-
podName string,
84-
event *Event,
85-
) error {
70+
processPostedEvent(ctx, s.Server,
71+
func(ctx *gin.Context, postLog logr.Logger, podName string, event *Event) error {
8672
return nil
8773
},
8874
)

pkg/http/postserver-file.go

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,57 @@ package http
33
import (
44
"fmt"
55
"mime"
6+
"mime/multipart"
67
"net/http"
78
"path/filepath"
89
"strings"
910

1011
"github.com/gin-gonic/gin"
12+
"github.com/go-logr/logr"
1113
"github.com/google/uuid"
1214
)
1315

1416
func (s *PostServer) postFile(ctx *gin.Context) {
17+
processPostedFiles(ctx, s.Server, s.saveFormFilesCallback, s.saveBodyFileCallback)
18+
}
19+
20+
func (s *PostServer) saveFormFilesCallback(ctx *gin.Context, postLog logr.Logger, executionID string, node string, file *multipart.FileHeader) error {
21+
if err := s.mkdir(executionID); err != nil {
22+
ctx.String(http.StatusInternalServerError, err.Error())
23+
postLog.Error(err, "error creating upload directory")
24+
return err
25+
}
26+
27+
err := ctx.SaveUploadedFile(file, filepath.Join(s.ReportPath, executionID, fmt.Sprintf("%s-%s", node, file.Filename)))
28+
if err != nil {
29+
ctx.String(http.StatusInternalServerError, err.Error())
30+
postLog.Error(err, "error saving file")
31+
return err
32+
}
33+
return nil
34+
}
35+
36+
func (s *PostServer) saveBodyFileCallback(ctx *gin.Context, postLog logr.Logger, executionID string, node string, fileName string, body []byte) error {
37+
fileName, err := s.SaveFile(executionID, fmt.Sprintf("%s-%s", node, fileName), body)
38+
postLog = postLog.WithValues(
39+
"name", filepath.Base(fileName),
40+
"path", fileName,
41+
"length", len(body),
42+
)
43+
if err != nil {
44+
ctx.String(http.StatusInternalServerError, err.Error())
45+
postLog.Error(err, "error receiving file")
46+
return err
47+
}
48+
return nil
49+
}
50+
51+
type (
52+
saveFormFiles func(ctx *gin.Context, postLog logr.Logger, executionID string, node string, file *multipart.FileHeader) error
53+
saveBodyFile func(ctx *gin.Context, postLog logr.Logger, executionID string, node string, fileName string, body []byte) error
54+
)
55+
56+
func processPostedFiles(ctx *gin.Context, s *Server, ffCallback saveFormFiles, bfCallback saveBodyFile) {
1557
node, executionID := nodeAndID(ctx)
1658
postLog := s.Log.WithValues(
1759
"node", node,
@@ -24,19 +66,10 @@ func (s *PostServer) postFile(ctx *gin.Context) {
2466
for _, files := range form.File {
2567
for _, file := range files {
2668

27-
// Upload the file to specific dst.
28-
if err := s.mkdir(executionID); err != nil {
29-
ctx.String(http.StatusInternalServerError, err.Error())
30-
postLog.Error(err, "error creating upload directory")
69+
if ffCallback(ctx, postLog, executionID, node, file) != nil {
3170
return
3271
}
3372

34-
err := ctx.SaveUploadedFile(file, filepath.Join(s.ReportPath, executionID, fmt.Sprintf("%s-%s", node, file.Filename)))
35-
if err != nil {
36-
ctx.String(http.StatusInternalServerError, err.Error())
37-
postLog.Error(err, "error saving file")
38-
return
39-
}
4073
names = append(names, file.Filename)
4174
}
4275
}
@@ -59,25 +92,18 @@ func (s *PostServer) postFile(ctx *gin.Context) {
5992
if fileName == "" {
6093
fileName = uuid.New().String()
6194

62-
fileName += s.evaluateExtension(ctx.Request)
95+
fileName += evaluateExtension(ctx.Request)
6396
}
6497

65-
fileName, err = s.SaveFile(executionID, fmt.Sprintf("%s-%s", node, fileName), body)
66-
postLog = postLog.WithValues(
67-
"name", filepath.Base(fileName),
68-
"path", fileName,
69-
"length", len(body),
70-
)
71-
if err != nil {
72-
ctx.String(http.StatusInternalServerError, err.Error())
73-
postLog.Error(err, "error receiving file")
98+
if bfCallback(ctx, postLog, executionID, node, fileName, body) != nil {
7499
return
75100
}
101+
76102
postLog.Info("received 1 file")
77103
}
78104
}
79105

80-
func (s *PostServer) evaluateExtension(r *http.Request) string {
106+
func evaluateExtension(r *http.Request) string {
81107
ct := r.Header.Get("Content-Type")
82108

83109
mt, _, _ := mime.ParseMediaType(ct)

0 commit comments

Comments
 (0)