github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/analyzer/os/release/release_test.go (about) 1 package release 2 3 import ( 4 "context" 5 "os" 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 "github.com/devseccon/trivy/pkg/fanal/types" 13 ) 14 15 func Test_osReleaseAnalyzer_Analyze(t *testing.T) { 16 tests := []struct { 17 name string 18 inputFile string 19 input analyzer.AnalysisInput 20 want *analyzer.AnalysisResult 21 wantErr string 22 }{ 23 { 24 name: "alpine", 25 inputFile: "testdata/alpine", 26 want: &analyzer.AnalysisResult{ 27 OS: types.OS{ 28 Family: types.Alpine, 29 Name: "3.15.4", 30 }, 31 }, 32 }, 33 { 34 name: "openSUSE-leap 15.2.1", 35 inputFile: "testdata/opensuseleap-15.2.1", 36 want: &analyzer.AnalysisResult{ 37 OS: types.OS{ 38 Family: types.OpenSUSELeap, 39 Name: "15.2.1", 40 }, 41 }, 42 }, 43 { 44 name: "openSUSE-leap 42.3", 45 inputFile: "testdata/opensuseleap-42.3", 46 want: &analyzer.AnalysisResult{ 47 OS: types.OS{ 48 Family: types.OpenSUSELeap, 49 Name: "42.3", 50 }, 51 }, 52 }, 53 { 54 name: "openSUSE-tumbleweed", 55 inputFile: "testdata/opensusetumbleweed", 56 want: &analyzer.AnalysisResult{ 57 OS: types.OS{ 58 Family: types.OpenSUSETumbleweed, 59 Name: "20220412", 60 }, 61 }, 62 }, 63 { 64 name: "SUSE Linux Enterprise Server", 65 inputFile: "testdata/sles", 66 want: &analyzer.AnalysisResult{ 67 OS: types.OS{ 68 Family: types.SLES, 69 Name: "15.3", 70 }, 71 }, 72 }, 73 { 74 name: "Photon OS", 75 inputFile: "testdata/photon", 76 want: &analyzer.AnalysisResult{ 77 OS: types.OS{ 78 Family: types.Photon, 79 Name: "4.0", 80 }, 81 }, 82 }, 83 { 84 name: "Photon OS", 85 inputFile: "testdata/photon", 86 want: &analyzer.AnalysisResult{ 87 OS: types.OS{ 88 Family: types.Photon, 89 Name: "4.0", 90 }, 91 }, 92 }, 93 { 94 name: "Unknown OS", 95 inputFile: "testdata/unknown", 96 want: nil, 97 }, 98 { 99 name: "No 'ID' field", 100 inputFile: "testdata/no-id", 101 want: nil, 102 }, 103 { 104 name: "No 'VERSION_ID' field", 105 inputFile: "testdata/no-version", 106 want: nil, 107 }, 108 } 109 110 for _, tt := range tests { 111 t.Run(tt.name, func(t *testing.T) { 112 f, err := os.Open(tt.inputFile) 113 require.NoError(t, err) 114 defer f.Close() 115 116 a := osReleaseAnalyzer{} 117 res, err := a.Analyze(context.Background(), analyzer.AnalysisInput{ 118 FilePath: "etc/os-release", 119 Content: f, 120 }) 121 122 if tt.wantErr != "" { 123 assert.Error(t, err) 124 assert.Equal(t, tt.wantErr, err.Error()) 125 return 126 } 127 128 assert.NoError(t, err) 129 assert.Equal(t, tt.want, res) 130 }) 131 } 132 }