You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
naza/pkg/filesystemlayer/fsl_test.go

113 lines
2.9 KiB
Go

// Copyright 2021, Chef. All rights reserved.
// https://github.com/q191201771/naza
//
// Use of this source code is governed by a MIT-style license
// that can be found in the License file.
//
// Author: Chef (191201771@qq.com)
package filesystemlayer_test
import (
"fmt"
"sync"
"testing"
"github.com/q191201771/naza/pkg/nazalog"
"github.com/q191201771/naza/pkg/assert"
"github.com/q191201771/naza/pkg/filesystemlayer"
)
func TestCase1(t *testing.T) {
fslCtx := filesystemlayer.FslFactory(filesystemlayer.FslTypeMemory)
var wg sync.WaitGroup
wg.Add(16)
for i := 0; i < 16; i++ {
go func(ii int) {
dir := fmt.Sprintf("/tmp/lal/hls/test%d", ii)
err := fslCtx.MkdirAll(dir, 0777)
assert.Equal(t, nil, err)
for j := 0; j < 32; j++ {
filename := fmt.Sprintf("/tmp/lal/hls/test%d/%d.ts", ii, j)
nazalog.Infof("%d %d %s", ii, j, filename)
fp, err := fslCtx.Create(filename)
assert.Equal(t, nil, err)
n, err := fp.Write([]byte("hello"))
assert.Equal(t, nil, err)
assert.Equal(t, 5, n)
n, err = fp.Write([]byte("world"))
assert.Equal(t, nil, err)
assert.Equal(t, 5, n)
err = fp.Close()
assert.Equal(t, nil, err)
}
wg.Done()
}(i)
}
wg.Wait()
// 正常读
b, err := fslCtx.ReadFile("/tmp/lal/hls/test1/1.ts")
assert.Equal(t, nil, err)
assert.Equal(t, []byte("helloworld"), b)
// 删文件
err = fslCtx.Remove("/tmp/lal/hls/test1/1.ts")
assert.Equal(t, nil, err)
b, err = fslCtx.ReadFile("/tmp/lal/hls/test1/1.ts")
assert.Equal(t, filesystemlayer.ErrNotFound, err)
assert.Equal(t, nil, b)
// 正常读
b, err = fslCtx.ReadFile("/tmp/lal/hls/test2/2.ts")
assert.Equal(t, nil, err)
assert.Equal(t, []byte("helloworld"), b)
// 文件重命名
err = fslCtx.Rename("/tmp/lal/hls/test2/2.ts", "/tmp/lal/hls/test2/new2.ts")
b, err = fslCtx.ReadFile("/tmp/lal/hls/test2/2.ts")
assert.Equal(t, filesystemlayer.ErrNotFound, err)
assert.Equal(t, nil, b)
b, err = fslCtx.ReadFile("/tmp/lal/hls/test2/new2.ts")
assert.Equal(t, nil, err)
assert.Equal(t, []byte("helloworld"), b)
// 删文件夹
err = fslCtx.RemoveAll("/tmp/lal/hls/test1")
assert.Equal(t, nil, err)
b, err = fslCtx.ReadFile("/tmp/lal/hls/test1/1.ts")
assert.Equal(t, filesystemlayer.ErrNotFound, err)
assert.Equal(t, nil, b)
// 创建已经存在的文件
fp, err := fslCtx.Create("/tmp/lal/hls/test3/3.ts")
assert.Equal(t, nil, err)
b, err = fslCtx.ReadFile("/tmp/lal/hls/test3/3.ts")
assert.Equal(t, nil, err)
assert.Equal(t, nil, b)
n, err := fp.Write([]byte("asd"))
assert.Equal(t, nil, err)
assert.Equal(t, 3, n)
b, err = fslCtx.ReadFile("/tmp/lal/hls/test3/3.ts")
assert.Equal(t, nil, err)
assert.Equal(t, []byte("asd"), b)
// 删除不存在的文件
err = fslCtx.Remove("/tmp/lal/hls/test1/1.ts")
assert.Equal(t, filesystemlayer.ErrNotFound, err)
// 重命名不存在的文件
err = fslCtx.Rename("/tmp/lal/hls/test1/1.ts", "/tmp/lal/hls/test1/new1.ts")
assert.Equal(t, filesystemlayer.ErrNotFound, err)
}