Skip to content

Commit 447fdf1

Browse files
Artem TitovArtem Titov
authored andcommitted
Merge remote-tracking branch 'origin/main' into dev/storage
1 parent aa19956 commit 447fdf1

File tree

7 files changed

+54
-20
lines changed

7 files changed

+54
-20
lines changed

common/connectors/storageconn/connector.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ func (s *Connector) Download(request *Request) *FileResponse {
2727
response := NewFileResponse(*request)
2828
if request.StorageFilename == "" {
2929
response.Error = fmt.Errorf("storage filename not specified")
30+
return response
3031
}
3132

3233
if err := os.MkdirAll(request.BaseFolder, 0775); err != nil {
@@ -99,10 +100,6 @@ func (s *Connector) Download(request *Request) *FileResponse {
99100

100101
func (s *Connector) Upload(request *Request) *Response {
101102
response := &Response{R: *request}
102-
if request.StorageFilename == "" {
103-
response.Error = fmt.Errorf("storage filename not specified")
104-
return response
105-
}
106103

107104
if request.File == nil {
108105
response.Error = fmt.Errorf("file for upload is not specified")
@@ -121,6 +118,8 @@ func (s *Connector) Upload(request *Request) *Response {
121118
r.SetFormData(map[string]string{
122119
"request": string(requestJSON),
123120
})
121+
122+
// request.StorageFilename can be empty
124123
r.SetFileReader("file", request.StorageFilename, request.File)
125124

126125
resp, err := r.Post(path)
@@ -153,7 +152,7 @@ func (s *Connector) Delete(request *Request) *Response {
153152
return response
154153
}
155154

156-
r.SetQueryParams(map[string]string{
155+
r.SetFormData(map[string]string{
157156
"request": string(requestJSON),
158157
})
159158

common/connectors/storageconn/structs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ type Request struct {
3434
// For uploads, File should be specified
3535
File io.Reader `json:"-"`
3636

37-
// StorageFilename should be always specified
37+
// If StorageFilename is not specified, Storage tries to get the filename automatically
3838
StorageFilename string `json:"storageFilename"`
3939
}
4040

common/constants/resource/resource_type.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const (
1717
CheckerOutput
1818
Interactor
1919
// Will be increased
20+
// Don't forget to add a new type to storage/helpers.go
2021
)
2122

2223
type DataType int

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func main() {
3434
if ts.Config.Storage != nil {
3535
err := storage.SetupStorage(ts)
3636
if err != nil {
37-
logger.Panic(err.Error())
37+
logger.Panic("Can not setup storage, error: %v", err.Error())
3838
}
3939
} else {
4040
logger.Info("storage is not configured, skipping storage component")

storage/filesystem/filesystem.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ func NewFilesystem(storageConfig *config.StorageConfig) IFilesystem {
2222
}
2323

2424
func (filesystem *Filesystem) generatePathFromID(prefix string, id string) string {
25-
var parts []string
26-
parts = append(parts, prefix)
25+
parts := []string{prefix}
2726
for i := 0; i < len(id); i += int(filesystem.BlockSize) {
2827
end := min(i+int(filesystem.BlockSize), len(id))
2928
parts = append(parts, id[i:end])

storage/helpers.go

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"errors"
66
"fmt"
77
"net/http"
8-
"strconv"
98
"testing_system/common/connectors/storageconn"
109
"testing_system/common/constants/resource"
1110

@@ -49,12 +48,12 @@ func parseRequest(c *gin.Context) (*storageconn.Request, error) {
4948
var requestJSON string
5049

5150
switch c.Request.Method {
52-
case http.MethodGet, http.MethodDelete:
51+
case http.MethodGet:
5352
requestJSON = c.Query("request")
5453
if requestJSON == "" {
5554
return nil, errors.New("missing request parameter in query")
5655
}
57-
case http.MethodPost, http.MethodPut:
56+
case http.MethodPost, http.MethodPut, http.MethodDelete:
5857
requestJSON = c.PostForm("request")
5958
if requestJSON == "" {
6059
return nil, errors.New("missing request parameter in form data")
@@ -105,16 +104,52 @@ func getDataId(dataType resource.DataType, request *storageconn.Request) (uint64
105104
}
106105

107106
func getFilepath(request *storageconn.Request) (string, error) {
108-
if request.StorageFilename == "" {
109-
return "", errors.New("StorageFilename is not specified")
110-
}
111107
switch request.Resource {
112-
case resource.TestInput, resource.TestOutput, resource.TestAnswer, resource.TestStderr:
108+
case resource.SourceCode:
109+
if request.StorageFilename == "" {
110+
return "", errors.New("StorageFilename should be specified for SourceCode")
111+
}
112+
return fmt.Sprintf("source/%s", request.StorageFilename), nil
113+
case resource.CompiledBinary:
114+
return "solution", nil
115+
case resource.CompileOutput:
116+
return "compile.out", nil
117+
case resource.TestInput:
118+
if request.TestID == 0 {
119+
return "", errors.New("TestID is not specified for TestInput")
120+
}
121+
return fmt.Sprintf("%02d", request.TestID), nil
122+
case resource.TestAnswer:
123+
if request.TestID == 0 {
124+
return "", errors.New("TestID is not specified for TestAnswer")
125+
}
126+
return fmt.Sprintf("%02d.a", request.TestID), nil
127+
case resource.TestOutput:
113128
if request.TestID == 0 {
114-
return "", errors.New("TestID is not specified for test resource")
129+
return "", errors.New("TestID is not specified for TestOutput")
130+
}
131+
return fmt.Sprintf("%02d.out", request.TestID), nil
132+
case resource.TestStderr:
133+
if request.TestID == 0 {
134+
return "", errors.New("TestID is not specified for TestOTestStderrutput")
135+
}
136+
return fmt.Sprintf("%02d.err", request.TestID), nil
137+
case resource.CheckerOutput:
138+
if request.TestID == 0 {
139+
return "", errors.New("TestID is not specified for CheckerOutput")
140+
}
141+
return fmt.Sprintf("%02d.check", request.TestID), nil
142+
case resource.Checker:
143+
if request.StorageFilename == "" {
144+
return "checkers/checker", nil
145+
}
146+
return fmt.Sprintf("checkers/%s", request.StorageFilename), nil
147+
case resource.Interactor:
148+
if request.StorageFilename == "" {
149+
return "interactors/interactor", nil
115150
}
116-
return fmt.Sprintf("tests/%s/%s", strconv.FormatUint(request.TestID, 10), request.StorageFilename), nil
151+
return fmt.Sprintf("interactors/%s", request.StorageFilename), nil
117152
default:
118-
return fmt.Sprintf("%s", request.StorageFilename), nil
153+
return "", errors.New("Unknown resource type")
119154
}
120155
}

storage/storage.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func SetupStorage(ts *common.TestingSystem) error {
2626
r.DELETE("/remove", storage.HandleRemove)
2727
r.GET("/get", storage.HandleGet)
2828

29-
logger.Info("Configured invoker")
29+
logger.Info("Configured storage")
3030
return nil
3131
}
3232

0 commit comments

Comments
 (0)