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  }