mirror of
https://github.com/halejohn/Cloudreve.git
synced 2026-01-26 09:34:57 +08:00
Feat: new changes in pkg: chunk, backoff, local, onedrive
This commit is contained in:
@@ -161,7 +161,7 @@ func (handler Driver) Truncate(ctx context.Context, src string, size uint64) err
|
||||
util.Log().Warning("截断文件 [%s] 至 [%d]", src, size)
|
||||
out, err := os.OpenFile(src, os.O_WRONLY, Perm)
|
||||
if err != nil {
|
||||
util.Log().Warning("无法打开或创建文件,%s", err)
|
||||
util.Log().Warning("无法打开文件,%s", err)
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -4,13 +4,12 @@ import (
|
||||
"context"
|
||||
model "github.com/cloudreve/Cloudreve/v3/models"
|
||||
"github.com/cloudreve/Cloudreve/v3/pkg/auth"
|
||||
"github.com/cloudreve/Cloudreve/v3/pkg/conf"
|
||||
"github.com/cloudreve/Cloudreve/v3/pkg/filesystem/fsctx"
|
||||
"github.com/cloudreve/Cloudreve/v3/pkg/serializer"
|
||||
"github.com/cloudreve/Cloudreve/v3/pkg/util"
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
@@ -20,42 +19,64 @@ import (
|
||||
func TestHandler_Put(t *testing.T) {
|
||||
asserts := assert.New(t)
|
||||
handler := Driver{}
|
||||
ctx := context.WithValue(context.Background(), fsctx.DisableOverwrite, true)
|
||||
os.Remove(util.RelativePath("test/test/txt"))
|
||||
|
||||
defer func() {
|
||||
os.Remove(util.RelativePath("TestHandler_Put.txt"))
|
||||
os.Remove(util.RelativePath("inner/TestHandler_Put.txt"))
|
||||
}()
|
||||
|
||||
testCases := []struct {
|
||||
file io.ReadCloser
|
||||
dst string
|
||||
err bool
|
||||
file fsctx.FileHeader
|
||||
errContains string
|
||||
}{
|
||||
{
|
||||
file: ioutil.NopCloser(strings.NewReader("test input file")),
|
||||
dst: "test/test/txt",
|
||||
err: false,
|
||||
},
|
||||
{
|
||||
file: ioutil.NopCloser(strings.NewReader("test input file")),
|
||||
dst: "test/test/txt",
|
||||
err: true,
|
||||
},
|
||||
{
|
||||
file: ioutil.NopCloser(strings.NewReader("test input file")),
|
||||
dst: "/notexist:/S.TXT",
|
||||
err: true,
|
||||
},
|
||||
{&fsctx.FileStream{
|
||||
SavePath: "TestHandler_Put.txt",
|
||||
File: io.NopCloser(strings.NewReader("")),
|
||||
}, ""},
|
||||
{&fsctx.FileStream{
|
||||
SavePath: "TestHandler_Put.txt",
|
||||
File: io.NopCloser(strings.NewReader("")),
|
||||
}, "物理同名文件已存在或不可用"},
|
||||
{&fsctx.FileStream{
|
||||
SavePath: "inner/TestHandler_Put.txt",
|
||||
File: io.NopCloser(strings.NewReader("")),
|
||||
}, ""},
|
||||
{&fsctx.FileStream{
|
||||
Mode: fsctx.Append | fsctx.Overwrite,
|
||||
SavePath: "inner/TestHandler_Put.txt",
|
||||
File: io.NopCloser(strings.NewReader("123")),
|
||||
}, ""},
|
||||
{&fsctx.FileStream{
|
||||
AppendStart: 10,
|
||||
Mode: fsctx.Append | fsctx.Overwrite,
|
||||
SavePath: "inner/TestHandler_Put.txt",
|
||||
File: io.NopCloser(strings.NewReader("123")),
|
||||
}, "未上传完成的文件分片与预期大小不一致"},
|
||||
{&fsctx.FileStream{
|
||||
Mode: fsctx.Append | fsctx.Overwrite,
|
||||
SavePath: "inner/TestHandler_Put.txt",
|
||||
File: io.NopCloser(strings.NewReader("123")),
|
||||
}, ""},
|
||||
}
|
||||
|
||||
for _, testCase := range testCases {
|
||||
err := handler.Put(ctx, testCase.file, testCase.dst, 15)
|
||||
if testCase.err {
|
||||
err := handler.Put(context.Background(), testCase.file)
|
||||
if testCase.errContains != "" {
|
||||
asserts.Error(err)
|
||||
asserts.Contains(err.Error(), testCase.errContains)
|
||||
} else {
|
||||
asserts.NoError(err)
|
||||
asserts.True(util.Exists(util.RelativePath(testCase.dst)))
|
||||
asserts.True(util.Exists(util.RelativePath(testCase.file.Info().SavePath)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDriver_TruncateFailed(t *testing.T) {
|
||||
a := assert.New(t)
|
||||
h := Driver{}
|
||||
a.Error(h.Truncate(context.Background(), "TestDriver_TruncateFailed", 0))
|
||||
}
|
||||
|
||||
func TestHandler_Delete(t *testing.T) {
|
||||
asserts := assert.New(t)
|
||||
handler := Driver{}
|
||||
@@ -116,7 +137,7 @@ func TestHandler_Thumb(t *testing.T) {
|
||||
asserts := assert.New(t)
|
||||
handler := Driver{}
|
||||
ctx := context.Background()
|
||||
file, err := os.Create(util.RelativePath("TestHandler_Thumb" + conf.ThumbConfig.FileSuffix))
|
||||
file, err := os.Create(util.RelativePath("TestHandler_Thumb._thumb"))
|
||||
asserts.NoError(err)
|
||||
file.Close()
|
||||
|
||||
@@ -160,6 +181,25 @@ func TestHandler_Source(t *testing.T) {
|
||||
asserts.Contains(sourceURL, "https://cloudreve.org")
|
||||
}
|
||||
|
||||
// 下载
|
||||
{
|
||||
file := model.File{
|
||||
Model: gorm.Model{
|
||||
ID: 1,
|
||||
},
|
||||
Name: "test.jpg",
|
||||
}
|
||||
ctx := context.WithValue(ctx, fsctx.FileModelCtx, file)
|
||||
baseURL, err := url.Parse("https://cloudreve.org")
|
||||
asserts.NoError(err)
|
||||
sourceURL, err := handler.Source(ctx, "", *baseURL, 0, true, 0)
|
||||
asserts.NoError(err)
|
||||
asserts.NotEmpty(sourceURL)
|
||||
asserts.Contains(sourceURL, "sign=")
|
||||
asserts.Contains(sourceURL, "download")
|
||||
asserts.Contains(sourceURL, "https://cloudreve.org")
|
||||
}
|
||||
|
||||
// 无法获取上下文
|
||||
{
|
||||
baseURL, err := url.Parse("https://cloudreve.org")
|
||||
@@ -241,10 +281,29 @@ func TestHandler_GetDownloadURL(t *testing.T) {
|
||||
|
||||
func TestHandler_Token(t *testing.T) {
|
||||
asserts := assert.New(t)
|
||||
handler := Driver{}
|
||||
handler := Driver{
|
||||
Policy: &model.Policy{},
|
||||
}
|
||||
ctx := context.Background()
|
||||
_, err := handler.Token(ctx, 10, "123")
|
||||
upSession := &serializer.UploadSession{SavePath: "TestHandler_Token"}
|
||||
_, err := handler.Token(ctx, 10, upSession, &fsctx.FileStream{})
|
||||
asserts.NoError(err)
|
||||
|
||||
file, _ := os.Create("TestHandler_Token")
|
||||
defer func() {
|
||||
file.Close()
|
||||
os.Remove("TestHandler_Token")
|
||||
}()
|
||||
|
||||
_, err = handler.Token(ctx, 10, upSession, &fsctx.FileStream{})
|
||||
asserts.Error(err)
|
||||
asserts.Contains(err.Error(), "already exist")
|
||||
}
|
||||
|
||||
func TestDriver_CancelToken(t *testing.T) {
|
||||
a := assert.New(t)
|
||||
handler := Driver{}
|
||||
a.NoError(handler.CancelToken(context.Background(), &serializer.UploadSession{}))
|
||||
}
|
||||
|
||||
func TestDriver_List(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user