github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/analyzer/os/amazonlinux/amazonlinux_test.go (about) 1 package amazonlinux 2 3 import ( 4 "context" 5 "strings" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 11 "github.com/devseccon/trivy/pkg/fanal/analyzer" 12 fos "github.com/devseccon/trivy/pkg/fanal/analyzer/os" 13 "github.com/devseccon/trivy/pkg/fanal/types" 14 ) 15 16 func Test_amazonlinuxOSAnalyzer_Analyze(t *testing.T) { 17 tests := []struct { 18 name string 19 input analyzer.AnalysisInput 20 want *analyzer.AnalysisResult 21 wantErr string 22 }{ 23 { 24 name: "happy path amazon linux 1", 25 input: analyzer.AnalysisInput{ 26 FilePath: "etc/system-release", 27 Content: strings.NewReader(`Amazon Linux AMI release 2018.03`), 28 }, 29 want: &analyzer.AnalysisResult{ 30 OS: types.OS{ 31 Family: types.Amazon, 32 Name: "AMI release 2018.03", 33 }, 34 }, 35 }, 36 { 37 name: "happy path amazon linux 2", 38 input: analyzer.AnalysisInput{ 39 FilePath: "etc/system-release", 40 Content: strings.NewReader(`Amazon Linux release 2 (Karoo)`), 41 }, 42 want: &analyzer.AnalysisResult{ 43 OS: types.OS{ 44 Family: types.Amazon, 45 Name: "2 (Karoo)", 46 }, 47 }, 48 }, 49 { 50 name: "happy path amazon linux 2022", 51 input: analyzer.AnalysisInput{ 52 FilePath: "usr/lib/system-release", 53 Content: strings.NewReader(`Amazon Linux release 2022 (Amazon Linux)`), 54 }, 55 want: &analyzer.AnalysisResult{ 56 OS: types.OS{ 57 Family: types.Amazon, 58 Name: "2022 (Amazon Linux)", 59 }, 60 }, 61 }, 62 { 63 name: "happy path amazon linux 2023", 64 input: analyzer.AnalysisInput{ 65 FilePath: "usr/lib/system-release", 66 Content: strings.NewReader(`Amazon Linux release 2023 (Amazon Linux)`), 67 }, 68 want: &analyzer.AnalysisResult{ 69 OS: types.OS{ 70 Family: types.Amazon, 71 Name: "2023 (Amazon Linux)", 72 }, 73 }, 74 }, 75 { 76 name: "sad path amazon linux 2 without code name", 77 input: analyzer.AnalysisInput{ 78 FilePath: "etc/system-release", 79 Content: strings.NewReader(`Amazon Linux release 2`), 80 }, 81 wantErr: fos.AnalyzeOSError.Error(), 82 }, 83 { 84 name: "sad path", 85 input: analyzer.AnalysisInput{ 86 FilePath: "etc/system-release", 87 Content: strings.NewReader(`foo bar`), 88 }, 89 wantErr: fos.AnalyzeOSError.Error(), 90 }, 91 } 92 for _, tt := range tests { 93 t.Run(tt.name, func(t *testing.T) { 94 a := amazonlinuxOSAnalyzer{} 95 ctx := context.Background() 96 got, err := a.Analyze(ctx, tt.input) 97 if tt.wantErr != "" { 98 require.NotNil(t, err) 99 assert.Contains(t, err.Error(), tt.wantErr) 100 return 101 } else { 102 require.NoError(t, err) 103 } 104 105 assert.Equal(t, tt.want, got) 106 }) 107 } 108 }