first draft of file storage
This commit is contained in:
@@ -0,0 +1,251 @@
|
||||
package test
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"bytes"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"io"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"mstore/app/router"
|
||||
"mstore/app/server"
|
||||
)
|
||||
|
||||
func TestFileLife(t *testing.T) {
|
||||
var tester FileTester
|
||||
tester.MakeServer(t)
|
||||
tester.TestServiceHello(t)
|
||||
tester.TestPutFile(t)
|
||||
tester.TestFileExists(t)
|
||||
tester.TestGetFile(t)
|
||||
tester.TestDeleteFile(t)
|
||||
tester.TestFileNotExists(t)
|
||||
}
|
||||
|
||||
type FileTester struct {
|
||||
srv *server.Server
|
||||
}
|
||||
|
||||
func (tester *FileTester) MakeServer(t *testing.T) {
|
||||
var err error
|
||||
|
||||
fmt.Printf("=== MakeServer ===\n")
|
||||
|
||||
srv, err := server.NewServer()
|
||||
require.NoError(t, err)
|
||||
|
||||
err = srv.Configure()
|
||||
require.NoError(t, err)
|
||||
|
||||
err = srv.Build()
|
||||
require.NoError(t, err)
|
||||
|
||||
tester.srv = srv
|
||||
}
|
||||
|
||||
func (tester *FileTester) TestPutFile(t *testing.T) {
|
||||
var err error
|
||||
|
||||
fmt.Printf("=== PutFile ===\n")
|
||||
|
||||
srv := tester.srv
|
||||
require.NotNil(t, srv)
|
||||
|
||||
reqPath := `/v3/api/file/foo/bare`
|
||||
routePath := `/v3/api/file/{filepath}`
|
||||
|
||||
rout := router.NewRouter()
|
||||
hand := srv.Handler()
|
||||
require.NotNil(t, hand)
|
||||
|
||||
rout.Put(routePath, hand.PutFile)
|
||||
|
||||
datasize := 16
|
||||
filedata := make([]byte, datasize)
|
||||
_, err = rand.Read(filedata)
|
||||
require.NoError(t, err)
|
||||
|
||||
filedata = []byte(hex.EncodeToString(filedata))
|
||||
|
||||
source := bytes.NewReader(filedata)
|
||||
|
||||
request, err := http.NewRequest("PUT", reqPath, source)
|
||||
require.NoError(t, err)
|
||||
|
||||
request.Header.Set("Content-Length", fmt.Sprintf("%d", datasize))
|
||||
request.Header.Set("Content-Type", "application/octet-stream")
|
||||
|
||||
recorder := httptest.NewRecorder()
|
||||
rout.ServeHTTP(recorder, request)
|
||||
require.Equal(t, http.StatusOK, recorder.Code)
|
||||
|
||||
fmt.Printf("Response code: %d\n", recorder.Code)
|
||||
|
||||
bodyReader := recorder.Body
|
||||
bodyBytes, err := io.ReadAll(bodyReader)
|
||||
|
||||
fmt.Printf("Response body: %s\n", string(bodyBytes))
|
||||
}
|
||||
|
||||
func (tester *FileTester) TestFileExists(t *testing.T) {
|
||||
var err error
|
||||
fmt.Printf("=== FileExists ===\n")
|
||||
|
||||
srv := tester.srv
|
||||
|
||||
require.NotNil(t, srv)
|
||||
|
||||
reqPath := `/v3/api/file/foo/bare`
|
||||
routePath := `/v3/api/file/{filepath}`
|
||||
|
||||
rout := router.NewRouter()
|
||||
hand := srv.Handler()
|
||||
require.NotNil(t, hand)
|
||||
|
||||
rout.Head(routePath, hand.FileExists)
|
||||
|
||||
request, err := http.NewRequest("HEAD", reqPath, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
recorder := httptest.NewRecorder()
|
||||
rout.ServeHTTP(recorder, request)
|
||||
require.Equal(t, http.StatusOK, recorder.Code)
|
||||
|
||||
fmt.Printf("Response code: %d\n", recorder.Code)
|
||||
|
||||
bodyReader := recorder.Body
|
||||
bodyBytes, err := io.ReadAll(bodyReader)
|
||||
|
||||
fmt.Printf("Response body: %s\n", string(bodyBytes))
|
||||
}
|
||||
|
||||
func (tester *FileTester) TestGetFile(t *testing.T) {
|
||||
var err error
|
||||
|
||||
fmt.Printf("=== GetFile ===\n")
|
||||
|
||||
srv := tester.srv
|
||||
require.NotNil(t, srv)
|
||||
|
||||
reqPath := `/v3/api/file/foo/bare`
|
||||
routePath := `/v3/api/file/{filepath}`
|
||||
|
||||
rout := router.NewRouter()
|
||||
hand := srv.Handler()
|
||||
require.NotNil(t, hand)
|
||||
|
||||
rout.Get(routePath, hand.GetFile)
|
||||
|
||||
request, err := http.NewRequest("GET", reqPath, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
recorder := httptest.NewRecorder()
|
||||
rout.ServeHTTP(recorder, request)
|
||||
require.Equal(t, http.StatusOK, recorder.Code)
|
||||
|
||||
fmt.Printf("Response code: %d\n", recorder.Code)
|
||||
|
||||
bodyReader := recorder.Body
|
||||
bodyBytes, err := io.ReadAll(bodyReader)
|
||||
|
||||
fmt.Printf("Response body: %s\n", string(bodyBytes))
|
||||
}
|
||||
|
||||
func (tester *FileTester) TestDeleteFile(t *testing.T) {
|
||||
var err error
|
||||
|
||||
fmt.Printf("=== DeleteFile ===\n")
|
||||
|
||||
srv := tester.srv
|
||||
require.NotNil(t, srv)
|
||||
|
||||
reqPath := `/v3/api/file/foo/bare`
|
||||
routePath := `/v3/api/file/{filepath}`
|
||||
|
||||
rout := router.NewRouter()
|
||||
hand := srv.Handler()
|
||||
require.NotNil(t, hand)
|
||||
|
||||
rout.Delete(routePath, hand.DeleteFile)
|
||||
|
||||
request, err := http.NewRequest("DELETE", reqPath, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
recorder := httptest.NewRecorder()
|
||||
rout.ServeHTTP(recorder, request)
|
||||
require.Equal(t, http.StatusOK, recorder.Code)
|
||||
|
||||
fmt.Printf("Response code: %d\n", recorder.Code)
|
||||
|
||||
bodyReader := recorder.Body
|
||||
bodyBytes, err := io.ReadAll(bodyReader)
|
||||
|
||||
fmt.Printf("Response body: %s\n", string(bodyBytes))
|
||||
}
|
||||
|
||||
func (tester *FileTester) TestFileNotExists(t *testing.T) {
|
||||
var err error
|
||||
fmt.Printf("=== FileNotExists ===\n")
|
||||
|
||||
srv := tester.srv
|
||||
|
||||
require.NotNil(t, srv)
|
||||
|
||||
reqPath := `/v3/api/file/foo/bare`
|
||||
routePath := `/v3/api/file/{filepath}`
|
||||
|
||||
rout := router.NewRouter()
|
||||
hand := srv.Handler()
|
||||
require.NotNil(t, hand)
|
||||
|
||||
rout.Head(routePath, hand.FileExists)
|
||||
|
||||
request, err := http.NewRequest("HEAD", reqPath, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
recorder := httptest.NewRecorder()
|
||||
rout.ServeHTTP(recorder, request)
|
||||
require.Equal(t, http.StatusNotFound, recorder.Code)
|
||||
|
||||
fmt.Printf("Response code: %d\n", recorder.Code)
|
||||
|
||||
bodyReader := recorder.Body
|
||||
bodyBytes, err := io.ReadAll(bodyReader)
|
||||
|
||||
fmt.Printf("Response body: %s\n", string(bodyBytes))
|
||||
}
|
||||
|
||||
func (tester *FileTester) TestServiceHello(t *testing.T) {
|
||||
var err error
|
||||
|
||||
fmt.Printf("=== ServiceHello ===\n")
|
||||
|
||||
srv := tester.srv
|
||||
require.NotNil(t, srv)
|
||||
|
||||
reqPath := "/service/hello"
|
||||
routePath := "/service/hello"
|
||||
|
||||
rout := router.NewRouter()
|
||||
hand := srv.Handler()
|
||||
rout.Get(routePath, hand.SendHello)
|
||||
|
||||
request, err := http.NewRequest("GET", reqPath, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
recorder := httptest.NewRecorder()
|
||||
rout.ServeHTTP(recorder, request)
|
||||
require.Equal(t, http.StatusOK, recorder.Code)
|
||||
|
||||
fmt.Printf("Response code: %d\n", recorder.Code)
|
||||
|
||||
bodyReader := recorder.Body
|
||||
bodyBytes, err := io.ReadAll(bodyReader)
|
||||
|
||||
fmt.Printf("Response body: %s\n", string(bodyBytes))
|
||||
}
|
||||
Reference in New Issue
Block a user