diff --git a/app/server/server.go b/app/server/server.go index 1918863..9541549 100644 --- a/app/server/server.go +++ b/app/server/server.go @@ -1,16 +1,12 @@ package server import ( - //"io/ioutil" "os" "os/signal" "os/user" - //"os/user" "path/filepath" "strconv" - //"sync" "syscall" - //"time" "mstore/app/config" "mstore/app/handler" @@ -42,6 +38,27 @@ func (srv *Server) Handler() *handler.Handler { return srv.hand } +func (srv *Server) Service() *service.Service { + return srv.svc +} + +func (srv *Server) SetLogdir(dir string) { + srv.conf.Logpath = dir +} + +func (srv *Server) SetRundir(dir string) { + srv.conf.Runpath = dir +} + +func (srv *Server) SetDatadir(dir string) { + srv.conf.Database.Basepath = dir + srv.conf.Storage.Basepath = dir +} + +func (srv *Server) SetPort(port int64) { + srv.conf.Service.Port = port +} + func (srv *Server) Configure() error { var err error srv.logg.Infof("Configuration server") diff --git a/test/file_test.go b/test/file_test.go index c6f12ab..d50c177 100644 --- a/test/file_test.go +++ b/test/file_test.go @@ -16,236 +16,186 @@ import ( "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) { +func TestFileOperations(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.Configure() + require.NoError(t, err) - err = srv.Build() - require.NoError(t, err) + tmpdir := t.TempDir() + srv.SetDatadir(tmpdir) + srv.SetLogdir(tmpdir) + srv.SetRundir(tmpdir) - 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)) + err = srv.Build() + require.NoError(t, err) + } + + { + fmt.Printf("=== PutFile ===\n") + 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)) + } + { + fmt.Printf("=== FileExists ===\n") + + 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)) + } + { + fmt.Printf("=== GetFile ===\n") + 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)) + } + { + fmt.Printf("=== DeleteFile ===\n") + 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)) + } + + { + fmt.Printf("=== FileNotExists ===\n") + + 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)) + } + { + fmt.Printf("=== ServiceHello ===\n") + 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)) + } }