Skip to content

Commit 9458e60

Browse files
review
1 parent e0f9084 commit 9458e60

File tree

3 files changed

+42
-30
lines changed

3 files changed

+42
-30
lines changed

changes/20250801151058.bugfix

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
:bug: `filsystem` IsFile should return true for special unix files not just regular files
1+
:bug: `filesystem` IsFile should return true for special unix files not just regular files

utils/filesystem/files.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -778,7 +778,7 @@ func (fs *VFS) IsFile(path string) (result bool, err error) {
778778
if err != nil {
779779
return
780780
}
781-
result = IsRegularFile(fi) || IsSpecialFile(fi)
781+
result = IsRegularFile(fi) || IsSpecialFile(fi) // We want to treat special files as files (otherwise the only distinction is a directory which special files are not)
782782
return
783783
}
784784

@@ -789,6 +789,7 @@ func IsRegularFile(fi os.FileInfo) bool {
789789
return fi.Mode().IsRegular()
790790
}
791791

792+
// IsSpecialFile returns true for files that are not regular files. This includes: unix socket files, device files, and named pipes
792793
func IsSpecialFile(fi os.FileInfo) bool {
793794
if fi == nil {
794795
return false

utils/filesystem/files_test.go

Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -556,38 +556,49 @@ func TestIsFile(t *testing.T) {
556556
t.Run(fmt.Sprint(fsType), func(t *testing.T) {
557557
fs := NewFs(fsType)
558558

559-
if fsType == InMemoryFS {
560-
t.Skip("In-memory file system won't have hardware devices or special files")
561-
}
559+
tmpDir := t.TempDir()
562560

563-
b, err := fs.IsFile("/dev/null")
564-
require.NoError(t, err)
565-
assert.True(t, b)
561+
t.Run("normal file", func(t *testing.T) {
562+
filePath := filepath.Join(tmpDir, faker.Word())
563+
err := fs.Touch(filePath)
564+
require.NoError(t, err)
565+
b, err := fs.IsFile(filePath)
566+
require.NoError(t, err)
567+
assert.True(t, b)
568+
})
566569

567-
tmpDir := t.TempDir()
570+
t.Run("special file", func(t *testing.T) {
571+
if fsType == InMemoryFS {
572+
t.Skip("In-memory file system won't have hardware devices or special files")
573+
}
568574

569-
fifoPath := filepath.Join(tmpDir, faker.Word())
570-
require.NoError(t, err)
571-
defer func() { _ = fs.Rm(fifoPath) }()
572-
err = unix.Mkfifo(fifoPath, 0666)
573-
require.NoError(t, err)
574-
b, err = fs.IsFile(fifoPath)
575-
require.NoError(t, err)
576-
assert.True(t, b)
577-
err = fs.Rm(fifoPath)
578-
require.NoError(t, err)
575+
b, err := fs.IsFile("/dev/null")
576+
require.NoError(t, err)
577+
assert.True(t, b)
579578

580-
socketPath := filepath.Join(tmpDir, faker.Word())
581-
require.NoError(t, err)
582-
defer func() { _ = fs.Rm(socketPath) }()
583-
l, err := net.Listen("unix", socketPath)
584-
require.NoError(t, err)
585-
defer func() { _ = l.Close() }()
586-
b, err = fs.IsFile(socketPath)
587-
require.NoError(t, err)
588-
assert.True(t, b)
589-
err = fs.Rm(socketPath)
590-
require.NoError(t, err)
579+
fifoPath := filepath.Join(tmpDir, faker.Word())
580+
require.NoError(t, err)
581+
defer func() { _ = fs.Rm(fifoPath) }()
582+
err = unix.Mkfifo(fifoPath, 0666)
583+
require.NoError(t, err)
584+
b, err = fs.IsFile(fifoPath)
585+
require.NoError(t, err)
586+
assert.True(t, b)
587+
err = fs.Rm(fifoPath)
588+
require.NoError(t, err)
589+
590+
socketPath := filepath.Join(tmpDir, faker.Word())
591+
require.NoError(t, err)
592+
defer func() { _ = fs.Rm(socketPath) }()
593+
l, err := net.Listen("unix", socketPath)
594+
require.NoError(t, err)
595+
defer func() { _ = l.Close() }()
596+
b, err = fs.IsFile(socketPath)
597+
require.NoError(t, err)
598+
assert.True(t, b)
599+
err = fs.Rm(socketPath)
600+
require.NoError(t, err)
601+
})
591602
})
592603
}
593604
}

0 commit comments

Comments
 (0)