1 package patchmanager
2
3 import (
4 "io/fs"
5 "os"
6 "testing"
7
8 "github.com/go-logr/logr"
9
10 "edge-infra.dev/pkg/lib/logging"
11 "edge-infra.dev/pkg/sds/patching/common"
12 "edge-infra.dev/pkg/sds/patching/test"
13 )
14
15
16 func TestContains(t *testing.T) {
17 scenarios := []struct {
18 inputNodeList []string
19 inputNodeName string
20 expect bool
21 }{
22 {inputNodeList: []string{"s1-master-1", "s1-worker-2", "s1-worker-3"}, inputNodeName: "s1-master-1", expect: true},
23 {inputNodeList: []string{"s1-master-1", "s1-worker-2", "s1-worker-3"}, inputNodeName: "s1-worker-9", expect: false},
24 }
25
26 for _, s := range scenarios {
27 got := Contains(s.inputNodeList, s.inputNodeName)
28 if got != s.expect {
29 t.Errorf("Unexpected result with the node list %v and node name %s. Wanted: %t; Got: %t\n", s.inputNodeList, s.inputNodeName, s.expect, got)
30 }
31 }
32 }
33
34 func TestGeneratePatchingEnv(t *testing.T) {
35 scenarios := []struct {
36 currentVer, targetVer string
37 cfg common.Config
38 expect string
39 }{
40 {
41 currentVer: "v1.10.2",
42 targetVer: "v1.11.0",
43 cfg: test.NewConfig(t),
44 expect: "CURRENT='v1.10.2'\nTARGET='v1.11.0'\n",
45 },
46 }
47
48 for _, s := range scenarios {
49 if err := test.CreateFileTree(s.cfg); err != nil {
50 t.Errorf("unable to create file tree: %s", err)
51 }
52
53 if err := generatePatchingEnv(s.currentVer, s.targetVer, s.cfg.EnvFilePath); err != nil {
54 t.Errorf("%s", err)
55 }
56
57 got, err := os.ReadFile(s.cfg.EnvFilePath)
58 if err != nil {
59 t.Errorf("error reading patching.env file: %s\n", err)
60 }
61
62 if string(got) != s.expect {
63 t.Errorf("error generating patching.env file, invalid file contents: %s", err)
64 }
65 }
66 }
67
68 func TestRequestReboot(t *testing.T) {
69 scenarios := []struct {
70 autoreboot bool
71 log logr.Logger
72 cfg common.Config
73 expect struct {
74 name string
75 mode fs.FileMode
76 }
77 }{
78 {
79 autoreboot: true,
80 log: logging.NewLogger().Logger,
81 cfg: test.NewConfig(t),
82 expect: struct {
83 name string
84 mode fs.FileMode
85 }{
86 name: "reboot-required",
87 mode: os.FileMode(0755),
88 },
89 },
90 {
91 autoreboot: false,
92 log: logging.NewLogger().Logger,
93 cfg: test.NewConfig(t),
94 expect: struct {
95 name string
96 mode fs.FileMode
97 }{
98 name: "reboot-required",
99 mode: os.FileMode(0755),
100 },
101 },
102 }
103
104 for _, s := range scenarios {
105 if err := requestReboot(s.autoreboot, s.log, s.cfg); err != nil {
106 t.Errorf("%s", err)
107 }
108
109 if !s.autoreboot {
110 continue
111 }
112
113 got, err := os.Stat(s.cfg.RebootPath)
114 if err != nil {
115 t.Errorf("error reading patching.env file: %s\n", err)
116 }
117
118 if got.Name() != s.expect.name {
119 t.Errorf("error generating reboot-required file, invalid file name: %s", err)
120 }
121
122 if got.Mode() != s.expect.mode {
123 t.Errorf("error generating reboot-required file, invalid file permissions: %s", err)
124 }
125 }
126 }
127
View as plain text