From ae9f318a3effdb63aca66434a13176c1ac1a96a7 Mon Sep 17 00:00:00 2001 From: Roman Zipp Date: Mon, 17 Jan 2022 17:28:54 +0100 Subject: [PATCH 01/14] Add storage module error handling --- storage/storage.go | 18 +++++++++++------- storage/storage_test.go | 6 ++++-- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/storage/storage.go b/storage/storage.go index 9e898a5..24a34c6 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -8,8 +8,8 @@ import ( ) type IStorageProvider interface { - StoreRaw(bucketName string, objectName string, data []byte) string - StoreExisting(bucketName string, objectName string, existingFilePath string) string + StoreRaw(bucketName string, objectName string, data []byte) (string, error) + StoreExisting(bucketName string, objectName string, existingFilePath string) (string, error) } type FileSystemStorageProvider struct { @@ -17,19 +17,23 @@ type FileSystemStorageProvider struct { basePath string } -func (sp FileSystemStorageProvider) StoreRaw(bucketName string, objectName string, data []byte) string { +func (sp FileSystemStorageProvider) StoreRaw(bucketName string, objectName string, data []byte) (string, error) { directoryPath := filepath.Join(sp.basePath, bucketName) - sp.fileSystem.MkdirAll(directoryPath, os.ModePerm) + if err := sp.fileSystem.MkdirAll(directoryPath, os.ModePerm); err != nil { + return "", err + } filePath := filepath.Join(directoryPath, objectName) - afero.WriteFile(sp.fileSystem, filePath, data, os.ModePerm) + if err := afero.WriteFile(sp.fileSystem, filePath, data, os.ModePerm); err != nil { + return "", err + } - return filePath + return filePath, nil } -func (sp FileSystemStorageProvider) StoreExisting(bucketName string, objectName string, existingFilePath string) string { +func (sp FileSystemStorageProvider) StoreExisting(bucketName string, objectName string, existingFilePath string) (string, error) { bytesRead, _ := afero.ReadFile(sp.fileSystem, existingFilePath) return sp.StoreRaw(bucketName, objectName, bytesRead) diff --git a/storage/storage_test.go b/storage/storage_test.go index d0aa620..278e252 100644 --- a/storage/storage_test.go +++ b/storage/storage_test.go @@ -19,7 +19,8 @@ func TestFileSystemStorageProvider(t *testing.T) { basePath: "/tmp/foo/bar", } - finalPath := provider.StoreRaw("test", "test.bin", dummyData) + finalPath, err := provider.StoreRaw("test", "test.bin", dummyData) + assert.Nil(t, err) assert.Equal(t, "/tmp/foo/bar/test/test.bin", finalPath) exists, _ := afero.Exists(fileSystem, "/tmp/foo/bar/test/test.bin") @@ -39,7 +40,8 @@ func TestFileSystemStorageProvider(t *testing.T) { basePath: "/tmp/foo/bar", } - finalPath := provider.StoreExisting("test", "test.bin", "/tmp/existing.bin") + finalPath, err := provider.StoreExisting("test", "test.bin", "/tmp/existing.bin") + assert.Nil(t, err) assert.Equal(t, "/tmp/foo/bar/test/test.bin", finalPath) exists, _ := afero.Exists(fileSystem, "/tmp/foo/bar/test/test.bin") From 3821f5c7fe3547225e985a3ab08d35f56dfb9893 Mon Sep 17 00:00:00 2001 From: Roman Zipp Date: Mon, 17 Jan 2022 18:34:45 +0100 Subject: [PATCH 02/14] Add storage provider working directory parameter --- main.go | 3 +-- storage/storage.go | 6 ++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index aef8790..0d98519 100644 --- a/main.go +++ b/main.go @@ -42,8 +42,7 @@ func RegisterPipelineRoutes(r *mux.Router, pipelines []pipelines.IPipeline, stor } func main() { - storageProvider := storage.GetFileSystemStorageProvider("test") - + storageProvider := storage.GetFileSystemStorageProvider("test", "") storageProvider.StoreRaw("abc", "def.test", []byte{0x12, 0x10}) pipes := pipelines.LoadPipelines() diff --git a/storage/storage.go b/storage/storage.go index 24a34c6..2f63381 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -39,8 +39,10 @@ func (sp FileSystemStorageProvider) StoreExisting(bucketName string, objectName return sp.StoreRaw(bucketName, objectName, bytesRead) } -func GetFileSystemStorageProvider(basePath string) FileSystemStorageProvider { - wd, _ := os.Getwd() +func GetFileSystemStorageProvider(basePath string, wd string) FileSystemStorageProvider { + if wd == "" { + wd, _ = os.Getwd() + } return FileSystemStorageProvider{ fileSystem: afero.NewBasePathFs(afero.NewOsFs(), filepath.Join(wd, "files")), From 906941e897c22583fb767a600a8544e4db7f97f1 Mon Sep 17 00:00:00 2001 From: Roman Zipp Date: Mon, 17 Jan 2022 18:43:59 +0100 Subject: [PATCH 03/14] Add storage provider error handling on reading existing files --- storage/storage.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/storage/storage.go b/storage/storage.go index 2f63381..f4d6425 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -34,7 +34,10 @@ func (sp FileSystemStorageProvider) StoreRaw(bucketName string, objectName strin } func (sp FileSystemStorageProvider) StoreExisting(bucketName string, objectName string, existingFilePath string) (string, error) { - bytesRead, _ := afero.ReadFile(sp.fileSystem, existingFilePath) + bytesRead, err := afero.ReadFile(sp.fileSystem, existingFilePath) + if err != nil { + return "", err + } return sp.StoreRaw(bucketName, objectName, bytesRead) } From 9692c79a26459df5125e0c55c63415b7f36f1e8f Mon Sep 17 00:00:00 2001 From: Roman Zipp Date: Mon, 17 Jan 2022 19:08:23 +0100 Subject: [PATCH 04/14] Update storage provider StoreExisting method to take absolute file paths --- storage/storage.go | 2 +- storage/storage_test.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/storage/storage.go b/storage/storage.go index f4d6425..f7c7b8a 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -34,7 +34,7 @@ func (sp FileSystemStorageProvider) StoreRaw(bucketName string, objectName strin } func (sp FileSystemStorageProvider) StoreExisting(bucketName string, objectName string, existingFilePath string) (string, error) { - bytesRead, err := afero.ReadFile(sp.fileSystem, existingFilePath) + bytesRead, err := os.ReadFile(existingFilePath) if err != nil { return "", err } diff --git a/storage/storage_test.go b/storage/storage_test.go index 278e252..9e177fb 100644 --- a/storage/storage_test.go +++ b/storage/storage_test.go @@ -33,7 +33,8 @@ func TestFileSystemStorageProvider(t *testing.T) { t.Run("storeExisting method stores files in filesystem", func(t *testing.T) { fileSystem := afero.NewMemMapFs() - afero.WriteFile(fileSystem, "/tmp/existing.bin", dummyData, os.ModePerm) + err := os.WriteFile("/tmp/existing.bin", dummyData, os.ModePerm) + assert.Nil(t, err) provider := FileSystemStorageProvider{ fileSystem: fileSystem, From 6c87a1833b55828768ee521d7711391fb23704cc Mon Sep 17 00:00:00 2001 From: Roman Zipp Date: Mon, 17 Jan 2022 19:23:35 +0100 Subject: [PATCH 05/14] Add storage provider GetPath method --- storage/storage.go | 11 ++++++++++- storage/storage_test.go | 14 ++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/storage/storage.go b/storage/storage.go index f7c7b8a..313ba26 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -7,14 +7,18 @@ import ( "github.com/spf13/afero" ) +const StorageFolderName = "files" + type IStorageProvider interface { StoreRaw(bucketName string, objectName string, data []byte) (string, error) StoreExisting(bucketName string, objectName string, existingFilePath string) (string, error) + GetPath(bucketName string, objectName string) string } type FileSystemStorageProvider struct { fileSystem afero.Fs basePath string + wd string } func (sp FileSystemStorageProvider) StoreRaw(bucketName string, objectName string, data []byte) (string, error) { @@ -42,14 +46,19 @@ func (sp FileSystemStorageProvider) StoreExisting(bucketName string, objectName return sp.StoreRaw(bucketName, objectName, bytesRead) } +func (sp FileSystemStorageProvider) GetPath(bucketName string, objectName string) string { + return filepath.Join(sp.wd, StorageFolderName, sp.basePath, bucketName, objectName) +} + func GetFileSystemStorageProvider(basePath string, wd string) FileSystemStorageProvider { if wd == "" { wd, _ = os.Getwd() } return FileSystemStorageProvider{ - fileSystem: afero.NewBasePathFs(afero.NewOsFs(), filepath.Join(wd, "files")), + fileSystem: afero.NewBasePathFs(afero.NewOsFs(), filepath.Join(wd, StorageFolderName)), basePath: basePath, + wd: wd, } } diff --git a/storage/storage_test.go b/storage/storage_test.go index 9e177fb..6b6a025 100644 --- a/storage/storage_test.go +++ b/storage/storage_test.go @@ -51,4 +51,18 @@ func TestFileSystemStorageProvider(t *testing.T) { content, _ := afero.ReadFile(fileSystem, "/tmp/foo/bar/test/test.bin") assert.Equal(t, dummyData, content) }) + + t.Run("getPath method returns correct path", func(t *testing.T) { + fileSystem := afero.NewMemMapFs() + + provider := FileSystemStorageProvider{ + fileSystem: fileSystem, + basePath: "/tmp/foo/bar", + } + + _, err := provider.StoreRaw("test", "test.bin", dummyData) + assert.Nil(t, err) + + assert.Equal(t, "files/tmp/foo/bar/test/test.bin", provider.GetPath("test", "test.bin")) + }) } From 287880e72b72a00d2a30a8595c55d43ecc7c0a6d Mon Sep 17 00:00:00 2001 From: Roman Zipp Date: Mon, 17 Jan 2022 19:32:26 +0100 Subject: [PATCH 06/14] Add resizing images --- go.mod | 4 ++- go.sum | 8 +++++- pipelines/executable_step.go | 16 ++++++++---- pipelines/executable_step_test.go | 22 ++++++++++++++++ pipelines/pipeline.go | 41 +++++++++++++++++++++++++++++ pipelines/pipeline_test.go | 42 ++++++++++++++++++++++++++++++ tests/files/900x900.jpg | Bin 0 -> 130891 bytes 7 files changed, 126 insertions(+), 7 deletions(-) create mode 100644 tests/files/900x900.jpg diff --git a/go.mod b/go.mod index dc2313f..088e354 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.17 require ( github.com/bxcodec/faker/v3 v3.7.0 + github.com/disintegration/imaging v1.6.2 github.com/gorilla/mux v1.8.0 github.com/spf13/afero v1.8.0 github.com/stretchr/testify v1.7.0 @@ -14,7 +15,8 @@ require ( github.com/kr/pretty v0.3.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.8.1-0.20211023094830-115ce09fd6b4 // indirect - golang.org/x/text v0.3.4 // indirect + golang.org/x/image v0.0.0-20211028202545-6944b10bf410 // indirect + golang.org/x/text v0.3.6 // indirect gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect ) diff --git a/go.sum b/go.sum index c274d75..0d23e14 100644 --- a/go.sum +++ b/go.sum @@ -51,6 +51,8 @@ github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnht github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= +github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -177,6 +179,9 @@ golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EH golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410 h1:hTftEOvwiOq2+O8k2D5/Q7COC7k5Qcrgc2TFURJYnvQ= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -288,8 +293,9 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/pipelines/executable_step.go b/pipelines/executable_step.go index 371f0b9..2661011 100644 --- a/pipelines/executable_step.go +++ b/pipelines/executable_step.go @@ -1,7 +1,12 @@ package pipelines +import ( + "github.com/disintegration/imaging" + "image" +) + type IExecutableStep interface { - Execute() + Execute(src image.Image) (image.Image, error) } // Resize image @@ -15,8 +20,9 @@ type ResizeImageStep struct { } `json:"options"` } -func (s ResizeImageStep) Execute() { - // TODO +func (s ResizeImageStep) Execute(src image.Image) (image.Image, error) { + src = imaging.Resize(src, s.Options.Width, s.Options.Height, imaging.Linear) + return src, nil } // Compress image @@ -28,6 +34,6 @@ type CompressImageStep struct { } `json:"options"` } -func (s CompressImageStep) Execute() { - // TODO +func (s CompressImageStep) Execute(src image.Image) (image.Image, error) { + return src, nil } diff --git a/pipelines/executable_step_test.go b/pipelines/executable_step_test.go index 7719951..9e91c2c 100644 --- a/pipelines/executable_step_test.go +++ b/pipelines/executable_step_test.go @@ -78,3 +78,25 @@ func TestDeserializeMissingOptions(t *testing.T) { assert.EqualError(t, err, "unexpected end of JSON input") }) } + +func TestLoadingImage(t *testing.T) { + const Payload string = `{ + "name": "example pipeline", + "type": 0, + "removeMetadata": false, + "steps": [ + { + "name": "resize image", + "type": 0 + } + ] + }` + + t.Run("Loading image from filesystem to pipeline is successful", func(t *testing.T) { + values := DeserializePipelines([][]byte{[]byte(Payload)}) + + _, err := values[0].GetSteps()[0].GetExecutable() + + assert.EqualError(t, err, "unexpected end of JSON input") + }) +} diff --git a/pipelines/pipeline.go b/pipelines/pipeline.go index 2e243e3..4911fa7 100644 --- a/pipelines/pipeline.go +++ b/pipelines/pipeline.go @@ -1,8 +1,12 @@ package pipelines import ( + "bytes" "encoding/json" + "errors" "fmt" + "github.com/disintegration/imaging" + "github.com/geplauder/lithium/storage" "io/fs" "log" "os" @@ -23,6 +27,7 @@ type IPipeline interface { GetSlug() string GetType() PipelineType GetSteps() []Step + Run(string, string, storage.IStorageProvider) (string, error) } type Pipeline struct { @@ -33,6 +38,42 @@ type Pipeline struct { Steps []Step `json:"steps" faker:"-"` } +func (p Pipeline) Run(srcPath, bucketName string, storageProvider storage.IStorageProvider) (string, error) { + fmt.Println("path: ", storageProvider.GetPath(bucketName, srcPath)) + + src, err := imaging.Open(storageProvider.GetPath(bucketName, srcPath)) + if err != nil { + return "", errors.New(fmt.Sprintf("error opening file for processing: %s", err)) + } + + for _, step := range p.GetSteps() { + runner, err := step.GetExecutable() + if err != nil { + return "", err + } + + src, err = runner.Execute(src) + if err != nil { + return "", err + } + } + + // encode image to io buffer + buffer := new(bytes.Buffer) + if err := imaging.Encode(buffer, src, imaging.JPEG); err != nil { + return "", err + } + + const fileName = "output.jpg" // TODO make variable + + _, err = storageProvider.StoreRaw(bucketName, fileName, buffer.Bytes()) + if err != nil { + return "", err + } + + return fileName, nil +} + func (p Pipeline) GetName() string { return p.Name } diff --git a/pipelines/pipeline_test.go b/pipelines/pipeline_test.go index abd03c4..9f7642e 100644 --- a/pipelines/pipeline_test.go +++ b/pipelines/pipeline_test.go @@ -1,6 +1,9 @@ package pipelines import ( + "github.com/geplauder/lithium/storage" + "os" + "path/filepath" "testing" "github.com/stretchr/testify/assert" @@ -57,3 +60,42 @@ func TestVideoPipelineDeserialization(t *testing.T) { assert.Equal(t, Video, values[0].GetType()) }) } + +func TestResizeImage(t *testing.T) { + const Payload string = `{ + "name": "example pipeline", + "type": 1, + "removeMetadata": false, + "steps": [ + { + "name": "resize image", + "type": 0, + "options": { + "width": 1280, + "height": 720, + "upscale": false + } + } + ] + }` + const Bucket string = "pipeline_test_01" + + t.Run("Image resizing is successful", func(t *testing.T) { + wd, _ := os.Getwd() + pipe := DeserializePipelines([][]byte{[]byte(Payload)})[0] + + storageProvider := storage.GetFileSystemStorageProvider("test", "..") + + _, err := storageProvider.StoreExisting(Bucket, "source.jpg", filepath.Join(wd, "../tests/files/900x900.jpg")) + assert.Nil(t, err, "Test file should be readable") + assert.FileExists(t, storageProvider.GetPath(Bucket, "source.jpg")) + + dest, err := pipe.Run("source.jpg", Bucket, storageProvider) + assert.Nil(t, err) + assert.FileExists(t, storageProvider.GetPath(Bucket, dest)) + + // clean up + os.Remove(storageProvider.GetPath(Bucket, "source.jpg")) + os.Remove(storageProvider.GetPath(Bucket, dest)) + }) +} diff --git a/tests/files/900x900.jpg b/tests/files/900x900.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d1bbff412868fa0283698391809d6da19615e28e GIT binary patch literal 130891 zcmeFYbyytFvo|{IE*_jpAYHwhITeSJNp1q9rE_^oU`tnK)1Jlq5Vtvm&U_yq+3S%pAPD;pO(U#PX6gOj@) z?8o!hFsPHQ9PGZBwxG7BvYn$7BG}u`AXvxHCfLPB$`+;|50wp+4s`Q$v-7or2D-Vr z`$z}M!TvEWjiLXt1z^yBM0{Q3U?$pnP-PEqJE$1H7{4G4qwQ^LFO5=B`%hiWl^pCp zoeT&F;13Yt_waTQ5R#IT5)c#?5EkacNbvatx%*lL^11u4{L6xhosW&Tlc%qfhdcDI zMJsC$KVLZ*rsaQJ@^tj@_3&}@@cb|1|2G8wtNI@t{-uQJ)&E-jUx57&L2d2-v#6Wf zUljiF#m86GALH8pX(W6MgFNj7P~As{VHFzAP~4e|agb?BVL+t?glJCkGSx zpM0dUvYxkxy^|}Z!Uv_U1VySUiwjAKi}MNd3;k{1QyQb?WFMqr<%~-Q`CpS+9{TU{Zv_60 zz`qgrHv<1g;NJ-R{||xx4u|dBF)?reCfL3G4)FdHl>Ch)p(6Z(fTR*q8^ZQad`-H* zkhGEtv_ba6@$8dK)^{@VIqiu~`HgtnMa833^UJ`~8? zczXL{Xat7V3h?#(OJ`wdN*hNjTMS)?p?SSA4r1tqzkKWep!fdL4*x-4{iVGPQOcOU zkz#15!~dYI{|9a3=PzRI%D1Zc1 z0cAiO5CWtyM{$4;5C-@$SHS;9|F3O&KnL)^=-Ob8o#Rus`13{=$qgZYBU+r`_KEDZjnFt^fe= z8UXaW|F^zJ830J0V)$wQ&0{SE0Fr0`=ot&bjJb!&5Ea$x79!GfH6mqJ?4?^ zxE272OaXvm1^@`m{sS{i-QRkkav1;&Loh=%1pxU40KkrsCo#YMfWZg{f{lX>!NI}C z!NtYFBOoOpz{e+`Bqq5-N=->aLrqCVMaRI#M0byco{9>}3uR&F;Ns?@W#SX$;}m4$ zL{?7e> z70e|B8^FQER4S4JSYR+11c6{fKv)ng5H1!*6U;0GAy?G5!iIVMq=-l_#}RHFn59(O zJYqpv-(?l?##N3q$f#&z^BKgLpu^byr~J!2=Eng7WAMP#v65kGFyMi}z`tC;A_FlC zkt>4rtsoR$FyV;XRp1WzpGL_51>mHVSe@l_&r2-P?PnEf7Kq)89Zm4h_H4_3`K-cn zO9m}8e@Hd;&(}xk^vt-M?_7h~AalJq9znyER4kjP6HlP?`-2JM!{dTc3>}1HWGb|}k zxfDZCn3@xyPO4_Gl1RB`vOyTVO?!b|uvE1C^11&DMQXB7S5T)vhj5WwAj@HWDZOLO zrw^HGrRdaI-gc+Q>qJ?T@~a6>`a-B{`P{m6jV+ww+(#ubrQQbCKiHGl=<^vUw*SfMA0}h2i&!(ZinMUhFvJDkSukI7u7ovs@#~LV-+1)L>g?ug4X} zJ<{+^G-xY$-F{AyReC0rQqZkQMKOI*>(kac_Z0i?ezJy-Gcg_-)=CveKSAd1o9D=e z6b#Bg8RN!jo5fcXO+1xn%tB z#yV_+?d$NPzz6UQ!%kFJnWrM6v((Ix{ar_YQKd;o zX8jAWw`W|ZeT?>J`+W!hZKXmlnoSO>6&-k5P3yaw%{Oh?TV_RyzwV0Ueg6`f@-8mi zaPOXlx;a`(3Ewd)tE?Y34(BZaDG>>c>#M!#Ute@=sxGG!9`9Nk|U#pdl>kb_2i5B2+rljcP3*di? zWXKg_lP1Nbxt;@ILCN8``E3dQWFxnLA!|s;q-%&}lgpQ4lTyq@5#8 z0u1eb(A-c88CX>LaK;)yduUPvH)*`|(;MtZU%UA~c1Z~duC~tURu_%2*V2+EmK&^j zmMAvmBM=t#;%C~I!!_$QqSc4XCvHPSF>(D?|Vuv{QCrttoc{7~N>Q@(%ykQ?ddsawmX?B+DK zj_%ksEb2ukxeR>4R|8SDvPP3q`*7*-@3R5S8-=VrvfAmWFwTv7maSDgE+$GpJe7rJ z3f#kI*v4U1=Gu|(l9k0MCOUN{?>1*Qi|RC62AHBLPoQQ^v^%lPV^O_e)LhqLmQCBa*KsEZ$Y*CWT27@}C$Pklk59>asoiCO3>DOV ziE2eR3nIb7Ph9WwdWsuJ`hSIpN2<{3tL<3(MziX!FhlN`HDvH&H&q-yo=8JboT)0N z^ zWSy!#S&vjV?mjDrUv-xgr}M)AlDNl$iNS-@5xHA8Bz5yWa#>duztfD46GuZ%tZVY5 zV zt0-znhQmVk0}tn+Z)O*StImdpq4#;vMZLd;M!S`~IRy0a$Wy4l5(vgp3YiY2=d z9=)}F;j@sD8SkdY?QRtdcU8gDBDdPA6Xb9j(60KCz^|B2#`rBdd^0~P|B^?&-c1w# zB>l2c2k#Yr&Wa}4i}!bY@EkClc-7^npH_-IUXME!el9_Pa68X-ZJJsAvPpor}CVO(=RYe9Ip73 z(A}VZuqCMx&R{kH{g7RV)LBS*&4mj0Z!*WjaldJz(*YVFTxmTX3~SAEnK ziYcbSF(jTGFw}Id-ysc^=9@?kNqIYAAcNjg)AGeePqQ2O_ilXt=v}Lj(nz4X2)lzN z+16P&Qdu$I`LwvZM5$nVWY4z>zbL!jf<>wDnRl_1rSYCo{U@fL3uf%ah?LN~jheq( znibb&xnQAs<`y{C>*VR|dc}glbuwQ2c9iki&YrU2Sy5qe2nlgLwR!q%R-X`N9EIpA zGAJXdl8QBDxS1sj0m8>xJuHsd$5ycg#p6o&Ijn)Q8&ITh_1EB=gQQz6f;9r!Ve2)9 zk*a@exvXKkU6evXV4_Tc1f zRCfXIKg^W%S85pcNc$y-Sf?h`!X_c;&YIWx7i%&zVQ0Ng}>mu|MDZs zRF5#yiuUVwK>(PeE*pCy_7j2!A*YvjlUinj4Cwx~HkFA%mRN#$Y@1XO$ z(t#0N37@OlVMV6@;Xd(oU5E6uuAa5M%c3DZ?kBft zYq6vsbj1h06s8#R^4Jado`FvYOv45Eynykd)97XiFFqQ+crx$MOD<;*$Qvs0>(F!f zJo?ylFP396fZUA>nxPw`6a6|BE5^HO^MYL%4Ln8 z;TaPn<26WTwBGf3#mKqv;PHfn4aFdI-sDFd2hr|h)ry0U%o^cWPVgUB9qXe0VtSdX9BU3REA%*=DVr-PUzQR zSv;$EMbwUC?<5!G^E(+R47*)!FzvxdkBxOFlkWC+SaHL?YLN#fLS*{-UHc zp1vm~W^X=Qm{gh8)-tP8)r%(bS(!KrW%JUfRmZu+dr_zCDT!prCn#QkDx;_`8$mvU z8juvdOajE$Brcnml*K+VkZ{Whx-mjh1;ZpoA>p$9cvQf{S?qp$0)to1P}n($l8k{e za?^zpDhZb|hONmv51Sna!nvm82qNrtaY9k>O&hGSS$wkiKaD!k5&ajeP{14u^OS`> z73C7Pr|2mI!$g=lwA6`|R>H|@>ANxxID&?ResZ0O+@fM*`O_-leT5dhL9Ru#m)HzM z+yWIB0zg#AI&hB0U0cd{EYC(ZhCQtiIY`!Fh-dcA}iRzFzRAWWc>P!(Q7Q1kWtpjS?FD* zMGf5_T;zved(VaDxnEK{HTHyGm(TlNj^}ObG(I57T0^8}REihYRRy>MYXjf1DRg^$ z!84yeKWX)=bw+lIHu!A9IKO zv$d2gYpQD(MiZN`5V z8$LhK(icB4T=+O!m|ekhI=3%A*;hR;mbBd1sc(jT6PMWK&o46BYUKf}vhn;DeIoUA zM^#p%`YvmTuSo-s!Gh?E>30P0@;X*$EH7D*CtnX0_!GU`+Qu@Z4m<0tHo{d04zg4D zSV2+*k`~I{%WdNge&&D}y?=+FvQ$&CT66gsYq*Y*jp?QR!6RjhI)PAbUH9S~QkLK@ zv7@Hs2c^SdSWkClwkTpjol?`~KO0sp6ylSSp-SjM_WnQF&k7}C9Df_por)dS8!Zwl z?kT-en+)-|vv8$EH;dIPgh%A;;Zh+-sm)(9cA`ju4nzqWuvTMFF&HYh(J6#cg3K6O z%HsAh|96ZAtmpdr&4M0|2d$1Hbj>mwOm*1>LU)J@Y4MhF=!WLBYH>(xo>&`yHYQ3c z8d*%>6{}%a@Ev**u5OB;C0DKO)$m`5#LkYNrMZm30#jdSRxPb@)_6SbGR%|`$0MHl zoctii}Kex)ko&VO&d|)Ay%*>QZf6D@}%iYjJ{gv9Na)Y8VxXp!fp?hVj^Ek5P)`Bs#&321Rdd%wZFVJZiTVrJQVZ$)1mTR^s`&ZS(y{ z9r-{In{n3gYa%=13a^!|rb>e{kfV1I~Kze4amA-Ob~yKlMs7Dze-2Ap_IbLZ6Tllux7aaVA21E~C5y|lvV8}aqCA2YBTUSsRrJL2`yLG=d zRv~lxZE|jR@zE#3x(S`88N&RFvUi)`o))>3a{f|{EEc9S+aaH)=kJ-;6y<)T25hg) z4-`J+B%TNBI82Q0&W2ZR`Z@QE6oTU@qzD+A^qTnX1td=4rq!l%ik|tyUJ8B;7M1sX z(2RC3nT?dEl+3_511)V%5%a{|lUyntW}vb8kA_~@U6{$O-4+g=+3-|3(IFl*!TS|a zdYMA$%JyAQS~Zngk8i4l^`0*ZJQSU#mEW?-oyDz#o3$z#W5ZA-yO9Tm30LGA@jHr# zON|*?JxR!e0Sb0j^F&UaFG=u6YPzbz=|jj>vT3z{r$7iva$m&_yGggrKy_>r8;P5Q z>v`!BUt+-dCgdAhh!)0%K@0RCUVLdEmwvPH9Z`@7Pb`mBg3eRB%^LQfy;lV_ZLf~$ zw?vM!9z7A5U0`Tlb6E7v=GR|DQs4wyu-OG?zJX@?epQ$1?}!D1v-b3#8NSF^a`$3! zd^sI9-lcjp^LpsOSyNTr&E3N9ZSGE~PUcam=1@mP_3C^NpkA>Pgx()TbZo-qnq1H} z6M%sx6DVr`8z0Eql3mMA^h!YMSa%4w*KE6Pq67;*$Cfqx9qNCgv*fy*-K>5KXf5;@ z`j{zX=Ye1FU%B^sPt&csDHDmiJ+H75Z|NG`!ukL?npJhA#(5jZ5UKaJ*#q-Nf`Xru znH_?KkKMQ3ms3V_VTEXTofTo3VE9$V?3pa@tYIVhSM9zg$MULAvU!vBs$HUY+d|Md zK(~1_>-VDLD$CZQY$6H|aaK0RFXa&{92U<#YK;KVt+i4sgyQTh!9eF{CZSTpJh|a? zD&t)Dcs;fK*0xCH+A7W}NwOO@Tx0P>%Jvk#L@suA>j@-L?1L~3{#95I$`hoTmD!zt z$?6O}Zqnh?Ur^a-s#UpKDDJLMvLUaah!96DP?MABE+QZf+{30lFUC>e_C=sF1}b?~ z8A%?Fg#6)FmFetN@_Bj53Bqs92(AZbX!kM0W&*g_s)Ax4B2nCg2x1}GL4%^rU6)D^ zNFIv25*A?bf;>!PSUbX#Xx+OyG0Wu&%};Ej8D5f6Rc+q(5^a?PnUreBrp^%?OX)N} zKobxFq(fG0p1Ce{l9Syjq?QQ~h$TBS7w3O7lpYO-)*%ajF-af&z^$(mV^9GjGECGVpYMK3<@4NO^g!PC)6UI(kC)vg>*R9K+oz%9 z>0*AgdkCiwC6n`b^MS2%a~7H+;89>QZ)#3u(zPs`s(QE2i2m#X&e1YTkvH}ErS>Ai za#az>Kdf#g!Si5crX_wMcNO4OLV6u(*7h=?bE3OOY#GSB zJlXnY206t~)^m6f;*v`9YGp}5h2nCC%|d;7d|1QgQGP_QuBynrdzB?hBgqqu_w{in z6`8$uMtY5$mqCD!);&_!`#g8GiQpu^7+Q#S^%mOr4HkPho)E49#39$l)n<*C61hum z;<@hB>4R%c+urd{h7jrbgu#N>I-8nqGW1CE-W#o>52=v-e2qBJhs&q;v!AwE(S0KQ zZHqIq7-c%WXxy;gwV`ZAm_9@E8+Yp zl5_J11s*-RWc{ecmoii8?!xGduCWgM4_5seL>gUj;0k=UQSYiq#cv>Z0Al*LBH>SX zUqbSud%?U*&V`@Dt*I#L?RSZ#*|8@AsG`<qn5}Q8X5R;J+QEbg*46B@lAA$yaDz7YPOGh8Z!8}U(Qf)m<>21EB`w;a{U%? zAPr^1uQOXhS+rAd4;P2m+jLb`b$C{N&(Rxpqln@4UsEUG|3Dw0q(aCg8PSV`gy0X8 zlY&&Et)RHGI9TsdW#T0Viv(e=F;)(>I?|j}=h#rDyl++1X4C{ge!9~s68}d~8#z8b zZ8taElN=axH%y1LPmMZo>OfySV5?w;<>(A}T6$L{4{C)g4yN0^v*IOZ=szg0uQr{O z_m6xZ1!iJ%lF_XAb>$HJOhKmeQ_`F2-zC-0V_*_$mg6T}+r%#1&Hf8)$u{QWS2Z)i zd`TkO_5Sf29W+vz!kvjMA*zklMuW`?T(FIz%86+=d*f$jsit!sx>ZkAo9zk zwax+!A{lUDB$^WOsAzDIeIz~e#!m728LdfcFWNAM&j!pxlnore2s=1qc&#&UwBY#Q zY$?}mKbE+$bfnj>S=~SvH7IpR7EJxx6#aw94K08j9{<_Ouc%1M^HJ%@74xcG5MZ_i zlE&UI>XNjbyRvlQPyr;SGXHK)%`t^%E_#{vFt4>$me+s zqKlxUiX6`~Fa6P3cmp5l0`NoR3A?9$Vx`lfNOwS?1U)lm!JuQU|ILX3($3-#K$0ed z`PU&2TW%Jfp-ioWL^2mO2}7lvVB(oY)30~5Hnd6ib0QU6>Dl0YNjiwQu@&LF0dpd~ z<>jqZeGObwo@;oZbt_wHE!;FJU&mQXbRwmnKim#&7V$s3f z(G1AuU1B*cpt|~ir>A#DU5N~x;OFwu)&7hpmH$dwTcgcg1&_4%qgW4>VMr17=e$Vy zui{kQu`T1w?Q3{hh^kYTnHj zwe0HGg@js@FF$_s`V>IiSvcC(HV7-L>%I_VuTunhUFY2JexUwPZKr={)%1ITy`es*NzuCatqLAKXPiGW>rxFyE){(Z_nsc;k!^U=mKt?<1%GJ{7NT)J#paQAf_@ab|X`(5knusFE9efreazM@Ozgcp_4GKHfc(TxT|AqV=H+k~3j z!Cm?;X%E#4NsvQ>amx8(jpJkEtPu zm_W*pEgLeGpQBB*tDw&l;aRwWIE8CU{ya{@kwS3WJ!=UR(D`=ZG^rAuDS8UUlp_;r*Jh z%&%?+dL3V-5{lM4o1*gX za&1=GAItq(vFll!aWQM0Px~bD!AE=armWE@e+5)ocYxlNxxuAj$$8#4mEgZRw^WNB zWwqZcq;h$CBl@$Qi7r!TV>9J`m~5Zt4(rPo@|B7x7qQxapGV7Wdom8hFwx$ z7PF#C6ay^%U<=NXo$SEnj_FX*65e?}p65sW5?0yc*MrXO(<2HbLDohUXQy^^Q zXH!X%=Hsmw)mHpsbl-;}z*Vp&A~fbLJ1NBMTRqO*BTahUbJ1hlL9Lj@Al?iuAQXPO zN!^|h@mZQ4`{K2nu?Hp5bf|WCe¾ufk>(lawNOWfoXMGX5=v18Sx-u6?0$jP$4 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 Date: Thu, 20 Jan 2022 17:32:53 +0100 Subject: [PATCH 07/14] Move jpeg quality setting from pipeline step to new output options --- config/example.json | 13 ++++------ pipelines/executable_step.go | 13 ---------- pipelines/executable_step_test.go | 25 ------------------ pipelines/pipeline.go | 13 +++++++++- pipelines/pipeline_test.go | 42 +++++++++++++++++++++++++++++++ pipelines/step.go | 8 ------ 6 files changed, 59 insertions(+), 55 deletions(-) diff --git a/config/example.json b/config/example.json index 072d863..03a5161 100644 --- a/config/example.json +++ b/config/example.json @@ -12,13 +12,10 @@ "height": 720, "upscale": false } - }, - { - "name": "compress image", - "type": 1, - "options": { - "quality": 80 - } } - ] + ], + "output": { + "format": 0, + "quality": 90 + } } diff --git a/pipelines/executable_step.go b/pipelines/executable_step.go index 2661011..dd2da7d 100644 --- a/pipelines/executable_step.go +++ b/pipelines/executable_step.go @@ -24,16 +24,3 @@ func (s ResizeImageStep) Execute(src image.Image) (image.Image, error) { src = imaging.Resize(src, s.Options.Width, s.Options.Height, imaging.Linear) return src, nil } - -// Compress image - -type CompressImageStep struct { - Step - Options struct { - Quality int `json:"quality"` - } `json:"options"` -} - -func (s CompressImageStep) Execute(src image.Image) (image.Image, error) { - return src, nil -} diff --git a/pipelines/executable_step_test.go b/pipelines/executable_step_test.go index 9e91c2c..4be7ae8 100644 --- a/pipelines/executable_step_test.go +++ b/pipelines/executable_step_test.go @@ -32,31 +32,6 @@ func TestDeserializeOptionsResizeImage(t *testing.T) { }) } -func TestDeserializeOptionsCompressImage(t *testing.T) { - const Payload string = `{ - "name": "example pipeline", - "type": 0, - "removeMetadata": false, - "steps": [ - { - "name": "compress image", - "type": 1, - "options": { - "quality": 80 - } - } - ] - }` - - t.Run("Image pipeline deserialization is successful", func(t *testing.T) { - values := DeserializePipelines([][]byte{[]byte(Payload)}) - - _, err := values[0].GetSteps()[0].GetExecutable() - - assert.Equal(t, nil, err) - }) -} - func TestDeserializeMissingOptions(t *testing.T) { const Payload string = `{ "name": "example pipeline", diff --git a/pipelines/pipeline.go b/pipelines/pipeline.go index 4911fa7..e9a783a 100644 --- a/pipelines/pipeline.go +++ b/pipelines/pipeline.go @@ -36,6 +36,10 @@ type Pipeline struct { Type PipelineType `json:"type" faker:"-"` RemoveMetadata bool `json:"remove_metadata" faker:"-"` Steps []Step `json:"steps" faker:"-"` + Output struct { + Format int `json:"format"` + Quality int `json:"quality"` + } `json:"output" faker:"-"` } func (p Pipeline) Run(srcPath, bucketName string, storageProvider storage.IStorageProvider) (string, error) { @@ -58,9 +62,16 @@ func (p Pipeline) Run(srcPath, bucketName string, storageProvider storage.IStora } } + format := imaging.Format(p.Output.Format) + var options []imaging.EncodeOption + + if p.Output.Quality != 0 { + options = append(options, imaging.JPEGQuality(p.Output.Quality)) + } + // encode image to io buffer buffer := new(bytes.Buffer) - if err := imaging.Encode(buffer, src, imaging.JPEG); err != nil { + if err := imaging.Encode(buffer, src, format, options...); err != nil { return "", err } diff --git a/pipelines/pipeline_test.go b/pipelines/pipeline_test.go index 9f7642e..87f00fc 100644 --- a/pipelines/pipeline_test.go +++ b/pipelines/pipeline_test.go @@ -99,3 +99,45 @@ func TestResizeImage(t *testing.T) { os.Remove(storageProvider.GetPath(Bucket, dest)) }) } + +func TestEncodeImageWithJpegQuality(t *testing.T) { + const Payload string = `{ + "name": "example pipeline", + "type": 1, + "removeMetadata": false, + "steps": [ + { + "name": "resize image", + "type": 0, + "options": { + "width": 1280, + "height": 720, + "upscale": false + } + } + ], + "output": { + "quality": 50 + } + }` + const Bucket string = "pipeline_test_02" + + t.Run("Image resizing is successful", func(t *testing.T) { + wd, _ := os.Getwd() + pipe := DeserializePipelines([][]byte{[]byte(Payload)})[0] + + storageProvider := storage.GetFileSystemStorageProvider("test", "..") + + _, err := storageProvider.StoreExisting(Bucket, "source.jpg", filepath.Join(wd, "../tests/files/900x900.jpg")) + assert.Nil(t, err, "Test file should be readable") + assert.FileExists(t, storageProvider.GetPath(Bucket, "source.jpg")) + + dest, err := pipe.Run("source.jpg", Bucket, storageProvider) + assert.Nil(t, err) + assert.FileExists(t, storageProvider.GetPath(Bucket, dest)) + + // clean up + os.Remove(storageProvider.GetPath(Bucket, "source.jpg")) + os.Remove(storageProvider.GetPath(Bucket, dest)) + }) +} diff --git a/pipelines/step.go b/pipelines/step.go index aa80da3..6e2b0f1 100644 --- a/pipelines/step.go +++ b/pipelines/step.go @@ -9,7 +9,6 @@ type StepType int const ( TypeResizeImageStep StepType = iota - TypeCompressImageStep ) type Step struct { @@ -26,13 +25,6 @@ func (s Step) GetExecutable() (IExecutableStep, error) { return nil, err } return step, nil - - case TypeCompressImageStep: - step := CompressImageStep{} - if err := json.Unmarshal(s.Options, &step.Options); err != nil { - return nil, err - } - return step, nil } return nil, errors.New("invalid type") From 565e4a3bad25d16dad31f218d4f8b18181aa1a47 Mon Sep 17 00:00:00 2001 From: Roman Zipp Date: Thu, 20 Jan 2022 17:38:24 +0100 Subject: [PATCH 08/14] Add rotating image step --- config/example.json | 7 ++++++ pipelines/executable_step.go | 14 +++++++++++ pipelines/pipeline_test.go | 45 +++++++++++++++++++++++++++++++++++- pipelines/step.go | 9 ++++++++ 4 files changed, 74 insertions(+), 1 deletion(-) diff --git a/config/example.json b/config/example.json index 03a5161..d688687 100644 --- a/config/example.json +++ b/config/example.json @@ -12,6 +12,13 @@ "height": 720, "upscale": false } + }, + { + "name": "rotate image", + "type": 0, + "options": { + "angle": 90.0 + } } ], "output": { diff --git a/pipelines/executable_step.go b/pipelines/executable_step.go index dd2da7d..878f8c2 100644 --- a/pipelines/executable_step.go +++ b/pipelines/executable_step.go @@ -24,3 +24,17 @@ func (s ResizeImageStep) Execute(src image.Image) (image.Image, error) { src = imaging.Resize(src, s.Options.Width, s.Options.Height, imaging.Linear) return src, nil } + +// Rotate image + +type RotateImageStep struct { + Step + Options struct { + Angle float64 `json:"angle"` + } `json:"options"` +} + +func (s RotateImageStep) Execute(src image.Image) (image.Image, error) { + src = imaging.Rotate(src, s.Options.Angle, image.Black) + return src, nil +} diff --git a/pipelines/pipeline_test.go b/pipelines/pipeline_test.go index 87f00fc..919f2d6 100644 --- a/pipelines/pipeline_test.go +++ b/pipelines/pipeline_test.go @@ -9,6 +9,8 @@ import ( "github.com/stretchr/testify/assert" ) +// pipeline deserialization + func TestImagePipelineDeserialization(t *testing.T) { const Payload string = `{ "name": "example pipeline", @@ -61,6 +63,8 @@ func TestVideoPipelineDeserialization(t *testing.T) { }) } +// image pipeline steps + func TestResizeImage(t *testing.T) { const Payload string = `{ "name": "example pipeline", @@ -100,6 +104,45 @@ func TestResizeImage(t *testing.T) { }) } +func TestRotateImage(t *testing.T) { + const Payload string = `{ + "name": "example pipeline", + "type": 1, + "removeMetadata": false, + "steps": [ + { + "name": "rotate image", + "type": 1, + "options": { + "angle": 90.0 + } + } + ] + }` + const Bucket string = "pipeline_test_03" + + t.Run("Image rotating is successful", func(t *testing.T) { + wd, _ := os.Getwd() + pipe := DeserializePipelines([][]byte{[]byte(Payload)})[0] + + storageProvider := storage.GetFileSystemStorageProvider("test", "..") + + _, err := storageProvider.StoreExisting(Bucket, "source.jpg", filepath.Join(wd, "../tests/files/900x900.jpg")) + assert.Nil(t, err, "Test file should be readable") + assert.FileExists(t, storageProvider.GetPath(Bucket, "source.jpg")) + + dest, err := pipe.Run("source.jpg", Bucket, storageProvider) + assert.Nil(t, err) + assert.FileExists(t, storageProvider.GetPath(Bucket, dest)) + + // clean up + os.Remove(storageProvider.GetPath(Bucket, "source.jpg")) + os.Remove(storageProvider.GetPath(Bucket, dest)) + }) +} + +// output options + func TestEncodeImageWithJpegQuality(t *testing.T) { const Payload string = `{ "name": "example pipeline", @@ -122,7 +165,7 @@ func TestEncodeImageWithJpegQuality(t *testing.T) { }` const Bucket string = "pipeline_test_02" - t.Run("Image resizing is successful", func(t *testing.T) { + t.Run("Image encoding with jpeg quality is successful", func(t *testing.T) { wd, _ := os.Getwd() pipe := DeserializePipelines([][]byte{[]byte(Payload)})[0] diff --git a/pipelines/step.go b/pipelines/step.go index 6e2b0f1..8aae1af 100644 --- a/pipelines/step.go +++ b/pipelines/step.go @@ -9,6 +9,7 @@ type StepType int const ( TypeResizeImageStep StepType = iota + TypeRotateImageStep ) type Step struct { @@ -19,12 +20,20 @@ type Step struct { func (s Step) GetExecutable() (IExecutableStep, error) { switch s.GetType() { + case TypeResizeImageStep: step := ResizeImageStep{} if err := json.Unmarshal(s.Options, &step.Options); err != nil { return nil, err } return step, nil + + case TypeRotateImageStep: + step := RotateImageStep{} + if err := json.Unmarshal(s.Options, &step.Options); err != nil { + return nil, err + } + return step, nil } return nil, errors.New("invalid type") From 1a002ee46e951069de4c8876a273bde3738833fb Mon Sep 17 00:00:00 2001 From: Roman Zipp Date: Thu, 20 Jan 2022 17:54:03 +0100 Subject: [PATCH 09/14] Add pipeline execution test without any available steps --- pipelines/pipeline_test.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/pipelines/pipeline_test.go b/pipelines/pipeline_test.go index 919f2d6..1619122 100644 --- a/pipelines/pipeline_test.go +++ b/pipelines/pipeline_test.go @@ -65,6 +65,37 @@ func TestVideoPipelineDeserialization(t *testing.T) { // image pipeline steps +func TestNoSteps(t *testing.T) { + const Payload string = `{ + "name": "example pipeline", + "type": 1, + "removeMetadata": false, + "steps": [] + }` + const Bucket string = "pipeline_test_04" + + t.Run("Pipeline execution is successful", func(t *testing.T) { + wd, _ := os.Getwd() + pipe := DeserializePipelines([][]byte{[]byte(Payload)})[0] + + storageProvider := storage.GetFileSystemStorageProvider("test", "..") + + // copy test file to storage bucket + _, err := storageProvider.StoreExisting(Bucket, "source.jpg", filepath.Join(wd, "../tests/files/900x900.jpg")) + assert.Nil(t, err, "Test file should be readable") + assert.FileExists(t, storageProvider.GetPath(Bucket, "source.jpg")) + + // run pipeline steps + dest, err := pipe.Run("source.jpg", Bucket, storageProvider) + assert.Nil(t, err) + assert.FileExists(t, storageProvider.GetPath(Bucket, dest)) + + // clean up + os.Remove(storageProvider.GetPath(Bucket, "source.jpg")) + os.Remove(storageProvider.GetPath(Bucket, dest)) + }) +} + func TestResizeImage(t *testing.T) { const Payload string = `{ "name": "example pipeline", From e712b52e77481400242fc00c2098f5d060db77e8 Mon Sep 17 00:00:00 2001 From: Roman Zipp Date: Thu, 20 Jan 2022 17:58:40 +0100 Subject: [PATCH 10/14] Add storage provider open method --- storage/storage.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/storage/storage.go b/storage/storage.go index 313ba26..9d0f2d2 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -50,6 +50,10 @@ func (sp FileSystemStorageProvider) GetPath(bucketName string, objectName string return filepath.Join(sp.wd, StorageFolderName, sp.basePath, bucketName, objectName) } +func (sp FileSystemStorageProvider) OpenFile(bucketName string, objectName string) (*os.File, error) { + return os.Open(sp.GetPath(bucketName, objectName)) +} + func GetFileSystemStorageProvider(basePath string, wd string) FileSystemStorageProvider { if wd == "" { wd, _ = os.Getwd() From ac414d866b802883a83bb3d925fb25fae20dc844 Mon Sep 17 00:00:00 2001 From: Roman Zipp Date: Thu, 20 Jan 2022 17:59:20 +0100 Subject: [PATCH 11/14] Add pipeline test image dimension assertions --- pipelines/pipeline_test.go | 31 +++++++++++++++++++++++++++++-- tests/files/800x500.jpg | Bin 0 -> 67134 bytes 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 tests/files/800x500.jpg diff --git a/pipelines/pipeline_test.go b/pipelines/pipeline_test.go index 1619122..feb9343 100644 --- a/pipelines/pipeline_test.go +++ b/pipelines/pipeline_test.go @@ -2,6 +2,7 @@ package pipelines import ( "github.com/geplauder/lithium/storage" + "image" "os" "path/filepath" "testing" @@ -121,14 +122,26 @@ func TestResizeImage(t *testing.T) { storageProvider := storage.GetFileSystemStorageProvider("test", "..") + // copy test file to storage bucket _, err := storageProvider.StoreExisting(Bucket, "source.jpg", filepath.Join(wd, "../tests/files/900x900.jpg")) assert.Nil(t, err, "Test file should be readable") assert.FileExists(t, storageProvider.GetPath(Bucket, "source.jpg")) + // run pipeline steps dest, err := pipe.Run("source.jpg", Bucket, storageProvider) assert.Nil(t, err) assert.FileExists(t, storageProvider.GetPath(Bucket, dest)) + // read image config + file, err := storageProvider.OpenFile(Bucket, dest) + assert.Nil(t, err) + + imgConf, _, err := image.DecodeConfig(file) + assert.Nil(t, err) + + assert.Equal(t, 1280, imgConf.Width) + assert.Equal(t, 720, imgConf.Height) + // clean up os.Remove(storageProvider.GetPath(Bucket, "source.jpg")) os.Remove(storageProvider.GetPath(Bucket, dest)) @@ -152,20 +165,32 @@ func TestRotateImage(t *testing.T) { }` const Bucket string = "pipeline_test_03" - t.Run("Image rotating is successful", func(t *testing.T) { + t.Run("Image rotation step is successful", func(t *testing.T) { wd, _ := os.Getwd() pipe := DeserializePipelines([][]byte{[]byte(Payload)})[0] storageProvider := storage.GetFileSystemStorageProvider("test", "..") - _, err := storageProvider.StoreExisting(Bucket, "source.jpg", filepath.Join(wd, "../tests/files/900x900.jpg")) + // copy test file to storage bucket + _, err := storageProvider.StoreExisting(Bucket, "source.jpg", filepath.Join(wd, "../tests/files/800x500.jpg")) assert.Nil(t, err, "Test file should be readable") assert.FileExists(t, storageProvider.GetPath(Bucket, "source.jpg")) + // run pipeline steps dest, err := pipe.Run("source.jpg", Bucket, storageProvider) assert.Nil(t, err) assert.FileExists(t, storageProvider.GetPath(Bucket, dest)) + // read image config + file, err := storageProvider.OpenFile(Bucket, dest) + assert.Nil(t, err) + + imgConf, _, err := image.DecodeConfig(file) + assert.Nil(t, err) + + assert.Equal(t, 500, imgConf.Width) + assert.Equal(t, 800, imgConf.Height) + // clean up os.Remove(storageProvider.GetPath(Bucket, "source.jpg")) os.Remove(storageProvider.GetPath(Bucket, dest)) @@ -202,10 +227,12 @@ func TestEncodeImageWithJpegQuality(t *testing.T) { storageProvider := storage.GetFileSystemStorageProvider("test", "..") + // copy test file to storage bucket _, err := storageProvider.StoreExisting(Bucket, "source.jpg", filepath.Join(wd, "../tests/files/900x900.jpg")) assert.Nil(t, err, "Test file should be readable") assert.FileExists(t, storageProvider.GetPath(Bucket, "source.jpg")) + // run pipeline steps dest, err := pipe.Run("source.jpg", Bucket, storageProvider) assert.Nil(t, err) assert.FileExists(t, storageProvider.GetPath(Bucket, dest)) diff --git a/tests/files/800x500.jpg b/tests/files/800x500.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac51ab56624a21c93cee0e2aed03e621099ae9a1 GIT binary patch literal 67134 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ⅈjyx{ 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

^O}B4WlxVQ=v=a*0>|?j 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 literal 0 HcmV?d00001 From f41510c110bf1d0616f9680973551ae709de54b4 Mon Sep 17 00:00:00 2001 From: Roman Zipp Date: Thu, 20 Jan 2022 18:01:44 +0100 Subject: [PATCH 12/14] Refactor pipeline tests --- pipelines/pipeline_test.go | 158 ++++++++++++++++++------------------- 1 file changed, 76 insertions(+), 82 deletions(-) diff --git a/pipelines/pipeline_test.go b/pipelines/pipeline_test.go index feb9343..4619445 100644 --- a/pipelines/pipeline_test.go +++ b/pipelines/pipeline_test.go @@ -12,50 +12,48 @@ import ( // pipeline deserialization -func TestImagePipelineDeserialization(t *testing.T) { - const Payload string = `{ - "name": "example pipeline", - "type": 0, - "removeMetadata": false, - "steps": [ - { - "name": "resize image", - "type": 0 - }, - { - "name": "compress image", - "type": 1 - } - ] - }` - +func TestPipelineDeserialization(t *testing.T) { t.Run("Image pipeline deserialization is successful", func(t *testing.T) { + const Payload string = `{ + "name": "example pipeline", + "type": 0, + "removeMetadata": false, + "steps": [ + { + "name": "resize image", + "type": 0 + }, + { + "name": "compress image", + "type": 1 + } + ] + }` + values := DeserializePipelines([][]byte{[]byte(Payload)}) assert.Equal(t, 1, len(values), "Output should contain one element") assert.Equal(t, "example pipeline", values[0].GetName()) assert.Equal(t, Image, values[0].GetType()) }) -} - -func TestVideoPipelineDeserialization(t *testing.T) { - const Payload string = `{ - "name": "example pipeline", - "type": 1, - "removeMetadata": false, - "steps": [ - { - "name": "resize image", - "type": 0 - }, - { - "name": "compress image", - "type": 1 - } - ] - }` t.Run("Video pipelines deserialization is successful", func(t *testing.T) { + const Payload string = `{ + "name": "example pipeline", + "type": 1, + "removeMetadata": false, + "steps": [ + { + "name": "resize image", + "type": 0 + }, + { + "name": "compress image", + "type": 1 + } + ] + }` + values := DeserializePipelines([][]byte{[]byte(Payload)}) assert.Equal(t, 1, len(values), "Output should contain one element") @@ -66,16 +64,16 @@ func TestVideoPipelineDeserialization(t *testing.T) { // image pipeline steps -func TestNoSteps(t *testing.T) { - const Payload string = `{ - "name": "example pipeline", - "type": 1, - "removeMetadata": false, - "steps": [] - }` - const Bucket string = "pipeline_test_04" +func TestExecuteSteps(t *testing.T) { + t.Run("Pipeline executes with no steps", func(t *testing.T) { + const Bucket string = "pipeline_test_01" + const Payload string = `{ + "name": "example pipeline", + "type": 1, + "removeMetadata": false, + "steps": [] + }` - t.Run("Pipeline execution is successful", func(t *testing.T) { wd, _ := os.Getwd() pipe := DeserializePipelines([][]byte{[]byte(Payload)})[0] @@ -95,28 +93,26 @@ func TestNoSteps(t *testing.T) { os.Remove(storageProvider.GetPath(Bucket, "source.jpg")) os.Remove(storageProvider.GetPath(Bucket, dest)) }) -} -func TestResizeImage(t *testing.T) { - const Payload string = `{ - "name": "example pipeline", - "type": 1, - "removeMetadata": false, - "steps": [ - { - "name": "resize image", - "type": 0, - "options": { - "width": 1280, - "height": 720, - "upscale": false + t.Run("Image resizing is successful", func(t *testing.T) { + const Bucket string = "pipeline_test_02" + const Payload string = `{ + "name": "example pipeline", + "type": 1, + "removeMetadata": false, + "steps": [ + { + "name": "resize image", + "type": 0, + "options": { + "width": 1280, + "height": 720, + "upscale": false + } } - } - ] - }` - const Bucket string = "pipeline_test_01" + ] + }` - t.Run("Image resizing is successful", func(t *testing.T) { wd, _ := os.Getwd() pipe := DeserializePipelines([][]byte{[]byte(Payload)})[0] @@ -146,26 +142,24 @@ func TestResizeImage(t *testing.T) { os.Remove(storageProvider.GetPath(Bucket, "source.jpg")) os.Remove(storageProvider.GetPath(Bucket, dest)) }) -} -func TestRotateImage(t *testing.T) { - const Payload string = `{ - "name": "example pipeline", - "type": 1, - "removeMetadata": false, - "steps": [ - { - "name": "rotate image", - "type": 1, - "options": { - "angle": 90.0 + t.Run("Image rotation step is successful", func(t *testing.T) { + const Bucket string = "pipeline_test_03" + const Payload string = `{ + "name": "example pipeline", + "type": 1, + "removeMetadata": false, + "steps": [ + { + "name": "rotate image", + "type": 1, + "options": { + "angle": 90.0 + } } - } - ] - }` - const Bucket string = "pipeline_test_03" + ] + }` - t.Run("Image rotation step is successful", func(t *testing.T) { wd, _ := os.Getwd() pipe := DeserializePipelines([][]byte{[]byte(Payload)})[0] @@ -199,7 +193,8 @@ func TestRotateImage(t *testing.T) { // output options -func TestEncodeImageWithJpegQuality(t *testing.T) { +func TestEncoding(t *testing.T) { + const Bucket string = "pipeline_test_04" const Payload string = `{ "name": "example pipeline", "type": 1, @@ -219,7 +214,6 @@ func TestEncodeImageWithJpegQuality(t *testing.T) { "quality": 50 } }` - const Bucket string = "pipeline_test_02" t.Run("Image encoding with jpeg quality is successful", func(t *testing.T) { wd, _ := os.Getwd() From 6637a60c2401fed0479746959acbe522d8323d7d Mon Sep 17 00:00:00 2001 From: Roman Zipp Date: Thu, 20 Jan 2022 18:06:14 +0100 Subject: [PATCH 13/14] Add grayscale image step --- config/example.json | 6 ++++- pipelines/executable_step.go | 11 +++++++++ pipelines/pipeline_test.go | 44 ++++++++++++++++++++++++++++++++++++ pipelines/step.go | 4 ++++ 4 files changed, 64 insertions(+), 1 deletion(-) diff --git a/config/example.json b/config/example.json index d688687..e6600bc 100644 --- a/config/example.json +++ b/config/example.json @@ -15,10 +15,14 @@ }, { "name": "rotate image", - "type": 0, + "type": 1, "options": { "angle": 90.0 } + }, + { + "name": "grayscale", + "type": 2 } ], "output": { diff --git a/pipelines/executable_step.go b/pipelines/executable_step.go index 878f8c2..5ad7ef4 100644 --- a/pipelines/executable_step.go +++ b/pipelines/executable_step.go @@ -38,3 +38,14 @@ func (s RotateImageStep) Execute(src image.Image) (image.Image, error) { src = imaging.Rotate(src, s.Options.Angle, image.Black) return src, nil } + +// Grayscale image + +type GrayscaleImageStep struct { + Step +} + +func (s GrayscaleImageStep) Execute(src image.Image) (image.Image, error) { + src = imaging.Grayscale(src) + return src, nil +} diff --git a/pipelines/pipeline_test.go b/pipelines/pipeline_test.go index 4619445..3665f0f 100644 --- a/pipelines/pipeline_test.go +++ b/pipelines/pipeline_test.go @@ -189,6 +189,50 @@ func TestExecuteSteps(t *testing.T) { os.Remove(storageProvider.GetPath(Bucket, "source.jpg")) os.Remove(storageProvider.GetPath(Bucket, dest)) }) + + t.Run("Image grayscale step is successful", func(t *testing.T) { + const Bucket string = "pipeline_test_05" + const Payload string = `{ + "name": "example pipeline", + "type": 1, + "removeMetadata": false, + "steps": [ + { + "name": "grayscale", + "type": 2 + } + ] + }` + + wd, _ := os.Getwd() + pipe := DeserializePipelines([][]byte{[]byte(Payload)})[0] + + storageProvider := storage.GetFileSystemStorageProvider("test", "..") + + // copy test file to storage bucket + _, err := storageProvider.StoreExisting(Bucket, "source.jpg", filepath.Join(wd, "../tests/files/900x900.jpg")) + assert.Nil(t, err, "Test file should be readable") + assert.FileExists(t, storageProvider.GetPath(Bucket, "source.jpg")) + + // run pipeline steps + dest, err := pipe.Run("source.jpg", Bucket, storageProvider) + assert.Nil(t, err) + assert.FileExists(t, storageProvider.GetPath(Bucket, dest)) + + // read image config + file, err := storageProvider.OpenFile(Bucket, dest) + assert.Nil(t, err) + + imgConf, _, err := image.DecodeConfig(file) + assert.Nil(t, err) + + assert.Equal(t, 900, imgConf.Width) + assert.Equal(t, 900, imgConf.Height) + + // clean up + os.Remove(storageProvider.GetPath(Bucket, "source.jpg")) + os.Remove(storageProvider.GetPath(Bucket, dest)) + }) } // output options diff --git a/pipelines/step.go b/pipelines/step.go index 8aae1af..919c685 100644 --- a/pipelines/step.go +++ b/pipelines/step.go @@ -10,6 +10,7 @@ type StepType int const ( TypeResizeImageStep StepType = iota TypeRotateImageStep + TypeGrayscaleImageStep ) type Step struct { @@ -34,6 +35,9 @@ func (s Step) GetExecutable() (IExecutableStep, error) { return nil, err } return step, nil + + case TypeGrayscaleImageStep: + return GrayscaleImageStep{}, nil } return nil, errors.New("invalid type") From 308dad3479b30265ae48dea90f3d2b62be37e181 Mon Sep 17 00:00:00 2001 From: Roman Zipp Date: Thu, 20 Jan 2022 18:13:27 +0100 Subject: [PATCH 14/14] Add image flip step --- config/example.json | 6 ++- pipelines/executable_step.go | 24 +++++++++++ pipelines/pipeline_test.go | 84 +++++++++++++++++++++++++++++++++++- pipelines/step.go | 8 ++++ 4 files changed, 120 insertions(+), 2 deletions(-) diff --git a/config/example.json b/config/example.json index e6600bc..eb65944 100644 --- a/config/example.json +++ b/config/example.json @@ -21,8 +21,12 @@ } }, { - "name": "grayscale", + "name": "flip image", "type": 2 + }, + { + "name": "grayscale", + "type": 3 } ], "output": { diff --git a/pipelines/executable_step.go b/pipelines/executable_step.go index 5ad7ef4..518b839 100644 --- a/pipelines/executable_step.go +++ b/pipelines/executable_step.go @@ -1,6 +1,8 @@ package pipelines import ( + "errors" + "fmt" "github.com/disintegration/imaging" "image" ) @@ -39,6 +41,28 @@ func (s RotateImageStep) Execute(src image.Image) (image.Image, error) { return src, nil } +// Flip image + +type FlipImageStep struct { + Step + Options struct { + Direction string `json:"direction"` + } `json:"options"` +} + +func (s FlipImageStep) Execute(src image.Image) (image.Image, error) { + switch s.Options.Direction { + case "h": + src = imaging.FlipH(src) + case "v": + src = imaging.FlipH(src) + default: + return src, errors.New(fmt.Sprintf("invalid flip direction: %s", s.Options.Direction)) + } + + return src, nil +} + // Grayscale image type GrayscaleImageStep struct { diff --git a/pipelines/pipeline_test.go b/pipelines/pipeline_test.go index 3665f0f..4bee961 100644 --- a/pipelines/pipeline_test.go +++ b/pipelines/pipeline_test.go @@ -190,6 +190,88 @@ func TestExecuteSteps(t *testing.T) { os.Remove(storageProvider.GetPath(Bucket, dest)) }) + t.Run("Image flip step is successful", func(t *testing.T) { + const Bucket string = "pipeline_test_06" + const Payload string = `{ + "name": "example pipeline", + "type": 1, + "removeMetadata": false, + "steps": [ + { + "name": "flip image", + "type": 2, + "options": { + "direction": "h" + } + } + ] + }` + + wd, _ := os.Getwd() + pipe := DeserializePipelines([][]byte{[]byte(Payload)})[0] + + storageProvider := storage.GetFileSystemStorageProvider("test", "..") + + // copy test file to storage bucket + _, err := storageProvider.StoreExisting(Bucket, "source.jpg", filepath.Join(wd, "../tests/files/800x500.jpg")) + assert.Nil(t, err, "Test file should be readable") + assert.FileExists(t, storageProvider.GetPath(Bucket, "source.jpg")) + + // run pipeline steps + dest, err := pipe.Run("source.jpg", Bucket, storageProvider) + assert.Nil(t, err) + assert.FileExists(t, storageProvider.GetPath(Bucket, dest)) + + // read image config + file, err := storageProvider.OpenFile(Bucket, dest) + assert.Nil(t, err) + + imgConf, _, err := image.DecodeConfig(file) + assert.Nil(t, err) + + assert.Equal(t, 800, imgConf.Width) + assert.Equal(t, 500, imgConf.Height) + + // clean up + os.Remove(storageProvider.GetPath(Bucket, "source.jpg")) + os.Remove(storageProvider.GetPath(Bucket, dest)) + }) + + t.Run("Image flip step direction validation is successful", func(t *testing.T) { + const Bucket string = "pipeline_test_06" + const Payload string = `{ + "name": "example pipeline", + "type": 1, + "removeMetadata": false, + "steps": [ + { + "name": "flip image", + "type": 2, + "options": { + "direction": "f" + } + } + ] + }` + + wd, _ := os.Getwd() + pipe := DeserializePipelines([][]byte{[]byte(Payload)})[0] + + storageProvider := storage.GetFileSystemStorageProvider("test", "..") + + // copy test file to storage bucket + _, err := storageProvider.StoreExisting(Bucket, "source.jpg", filepath.Join(wd, "../tests/files/800x500.jpg")) + assert.Nil(t, err, "Test file should be readable") + assert.FileExists(t, storageProvider.GetPath(Bucket, "source.jpg")) + + // run pipeline steps + _, err = pipe.Run("source.jpg", Bucket, storageProvider) + assert.EqualError(t, err, "invalid flip direction: f") + + // clean up + os.Remove(storageProvider.GetPath(Bucket, "source.jpg")) + }) + t.Run("Image grayscale step is successful", func(t *testing.T) { const Bucket string = "pipeline_test_05" const Payload string = `{ @@ -199,7 +281,7 @@ func TestExecuteSteps(t *testing.T) { "steps": [ { "name": "grayscale", - "type": 2 + "type": 3 } ] }` diff --git a/pipelines/step.go b/pipelines/step.go index 919c685..9d60844 100644 --- a/pipelines/step.go +++ b/pipelines/step.go @@ -10,6 +10,7 @@ type StepType int const ( TypeResizeImageStep StepType = iota TypeRotateImageStep + TypeFlipImageStep TypeGrayscaleImageStep ) @@ -36,6 +37,13 @@ func (s Step) GetExecutable() (IExecutableStep, error) { } return step, nil + case TypeFlipImageStep: + step := FlipImageStep{} + if err := json.Unmarshal(s.Options, &step.Options); err != nil { + return nil, err + } + return step, nil + case TypeGrayscaleImageStep: return GrayscaleImageStep{}, nil }