...
1
16
17 package options
18
19 import (
20 "context"
21 "fmt"
22 "os"
23 "path/filepath"
24 "syscall"
25 "testing"
26
27 "github.com/stretchr/testify/assert"
28 "k8s.io/klog/v2"
29 "k8s.io/kubernetes/pkg/scheduler/apis/config"
30 )
31
32 const (
33 apiVersionMissing = "'apiVersion' is missing"
34 apiVersionTooOld = "no kind \"KubeSchedulerConfiguration\" is registered for" +
35 " version \"kubescheduler.config.k8s.io/v1alpha1\""
36
37
38
39 schedulerConfigMinimalCorrect = `
40 apiVersion: kubescheduler.config.k8s.io/v1
41 kind: KubeSchedulerConfiguration`
42
43
44
45 schedulerConfigDecodeErr = `
46 kind: KubeSchedulerConfiguration`
47
48
49
50
51 schedulerConfigVersionTooOld = `
52 apiVersion: kubescheduler.config.k8s.io/v1alpha1
53 kind: KubeSchedulerConfiguration
54 `
55 )
56
57 func TestLoadConfigFromFile(t *testing.T) {
58 tmpDir, err := os.MkdirTemp("", "scheduler-configs")
59 if err != nil {
60 t.Fatal(err)
61 }
62 defer os.RemoveAll(tmpDir)
63
64 correctConfigFile := filepath.Join(tmpDir, "correct_config.yaml")
65 if err := os.WriteFile(correctConfigFile,
66 []byte(schedulerConfigMinimalCorrect),
67 os.FileMode(0600)); err != nil {
68 t.Fatal(err)
69 }
70
71 decodeErrConfigFile := filepath.Join(tmpDir, "decode_err_no_version_config.yaml")
72 if err := os.WriteFile(decodeErrConfigFile,
73 []byte(schedulerConfigDecodeErr),
74 os.FileMode(0600)); err != nil {
75 t.Fatal(err)
76 }
77
78 versionTooOldConfigFile := filepath.Join(tmpDir, "version_too_old_config.yaml")
79 if err := os.WriteFile(versionTooOldConfigFile,
80 []byte(schedulerConfigVersionTooOld),
81 os.FileMode(0600)); err != nil {
82 t.Fatal(err)
83 }
84
85 tests := []struct {
86 name string
87 path string
88 expectedErr error
89 expectedConfig *config.KubeSchedulerConfiguration
90 }{
91 {
92 name: "Empty scheduler config file path",
93 path: "",
94 expectedErr: syscall.Errno(syscall.ENOENT),
95 expectedConfig: nil,
96 },
97 {
98 name: "Correct scheduler config",
99 path: correctConfigFile,
100 expectedErr: nil,
101 expectedConfig: &config.KubeSchedulerConfiguration{},
102 },
103 {
104 name: "Scheduler config with decode error",
105 path: decodeErrConfigFile,
106 expectedErr: fmt.Errorf(apiVersionMissing),
107 expectedConfig: nil,
108 },
109 {
110 name: "Scheduler config version too old",
111 path: versionTooOldConfigFile,
112 expectedErr: fmt.Errorf(apiVersionTooOld),
113 expectedConfig: nil,
114 },
115 }
116
117 logger := klog.FromContext(context.Background())
118
119 for i, test := range tests {
120 t.Run(fmt.Sprintf("case_%d: %s", i, test.name), func(t *testing.T) {
121 cfg, err := LoadConfigFromFile(logger, test.path)
122 if test.expectedConfig == nil {
123 assert.Nil(t, cfg)
124 } else {
125 assert.NotNil(t, cfg)
126 }
127
128 if test.expectedErr == nil {
129 assert.NoError(t, err)
130 } else {
131 assert.ErrorContains(t, err, test.expectedErr.Error())
132 }
133 })
134
135 }
136 }
137
View as plain text