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  }