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  }