package platform import ( "os" "runtime" "strconv" "testing" ) func TestGetEffectiveUID(t *testing.T) { if runtime.GOOS == "windows" { if got := GetEffectiveUID(); got != -1 { t.Errorf("GetEffectiveUID() on Windows = %d, want -1", got) } return } if got, want := GetEffectiveUID(), os.Geteuid(); got != want { t.Errorf("GetEffectiveUID() = %d, want os.Geteuid() %d", got, want) } } func TestIsRoot(t *testing.T) { if runtime.GOOS == "windows" { if IsRoot() { t.Error("IsRoot() on Windows = true, want false") } return } if got, want := IsRoot(), os.Geteuid() == 0; got != want { t.Errorf("IsRoot() = %v, want %v", got, want) } } func TestGetCurrentUser(t *testing.T) { if runtime.GOOS == "windows" { username, uid, err := GetCurrentUser() if username != "" || uid != "" || err != nil { t.Errorf("GetCurrentUser() on Windows = (%q, %q, %v), want empty", username, uid, err) } return } username, uid, err := GetCurrentUser() if err != nil { t.Fatalf("GetCurrentUser() error = %v", err) } if username == "" { t.Error("GetCurrentUser() returned empty username") } if _, err := strconv.Atoi(uid); err != nil { t.Errorf("GetCurrentUser() uid = %q, want numeric", uid) } } func TestGetHomeDirectory(t *testing.T) { want, err := os.UserHomeDir() if err != nil { t.Skip("no home directory in this environment") } if got := GetHomeDirectory(); got != want { t.Errorf("GetHomeDirectory() = %q, want %q", got, want) } } func TestParseUID(t *testing.T) { tests := []struct { input string want int wantErr bool }{ {"0", 0, false}, {"1000", 1000, false}, {"-1", -1, false}, {"abc", 0, true}, {"", 0, true}, {"10.5", 0, true}, } for _, tt := range tests { t.Run(tt.input, func(t *testing.T) { got, err := ParseUID(tt.input) if (err != nil) != tt.wantErr { t.Errorf("ParseUID(%q) error = %v, wantErr %v", tt.input, err, tt.wantErr) return } if !tt.wantErr && got != tt.want { t.Errorf("ParseUID(%q) = %d, want %d", tt.input, got, tt.want) } }) } }