archiver: Use untyped constants for testing FileInfo

This commit is contained in:
Alexander Neumann 2019-05-05 14:57:38 +02:00
parent b016dc2ff0
commit 920d458a4a
3 changed files with 17 additions and 9 deletions

View File

@ -2022,6 +2022,14 @@ func (f fileStat) Stat() (os.FileInfo, error) {
return f.fi, nil return f.fi, nil
} }
// used by wrapFileInfo, use untyped const in order to avoid having a version
// of wrapFileInfo for each OS
const (
mockFileInfoMode = 0400
mockFileInfoUID = 51234
mockFileInfoGID = 51235
)
func TestMetadataChanged(t *testing.T) { func TestMetadataChanged(t *testing.T) {
files := TestDir{ files := TestDir{
"testfile": TestFile{ "testfile": TestFile{
@ -2061,8 +2069,8 @@ func TestMetadataChanged(t *testing.T) {
t.Fatalf("metadata does not match:\n%v", cmp.Diff(want, node2)) t.Fatalf("metadata does not match:\n%v", cmp.Diff(want, node2))
} }
// modify the mode by wrapping it in a new struct // modify the mode by wrapping it in a new struct, uses the consts defined above
fs.OverrideLstat["testfile"] = wrapFileInfo(t, fi, 0400, 51234, 51235) fs.OverrideLstat["testfile"] = wrapFileInfo(t, fi)
// set the override values in the 'want' node which // set the override values in the 'want' node which
want.Mode = 0400 want.Mode = 0400

View File

@ -23,18 +23,18 @@ func (fi wrappedFileInfo) Mode() os.FileMode {
} }
// wrapFileInfo returns a new os.FileInfo with the mode, owner, and group fields changed. // wrapFileInfo returns a new os.FileInfo with the mode, owner, and group fields changed.
func wrapFileInfo(t testing.TB, fi os.FileInfo, mode os.FileMode, uid, gid uint) os.FileInfo { func wrapFileInfo(t testing.TB, fi os.FileInfo) os.FileInfo {
// get the underlying stat_t and modify the values // get the underlying stat_t and modify the values
stat := fi.Sys().(*syscall.Stat_t) stat := fi.Sys().(*syscall.Stat_t)
stat.Mode = uint32(mode) stat.Mode = mockFileInfoMode
stat.Uid = uint32(uid) stat.Uid = mockFileInfoUID
stat.Gid = uint32(gid) stat.Gid = mockFileInfoGID
// wrap the os.FileInfo so we can return a modified stat_t // wrap the os.FileInfo so we can return a modified stat_t
res := wrappedFileInfo{ res := wrappedFileInfo{
FileInfo: fi, FileInfo: fi,
sys: stat, sys: stat,
mode: mode, mode: mockFileInfoMode,
} }
return res return res

View File

@ -17,11 +17,11 @@ func (fi wrappedFileInfo) Mode() os.FileMode {
} }
// wrapFileInfo returns a new os.FileInfo with the mode, owner, and group fields changed. // wrapFileInfo returns a new os.FileInfo with the mode, owner, and group fields changed.
func wrapFileInfo(t testing.TB, fi os.FileInfo, mode os.FileMode, uid, gid uint) os.FileInfo { func wrapFileInfo(t testing.TB, fi os.FileInfo) os.FileInfo {
// wrap the os.FileInfo and return the modified mode, uid and gid are ignored on Windows // wrap the os.FileInfo and return the modified mode, uid and gid are ignored on Windows
res := wrappedFileInfo{ res := wrappedFileInfo{
FileInfo: fi, FileInfo: fi,
mode: mode, mode: mockFileInfoMode,
} }
return res return res