// +build linux package xattr_test import ( "os" "testing" "github.com/opencontainers/runc/libcontainer/xattr" ) func TestXattr(t *testing.T) { tmp := "xattr_test" out, err := os.OpenFile(tmp, os.O_WRONLY|os.O_CREATE, 0) if err != nil { t.Fatal("failed") } defer os.Remove(tmp) attr := "user.test" out.Close() if !xattr.XattrEnabled(tmp) { t.Log("Disabled") t.Fatal("failed") } t.Log("Success") err = xattr.Setxattr(tmp, attr, "test") if err != nil { t.Fatal("failed") } var value string value, err = xattr.Getxattr(tmp, attr) if err != nil { t.Fatal("failed") } if value != "test" { t.Fatal("failed") } t.Log("Success") var names []string names, err = xattr.Listxattr(tmp) if err != nil { t.Fatal("failed") } var found int for _, name := range names { if name == attr { found = 1 } } // Listxattr doesn't return trusted.* and system.* namespace // attrs when run in unprevileged mode. if found != 1 { t.Fatal("failed") } t.Log("Success") big := "0000000000000000000000000000000000000000000000000000000000000000000008c6419ad822dfe29283fb3ac98dcc5908810cb31f4cfe690040c42c144b7492eicompslf20dxmlpgz" // Test for long xattrs larger than 128 bytes err = xattr.Setxattr(tmp, attr, big) if err != nil { t.Fatal("failed to add long value") } value, err = xattr.Getxattr(tmp, attr) if err != nil { t.Fatal("failed to get long value") } t.Log("Success") if value != big { t.Fatal("failed, value doesn't match") } t.Log("Success") }