github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/filesystem/image_test.go (about) 1 package filesystem 2 3 import ( 4 "context" 5 "errors" 6 model "github.com/cloudreve/Cloudreve/v3/models" 7 "github.com/cloudreve/Cloudreve/v3/pkg/cache" 8 "github.com/cloudreve/Cloudreve/v3/pkg/filesystem/driver" 9 "github.com/cloudreve/Cloudreve/v3/pkg/filesystem/response" 10 "github.com/cloudreve/Cloudreve/v3/pkg/mocks/thumbmock" 11 "github.com/cloudreve/Cloudreve/v3/pkg/thumb" 12 testMock "github.com/stretchr/testify/mock" 13 "testing" 14 15 "github.com/stretchr/testify/assert" 16 ) 17 18 func TestFileSystem_GetThumb(t *testing.T) { 19 a := assert.New(t) 20 fs := &FileSystem{User: &model.User{}} 21 22 // file not found 23 { 24 mock.ExpectQuery("SELECT(.+)").WillReturnError(errors.New("error")) 25 res, err := fs.GetThumb(context.Background(), 1) 26 a.ErrorIs(err, ErrObjectNotExist) 27 a.Nil(res) 28 a.NoError(mock.ExpectationsWereMet()) 29 } 30 31 // thumb not exist 32 { 33 fs.SetTargetFile(&[]model.File{{ 34 MetadataSerialized: map[string]string{ 35 model.ThumbStatusMetadataKey: model.ThumbStatusNotAvailable, 36 }, 37 Policy: model.Policy{Type: "mock"}, 38 }}) 39 fs.FileTarget[0].Policy.ID = 1 40 41 res, err := fs.GetThumb(context.Background(), 1) 42 a.ErrorIs(err, ErrObjectNotExist) 43 a.Nil(res) 44 } 45 46 // thumb not initialized, also failed to generate 47 { 48 fs.CleanTargets() 49 fs.SetTargetFile(&[]model.File{{ 50 Policy: model.Policy{Type: "mock"}, 51 Size: 31457281, 52 }}) 53 testHandller2 := new(FileHeaderMock) 54 testHandller2.On("Thumb", testMock.Anything, &fs.FileTarget[0]).Return(&response.ContentResponse{}, driver.ErrorThumbNotExist) 55 fs.Handler = testHandller2 56 fs.FileTarget[0].Policy.ID = 1 57 res, err := fs.GetThumb(context.Background(), 1) 58 a.Contains(err.Error(), "file too large") 59 a.Nil(res.Content) 60 } 61 62 // thumb not initialized, failed to get source 63 { 64 fs.CleanTargets() 65 fs.SetTargetFile(&[]model.File{{ 66 Policy: model.Policy{Type: "mock"}, 67 }}) 68 testHandller2 := new(FileHeaderMock) 69 testHandller2.On("Thumb", testMock.Anything, &fs.FileTarget[0]).Return(&response.ContentResponse{}, driver.ErrorThumbNotExist) 70 testHandller2.On("Get", testMock.Anything, "").Return(MockRSC{}, errors.New("error")) 71 fs.Handler = testHandller2 72 fs.FileTarget[0].Policy.ID = 1 73 res, err := fs.GetThumb(context.Background(), 1) 74 a.Contains(err.Error(), "error") 75 a.Nil(res.Content) 76 } 77 78 // thumb not initialized, no available generators 79 { 80 thumb.Generators = []thumb.Generator{} 81 fs.CleanTargets() 82 fs.SetTargetFile(&[]model.File{{ 83 Policy: model.Policy{Type: "local"}, 84 }}) 85 testHandller2 := new(FileHeaderMock) 86 testHandller2.On("Thumb", testMock.Anything, &fs.FileTarget[0]).Return(&response.ContentResponse{}, driver.ErrorThumbNotExist) 87 testHandller2.On("Get", testMock.Anything, "").Return(MockRSC{}, nil) 88 fs.Handler = testHandller2 89 fs.FileTarget[0].Policy.ID = 1 90 res, err := fs.GetThumb(context.Background(), 1) 91 a.ErrorIs(err, thumb.ErrNotAvailable) 92 a.Nil(res) 93 } 94 95 // thumb not initialized, thumb generated but cannot be open 96 { 97 mockGenerator := &thumbmock.GeneratorMock{} 98 thumb.Generators = []thumb.Generator{mockGenerator} 99 fs.CleanTargets() 100 fs.SetTargetFile(&[]model.File{{ 101 Policy: model.Policy{Type: "mock"}, 102 }}) 103 cache.Set("setting_thumb_vips_enabled", "1", 0) 104 testHandller2 := new(FileHeaderMock) 105 testHandller2.On("Thumb", testMock.Anything, &fs.FileTarget[0]).Return(&response.ContentResponse{}, driver.ErrorThumbNotExist) 106 testHandller2.On("Get", testMock.Anything, "").Return(MockRSC{}, nil) 107 mockGenerator.On("Generate", testMock.Anything, testMock.Anything, testMock.Anything, testMock.Anything, testMock.Anything). 108 Return(&thumb.Result{Path: "not_exit_thumb"}, nil) 109 110 fs.Handler = testHandller2 111 fs.FileTarget[0].Policy.ID = 1 112 res, err := fs.GetThumb(context.Background(), 1) 113 a.Contains(err.Error(), "failed to open temp thumb") 114 a.Nil(res.Content) 115 testHandller2.AssertExpectations(t) 116 mockGenerator.AssertExpectations(t) 117 } 118 } 119 120 func TestFileSystem_ThumbWorker(t *testing.T) { 121 asserts := assert.New(t) 122 123 asserts.NotPanics(func() { 124 getThumbWorker().addWorker() 125 getThumbWorker().releaseWorker() 126 }) 127 }