You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
4.5 KiB
148 lines
4.5 KiB
package filesystem
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
model "github.com/cloudreve/Cloudreve/v3/models"
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/cache"
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/filesystem/driver"
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/filesystem/response"
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/mocks/thumbmock"
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/request"
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/thumb"
|
|
testMock "github.com/stretchr/testify/mock"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestFileSystem_GetThumb(t *testing.T) {
|
|
a := assert.New(t)
|
|
fs := &FileSystem{User: &model.User{}}
|
|
|
|
// file not found
|
|
{
|
|
mock.ExpectQuery("SELECT(.+)").WillReturnError(errors.New("error"))
|
|
res, err := fs.GetThumb(context.Background(), 1)
|
|
a.ErrorIs(err, ErrObjectNotExist)
|
|
a.Nil(res)
|
|
a.NoError(mock.ExpectationsWereMet())
|
|
}
|
|
|
|
// thumb not exist
|
|
{
|
|
fs.SetTargetFile(&[]model.File{{
|
|
MetadataSerialized: map[string]string{
|
|
model.ThumbStatusMetadataKey: model.ThumbStatusNotAvailable,
|
|
},
|
|
Policy: model.Policy{Type: "mock"},
|
|
}})
|
|
fs.FileTarget[0].Policy.ID = 1
|
|
|
|
res, err := fs.GetThumb(context.Background(), 1)
|
|
a.ErrorIs(err, ErrObjectNotExist)
|
|
a.Nil(res)
|
|
}
|
|
|
|
// thumb not initialized, also failed to generate
|
|
{
|
|
fs.CleanTargets()
|
|
fs.SetTargetFile(&[]model.File{{
|
|
Policy: model.Policy{Type: "mock"},
|
|
Size: 31457281,
|
|
}})
|
|
testHandller2 := new(FileHeaderMock)
|
|
testHandller2.On("Thumb", testMock.Anything, &fs.FileTarget[0]).Return(&response.ContentResponse{}, driver.ErrorThumbNotExist)
|
|
fs.Handler = testHandller2
|
|
fs.FileTarget[0].Policy.ID = 1
|
|
res, err := fs.GetThumb(context.Background(), 1)
|
|
a.Contains(err.Error(), "file too large")
|
|
a.Nil(res.Content)
|
|
}
|
|
|
|
// thumb not initialized, failed to get source
|
|
{
|
|
fs.CleanTargets()
|
|
fs.SetTargetFile(&[]model.File{{
|
|
Policy: model.Policy{Type: "mock"},
|
|
}})
|
|
testHandller2 := new(FileHeaderMock)
|
|
testHandller2.On("Thumb", testMock.Anything, &fs.FileTarget[0]).Return(&response.ContentResponse{}, driver.ErrorThumbNotExist)
|
|
testHandller2.On("Get", testMock.Anything, "").Return(MockRSC{}, errors.New("error"))
|
|
fs.Handler = testHandller2
|
|
fs.FileTarget[0].Policy.ID = 1
|
|
res, err := fs.GetThumb(context.Background(), 1)
|
|
a.Contains(err.Error(), "error")
|
|
a.Nil(res.Content)
|
|
}
|
|
|
|
// thumb not initialized, no available generators
|
|
{
|
|
thumb.Generators = []thumb.Generator{}
|
|
fs.CleanTargets()
|
|
fs.SetTargetFile(&[]model.File{{
|
|
Policy: model.Policy{Type: "local"},
|
|
}})
|
|
testHandller2 := new(FileHeaderMock)
|
|
testHandller2.On("Thumb", testMock.Anything, &fs.FileTarget[0]).Return(&response.ContentResponse{}, driver.ErrorThumbNotExist)
|
|
testHandller2.On("Get", testMock.Anything, "").Return(MockRSC{}, nil)
|
|
fs.Handler = testHandller2
|
|
fs.FileTarget[0].Policy.ID = 1
|
|
res, err := fs.GetThumb(context.Background(), 1)
|
|
a.ErrorIs(err, thumb.ErrNotAvailable)
|
|
a.Nil(res)
|
|
}
|
|
|
|
// thumb not initialized, thumb generated but cannot be open
|
|
{
|
|
mockGenerator := &thumbmock.GeneratorMock{}
|
|
thumb.Generators = []thumb.Generator{mockGenerator}
|
|
fs.CleanTargets()
|
|
fs.SetTargetFile(&[]model.File{{
|
|
Policy: model.Policy{Type: "mock"},
|
|
}})
|
|
cache.Set("setting_thumb_vips_enabled", "1", 0)
|
|
testHandller2 := new(FileHeaderMock)
|
|
testHandller2.On("Thumb", testMock.Anything, &fs.FileTarget[0]).Return(&response.ContentResponse{}, driver.ErrorThumbNotExist)
|
|
testHandller2.On("Get", testMock.Anything, "").Return(MockRSC{}, nil)
|
|
mockGenerator.On("Generate", testMock.Anything, testMock.Anything, testMock.Anything, testMock.Anything, testMock.Anything).
|
|
Return(&thumb.Result{Path: "not_exit_thumb"}, nil)
|
|
|
|
fs.Handler = testHandller2
|
|
fs.FileTarget[0].Policy.ID = 1
|
|
res, err := fs.GetThumb(context.Background(), 1)
|
|
a.Contains(err.Error(), "failed to open temp thumb")
|
|
a.Nil(res.Content)
|
|
testHandller2.AssertExpectations(t)
|
|
mockGenerator.AssertExpectations(t)
|
|
}
|
|
}
|
|
|
|
func TestFileSystem_ThumbWorker(t *testing.T) {
|
|
asserts := assert.New(t)
|
|
|
|
asserts.NotPanics(func() {
|
|
getThumbWorker().addWorker()
|
|
getThumbWorker().releaseWorker()
|
|
})
|
|
}
|
|
|
|
func TestFileSystem_GenerateThumbnail(t *testing.T) {
|
|
fs := &FileSystem{User: &model.User{}}
|
|
|
|
// 无法生成缩略图
|
|
{
|
|
fs.SetTargetFile(&[]model.File{{}})
|
|
fs.generateThumbnail(context.Background(), &model.File{})
|
|
}
|
|
|
|
// 无法获取文件数据
|
|
{
|
|
testHandller := new(FileHeaderMock)
|
|
testHandller.On("Get", testMock.Anything, "").Return(request.NopRSCloser{}, errors.New("error"))
|
|
fs.Handler = testHandller
|
|
fs.generateThumbnail(context.Background(), &model.File{Name: "test.png"})
|
|
testHandller.AssertExpectations(t)
|
|
}
|
|
}
|