From 41b99dab0f263bd3fe5c2592f1c40735dcaa016a Mon Sep 17 00:00:00 2001
From: Kir Kolyshkin <kolyshkin@gmail.com>
Date: Tue, 22 Jun 2021 20:26:31 -0700
Subject: [PATCH] os/user: don't skip TestLookupGroup if supported

CL 37664 implemented this functionality, yet the tests were skipped.

Introduce and use additional variable groupListImplemented to
distinguish between these cases and enable TestLookupGroup for
supported configurations (which looks like all but plan9).

Change-Id: Iabaa7f08b4551dc67e67bdb6e715f15bb20d6218
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/330751
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
---
 src/os/user/lookup_plan9.go | 1 +
 src/os/user/lookup_stubs.go | 2 +-
 src/os/user/lookup_unix.go  | 8 +++++---
 src/os/user/user.go         | 7 +++++--
 src/os/user/user_test.go    | 9 ++++++++-
 5 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/src/os/user/lookup_plan9.go b/src/os/user/lookup_plan9.go
index 51caf55935e..07939363e73 100644
--- a/src/os/user/lookup_plan9.go
+++ b/src/os/user/lookup_plan9.go
@@ -20,6 +20,7 @@ const (
 func init() {
 	userImplemented = false
 	groupImplemented = false
+	groupListImplemented = false
 }
 
 func current() (*User, error) {
diff --git a/src/os/user/lookup_stubs.go b/src/os/user/lookup_stubs.go
index c975a11964c..d8e3d4866a5 100644
--- a/src/os/user/lookup_stubs.go
+++ b/src/os/user/lookup_stubs.go
@@ -16,7 +16,7 @@ import (
 )
 
 func init() {
-	groupImplemented = false
+	groupListImplemented = false
 }
 
 func current() (*User, error) {
diff --git a/src/os/user/lookup_unix.go b/src/os/user/lookup_unix.go
index 97c611fad42..dffea4a8854 100644
--- a/src/os/user/lookup_unix.go
+++ b/src/os/user/lookup_unix.go
@@ -18,13 +18,15 @@ import (
 	"strings"
 )
 
-const groupFile = "/etc/group"
-const userFile = "/etc/passwd"
+const (
+	groupFile = "/etc/group"
+	userFile  = "/etc/passwd"
+)
 
 var colon = []byte{':'}
 
 func init() {
-	groupImplemented = false
+	groupListImplemented = false
 }
 
 // lineFunc returns a value, an error, or (nil, nil) to skip the row.
diff --git a/src/os/user/user.go b/src/os/user/user.go
index c1b8101c862..4e1b5b34070 100644
--- a/src/os/user/user.go
+++ b/src/os/user/user.go
@@ -20,9 +20,12 @@ import (
 	"strconv"
 )
 
+// These may be set to false in init() for a particular platform and/or
+// build flags to let the tests know to skip tests of some features.
 var (
-	userImplemented  = true // set to false by lookup_stubs.go's init
-	groupImplemented = true // set to false by lookup_stubs.go's init
+	userImplemented      = true
+	groupImplemented     = true
+	groupListImplemented = true
 )
 
 // User represents a user account.
diff --git a/src/os/user/user_test.go b/src/os/user/user_test.go
index 1112c78c004..d8a465edac6 100644
--- a/src/os/user/user_test.go
+++ b/src/os/user/user_test.go
@@ -119,8 +119,15 @@ func TestLookupGroup(t *testing.T) {
 	}
 }
 
+func checkGroupList(t *testing.T) {
+	t.Helper()
+	if !groupListImplemented {
+		t.Skip("user: group list not implemented; skipping test")
+	}
+}
+
 func TestGroupIds(t *testing.T) {
-	checkGroup(t)
+	checkGroupList(t)
 	if runtime.GOOS == "aix" {
 		t.Skip("skipping GroupIds, see golang.org/issue/30563")
 	}
-- 
GitLab