...
1
16
17 package kernel
18
19 import (
20 "errors"
21 "testing"
22
23 "github.com/stretchr/testify/assert"
24
25 "k8s.io/apimachinery/pkg/util/version"
26 )
27
28 func TestGetVersion(t *testing.T) {
29 testCases := []struct {
30 name string
31 readFileFunc readFileFunc
32 expected *version.Version
33 err error
34 }{
35 {
36 name: "valid os-release file",
37 readFileFunc: func(_ string) ([]byte, error) {
38 return []byte("5.15.0-84-generic"), nil
39 },
40 expected: version.MajorMinor(5, 15),
41 },
42 {
43 name: "valid os-release file",
44 readFileFunc: func(_ string) ([]byte, error) {
45 return []byte("5.4.0-128-generic"), nil
46 },
47 expected: version.MajorMinor(5, 4),
48 },
49 {
50 name: "failed to read os-release file",
51 readFileFunc: func(_ string) ([]byte, error) {
52 return nil, errors.New("open /proc/sys/kernel/osrelease: failed to read file")
53 },
54 err: errors.New("failed to read os-release file: open /proc/sys/kernel/osrelease: failed to read file"),
55 expected: nil,
56 },
57 {
58 name: "version not parsable",
59 readFileFunc: func(_ string) ([]byte, error) {
60 return []byte("5-15-0"), nil
61 },
62 err: errors.New("failed to parse kernel version: illegal version string \"5-15-0\""),
63 expected: nil,
64 },
65 }
66
67 for _, tc := range testCases {
68 t.Run(tc.name, func(t *testing.T) {
69 kernelVersion, err := getVersion(tc.readFileFunc)
70
71 if tc.err != nil {
72 assert.Equal(t, tc.err.Error(), err.Error())
73 assert.Nil(t, kernelVersion)
74 } else {
75 assert.NoError(t, err)
76 assert.Equal(t, tc.expected.Major(), kernelVersion.Major())
77 assert.Equal(t, tc.expected.Minor(), kernelVersion.Minor())
78 assert.Equal(t, tc.expected.Patch(), kernelVersion.Patch())
79 }
80 })
81 }
82 }
83
View as plain text