github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/filesystem/validator_test.go (about) 1 package filesystem 2 3 import ( 4 "context" 5 "database/sql" 6 "testing" 7 8 "github.com/DATA-DOG/go-sqlmock" 9 model "github.com/cloudreve/Cloudreve/v3/models" 10 "github.com/cloudreve/Cloudreve/v3/pkg/cache" 11 "github.com/jinzhu/gorm" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 var mock sqlmock.Sqlmock 16 17 // TestMain 初始化数据库Mock 18 func TestMain(m *testing.M) { 19 var db *sql.DB 20 var err error 21 db, mock, err = sqlmock.New() 22 if err != nil { 23 panic("An error was not expected when opening a stub database connection") 24 } 25 model.DB, _ = gorm.Open("mysql", db) 26 defer db.Close() 27 m.Run() 28 } 29 30 func TestFileSystem_ValidateLegalName(t *testing.T) { 31 asserts := assert.New(t) 32 ctx := context.Background() 33 fs := FileSystem{} 34 asserts.True(fs.ValidateLegalName(ctx, "1.txt")) 35 asserts.True(fs.ValidateLegalName(ctx, "1-1.txt")) 36 asserts.True(fs.ValidateLegalName(ctx, "1?1.txt")) 37 asserts.False(fs.ValidateLegalName(ctx, "1:1.txt")) 38 asserts.False(fs.ValidateLegalName(ctx, "../11.txt")) 39 asserts.False(fs.ValidateLegalName(ctx, "/11.txt")) 40 asserts.False(fs.ValidateLegalName(ctx, "\\11.txt")) 41 asserts.False(fs.ValidateLegalName(ctx, "")) 42 asserts.False(fs.ValidateLegalName(ctx, "1.tx t ")) 43 asserts.True(fs.ValidateLegalName(ctx, "1.tx t")) 44 } 45 46 func TestFileSystem_ValidateCapacity(t *testing.T) { 47 asserts := assert.New(t) 48 ctx := context.Background() 49 cache.Set("pack_size_0", uint64(0), 0) 50 fs := FileSystem{ 51 User: &model.User{ 52 Storage: 10, 53 Group: model.Group{ 54 MaxStorage: 11, 55 }, 56 }, 57 } 58 59 asserts.True(fs.ValidateCapacity(ctx, 1)) 60 asserts.Equal(uint64(11), fs.User.Storage) 61 62 fs.User.Storage = 5 63 asserts.False(fs.ValidateCapacity(ctx, 10)) 64 asserts.Equal(uint64(5), fs.User.Storage) 65 } 66 67 func TestFileSystem_ValidateFileSize(t *testing.T) { 68 asserts := assert.New(t) 69 ctx := context.Background() 70 fs := FileSystem{ 71 User: &model.User{}, 72 Policy: &model.Policy{ 73 MaxSize: 10, 74 }, 75 } 76 77 asserts.True(fs.ValidateFileSize(ctx, 5)) 78 asserts.True(fs.ValidateFileSize(ctx, 10)) 79 asserts.False(fs.ValidateFileSize(ctx, 11)) 80 81 // 无限制 82 fs.Policy.MaxSize = 0 83 asserts.True(fs.ValidateFileSize(ctx, 11)) 84 } 85 86 func TestFileSystem_ValidateExtension(t *testing.T) { 87 asserts := assert.New(t) 88 ctx := context.Background() 89 fs := FileSystem{ 90 User: &model.User{}, 91 Policy: &model.Policy{ 92 OptionsSerialized: model.PolicyOption{ 93 FileType: nil, 94 }, 95 }, 96 } 97 98 asserts.True(fs.ValidateExtension(ctx, "1")) 99 asserts.True(fs.ValidateExtension(ctx, "1.txt")) 100 101 fs.Policy.OptionsSerialized.FileType = []string{} 102 asserts.True(fs.ValidateExtension(ctx, "1")) 103 asserts.True(fs.ValidateExtension(ctx, "1.txt")) 104 105 fs.Policy.OptionsSerialized.FileType = []string{"txt", "jpg"} 106 asserts.False(fs.ValidateExtension(ctx, "1")) 107 asserts.False(fs.ValidateExtension(ctx, "1.jpg.png")) 108 asserts.True(fs.ValidateExtension(ctx, "1.txt")) 109 asserts.True(fs.ValidateExtension(ctx, "1.png.jpg")) 110 asserts.True(fs.ValidateExtension(ctx, "1.png.jpG")) 111 asserts.False(fs.ValidateExtension(ctx, "1.png")) 112 }