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  }