67 lines
1.4 KiB
Go
67 lines
1.4 KiB
Go
|
package reverse_test
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"path/filepath"
|
||
|
"syscall"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/pkg/xattr"
|
||
|
)
|
||
|
|
||
|
func xattrSupported(path string) bool {
|
||
|
_, err := xattr.LGet(path, "user.xattrSupported-dummy-value")
|
||
|
if err == nil {
|
||
|
return true
|
||
|
}
|
||
|
err2 := err.(*xattr.Error)
|
||
|
if err2.Err == syscall.EOPNOTSUPP {
|
||
|
return false
|
||
|
}
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
func TestXattrList(t *testing.T) {
|
||
|
t.Skip("TODO: not implemented yet in reverse mode")
|
||
|
|
||
|
if !xattrSupported(dirA) {
|
||
|
t.Skip()
|
||
|
}
|
||
|
fnA := filepath.Join(dirA, t.Name())
|
||
|
err := ioutil.WriteFile(fnA, nil, 0700)
|
||
|
if err != nil {
|
||
|
t.Fatalf("creating empty file failed: %v", err)
|
||
|
}
|
||
|
val := []byte("xxxxxxxxyyyyyyyyyyyyyyyzzzzzzzzzzzzz")
|
||
|
num := 20
|
||
|
var namesA map[string]string
|
||
|
for i := 1; i <= num; i++ {
|
||
|
attr := fmt.Sprintf("user.TestXattrList.%02d", i)
|
||
|
err = xattr.LSet(fnA, attr, val)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
namesA[attr] = string(val)
|
||
|
}
|
||
|
fnC := filepath.Join(dirC, t.Name())
|
||
|
tmp, err := xattr.LList(fnC)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
var namesC map[string]string
|
||
|
for _, n := range tmp {
|
||
|
namesC[n] = string(val)
|
||
|
}
|
||
|
if len(namesA) != len(namesC) {
|
||
|
t.Errorf("wrong number of names, want=%d have=%d", len(namesA), len(namesC))
|
||
|
}
|
||
|
for i := range namesC {
|
||
|
valA := namesA[i]
|
||
|
valC := namesC[i]
|
||
|
if valC != valA {
|
||
|
t.Errorf("mismatch on attr %q: valA = %q, valC = %q", i, valA, valC)
|
||
|
}
|
||
|
}
|
||
|
}
|