diff options
author | 2023-10-25 21:58:45 +0900 | |
---|---|---|
committer | 2023-10-25 14:58:45 +0200 | |
commit | 27f465913916505197b06503efd7c30a79ac2016 (patch) | |
tree | 9aed4c711f85bdc99e5aae077d76e8debbe560ca /internal/media/manager_test.go | |
parent | [bugfix/frontend] Export/import CSV correctly (#2294) (diff) | |
download | gotosocial-27f465913916505197b06503efd7c30a79ac2016.tar.xz |
[bugfix] allow store smaller PNG image than 261 bytes (#2263) (#2298)
* chore: add test of golden cases before fix of #2263
* chore: add test case to reproduce error of #2263
* [bugfix] allow store smaller PNG image than 261 bytes (#2263)
Diffstat (limited to 'internal/media/manager_test.go')
-rw-r--r-- | internal/media/manager_test.go | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/internal/media/manager_test.go b/internal/media/manager_test.go index 7b9b66147..cd0f9c24b 100644 --- a/internal/media/manager_test.go +++ b/internal/media/manager_test.go @@ -1248,6 +1248,76 @@ func (suite *ManagerTestSuite) TestSimpleJpegProcessBlockingWithDiskStorage() { suite.Equal(processedThumbnailBytesExpected, processedThumbnailBytes) } +func (suite *ManagerTestSuite) TestSmallSizedMediaTypeDetection_issue2263() { + for index, test := range []struct { + name string // Test title + path string // File path + expected string // Expected ContentType + }{ + { + name: "big size JPEG", + path: "./test/test-jpeg.jpg", + expected: "image/jpeg", + }, + { + name: "big size PNG", + path: "./test/test-png-noalphachannel.png", + expected: "image/png", + }, + { + name: "small size JPEG", + path: "./test/test-jpeg-1x1px-white.jpg", + expected: "image/jpeg", + }, + { + name: "golden case PNG (big size)", + path: "./test/test-png-alphachannel-1x1px.png", + expected: "image/png", + }, + } { + suite.Run(test.name, func() { + ctx, cncl := context.WithTimeout(context.Background(), time.Second*60) + defer cncl() + + data := func(_ context.Context) (io.ReadCloser, int64, error) { + // load bytes from a test image + b, err := os.ReadFile(test.path) + suite.NoError(err, "Test %d: failed during test setup", index+1) + + return io.NopCloser(bytes.NewBuffer(b)), int64(len(b)), nil + } + + accountID := "01FS1X72SK9ZPW0J1QQ68BD264" + + // process the media with no additional info provided + processingMedia, err := suite.manager.ProcessMedia(ctx, data, accountID, nil) + suite.NoError(err) + + // fetch the attachment id from the processing media + attachmentID := processingMedia.AttachmentID() + + // wait for processing to complete + var attachment *gtsmodel.MediaAttachment + if !testrig.WaitFor(func() bool { + attachment, err = suite.db.GetAttachmentByID(ctx, attachmentID) + return err == nil && attachment != nil + }) { + suite.FailNow("timed out waiting for attachment to process") + } + + // make sure it's got the stuff set on it that we expect + // the attachment ID and accountID we expect + suite.Equal(attachmentID, attachment.ID) + suite.Equal(accountID, attachment.AccountID) + + actual := attachment.File.ContentType + expect := test.expected + + suite.Equal(expect, actual, "Test %d: %s", index+1, test.name) + }) + } +} + func TestManagerTestSuite(t *testing.T) { suite.Run(t, &ManagerTestSuite{}) } |