From d9c697a0b2d58b91898603a23f14da21ac1b0ace Mon Sep 17 00:00:00 2001 From: Adrian Shum Date: Fri, 16 Sep 2022 14:21:56 +0800 Subject: [PATCH] test: ffmpeg processor tests --- README.md | 1 + config_test.go | 17 +++ ffmpeg/errors_test.go | 15 +++ ffmpeg/ffmpeg_test.go | 13 +- processor.go | 12 +- processor_test.go | 121 ++++++++++++++++++ .../golden/result/fit-in/100x100/demo.png | Bin 0 -> 16132 bytes .../fit-in/100x100/everybody-betray-me.mkv | Bin 0 -> 2546 bytes .../golden/result/fit-in/100x100/schizo_0.mp4 | Bin 0 -> 3845 bytes .../result/fit-in/100x100/schizo_180.mp4 | Bin 0 -> 3846 bytes .../result/fit-in/100x100/schizo_270.mp4 | Bin 0 -> 3840 bytes .../result/fit-in/100x100/schizo_90.mp4 | Bin 0 -> 3845 bytes .../result/meta/everybody-betray-me.mkv | 1 + 13 files changed, 165 insertions(+), 15 deletions(-) create mode 100644 config_test.go create mode 100644 ffmpeg/errors_test.go create mode 100644 processor_test.go create mode 100644 testdata/golden/result/fit-in/100x100/demo.png create mode 100644 testdata/golden/result/fit-in/100x100/everybody-betray-me.mkv create mode 100644 testdata/golden/result/fit-in/100x100/schizo_0.mp4 create mode 100644 testdata/golden/result/fit-in/100x100/schizo_180.mp4 create mode 100644 testdata/golden/result/fit-in/100x100/schizo_270.mp4 create mode 100644 testdata/golden/result/fit-in/100x100/schizo_90.mp4 create mode 100644 testdata/golden/result/meta/everybody-betray-me.mkv diff --git a/README.md b/README.md index 432e95f..9ff884e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # imagorvideo [![Test Status](https://github.com/cshum/imagorvideo/workflows/test/badge.svg)](https://github.com/cshum/imagorvideo/actions/workflows/test.yml) +[![Coverage Status](https://img.shields.io/coveralls/github/cshum/imagorvideo)](https://coveralls.io/github/cshum/imagorvideo?branch=master) [![Docker Hub](https://img.shields.io/badge/docker-shumc/imagorvideo-blue.svg)](https://hub.docker.com/r/shumc/imagorvideo/) [![GitHub Container Registry](https://ghcr-badge.herokuapp.com/cshum/imagorvideo/latest_tag?trim=major&label=ghcr.io&ignore=next,master&color=%23007ec6)](https://github.com/cshum/imagorvideo/pkgs/container/imagorvideo) diff --git a/config_test.go b/config_test.go new file mode 100644 index 0000000..c326014 --- /dev/null +++ b/config_test.go @@ -0,0 +1,17 @@ +package imagorvideo + +import ( + "github.com/cshum/imagor" + "github.com/cshum/imagor/config" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestConfig(t *testing.T) { + srv := config.CreateServer([]string{ + "-ffmpeg-fallback-image", "https://foo.com/bar.jpg", + }, Config) + app := srv.App.(*imagor.Imagor) + processor := app.Processors[0].(*Processor) + assert.Equal(t, "https://foo.com/bar.jpg", processor.FallbackImage) +} diff --git a/ffmpeg/errors_test.go b/ffmpeg/errors_test.go new file mode 100644 index 0000000..3b0d483 --- /dev/null +++ b/ffmpeg/errors_test.go @@ -0,0 +1,15 @@ +package ffmpeg + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestErrors(t *testing.T) { + assert.Equal(t, "ffmpeg: cannot allocate memory", ErrNoMem.Error()) + assert.Equal(t, "ffmpeg: end of file", ErrEOF.Error()) + assert.Equal(t, "ffmpeg: unknown error occurred", ErrUnknown.Error()) + assert.Equal(t, "ffmpeg: decoder not found", ErrDecoderNotFound.Error()) + assert.Equal(t, "ffmpeg: invalid data found when processing input", ErrInvalidData.Error()) + assert.Equal(t, "ffmpeg: video or cover art size exceeds maximum allowed dimensions", ErrTooBig.Error()) +} diff --git a/ffmpeg/ffmpeg_test.go b/ffmpeg/ffmpeg_test.go index 6e6a711..e3a52af 100644 --- a/ffmpeg/ffmpeg_test.go +++ b/ffmpeg/ffmpeg_test.go @@ -26,7 +26,7 @@ var files = []string{ var baseDir = "../testdata/" -func TestAVContextMeta(t *testing.T) { +func TestAVContext(t *testing.T) { vips.Startup(nil) SetFFmpegLogLevel(AVLogDebug) logger := zap.NewExample() @@ -43,7 +43,7 @@ func TestAVContextMeta(t *testing.T) { } }) require.NoError(t, os.MkdirAll(baseDir+"golden/meta", 0755)) - require.NoError(t, os.MkdirAll(baseDir+"golden/result", 0755)) + require.NoError(t, os.MkdirAll(baseDir+"golden/export", 0755)) t.Parallel() for _, filename := range files { t.Run(filename, func(t *testing.T) { @@ -87,12 +87,3 @@ func TestAVContextMeta(t *testing.T) { }) } } - -func TestErrors(t *testing.T) { - assert.Equal(t, "ffmpeg: cannot allocate memory", ErrNoMem.Error()) - assert.Equal(t, "ffmpeg: end of file", ErrEOF.Error()) - assert.Equal(t, "ffmpeg: unknown error occurred", ErrUnknown.Error()) - assert.Equal(t, "ffmpeg: decoder not found", ErrDecoderNotFound.Error()) - assert.Equal(t, "ffmpeg: invalid data found when processing input", ErrInvalidData.Error()) - assert.Equal(t, "ffmpeg: video or cover art size exceeds maximum allowed dimensions", ErrTooBig.Error()) -} diff --git a/processor.go b/processor.go index a6edbc0..465de19 100644 --- a/processor.go +++ b/processor.go @@ -57,9 +57,6 @@ func (p *Processor) Process(ctx context.Context, in *imagor.Blob, params imagorp if err == nil || out != nil { return } - if _, ok := err.(imagor.ErrForward); ok { - return - } // fallback image on error out = imagor.NewBlobFromBytes(transPixel) if p.FallbackImage != "" { @@ -85,8 +82,15 @@ func (p *Processor) Process(ctx context.Context, in *imagor.Blob, params imagorp if reader, size, err = in.NewReader(); err != nil { return } + if size <= 0 { + // force read full file if size unknown + _ = reader.Close() + reader = nil + } default: - if reader, size, err = in.NewReadSeeker(); err != nil { + } + if reader == nil { + if reader, size, err = in.NewReadSeeker(); err != nil || size <= 0 { // write to temp file if read seeker not available if reader, _, err = in.NewReader(); err != nil { return diff --git a/processor_test.go b/processor_test.go new file mode 100644 index 0000000..f8a4316 --- /dev/null +++ b/processor_test.go @@ -0,0 +1,121 @@ +package imagorvideo + +import ( + "context" + "fmt" + "github.com/cshum/imagor" + "github.com/cshum/imagor/imagorpath" + "github.com/cshum/imagor/storage/filestorage" + "github.com/cshum/imagor/vips" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.uber.org/zap" + "io" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "reflect" + "runtime" + "testing" +) + +var testDataDir string + +func init() { + _, b, _, _ := runtime.Caller(0) + testDataDir = filepath.Join(filepath.Dir(b), "./testdata") +} + +type test struct { + name string + path string +} + +func TestProcessor(t *testing.T) { + v := vips.NewProcessor(vips.WithDebug(true)) + require.NoError(t, v.Startup(context.Background())) + t.Cleanup(func() { + require.NoError(t, v.Shutdown(context.Background())) + }) + var resultDir = filepath.Join(testDataDir, "golden/result") + doGoldenTests(t, resultDir, []test{ + {name: "mkv", path: "fit-in/100x100/everybody-betray-me.mkv"}, + {name: "mkv meta", path: "meta/everybody-betray-me.mkv"}, + {name: "mp4", path: "fit-in/100x100/schizo_0.mp4"}, + {name: "mp4 90", path: "fit-in/100x100/schizo_90.mp4"}, + {name: "mp4 180", path: "fit-in/100x100/schizo_180.mp4"}, + {name: "mp4 270", path: "fit-in/100x100/schizo_270.mp4"}, + {name: "image", path: "fit-in/100x100/demo.png"}, + }, WithDebug(true)) +} + +func doGoldenTests(t *testing.T, resultDir string, tests []test, opts ...Option) { + resStorage := filestorage.New(resultDir, + filestorage.WithSaveErrIfExists(true)) + loader := filestorage.New(testDataDir) + loaders := []imagor.Loader{ + loader, + loaderFunc(func(r *http.Request, image string) (blob *imagor.Blob, err error) { + image, _ = loader.Path(image) + return imagor.NewBlob(func() (reader io.ReadCloser, size int64, err error) { + // force read full file by 0 size + reader, err = os.Open(image) + return + }), nil + }), + } + for i, loader := range loaders { + app := imagor.New( + imagor.WithLoaders(loader), + imagor.WithUnsafe(true), + imagor.WithDebug(true), + imagor.WithLogger(zap.NewExample()), + imagor.WithProcessors(NewProcessor(opts...), vips.NewProcessor()), + ) + require.NoError(t, app.Startup(context.Background())) + t.Cleanup(func() { + assert.NoError(t, app.Shutdown(context.Background())) + }) + for _, tt := range tests { + t.Run(fmt.Sprintf("%s-%d", tt.name, i+1), func(t *testing.T) { + w := httptest.NewRecorder() + ctx, cancel := context.WithCancel(context.Background()) + req := httptest.NewRequest( + http.MethodGet, fmt.Sprintf("/unsafe/%s", tt.path), nil).WithContext(ctx) + app.ServeHTTP(w, req) + cancel() + assert.Equal(t, 200, w.Code) + b := imagor.NewBlobFromBytes(w.Body.Bytes()) + _ = resStorage.Put(context.Background(), tt.path, b) + path := filepath.Join(resultDir, imagorpath.Normalize(tt.path, nil)) + + bc := imagor.NewBlobFromFile(path) + buf, err := bc.ReadAll() + require.NoError(t, err) + if reflect.DeepEqual(buf, w.Body.Bytes()) { + return + } + img1, err := vips.LoadImageFromFile(path, nil) + require.NoError(t, err) + img2, err := vips.LoadImageFromBuffer(w.Body.Bytes(), nil) + require.NoError(t, err) + require.Equal(t, img1.Width(), img2.Width(), "width mismatch") + require.Equal(t, img1.Height(), img2.Height(), "height mismatch") + buf1, err := img1.ExportWebp(nil) + require.NoError(t, err) + buf2, err := img2.ExportWebp(nil) + require.NoError(t, err) + require.True(t, reflect.DeepEqual(buf1, buf2), "image mismatch") + }) + } + + } + +} + +type loaderFunc func(r *http.Request, image string) (blob *imagor.Blob, err error) + +func (f loaderFunc) Get(r *http.Request, image string) (*imagor.Blob, error) { + return f(r, image) +} diff --git a/testdata/golden/result/fit-in/100x100/demo.png b/testdata/golden/result/fit-in/100x100/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..a22b015941a85cd89a22bc54f4b297e0d0d94f14 GIT binary patch literal 16132 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 W6I4WBm+M{t00009Td literal 0 HcmV?d00001 diff --git a/testdata/golden/result/fit-in/100x100/everybody-betray-me.mkv b/testdata/golden/result/fit-in/100x100/everybody-betray-me.mkv new file mode 100644 index 0000000000000000000000000000000000000000..d7eef4c03459522b9711a6dceafb95b7fb82db17 GIT binary patch literal 2546 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 literal 0 HcmV?d00001 diff --git a/testdata/golden/result/fit-in/100x100/schizo_0.mp4 b/testdata/golden/result/fit-in/100x100/schizo_0.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..30a62692a7642aaf15b5b01563971dbff2cdac6f GIT binary patch literal 3845 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 H_S^pejus@& literal 0 HcmV?d00001 diff --git a/testdata/golden/result/fit-in/100x100/schizo_180.mp4 b/testdata/golden/result/fit-in/100x100/schizo_180.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..79613a95ef7478052c605addd1389281abffb3b1 GIT binary patch literal 3846 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 GfB0XAg)N2v literal 0 HcmV?d00001 diff --git a/testdata/golden/result/fit-in/100x100/schizo_270.mp4 b/testdata/golden/result/fit-in/100x100/schizo_270.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..559574807065d0b05cadd142282e5512bc34f638 GIT binary patch literal 3840 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 LWL{qK&OiSHZ~-BU literal 0 HcmV?d00001 diff --git a/testdata/golden/result/fit-in/100x100/schizo_90.mp4 b/testdata/golden/result/fit-in/100x100/schizo_90.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..09676d290ff570d2cd2bd4852af54f9fc0d14cf6 GIT binary patch literal 3845 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 HvOD=73y2~D literal 0 HcmV?d00001 diff --git a/testdata/golden/result/meta/everybody-betray-me.mkv b/testdata/golden/result/meta/everybody-betray-me.mkv new file mode 100644 index 0000000..d64a578 --- /dev/null +++ b/testdata/golden/result/meta/everybody-betray-me.mkv @@ -0,0 +1 @@ +{"orientation":1,"duration":7407000000,"width":640,"height":480,"has_video":true,"has_audio":true,"has_alpha":false} \ No newline at end of file