mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
os/user: fix tests to pass on non-english Windows
Tests on Windows are dependent on the english names of system accounts and groups. But on a french install of Windows the system accounts are: - AUTORITE NT\Système - AUTORITE NT\SERVICE LOCAL - AUTORITE NT\SERVICE RÉSEAU To allow the tests to pass on non-english Windows we only log differences in user/group names if GetSystemDefaultLCID() reports a non-english LCID, instead of failing. Change-Id: Ib81acc2896c45675fa3faf5dc390b57ec5159689 Reviewed-on: https://go-review.googlesource.com/c/go/+/688715 Reviewed-by: Michael Knyszek <mknyszek@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Mark Freeman <mark@golang.org> Reviewed-by: Quim Muntal <quimmuntal@gmail.com>
This commit is contained in:
parent
0984264471
commit
f8eae7a3c3
1 changed files with 48 additions and 18 deletions
|
|
@ -18,6 +18,7 @@ import (
|
||||||
"slices"
|
"slices"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
"testing"
|
"testing"
|
||||||
"unicode"
|
"unicode"
|
||||||
|
|
@ -261,9 +262,21 @@ func TestGroupIdsTestUser(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isSystemDefaultLCIDEnglish = sync.OnceValue(func() bool {
|
||||||
|
// GetSystemDefaultLCID()
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getsystemdefaultlcid
|
||||||
|
r, _, _ := syscall.MustLoadDLL("kernel32.dll").MustFindProc("GetSystemDefaultLCID").Call()
|
||||||
|
lcid := uint32(r)
|
||||||
|
|
||||||
|
lcidLow := lcid & 0xFF
|
||||||
|
// 0x0409 is en-US
|
||||||
|
// 0x1000 is "Locale without assigned LCID"
|
||||||
|
return lcidLow == 0x00 || lcidLow == 0x09
|
||||||
|
})
|
||||||
|
|
||||||
var serviceAccounts = []struct {
|
var serviceAccounts = []struct {
|
||||||
sid string
|
sid string
|
||||||
name string
|
name string // name on english Windows
|
||||||
}{
|
}{
|
||||||
{"S-1-5-18", "NT AUTHORITY\\SYSTEM"},
|
{"S-1-5-18", "NT AUTHORITY\\SYSTEM"},
|
||||||
{"S-1-5-19", "NT AUTHORITY\\LOCAL SERVICE"},
|
{"S-1-5-19", "NT AUTHORITY\\LOCAL SERVICE"},
|
||||||
|
|
@ -273,14 +286,21 @@ var serviceAccounts = []struct {
|
||||||
func TestLookupServiceAccount(t *testing.T) {
|
func TestLookupServiceAccount(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
for _, tt := range serviceAccounts {
|
for _, tt := range serviceAccounts {
|
||||||
u, err := Lookup(tt.name)
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
if err != nil {
|
u, err := Lookup(tt.name)
|
||||||
t.Errorf("Lookup(%q): %v", tt.name, err)
|
if err != nil {
|
||||||
continue
|
t.Logf("Lookup(%q): %v", tt.name, err)
|
||||||
}
|
if !isSystemDefaultLCIDEnglish() {
|
||||||
if u.Uid != tt.sid {
|
t.Skipf("test not supported on non-English Windows")
|
||||||
t.Errorf("unexpected uid for %q; got %q, want %q", u.Name, u.Uid, tt.sid)
|
}
|
||||||
}
|
t.Fail()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if u.Uid != tt.sid {
|
||||||
|
t.Errorf("unexpected uid for %q; got %q, want %q", u.Name, u.Uid, tt.sid)
|
||||||
|
}
|
||||||
|
t.Logf("Lookup(%q): %q", tt.name, u.Username)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -296,7 +316,11 @@ func TestLookupIdServiceAccount(t *testing.T) {
|
||||||
t.Errorf("unexpected gid for %q; got %q, want %q", u.Name, u.Gid, tt.sid)
|
t.Errorf("unexpected gid for %q; got %q, want %q", u.Name, u.Gid, tt.sid)
|
||||||
}
|
}
|
||||||
if u.Username != tt.name {
|
if u.Username != tt.name {
|
||||||
t.Errorf("unexpected user name for %q; got %q, want %q", u.Gid, u.Username, tt.name)
|
if isSystemDefaultLCIDEnglish() {
|
||||||
|
t.Errorf("unexpected user name for %q; got %q, want %q", u.Gid, u.Username, tt.name)
|
||||||
|
} else {
|
||||||
|
t.Logf("user name for %q: %q", u.Gid, u.Username)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -304,14 +328,20 @@ func TestLookupIdServiceAccount(t *testing.T) {
|
||||||
func TestLookupGroupServiceAccount(t *testing.T) {
|
func TestLookupGroupServiceAccount(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
for _, tt := range serviceAccounts {
|
for _, tt := range serviceAccounts {
|
||||||
u, err := LookupGroup(tt.name)
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
if err != nil {
|
g, err := LookupGroup(tt.name)
|
||||||
t.Errorf("LookupGroup(%q): %v", tt.name, err)
|
if err != nil {
|
||||||
continue
|
t.Logf("LookupGroup(%q): %v", tt.name, err)
|
||||||
}
|
if !isSystemDefaultLCIDEnglish() {
|
||||||
if u.Gid != tt.sid {
|
t.Skipf("test not supported on non-English Windows")
|
||||||
t.Errorf("unexpected gid for %q; got %q, want %q", u.Name, u.Gid, tt.sid)
|
}
|
||||||
}
|
t.Fail()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if g.Gid != tt.sid {
|
||||||
|
t.Errorf("unexpected gid for %q; got %q, want %q", g.Name, g.Gid, tt.sid)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue