mirror of
https://github.com/datarhei/core.git
synced 2025-09-27 04:16:25 +08:00
351 lines
7.1 KiB
Go
351 lines
7.1 KiB
Go
package fs
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func newMemFS() Filesystem {
|
|
mem, _ := NewMemFilesystem(MemConfig{})
|
|
|
|
return mem
|
|
}
|
|
|
|
func TestNewSized(t *testing.T) {
|
|
fs, _ := NewSizedFilesystem(newMemFS(), 10, false)
|
|
|
|
cur, max := fs.Size()
|
|
|
|
require.Equal(t, int64(0), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
cur = fs.Files()
|
|
|
|
require.Equal(t, int64(0), cur)
|
|
}
|
|
|
|
func TestSizedResize(t *testing.T) {
|
|
fs, _ := NewSizedFilesystem(newMemFS(), 10, false)
|
|
|
|
cur, max := fs.Size()
|
|
|
|
require.Equal(t, int64(0), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
err := fs.Resize(20)
|
|
require.NoError(t, err)
|
|
|
|
cur, max = fs.Size()
|
|
|
|
require.Equal(t, int64(0), cur)
|
|
require.Equal(t, int64(20), max)
|
|
}
|
|
|
|
func TestSizedResizePurge(t *testing.T) {
|
|
fs, _ := NewSizedFilesystem(newMemFS(), 10, false)
|
|
|
|
cur, max := fs.Size()
|
|
|
|
require.Equal(t, int64(0), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
fs.WriteFileReader("/foobar", strings.NewReader("xxxxxxxxxx"))
|
|
|
|
cur, max = fs.Size()
|
|
|
|
require.Equal(t, int64(10), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
err := fs.Resize(5)
|
|
require.NoError(t, err)
|
|
|
|
cur, max = fs.Size()
|
|
|
|
require.Equal(t, int64(0), cur)
|
|
require.Equal(t, int64(5), max)
|
|
}
|
|
|
|
func TestSizedWrite(t *testing.T) {
|
|
fs, _ := NewSizedFilesystem(newMemFS(), 10, false)
|
|
|
|
cur, max := fs.Size()
|
|
|
|
require.Equal(t, int64(0), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
size, created, err := fs.WriteFileReader("/foobar", strings.NewReader("xxxxx"))
|
|
require.NoError(t, err)
|
|
require.Equal(t, int64(5), size)
|
|
require.Equal(t, true, created)
|
|
|
|
cur, max = fs.Size()
|
|
|
|
require.Equal(t, int64(5), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
_, _, err = fs.WriteFile("/foobaz", []byte("xxxxxx"))
|
|
require.Error(t, err)
|
|
|
|
_, _, err = fs.WriteFileReader("/foobaz", strings.NewReader("xxxxxx"))
|
|
require.Error(t, err)
|
|
|
|
_, _, err = fs.WriteFileSafe("/foobaz", []byte("xxxxxx"))
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestSizedReplaceNoPurge(t *testing.T) {
|
|
fs, _ := NewSizedFilesystem(newMemFS(), 10, false)
|
|
|
|
data := strings.NewReader("xxxxx")
|
|
|
|
size, created, err := fs.WriteFileReader("/foobar", data)
|
|
|
|
require.Nil(t, err)
|
|
require.Equal(t, int64(5), size)
|
|
require.Equal(t, true, created)
|
|
|
|
cur, max := fs.Size()
|
|
|
|
require.Equal(t, int64(5), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
cur = fs.Files()
|
|
|
|
require.Equal(t, int64(1), cur)
|
|
|
|
data = strings.NewReader("yyy")
|
|
|
|
size, created, err = fs.WriteFileReader("/foobar", data)
|
|
|
|
require.Nil(t, err)
|
|
require.Equal(t, int64(3), size)
|
|
require.Equal(t, false, created)
|
|
|
|
cur, max = fs.Size()
|
|
|
|
require.Equal(t, int64(3), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
cur = fs.Files()
|
|
|
|
require.Equal(t, int64(1), cur)
|
|
}
|
|
|
|
func TestSizedReplacePurge(t *testing.T) {
|
|
fs, _ := NewSizedFilesystem(newMemFS(), 10, true)
|
|
|
|
data1 := strings.NewReader("xxx")
|
|
data2 := strings.NewReader("yyy")
|
|
data3 := strings.NewReader("zzz")
|
|
|
|
fs.WriteFileReader("/foobar1", data1)
|
|
fs.WriteFileReader("/foobar2", data2)
|
|
fs.WriteFileReader("/foobar3", data3)
|
|
|
|
cur, max := fs.Size()
|
|
|
|
require.Equal(t, int64(9), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
cur = fs.Files()
|
|
|
|
require.Equal(t, int64(3), cur)
|
|
|
|
data4 := strings.NewReader("zzzzz")
|
|
|
|
size, _, _ := fs.WriteFileReader("/foobar1", data4)
|
|
|
|
require.Equal(t, int64(5), size)
|
|
|
|
cur, max = fs.Size()
|
|
|
|
require.Equal(t, int64(8), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
cur = fs.Files()
|
|
|
|
require.Equal(t, int64(2), cur)
|
|
}
|
|
|
|
func TestSizedReplaceUnlimited(t *testing.T) {
|
|
fs, _ := NewSizedFilesystem(newMemFS(), -1, false)
|
|
|
|
data := strings.NewReader("xxxxx")
|
|
|
|
size, created, err := fs.WriteFileReader("/foobar", data)
|
|
|
|
require.Nil(t, err)
|
|
require.Equal(t, int64(5), size)
|
|
require.Equal(t, true, created)
|
|
|
|
cur, max := fs.Size()
|
|
|
|
require.Equal(t, int64(5), cur)
|
|
require.Equal(t, int64(-1), max)
|
|
|
|
cur = fs.Files()
|
|
|
|
require.Equal(t, int64(1), cur)
|
|
|
|
data = strings.NewReader("yyy")
|
|
|
|
size, created, err = fs.WriteFileReader("/foobar", data)
|
|
|
|
require.Nil(t, err)
|
|
require.Equal(t, int64(3), size)
|
|
require.Equal(t, false, created)
|
|
|
|
cur, max = fs.Size()
|
|
|
|
require.Equal(t, int64(3), cur)
|
|
require.Equal(t, int64(-1), max)
|
|
|
|
cur = fs.Files()
|
|
|
|
require.Equal(t, int64(1), cur)
|
|
}
|
|
|
|
func TestSizedTooBigNoPurge(t *testing.T) {
|
|
fs, _ := NewSizedFilesystem(newMemFS(), 10, false)
|
|
|
|
data := strings.NewReader("xxxxxyyyyyz")
|
|
|
|
size, _, err := fs.WriteFileReader("/foobar", data)
|
|
require.Error(t, err)
|
|
require.Equal(t, int64(-1), size)
|
|
}
|
|
|
|
func TestSizedTooBigPurge(t *testing.T) {
|
|
fs, _ := NewSizedFilesystem(newMemFS(), 10, true)
|
|
|
|
data1 := strings.NewReader("xxxxx")
|
|
data2 := strings.NewReader("yyyyy")
|
|
|
|
fs.WriteFileReader("/foobar1", data1)
|
|
fs.WriteFileReader("/foobar2", data2)
|
|
|
|
data := strings.NewReader("xxxxxyyyyyz")
|
|
|
|
size, _, err := fs.WriteFileReader("/foobar", data)
|
|
require.Error(t, err)
|
|
require.Equal(t, int64(-1), size)
|
|
|
|
require.Equal(t, int64(2), fs.Files())
|
|
}
|
|
|
|
func TestSizedFullSpaceNoPurge(t *testing.T) {
|
|
fs, _ := NewSizedFilesystem(newMemFS(), 10, false)
|
|
|
|
data1 := strings.NewReader("xxxxx")
|
|
data2 := strings.NewReader("yyyyy")
|
|
|
|
fs.WriteFileReader("/foobar1", data1)
|
|
fs.WriteFileReader("/foobar2", data2)
|
|
|
|
cur, max := fs.Size()
|
|
|
|
require.Equal(t, int64(10), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
cur = fs.Files()
|
|
|
|
require.Equal(t, int64(2), cur)
|
|
|
|
data3 := strings.NewReader("zzzzz")
|
|
|
|
size, _, err := fs.WriteFileReader("/foobar3", data3)
|
|
require.Error(t, err)
|
|
require.Equal(t, int64(-1), size)
|
|
}
|
|
|
|
func TestSizedFullSpacePurge(t *testing.T) {
|
|
fs, _ := NewSizedFilesystem(newMemFS(), 10, true)
|
|
|
|
data1 := strings.NewReader("xxxxx")
|
|
data2 := strings.NewReader("yyyyy")
|
|
|
|
fs.WriteFileReader("/foobar1", data1)
|
|
fs.WriteFileReader("/foobar2", data2)
|
|
|
|
cur, max := fs.Size()
|
|
|
|
require.Equal(t, int64(10), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
cur = fs.Files()
|
|
|
|
require.Equal(t, int64(2), cur)
|
|
|
|
data3 := strings.NewReader("zzzzz")
|
|
|
|
size, _, _ := fs.WriteFileReader("/foobar3", data3)
|
|
|
|
require.Equal(t, int64(5), size)
|
|
|
|
cur, max = fs.Size()
|
|
|
|
require.Equal(t, int64(10), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
cur = fs.Files()
|
|
|
|
require.Equal(t, int64(2), cur)
|
|
}
|
|
|
|
func TestSizedFullSpacePurgeMulti(t *testing.T) {
|
|
fs, _ := NewSizedFilesystem(newMemFS(), 10, true)
|
|
|
|
data1 := strings.NewReader("xxx")
|
|
data2 := strings.NewReader("yyy")
|
|
data3 := strings.NewReader("zzz")
|
|
|
|
fs.WriteFileReader("/foobar1", data1)
|
|
fs.WriteFileReader("/foobar2", data2)
|
|
fs.WriteFileReader("/foobar3", data3)
|
|
|
|
cur, max := fs.Size()
|
|
|
|
require.Equal(t, int64(9), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
cur = fs.Files()
|
|
|
|
require.Equal(t, int64(3), cur)
|
|
|
|
data4 := strings.NewReader("zzzzz")
|
|
|
|
size, _, _ := fs.WriteFileReader("/foobar4", data4)
|
|
|
|
require.Equal(t, int64(5), size)
|
|
|
|
cur, max = fs.Size()
|
|
|
|
require.Equal(t, int64(8), cur)
|
|
require.Equal(t, int64(10), max)
|
|
|
|
cur = fs.Files()
|
|
|
|
require.Equal(t, int64(2), cur)
|
|
}
|
|
|
|
func TestSizedPurgeOrder(t *testing.T) {
|
|
fs, _ := NewSizedFilesystem(newMemFS(), 10, true)
|
|
|
|
data1 := strings.NewReader("xxxxx")
|
|
data2 := strings.NewReader("yyyyy")
|
|
data3 := strings.NewReader("zzzzz")
|
|
|
|
fs.WriteFileReader("/foobar1", data1)
|
|
time.Sleep(1 * time.Second)
|
|
fs.WriteFileReader("/foobar2", data2)
|
|
time.Sleep(1 * time.Second)
|
|
fs.WriteFileReader("/foobar3", data3)
|
|
|
|
file := fs.Open("/foobar1")
|
|
|
|
require.Nil(t, file)
|
|
}
|