github.com/anchore/syft@v1.38.2/syft/internal/fileresolver/file_indexer_test.go (about) 1 package fileresolver 2 3 import ( 4 "io/fs" 5 "os" 6 "path" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 12 "github.com/anchore/stereoscope/pkg/file" 13 ) 14 15 // - Verify that both the parent and the path are indexed 16 func Test_index(t *testing.T) { 17 testPath := "test-fixtures/system_paths/target/home/place" 18 indexer := newFileIndexer(testPath, "", make([]PathIndexVisitor, 0)...) 19 tree, index, err := indexer.build() 20 require.NoError(t, err) 21 22 tests := []struct { 23 name string 24 path string 25 }{ 26 { 27 name: "has path", 28 path: "test-fixtures/system_paths/target/home/place", 29 }, 30 { 31 name: "has parent dir", 32 path: "test-fixtures/system_paths/target/home", 33 }, 34 } 35 36 for _, test := range tests { 37 t.Run(test.name, func(t *testing.T) { 38 info, err := os.Stat(test.path) 39 assert.NoError(t, err) 40 41 // note: the index uses absolute paths, so assertions MUST keep this in mind 42 cwd, err := os.Getwd() 43 require.NoError(t, err) 44 45 p := file.Path(path.Join(cwd, test.path)) 46 assert.Equal(t, true, tree.HasPath(p)) 47 exists, ref, err := tree.File(p) 48 assert.Equal(t, true, exists) 49 if assert.NoError(t, err) { 50 return 51 } 52 53 entry, err := index.Get(*ref.Reference) 54 require.NoError(t, err) 55 assert.Equal(t, info.Mode(), entry.Mode) 56 }) 57 } 58 59 } 60 61 // - Verify that directories are rejected 62 func Test_indexRejectsDirectory(t *testing.T) { 63 dirPath := "test-fixtures/system_paths/target/home" 64 indexer := newFileIndexer(dirPath, "", make([]PathIndexVisitor, 0)...) 65 _, _, err := indexer.build() 66 require.Error(t, err) 67 } 68 69 // - Verify ignores if filterAndIndex sets up a filter for the filepath 70 func Test_ignoresPathIfFiltered(t *testing.T) { 71 testPath := "test-fixtures/system_paths/target/home/place" 72 cwd, cwdErr := os.Getwd() 73 require.NoError(t, cwdErr) 74 ignorePath := path.Join(cwd, testPath) 75 filterFn := func(_, path string, _ os.FileInfo, _ error) error { 76 if path == ignorePath { 77 return ErrSkipPath 78 } 79 80 return nil 81 } 82 indexer := newFileIndexer(testPath, "", filterFn) 83 _, _, err := indexer.build() 84 require.Error(t, err) 85 } 86 87 // - Verify ignores if filterAndIndex sets up a filter for the directory 88 func Test_ignoresPathIfParentFiltered(t *testing.T) { 89 testPath := "test-fixtures/system_paths/target/home/place" 90 parentPath := "test-fixtures/system_paths/target/home" 91 92 cwd, cwdErr := os.Getwd() 93 require.NoError(t, cwdErr) 94 ignorePath := path.Join(cwd, parentPath) 95 filterFn := func(_, path string, _ os.FileInfo, _ error) error { 96 if path == ignorePath { 97 return fs.SkipDir 98 } 99 100 return nil 101 } 102 indexer := newFileIndexer(testPath, "", filterFn) 103 _, _, err := indexer.build() 104 require.Error(t, err) 105 }