github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/analyzer/language/analyze_test.go (about) 1 package language_test 2 3 import ( 4 "io" 5 "strings" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 "golang.org/x/xerrors" 11 12 dio "github.com/aquasecurity/go-dep-parser/pkg/io" 13 godeptypes "github.com/aquasecurity/go-dep-parser/pkg/types" 14 "github.com/devseccon/trivy/pkg/fanal/analyzer" 15 "github.com/devseccon/trivy/pkg/fanal/analyzer/language" 16 "github.com/devseccon/trivy/pkg/fanal/types" 17 ) 18 19 type mockParser struct { 20 t *testing.T 21 } 22 23 func (p *mockParser) Parse(r dio.ReadSeekerAt) ([]godeptypes.Library, []godeptypes.Dependency, error) { 24 b, err := io.ReadAll(r) 25 require.NoError(p.t, err) 26 27 switch string(b) { 28 case "happy": 29 return []godeptypes.Library{ 30 { 31 Name: "test", 32 Version: "1.2.3", 33 }, 34 }, nil, nil 35 case "sad": 36 return nil, nil, xerrors.New("unexpected error") 37 } 38 39 return nil, nil, nil 40 } 41 42 func TestAnalyze(t *testing.T) { 43 type args struct { 44 fileType types.LangType 45 filePath string 46 content dio.ReadSeekerAt 47 } 48 tests := []struct { 49 name string 50 args args 51 want *analyzer.AnalysisResult 52 wantErr string 53 }{ 54 { 55 name: "happy path", 56 args: args{ 57 fileType: types.GoBinary, 58 filePath: "app/myweb", 59 content: strings.NewReader("happy"), 60 }, 61 want: &analyzer.AnalysisResult{ 62 Applications: []types.Application{ 63 { 64 Type: types.GoBinary, 65 FilePath: "app/myweb", 66 Libraries: types.Packages{ 67 { 68 Name: "test", 69 Version: "1.2.3", 70 }, 71 }, 72 }, 73 }, 74 }, 75 }, 76 { 77 name: "empty", 78 args: args{ 79 fileType: types.GoBinary, 80 filePath: "app/myweb", 81 content: strings.NewReader(""), 82 }, 83 want: nil, 84 }, 85 { 86 name: "sad path", 87 args: args{ 88 fileType: types.Jar, 89 filePath: "app/myweb", 90 content: strings.NewReader("sad"), 91 }, 92 wantErr: "unexpected error", 93 }, 94 } 95 for _, tt := range tests { 96 t.Run(tt.name, func(t *testing.T) { 97 mp := &mockParser{t: t} 98 99 got, err := language.Analyze(tt.args.fileType, tt.args.filePath, tt.args.content, mp) 100 if tt.wantErr != "" { 101 require.NotNil(t, err) 102 assert.Contains(t, err.Error(), tt.wantErr) 103 return 104 } 105 106 require.NoError(t, err) 107 assert.Equal(t, tt.want, got) 108 }) 109 } 110 }