mirror of
https://github.com/datarhei/core.git
synced 2025-10-06 00:17:07 +08:00
407 lines
7.1 KiB
Go
407 lines
7.1 KiB
Go
package fs
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestNew(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 10,
|
|
Purge: false,
|
|
})
|
|
|
|
cur, max := mem.Size()
|
|
|
|
assert.Equal(t, int64(0), cur)
|
|
assert.Equal(t, int64(10), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(0), cur)
|
|
}
|
|
|
|
func TestSimplePutNoPurge(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 10,
|
|
Purge: false,
|
|
})
|
|
|
|
data := strings.NewReader("xxxxx")
|
|
|
|
size, created, err := mem.Store("/foobar", data)
|
|
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, int64(5), size)
|
|
assert.Equal(t, true, created)
|
|
|
|
cur, max := mem.Size()
|
|
|
|
assert.Equal(t, int64(5), cur)
|
|
assert.Equal(t, int64(10), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(1), cur)
|
|
}
|
|
|
|
func TestSimpleDelete(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 10,
|
|
Purge: false,
|
|
})
|
|
|
|
size := mem.Delete("/foobar")
|
|
|
|
assert.Equal(t, int64(-1), size)
|
|
|
|
data := strings.NewReader("xxxxx")
|
|
|
|
mem.Store("/foobar", data)
|
|
|
|
size = mem.Delete("/foobar")
|
|
|
|
assert.Equal(t, int64(5), size)
|
|
|
|
cur, max := mem.Size()
|
|
|
|
assert.Equal(t, int64(0), cur)
|
|
assert.Equal(t, int64(10), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(0), cur)
|
|
}
|
|
|
|
func TestReplaceNoPurge(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 10,
|
|
Purge: false,
|
|
})
|
|
|
|
data := strings.NewReader("xxxxx")
|
|
|
|
size, created, err := mem.Store("/foobar", data)
|
|
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, int64(5), size)
|
|
assert.Equal(t, true, created)
|
|
|
|
cur, max := mem.Size()
|
|
|
|
assert.Equal(t, int64(5), cur)
|
|
assert.Equal(t, int64(10), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(1), cur)
|
|
|
|
data = strings.NewReader("yyy")
|
|
|
|
size, created, err = mem.Store("/foobar", data)
|
|
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, int64(3), size)
|
|
assert.Equal(t, false, created)
|
|
|
|
cur, max = mem.Size()
|
|
|
|
assert.Equal(t, int64(3), cur)
|
|
assert.Equal(t, int64(10), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(1), cur)
|
|
}
|
|
|
|
func TestReplacePurge(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 10,
|
|
Purge: true,
|
|
})
|
|
|
|
data1 := strings.NewReader("xxx")
|
|
data2 := strings.NewReader("yyy")
|
|
data3 := strings.NewReader("zzz")
|
|
|
|
mem.Store("/foobar1", data1)
|
|
mem.Store("/foobar2", data2)
|
|
mem.Store("/foobar3", data3)
|
|
|
|
cur, max := mem.Size()
|
|
|
|
assert.Equal(t, int64(9), cur)
|
|
assert.Equal(t, int64(10), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(3), cur)
|
|
|
|
data4 := strings.NewReader("zzzzz")
|
|
|
|
size, _, _ := mem.Store("/foobar1", data4)
|
|
|
|
assert.Equal(t, int64(5), size)
|
|
|
|
cur, max = mem.Size()
|
|
|
|
assert.Equal(t, int64(8), cur)
|
|
assert.Equal(t, int64(10), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(2), cur)
|
|
}
|
|
|
|
func TestReplaceUnlimited(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 0,
|
|
Purge: false,
|
|
})
|
|
|
|
data := strings.NewReader("xxxxx")
|
|
|
|
size, created, err := mem.Store("/foobar", data)
|
|
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, int64(5), size)
|
|
assert.Equal(t, true, created)
|
|
|
|
cur, max := mem.Size()
|
|
|
|
assert.Equal(t, int64(5), cur)
|
|
assert.Equal(t, int64(0), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(1), cur)
|
|
|
|
data = strings.NewReader("yyy")
|
|
|
|
size, created, err = mem.Store("/foobar", data)
|
|
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, int64(3), size)
|
|
assert.Equal(t, false, created)
|
|
|
|
cur, max = mem.Size()
|
|
|
|
assert.Equal(t, int64(3), cur)
|
|
assert.Equal(t, int64(0), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(1), cur)
|
|
}
|
|
|
|
func TestTooBigNoPurge(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 10,
|
|
Purge: false,
|
|
})
|
|
|
|
data := strings.NewReader("xxxxxyyyyyz")
|
|
|
|
size, _, _ := mem.Store("/foobar", data)
|
|
|
|
assert.Equal(t, int64(-1), size)
|
|
}
|
|
|
|
func TestTooBigPurge(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 10,
|
|
Purge: true,
|
|
})
|
|
|
|
data1 := strings.NewReader("xxxxx")
|
|
data2 := strings.NewReader("yyyyy")
|
|
|
|
mem.Store("/foobar1", data1)
|
|
mem.Store("/foobar2", data2)
|
|
|
|
data := strings.NewReader("xxxxxyyyyyz")
|
|
|
|
size, _, _ := mem.Store("/foobar", data)
|
|
|
|
assert.Equal(t, int64(-1), size)
|
|
}
|
|
|
|
func TestFullSpaceNoPurge(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 10,
|
|
Purge: false,
|
|
})
|
|
|
|
data1 := strings.NewReader("xxxxx")
|
|
data2 := strings.NewReader("yyyyy")
|
|
|
|
mem.Store("/foobar1", data1)
|
|
mem.Store("/foobar2", data2)
|
|
|
|
cur, max := mem.Size()
|
|
|
|
assert.Equal(t, int64(10), cur)
|
|
assert.Equal(t, int64(10), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(2), cur)
|
|
|
|
data3 := strings.NewReader("zzzzz")
|
|
|
|
size, _, _ := mem.Store("/foobar3", data3)
|
|
|
|
assert.Equal(t, int64(-1), size)
|
|
}
|
|
|
|
func TestFullSpacePurge(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 10,
|
|
Purge: true,
|
|
})
|
|
|
|
data1 := strings.NewReader("xxxxx")
|
|
data2 := strings.NewReader("yyyyy")
|
|
|
|
mem.Store("/foobar1", data1)
|
|
mem.Store("/foobar2", data2)
|
|
|
|
cur, max := mem.Size()
|
|
|
|
assert.Equal(t, int64(10), cur)
|
|
assert.Equal(t, int64(10), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(2), cur)
|
|
|
|
data3 := strings.NewReader("zzzzz")
|
|
|
|
size, _, _ := mem.Store("/foobar3", data3)
|
|
|
|
assert.Equal(t, int64(5), size)
|
|
|
|
cur, max = mem.Size()
|
|
|
|
assert.Equal(t, int64(10), cur)
|
|
assert.Equal(t, int64(10), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(2), cur)
|
|
}
|
|
|
|
func TestFullSpacePurgeMulti(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 10,
|
|
Purge: true,
|
|
})
|
|
|
|
data1 := strings.NewReader("xxx")
|
|
data2 := strings.NewReader("yyy")
|
|
data3 := strings.NewReader("zzz")
|
|
|
|
mem.Store("/foobar1", data1)
|
|
mem.Store("/foobar2", data2)
|
|
mem.Store("/foobar3", data3)
|
|
|
|
cur, max := mem.Size()
|
|
|
|
assert.Equal(t, int64(9), cur)
|
|
assert.Equal(t, int64(10), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(3), cur)
|
|
|
|
data4 := strings.NewReader("zzzzz")
|
|
|
|
size, _, _ := mem.Store("/foobar4", data4)
|
|
|
|
assert.Equal(t, int64(5), size)
|
|
|
|
cur, max = mem.Size()
|
|
|
|
assert.Equal(t, int64(8), cur)
|
|
assert.Equal(t, int64(10), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(2), cur)
|
|
}
|
|
|
|
func TestPurgeOrder(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 10,
|
|
Purge: true,
|
|
})
|
|
|
|
data1 := strings.NewReader("xxxxx")
|
|
data2 := strings.NewReader("yyyyy")
|
|
data3 := strings.NewReader("zzzzz")
|
|
|
|
mem.Store("/foobar1", data1)
|
|
time.Sleep(1 * time.Second)
|
|
mem.Store("/foobar2", data2)
|
|
time.Sleep(1 * time.Second)
|
|
mem.Store("/foobar3", data3)
|
|
|
|
file := mem.Open("/foobar1")
|
|
|
|
assert.Nil(t, file)
|
|
}
|
|
|
|
func TestList(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 10,
|
|
Purge: false,
|
|
})
|
|
|
|
data1 := strings.NewReader("a")
|
|
data2 := strings.NewReader("bb")
|
|
data3 := strings.NewReader("ccc")
|
|
data4 := strings.NewReader("dddd")
|
|
|
|
mem.Store("/foobar1", data1)
|
|
mem.Store("/foobar2", data2)
|
|
mem.Store("/foobar3", data3)
|
|
mem.Store("/foobar4", data4)
|
|
|
|
cur, max := mem.Size()
|
|
|
|
assert.Equal(t, int64(10), cur)
|
|
assert.Equal(t, int64(10), max)
|
|
|
|
cur = mem.Files()
|
|
|
|
assert.Equal(t, int64(4), cur)
|
|
|
|
files := mem.List("")
|
|
|
|
assert.Equal(t, 4, len(files))
|
|
}
|
|
|
|
func TestData(t *testing.T) {
|
|
mem := NewMemFilesystem(MemConfig{
|
|
Size: 10,
|
|
Purge: false,
|
|
})
|
|
|
|
data := "gduwotoxqb"
|
|
|
|
data1 := strings.NewReader(data)
|
|
|
|
mem.Store("/foobar", data1)
|
|
|
|
file := mem.Open("/foobar")
|
|
|
|
data2 := make([]byte, len(data)+1)
|
|
n, _ := file.Read(data2)
|
|
|
|
assert.Equal(t, len(data), n)
|
|
assert.Equal(t, []byte(data), data2[:n])
|
|
}
|