2023-02-02 18:59:14 +00:00
|
|
|
//go:build windows
|
|
|
|
|
|
|
|
package users
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
"os/user"
|
|
|
|
"path/filepath"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/shoenig/test/must"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestLookup_Windows(t *testing.T) {
|
|
|
|
stdlibUser, err := user.Current()
|
|
|
|
must.NoError(t, err, must.Sprintf("error looking up current user using stdlib"))
|
|
|
|
must.NotEq(t, "", stdlibUser.Username)
|
|
|
|
|
|
|
|
helperUser, err := Current()
|
|
|
|
must.NoError(t, err)
|
|
|
|
|
|
|
|
must.Eq(t, stdlibUser.Username, helperUser.Username)
|
|
|
|
|
|
|
|
lookupUser, err := Lookup(helperUser.Username)
|
|
|
|
must.NoError(t, err)
|
|
|
|
|
|
|
|
must.Eq(t, helperUser.Username, lookupUser.Username)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestLookup_Administrator(t *testing.T) {
|
|
|
|
u, err := user.Lookup("Administrator")
|
|
|
|
must.NoError(t, err)
|
|
|
|
|
|
|
|
// Windows allows looking up unqualified names but will return a fully
|
|
|
|
// qualified (eg prefixed with the local machine or domain)
|
|
|
|
must.StrHasSuffix(t, "Administrator", u.Username)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestWriteFileFor_Windows(t *testing.T) {
|
|
|
|
path := filepath.Join(t.TempDir(), "secret.txt")
|
|
|
|
contents := []byte("TOO MANY SECRETS")
|
|
|
|
|
|
|
|
must.NoError(t, WriteFileFor(path, contents, "Administrator"))
|
|
|
|
stat, err := os.Lstat(path)
|
|
|
|
must.NoError(t, err)
|
|
|
|
must.True(t, stat.Mode().IsRegular(),
|
2023-02-06 19:31:22 +00:00
|
|
|
must.Sprintf("expected %s to be a regular file but found %#o", path, stat.Mode()))
|
|
|
|
|
|
|
|
// Assert Windows hits the fallback world-accessible case
|
|
|
|
must.Eq(t, 0o666, stat.Mode().Perm())
|
|
|
|
}
|
|
|
|
|
|
|
|
// TestSocketFileFor_Windows asserts that socket files cannot be chowned on
|
|
|
|
// windows.
|
|
|
|
func TestSocketFileFor_Windows(t *testing.T) {
|
|
|
|
path := filepath.Join(t.TempDir(), "api.sock")
|
|
|
|
|
|
|
|
ln, err := SocketFileFor(testlog.HCLogger(t), path, "Administrator")
|
|
|
|
must.NoError(t, err)
|
|
|
|
must.NotNil(t, ln)
|
|
|
|
defer ln.Close()
|
|
|
|
stat, err := os.Lstat(path)
|
|
|
|
must.NoError(t, err)
|
2023-02-02 18:59:14 +00:00
|
|
|
|
|
|
|
// Assert Windows hits the fallback world-accessible case
|
|
|
|
must.Eq(t, 0o666, stat.Mode().Perm())
|
|
|
|
}
|