// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 //go:build !windows package osutil import ( "os" "os/user" "strconv" "testing" ) func TestFileUIDEqual(t *testing.T) { currentUser, err := user.Current() if err != nil { t.Errorf("failed to get details of current process owner. The error is: %v", err) } uid, err := strconv.Atoi(currentUser.Uid) if err != nil { t.Errorf("failed to convert uid to int. The error is: %v", err) } testCases := []struct { uid int expected bool }{ { uid: uid, expected: true, }, { uid: uid + 1, expected: false, }, } for _, tc := range testCases { err := os.Mkdir("testFile", 0o777) if err != nil { t.Fatal(err) } info, err := os.Stat("testFile") if err != nil { t.Errorf("error stating %q: %v", "testFile", err) } result := FileUIDEqual(info, tc.uid) if result != tc.expected { t.Errorf("invalid result. expected %t for uid %v", tc.expected, tc.uid) } err = os.RemoveAll("testFile") if err != nil { t.Fatal(err) } } } func TestFileGIDEqual(t *testing.T) { currentUser, err := user.Current() if err != nil { t.Errorf("failed to get details of current process owner. The error is: %v", err) } gid, err := strconv.Atoi(currentUser.Gid) if err != nil { t.Errorf("failed to convert gid to int. The error is: %v", err) } testCases := []struct { gid int expected bool }{ { gid: gid, expected: true, }, { gid: gid + 1, expected: false, }, } for _, tc := range testCases { err := os.Mkdir("testFile", 0o777) if err != nil { t.Fatal(err) } info, err := os.Stat("testFile") if err != nil { t.Errorf("error stating %q: %v", "testFile", err) } result := FileGIDEqual(info, tc.gid) if result != tc.expected { t.Errorf("invalid result. expected %t for gid %v", tc.expected, tc.gid) } err = os.RemoveAll("testFile") if err != nil { t.Fatal(err) } } }