feat: Add test for Chown

This commit is contained in:
Felicitas Pojtinger
2022-01-15 20:59:06 +01:00
parent c5ce6d6cd3
commit 75772f8c91
2 changed files with 110 additions and 6 deletions

View File

@@ -132,18 +132,18 @@ func (f *STFS) mknodeWithoutLocking(dir bool, name string, perm os.FileMode, ove
return err
}
uid, err := strconv.Atoi(usr.Uid)
if err != nil {
// Some OSes like i.e. Windows don't support numeric UIDs, so use 0 instead
uid = 0
}
gid, err := strconv.Atoi(usr.Gid)
if err != nil {
// Some OSes like i.e. Windows don't support numeric GIDs, so use 0 instead
gid = 0
}
uid, err := strconv.Atoi(usr.Uid)
if err != nil {
// Some OSes like i.e. Windows don't support numeric UIDs, so use 0 instead
uid = 0
}
groups, err := usr.GroupIds()
if err != nil {
return err

View File

@@ -2397,3 +2397,107 @@ func TestSTFS_Chmod(t *testing.T) {
})
}
}
type chownArgs struct {
name string
uid int
gid int
}
var chownTests = []struct {
name string
args chownArgs
wantErr bool
prepare func(afero.Fs) error
check func(f os.FileInfo) error
}{
// FIXME: With cache enabled, files and directories can't be `chmod`ed
// {
// "Can chown /test.txt to 11, 11 if it exists",
// chownArgs{"/test.txt", 11, 11},
// false,
// func(f afero.Fs) error {
// if _, err := f.Create("/test.txt"); err != nil {
// return err
// }
// return nil
// },
// func(f os.FileInfo) error {
// want := "test.txt"
// got := f.Name()
// if want != got {
// return fmt.Errorf("invalid name, got %v, want %v", got, want)
// }
// wantGID := 11
// wantUID := 11
// gotSys, ok := f.Sys().(*ifs.Stat)
// if !ok {
// return errors.New("could not get fs.Stat from FileInfo.Sys()")
// }
// gotGID := int(gotSys.Gid)
// gotUID := int(gotSys.Uid)
// if wantGID != gotGID {
// return fmt.Errorf("invalid GID, got %v, want %v", gotGID, wantGID)
// }
// if wantUID != gotUID {
// return fmt.Errorf("invalid UID, got %v, want %v", gotUID, wantUID)
// }
// return nil
// },
// },
{
"Can not chown /test.txt without creating it",
chownArgs{"/test.txt", 11, 11},
true,
func(f afero.Fs) error { return nil },
func(f os.FileInfo) error { return nil },
},
{
"Can not chown /mydir/test.txt without creating it",
chownArgs{"/mydir/test.txt", 11, 11},
true,
func(f afero.Fs) error { return nil },
func(f os.FileInfo) error { return nil },
},
}
func TestSTFS_Chown(t *testing.T) {
for _, tt := range chownTests {
tt := tt
runTestForAllFss(t, tt.name, true, func(t *testing.T, fs fsConfig) {
if err := tt.prepare(fs.fs); err != nil {
t.Errorf("%v prepare() error = %v", fs.fs.Name(), err)
return
}
if err := fs.fs.Chown(tt.args.name, tt.args.uid, tt.args.gid); (err != nil) != tt.wantErr {
t.Errorf("%v.Chown() error = %v, wantErr %v", fs.fs.Name(), err, tt.wantErr)
return
}
got, err := fs.fs.Stat(tt.args.name)
if (err != nil) != tt.wantErr {
t.Errorf("%v.Stat() error = %v, wantErr %v", fs.fs.Name(), err, tt.wantErr)
return
}
if err := tt.check(got); err != nil {
t.Errorf("%v check() error = %v", fs.fs.Name(), err)
return
}
})
}
}