1package ubuntu
2
3import (
4	"io/ioutil"
5	"testing"
6
7	"github.com/aquasecurity/fanal/types"
8
9	"github.com/aquasecurity/fanal/analyzer"
10	"github.com/stretchr/testify/assert"
11	"github.com/stretchr/testify/require"
12)
13
14func Test_ubuntuOSAnalyzer_Analyze(t *testing.T) {
15	tests := []struct {
16		name      string
17		inputFile string
18		want      analyzer.AnalyzeReturn
19		wantErr   string
20	}{
21		{
22			name:      "happy path",
23			inputFile: "testdata/lsb-release",
24			want: analyzer.AnalyzeReturn{
25				OS: types.OS{Family: "ubuntu", Name: "18.04"},
26			},
27		},
28		{
29			name:      "sad path",
30			inputFile: "testdata/invalid",
31			wantErr:   "ubuntu: unable to analyze OS information",
32		},
33	}
34	for _, tt := range tests {
35		t.Run(tt.name, func(t *testing.T) {
36			a := ubuntuOSAnalyzer{}
37			b, err := ioutil.ReadFile(tt.inputFile)
38			require.NoError(t, err)
39
40			got, err := a.Analyze(b)
41			if tt.wantErr != "" {
42				require.NotNil(t, err)
43				assert.Contains(t, err.Error(), tt.wantErr)
44				return
45			} else {
46				require.NoError(t, err)
47			}
48			assert.Equal(t, tt.want, got)
49		})
50	}
51}
52
53func Test_ubuntuOSAnalyzer_Required(t *testing.T) {
54	tests := []struct {
55		name     string
56		filePath string
57		want     bool
58	}{
59		{
60			name:     "happy path",
61			filePath: "etc/lsb-release",
62			want:     true,
63		},
64		{
65			name:     "sad path",
66			filePath: "etc/invalid",
67			want:     false,
68		},
69	}
70	for _, tt := range tests {
71		t.Run(tt.name, func(t *testing.T) {
72			a := ubuntuOSAnalyzer{}
73			got := a.Required(tt.filePath, nil)
74			assert.Equal(t, tt.want, got)
75		})
76	}
77}
78