github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/mergeCode/runc/libcontainer/xattr/xattr_test.go (about) 1 // +build linux 2 3 package xattr_test 4 5 import ( 6 "os" 7 "testing" 8 9 "github.com/opencontainers/runc/libcontainer/xattr" 10 ) 11 12 func TestXattr(t *testing.T) { 13 tmp := "xattr_test" 14 out, err := os.OpenFile(tmp, os.O_WRONLY|os.O_CREATE, 0) 15 if err != nil { 16 t.Fatal("failed") 17 } 18 defer os.Remove(tmp) 19 attr := "user.test" 20 out.Close() 21 22 if !xattr.XattrEnabled(tmp) { 23 t.Log("Disabled") 24 t.Fatal("failed") 25 } 26 t.Log("Success") 27 28 err = xattr.Setxattr(tmp, attr, "test") 29 if err != nil { 30 t.Fatal("failed") 31 } 32 33 var value string 34 value, err = xattr.Getxattr(tmp, attr) 35 if err != nil { 36 t.Fatal("failed") 37 } 38 if value != "test" { 39 t.Fatal("failed") 40 } 41 t.Log("Success") 42 43 var names []string 44 names, err = xattr.Listxattr(tmp) 45 if err != nil { 46 t.Fatal("failed") 47 } 48 49 var found int 50 for _, name := range names { 51 if name == attr { 52 found = 1 53 } 54 } 55 // Listxattr doesn't return trusted.* and system.* namespace 56 // attrs when run in unprevileged mode. 57 if found != 1 { 58 t.Fatal("failed") 59 } 60 t.Log("Success") 61 62 big := "0000000000000000000000000000000000000000000000000000000000000000000008c6419ad822dfe29283fb3ac98dcc5908810cb31f4cfe690040c42c144b7492eicompslf20dxmlpgz" 63 // Test for long xattrs larger than 128 bytes 64 err = xattr.Setxattr(tmp, attr, big) 65 if err != nil { 66 t.Fatal("failed to add long value") 67 } 68 value, err = xattr.Getxattr(tmp, attr) 69 if err != nil { 70 t.Fatal("failed to get long value") 71 } 72 t.Log("Success") 73 74 if value != big { 75 t.Fatal("failed, value doesn't match") 76 } 77 t.Log("Success") 78 }