learning_go/pkg/mod/github.com/ceph/go-ceph@v0.35.0/cephfs/fscompat_test.go
a.pivkin c5bc4da2c3 sdf
2025-09-08 07:26:27 +03:00

80 lines
2.4 KiB
Go

package cephfs
import (
"io/fs"
"os"
"testing"
"testing/fstest"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
// "github.com/ceph/go-ceph/common/log"
)
func TestFSCompat(t *testing.T) {
mount := fsConnect(t)
defer fsDisconnect(t, mount)
// set up a few dirs
err := mount.MakeDir("fst_foo", 0755)
require.NoError(t, err)
defer func() { assert.NoError(t, mount.RemoveDir("fst_foo")) }()
err = mount.MakeDir("fst_bar", 0755)
require.NoError(t, err)
defer func() { assert.NoError(t, mount.RemoveDir("fst_bar")) }()
err = mount.MakeDir("fst_bar/fst_baz", 0755)
require.NoError(t, err)
defer func() { assert.NoError(t, mount.RemoveDir("fst_bar/fst_baz")) }()
// set up a few files
writeFile(t, mount, "wibble.txt", []byte("nothing to see here"))
defer func() { assert.NoError(t, mount.Unlink("wibble.txt")) }()
writeFile(t, mount, "fst_bar/nuffin.txt", []byte(""))
defer func() { assert.NoError(t, mount.Unlink("fst_bar/nuffin.txt")) }()
writeFile(t, mount, "fst_bar/fst_baz/super.txt", []byte("this is my favorite file"))
defer func() { assert.NoError(t, mount.Unlink("fst_bar/fst_baz/super.txt")) }()
writeFile(t, mount, "boop.txt", []byte("abcdefg"))
defer func() { assert.NoError(t, mount.Unlink("boop.txt")) }()
// uncomment for detailed debug level logging
// log.SetDebugf(t.Logf)
t.Run("testFS", func(t *testing.T) {
w := Wrap(mount)
if err := fstest.TestFS(w, "wibble.txt", "fst_bar/nuffin.txt", "fst_bar/fst_baz/super.txt", "boop.txt"); err != nil {
t.Fatal(err)
}
})
t.Run("walkDir", func(t *testing.T) {
w := Wrap(mount)
dirs := []string{}
files := []string{}
fs.WalkDir(w, ".", func(path string, d fs.DirEntry, err error) error {
assert.NoError(t, err)
if d.IsDir() {
dirs = append(dirs, path)
} else {
files = append(files, path)
}
return nil
})
assert.Contains(t, dirs, ".")
assert.Contains(t, dirs, "fst_foo")
assert.Contains(t, dirs, "fst_bar")
assert.Contains(t, dirs, "fst_bar/fst_baz")
assert.Contains(t, files, "wibble.txt")
assert.Contains(t, files, "boop.txt")
assert.Contains(t, files, "fst_bar/nuffin.txt")
assert.Contains(t, files, "fst_bar/fst_baz/super.txt")
})
}
func writeFile(t *testing.T, mount *MountInfo, name string, data []byte) {
f, err := mount.Open(name, os.O_WRONLY|os.O_CREATE, 0600)
require.NoError(t, err)
defer func() { assert.NoError(t, f.Close()) }()
_, err = f.Write(data)
require.NoError(t, err)
}