From 68f798d0f96c358117dcebe54e7ae2a91ee59481 Mon Sep 17 00:00:00 2001 From: David Christofas Date: Wed, 8 Apr 2020 13:34:36 +0200 Subject: [PATCH 1/2] implement integration tests --- go.mod | 1 + go.sum | 2 +- pkg/config/config.go | 5 ++ pkg/proto/v0/thumbnails.pb.micro_test.go | 87 ++++++++++++++++++++ pkg/proto/v0/thumbnails.pb_test.go | 98 +++++++++++++++++++++++ pkg/server/grpc/server.go | 9 +++ pkg/service/v0/option.go | 26 +++++- pkg/service/v0/service.go | 8 +- pkg/thumbnail/imgsource/filesystem.go | 39 +++++++++ testdata/oc.png | Bin 0 -> 69655 bytes 10 files changed, 264 insertions(+), 11 deletions(-) create mode 100644 pkg/proto/v0/thumbnails.pb.micro_test.go create mode 100644 pkg/proto/v0/thumbnails.pb_test.go create mode 100644 pkg/thumbnail/imgsource/filesystem.go create mode 100644 testdata/oc.png diff --git a/go.mod b/go.mod index 308d52f3d..fa5c2ce3a 100644 --- a/go.mod +++ b/go.mod @@ -27,6 +27,7 @@ require ( github.com/restic/calens v0.2.0 github.com/spf13/afero v1.2.2 // indirect github.com/spf13/viper v1.5.0 + github.com/stretchr/testify v1.4.0 go.opencensus.io v0.22.2 golang.org/x/crypto v0.0.0-20200420201142-3c4aac89819a // indirect golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect diff --git a/go.sum b/go.sum index 774f1c0ca..c54ad9fda 100644 --- a/go.sum +++ b/go.sum @@ -455,7 +455,7 @@ github.com/oracle/oci-go-sdk v7.0.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukw github.com/ovh/go-ovh v0.0.0-20181109152953-ba5adb4cf014/go.mod h1:joRatxRJaZBsY3JAOEMcoOp05CnZzsx4scTxi95DHyQ= github.com/owncloud/ocis-pkg/v2 v2.2.1 h1:LK7WxHYugEFQ9NHTOz0EP8DRjbt51wXhyqruV03z6zI= github.com/owncloud/ocis-pkg/v2 v2.2.1/go.mod h1:MXv7QzsYsu4YWuyJxhq1kLLmJa/r5gbqHe1FXulMHaw= -github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= +ithub.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= diff --git a/pkg/config/config.go b/pkg/config/config.go index 37286518a..7d1b1645b 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -51,6 +51,11 @@ type WebDavSource struct { BaseURL string } +// FileSystemSource defines the available filesystem source configuration. +type FileSystemSource struct { + BasePath string +} + // Thumbnail defines the available thumbnail related configuration. type Thumbnail struct { Resolutions []string diff --git a/pkg/proto/v0/thumbnails.pb.micro_test.go b/pkg/proto/v0/thumbnails.pb.micro_test.go new file mode 100644 index 000000000..e4b3baf76 --- /dev/null +++ b/pkg/proto/v0/thumbnails.pb.micro_test.go @@ -0,0 +1,87 @@ +package proto_test + +import ( + "bytes" + "context" + "image" + "log" + "os" + "path/filepath" + "testing" + + "github.com/owncloud/ocis-pkg/v2/service/grpc" + "github.com/owncloud/ocis-thumbnails/pkg/config" + "github.com/owncloud/ocis-thumbnails/pkg/proto/v0" + "github.com/owncloud/ocis-thumbnails/pkg/thumbnail/imgsource" + "github.com/owncloud/ocis-thumbnails/pkg/thumbnail/storage" + "github.com/stretchr/testify/assert" + + svc "github.com/owncloud/ocis-thumbnails/pkg/service/v0" +) + +var service = grpc.Service{} + +func init() { + service = grpc.NewService( + grpc.Namespace("com.owncloud.api"), + grpc.Name("thumbnails"), + grpc.Address("localhost:9992"), + ) + + cfg := config.New() + cfg.Thumbnail.Resolutions = []string{"16x16", "32x32", "64x64", "128x128"} + + wd, _ := os.Getwd() + fsCfg := config.FileSystemSource{ + BasePath: filepath.Join(wd, "../../../testdata/"), + } + err := proto.RegisterThumbnailServiceHandler( + service.Server(), + svc.NewService( + svc.Config(cfg), + svc.ThumbnailStorage(storage.NewInMemoryStorage()), + svc.ThumbnailSource(imgsource.NewFileSystemSource(fsCfg)), + ), + ) + if err != nil { + log.Fatalf("could not register ThumbnailHandler: %v", err) + } + service.Server().Start() +} + +func TestGetThumbnail(t *testing.T) { + req := proto.GetRequest{ + Filepath: "oc.png", + Filetype: proto.GetRequest_PNG, + Etag: "33a64df551425fcc55e4d42a148795d9f25f89d4", + Height: 32, + Width: 32, + } + client := service.Client() + cl := proto.NewThumbnailService("com.owncloud.api.thumbnails", client) + rsp, err := cl.GetThumbnail(context.Background(), &req) + if err != nil { + log.Fatalf("error %s", err.Error()) + } + assert.NotEmpty(t, rsp.GetThumbnail()) + + img, _, _ := image.Decode(bytes.NewReader(rsp.GetThumbnail())) + assert.Equal(t, 32, img.Bounds().Size().X) + + assert.Equal(t, "image/png", rsp.GetMimetype()) +} + +func TestGetThumbnailInvalidImage(t *testing.T) { + req := proto.GetRequest{ + Filepath: "invalid.png", + Filetype: proto.GetRequest_PNG, + Etag: "33a64df551425fcc55e4d42a148795d9f25f89d4", + Height: 32, + Width: 32, + } + client := service.Client() + cl := proto.NewThumbnailService("com.owncloud.api.thumbnails", client) + _, err := cl.GetThumbnail(context.Background(), &req) + + assert.NotNil(t, err) +} diff --git a/pkg/proto/v0/thumbnails.pb_test.go b/pkg/proto/v0/thumbnails.pb_test.go new file mode 100644 index 000000000..56af7f298 --- /dev/null +++ b/pkg/proto/v0/thumbnails.pb_test.go @@ -0,0 +1,98 @@ +package proto_test + +import ( + "testing" + + "github.com/owncloud/ocis-thumbnails/pkg/proto/v0" + "github.com/stretchr/testify/assert" +) + +type TestRequest struct { + testDataName string + filepath string + filetype proto.GetRequest_FileType + etag string + width int32 + height int32 + authorization string + expected string +} + +type TestResponse struct { + testDataName string + img []byte + mimetype string + expected string +} + +func TestRequestString(t *testing.T) { + + var tests = []TestRequest{ + { + "ASCII", + "Foo.jpg", + proto.GetRequest_JPG, + "33a64df551425fcc55e4d42a148795d9f25f89d4", + 24, + 24, + "Basic SGVXaG9SZWFkc1RoaXM6SXNTdHVwaWQK", + `filepath:"Foo.jpg" filetype:JPG etag:"33a64df551425fcc55e4d42a148795d9f25f89d4" width:24 height:24 authorization:"Basic SGVXaG9SZWFkc1RoaXM6SXNTdHVwaWQK" `, + }, + { + "UTF", + "मिलन.jpg", + proto.GetRequest_JPG, + "33a64df551425fcc55e4d42a148795d9f25f89d4", + 24, + 24, + "Basic SGVXaG9SZWFkc1RoaXM6SXNTdHVwaWQK", + `filepath:"\340\244\256\340\244\277\340\244\262\340\244\250.jpg" filetype:JPG etag:"33a64df551425fcc55e4d42a148795d9f25f89d4" width:24 height:24 authorization:"Basic SGVXaG9SZWFkc1RoaXM6SXNTdHVwaWQK" `, + }, + { + "PNG", + "Foo.png", + proto.GetRequest_PNG, + "33a64df551425fcc55e4d42a148795d9f25f89d4", + 24, + 24, + "Basic SGVXaG9SZWFkc1RoaXM6SXNTdHVwaWQK", + `filepath:"Foo.png" etag:"33a64df551425fcc55e4d42a148795d9f25f89d4" width:24 height:24 authorization:"Basic SGVXaG9SZWFkc1RoaXM6SXNTdHVwaWQK" `, + }, + } + + for _, testCase := range tests { + t.Run(testCase.testDataName, func(t *testing.T) { + req := proto.GetRequest{ + Filepath: testCase.filepath, + Filetype: testCase.filetype, + Etag: testCase.etag, + Height: testCase.height, + Width: testCase.width, + Authorization: testCase.authorization, + } + assert.Equal(t, testCase.expected, req.String()) + }) + } +} + +func TestResponseString(t *testing.T) { + var tests = []TestResponse{ + { + "ASCII", + []byte("image data"), + "image/png", + `thumbnail:"image data" mimetype:"image/png" `, + }, + } + + for _, testCase := range tests { + t.Run(testCase.testDataName, func(t *testing.T) { + response := proto.GetResponse{ + Thumbnail: testCase.img, + Mimetype: testCase.mimetype, + } + + assert.Equal(t, testCase.expected, response.String()) + }) + } +} diff --git a/pkg/server/grpc/server.go b/pkg/server/grpc/server.go index 3a7de2c93..ed67be00b 100644 --- a/pkg/server/grpc/server.go +++ b/pkg/server/grpc/server.go @@ -4,6 +4,8 @@ import ( "github.com/owncloud/ocis-pkg/v2/service/grpc" "github.com/owncloud/ocis-thumbnails/pkg/proto/v0" svc "github.com/owncloud/ocis-thumbnails/pkg/service/v0" + "github.com/owncloud/ocis-thumbnails/pkg/thumbnail/imgsource" + "github.com/owncloud/ocis-thumbnails/pkg/thumbnail/storage" "github.com/owncloud/ocis-thumbnails/pkg/version" ) @@ -26,6 +28,13 @@ func NewService(opts ...Option) grpc.Service { thumbnail = svc.NewService( svc.Config(options.Config), svc.Logger(options.Logger), + svc.ThumbnailSource(imgsource.NewWebDavSource(options.Config.Thumbnail.WebDavSource)), + svc.ThumbnailStorage( + storage.NewFileSystemStorage( + options.Config.Thumbnail.FileSystemStorage, + options.Logger, + ), + ), ) thumbnail = svc.NewInstrument(thumbnail, options.Metrics) thumbnail = svc.NewLogging(thumbnail, options.Logger) diff --git a/pkg/service/v0/option.go b/pkg/service/v0/option.go index b8d33f7b7..c870c7096 100644 --- a/pkg/service/v0/option.go +++ b/pkg/service/v0/option.go @@ -3,8 +3,10 @@ package svc import ( "net/http" - "github.com/owncloud/ocis-thumbnails/pkg/config" "github.com/owncloud/ocis-pkg/v2/log" + "github.com/owncloud/ocis-thumbnails/pkg/config" + "github.com/owncloud/ocis-thumbnails/pkg/thumbnail/imgsource" + "github.com/owncloud/ocis-thumbnails/pkg/thumbnail/storage" ) // Option defines a single option function. @@ -12,9 +14,11 @@ type Option func(o *Options) // Options defines the available options for this package. type Options struct { - Logger log.Logger - Config *config.Config - Middleware []func(http.Handler) http.Handler + Logger log.Logger + Config *config.Config + Middleware []func(http.Handler) http.Handler + ThumbnailStorage storage.Storage + ImageSource imgsource.Source } // newOptions initializes the available default options. @@ -48,3 +52,17 @@ func Middleware(val ...func(http.Handler) http.Handler) Option { o.Middleware = val } } + +// ThumbnailStorage provides a function to set the thumbnail storage option. +func ThumbnailStorage(val storage.Storage) Option { + return func(o *Options) { + o.ThumbnailStorage = val + } +} + +// ThumbnailSource provides a function to set the image source option. +func ThumbnailSource(val imgsource.Source) Option { + return func(o *Options) { + o.ImageSource = val + } +} diff --git a/pkg/service/v0/service.go b/pkg/service/v0/service.go index 23208d19f..658a44a37 100644 --- a/pkg/service/v0/service.go +++ b/pkg/service/v0/service.go @@ -9,7 +9,6 @@ import ( "github.com/owncloud/ocis-thumbnails/pkg/thumbnail" "github.com/owncloud/ocis-thumbnails/pkg/thumbnail/imgsource" "github.com/owncloud/ocis-thumbnails/pkg/thumbnail/resolution" - "github.com/owncloud/ocis-thumbnails/pkg/thumbnail/storage" ) type contextKey string @@ -28,14 +27,11 @@ func NewService(opts ...Option) v0proto.ThumbnailServiceHandler { } svc := Thumbnail{ manager: thumbnail.NewSimpleManager( - storage.NewFileSystemStorage( - options.Config.Thumbnail.FileSystemStorage, - logger, - ), + options.ThumbnailStorage, logger, ), resolutions: resolutions, - source: imgsource.NewWebDavSource(options.Config.Thumbnail.WebDavSource), + source: options.ImageSource, logger: logger, } diff --git a/pkg/thumbnail/imgsource/filesystem.go b/pkg/thumbnail/imgsource/filesystem.go new file mode 100644 index 000000000..d84f59555 --- /dev/null +++ b/pkg/thumbnail/imgsource/filesystem.go @@ -0,0 +1,39 @@ +package imgsource + +import ( + "context" + "fmt" + "image" + "os" + "path/filepath" + + "github.com/owncloud/ocis-thumbnails/pkg/config" +) + +// NewFileSystemSource return a new FileSystem instance +func NewFileSystemSource(cfg config.FileSystemSource) FileSystem { + return FileSystem{ + basePath: cfg.BasePath, + } +} + +// FileSystem is an image source using the local file system +type FileSystem struct { + basePath string +} + +// Get retrieves an image from the filesystem. +func (s FileSystem) Get(ctx context.Context, file string) (image.Image, error) { + imgPath := filepath.Join(s.basePath, file) + f, err := os.Open(imgPath) + if err != nil { + return nil, fmt.Errorf("failed to load the file %s from %s error %s", file, imgPath, err.Error()) + } + + img, _, err := image.Decode(f) + if err != nil { + return nil, err + } + + return img, nil +} diff --git a/testdata/oc.png b/testdata/oc.png new file mode 100644 index 0000000000000000000000000000000000000000..034ad0e301197c8a04f6b7ee62d0f61e96bf4ebe GIT binary patch literal 69655 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

RmU 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 Date: Tue, 14 Apr 2020 12:24:24 +0200 Subject: [PATCH 2/2] fix tests --- pkg/proto/v0/thumbnails.pb.micro_test.go | 30 ++++++++++++------------ 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pkg/proto/v0/thumbnails.pb.micro_test.go b/pkg/proto/v0/thumbnails.pb.micro_test.go index e4b3baf76..22dd00571 100644 --- a/pkg/proto/v0/thumbnails.pb.micro_test.go +++ b/pkg/proto/v0/thumbnails.pb.micro_test.go @@ -49,6 +49,21 @@ func init() { service.Server().Start() } +func TestGetThumbnailInvalidImage(t *testing.T) { + req := proto.GetRequest{ + Filepath: "invalid.png", + Filetype: proto.GetRequest_PNG, + Etag: "33a64df551425fcc55e4d42a148795d9f25f89d4", + Height: 32, + Width: 32, + } + client := service.Client() + cl := proto.NewThumbnailService("com.owncloud.api.thumbnails", client) + _, err := cl.GetThumbnail(context.Background(), &req) + + assert.NotNil(t, err) +} + func TestGetThumbnail(t *testing.T) { req := proto.GetRequest{ Filepath: "oc.png", @@ -70,18 +85,3 @@ func TestGetThumbnail(t *testing.T) { assert.Equal(t, "image/png", rsp.GetMimetype()) } - -func TestGetThumbnailInvalidImage(t *testing.T) { - req := proto.GetRequest{ - Filepath: "invalid.png", - Filetype: proto.GetRequest_PNG, - Etag: "33a64df551425fcc55e4d42a148795d9f25f89d4", - Height: 32, - Width: 32, - } - client := service.Client() - cl := proto.NewThumbnailService("com.owncloud.api.thumbnails", client) - _, err := cl.GetThumbnail(context.Background(), &req) - - assert.NotNil(t, err) -}