99 "context"
1010 "fmt"
1111 "io"
12+ "net"
1213 "os"
1314 "path/filepath"
1415 "reflect"
@@ -22,6 +23,7 @@ import (
2223 "github.com/spf13/afero"
2324 "github.com/stretchr/testify/assert"
2425 "github.com/stretchr/testify/require"
26+ "golang.org/x/sys/unix"
2527
2628 "github.com/ARM-software/golang-utils/utils/collection"
2729 "github.com/ARM-software/golang-utils/utils/commonerrors"
@@ -546,6 +548,50 @@ func TestConvertPaths(t *testing.T) {
546548 }
547549}
548550
551+ func TestIsFile (t * testing.T ) {
552+ if platform .IsWindows () {
553+ t .Skip ("Windows doesn't have features such as named pipes or unix sockets" )
554+ }
555+ for _ , fsType := range FileSystemTypes {
556+ t .Run (fmt .Sprint (fsType ), func (t * testing.T ) {
557+ fs := NewFs (fsType )
558+
559+ if fsType == InMemoryFS {
560+ t .Skip ("In-memory file system won't have hardware devices or special files" )
561+ }
562+
563+ b , err := fs .IsFile ("/dev/null" )
564+ require .NoError (t , err )
565+ assert .True (t , b )
566+
567+ tmpDir := t .TempDir ()
568+
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 )
579+
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 )
591+ })
592+ }
593+ }
594+
549595func TestLink (t * testing.T ) {
550596 if platform .IsWindows () {
551597 fmt .Println ("In order to run TestLink on Windows, Developer mode must be enabled: https://github.com/golang/go/pull/24307" )
0 commit comments