github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/syft/file/cataloger/executable/pe_test.go (about) 1 package executable 2 3 import ( 4 "debug/pe" 5 "os" 6 "path/filepath" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 12 "github.com/anchore/syft/syft/internal/unionreader" 13 ) 14 15 func Test_peHasEntrypoint(t *testing.T) { 16 17 readerForFixture := func(t *testing.T, fixture string) unionreader.UnionReader { 18 t.Helper() 19 f, err := os.Open(filepath.Join("test-fixtures/shared-info", fixture)) 20 require.NoError(t, err) 21 return f 22 } 23 24 tests := []struct { 25 name string 26 fixture string 27 want bool 28 }{ 29 { 30 name: "shared lib", 31 fixture: "bin/hello.dll", // though this is a shared lib, it has an entrypoint (DLLMain) 32 want: false, 33 }, 34 { 35 name: "application", 36 fixture: "bin/hello.exe", 37 want: true, 38 }, 39 } 40 for _, tt := range tests { 41 t.Run(tt.name, func(t *testing.T) { 42 f, err := pe.NewFile(readerForFixture(t, tt.fixture)) 43 require.NoError(t, err) 44 assert.Equal(t, tt.want, peHasEntrypoint(f)) 45 }) 46 } 47 } 48 49 func Test_peHasExports(t *testing.T) { 50 readerForFixture := func(t *testing.T, fixture string) unionreader.UnionReader { 51 t.Helper() 52 f, err := os.Open(filepath.Join("test-fixtures/shared-info", fixture)) 53 require.NoError(t, err) 54 return f 55 } 56 57 tests := []struct { 58 name string 59 fixture string 60 want bool 61 }{ 62 { 63 name: "shared lib", 64 fixture: "bin/hello.dll", 65 want: true, 66 }, 67 { 68 name: "application", 69 fixture: "bin/hello.exe", 70 want: false, 71 }, 72 } 73 for _, tt := range tests { 74 t.Run(tt.name, func(t *testing.T) { 75 f, err := pe.NewFile(readerForFixture(t, tt.fixture)) 76 require.NoError(t, err) 77 assert.Equal(t, tt.want, peHasExports(f)) 78 }) 79 } 80 }