mirror of
https://github.com/hanzoai/go-fuse.git
synced 2026-10-30 14:46:18 +00:00
98 lines
2.1 KiB
Go
98 lines
2.1 KiB
Go
// Copyright 2016 the Go-FUSE Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
//go:build linux
|
|
// +build linux
|
|
|
|
package test
|
|
|
|
import (
|
|
"path/filepath"
|
|
"syscall"
|
|
"testing"
|
|
|
|
"github.com/hanzoai/go-fuse/v2/fuse"
|
|
"github.com/hanzoai/go-fuse/v2/fuse/nodefs"
|
|
"github.com/hanzoai/go-fuse/v2/internal/testutil"
|
|
)
|
|
|
|
// this file is linux-only, since it uses syscall.Getxattr.
|
|
|
|
type xattrNode struct {
|
|
nodefs.Node
|
|
}
|
|
|
|
func (n *xattrNode) OnMount(fsConn *nodefs.FileSystemConnector) {
|
|
n.Inode().NewChild("child", false, &xattrChildNode{nodefs.NewDefaultNode()})
|
|
}
|
|
|
|
type xattrChildNode struct {
|
|
nodefs.Node
|
|
}
|
|
|
|
func (n *xattrChildNode) GetXAttr(attr string, context *fuse.Context) ([]byte, fuse.Status) {
|
|
if attr == "attr" {
|
|
return []byte("value"), fuse.OK
|
|
}
|
|
return []byte(""), fuse.OK
|
|
}
|
|
|
|
func TestDefaultXAttr(t *testing.T) {
|
|
dir := t.TempDir()
|
|
|
|
root := &xattrNode{
|
|
Node: nodefs.NewDefaultNode(),
|
|
}
|
|
|
|
opts := nodefs.NewOptions()
|
|
opts.Debug = testutil.VerboseTest()
|
|
s, _, err := nodefs.MountRoot(dir, root, opts)
|
|
if err != nil {
|
|
t.Fatalf("MountRoot: %v", err)
|
|
}
|
|
go s.Serve()
|
|
if err := s.WaitMount(); err != nil {
|
|
t.Fatal("WaitMount", err)
|
|
}
|
|
|
|
defer s.Unmount()
|
|
|
|
var data [1024]byte
|
|
sz, err := syscall.Getxattr(filepath.Join(dir, "child"), "attr", data[:])
|
|
if err != nil {
|
|
t.Fatalf("Getxattr: %v", err)
|
|
} else if got, want := string(data[:sz]), "value"; got != want {
|
|
t.Fatalf("got %q, want %q", got, want)
|
|
}
|
|
}
|
|
|
|
func TestEmptyXAttr(t *testing.T) {
|
|
dir := t.TempDir()
|
|
|
|
root := &xattrNode{
|
|
Node: nodefs.NewDefaultNode(),
|
|
}
|
|
|
|
opts := nodefs.NewOptions()
|
|
opts.Debug = testutil.VerboseTest()
|
|
s, _, err := nodefs.MountRoot(dir, root, opts)
|
|
if err != nil {
|
|
t.Fatalf("MountRoot: %v", err)
|
|
}
|
|
go s.Serve()
|
|
if err := s.WaitMount(); err != nil {
|
|
t.Fatal("WaitMount", err)
|
|
}
|
|
|
|
defer s.Unmount()
|
|
|
|
var data [1024]byte
|
|
sz, err := syscall.Getxattr(filepath.Join(dir, "child"), "attr2", data[:])
|
|
if err != nil {
|
|
t.Fatalf("Getxattr: %v", err)
|
|
} else if got, want := string(data[:sz]), ""; got != want {
|
|
t.Fatalf("got %q, want %q", got, want)
|
|
}
|
|
}
|