From 30de3524c2229f51e499858e9201cbcd8b9c2b80 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Sun, 8 Sep 2024 18:48:53 +0200 Subject: [PATCH] unix: fix Test{Fd,}Xattr failure on NetBSD On NetBSD the namespace of an xattr is stored separately from the name and isn't returned by Listxattr and Flistxattr. Like on FreeBSD, strip the namespace before checking the returned xattrs. Fixes golang/go#69313 Fixes golang/go#69314 Change-Id: I7f2393cc63f9860332c0e07a51f3b9d32911e892 Cq-Include-Trybots: luci.golang.try:x_sys-gotip-netbsd-arm64 Reviewed-on: https://go-review.googlesource.com/c/sys/+/611695 Auto-Submit: Tobias Klauser LUCI-TryBot-Result: Go LUCI Reviewed-by: Benny Siegert Reviewed-by: Ian Lance Taylor Commit-Queue: Ian Lance Taylor Auto-Submit: Ian Lance Taylor --- unix/xattr_test.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/unix/xattr_test.go b/unix/xattr_test.go index a8e4fb86d..a8be3ec5b 100644 --- a/unix/xattr_test.go +++ b/unix/xattr_test.go @@ -56,8 +56,9 @@ func TestXattr(t *testing.T) { xattrs := stringsFromByteSlice(buf[:read]) xattrWant := xattrName - if runtime.GOOS == "freebsd" { - // On FreeBSD, the namespace is stored separately from the xattr + switch runtime.GOOS { + case "freebsd", "netbsd": + // On FreeBSD and NetBSD, the namespace is stored separately from the xattr // name and Listxattr doesn't return the namespace prefix. xattrWant = strings.TrimPrefix(xattrWant, "user.") } @@ -65,11 +66,12 @@ func TestXattr(t *testing.T) { for _, name := range xattrs { if name == xattrWant { found = true + break } } if !found { - t.Errorf("Listxattr did not return previously set attribute '%s'", xattrName) + t.Errorf("Listxattr did not return previously set attribute %q in attributes %v", xattrName, xattrs) } // find size @@ -162,8 +164,9 @@ func TestFdXattr(t *testing.T) { xattrs := stringsFromByteSlice(buf[:read]) xattrWant := xattrName - if runtime.GOOS == "freebsd" { - // On FreeBSD, the namespace is stored separately from the xattr + switch runtime.GOOS { + case "freebsd", "netbsd": + // On FreeBSD and NetBSD, the namespace is stored separately from the xattr // name and Listxattr doesn't return the namespace prefix. xattrWant = strings.TrimPrefix(xattrWant, "user.") } @@ -171,11 +174,12 @@ func TestFdXattr(t *testing.T) { for _, name := range xattrs { if name == xattrWant { found = true + break } } if !found { - t.Errorf("Flistxattr did not return previously set attribute '%s'", xattrName) + t.Errorf("Flistxattr did not return previously set attribute %q in attributes %v", xattrName, xattrs) } // find size