@@ -19,17 +19,15 @@ package markcontrolplane
19
19
import (
20
20
"bytes"
21
21
"encoding/json"
22
- "io"
23
22
"net/http"
24
23
"net/http/httptest"
25
24
"testing"
26
25
27
- "k8s.io/api/core/v1"
26
+ v1 "k8s.io/api/core/v1"
28
27
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
29
28
clientset "k8s.io/client-go/kubernetes"
30
29
restclient "k8s.io/client-go/rest"
31
30
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
32
- kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
33
31
)
34
32
35
33
func TestMarkControlPlane (t * testing.T ) {
@@ -46,77 +44,74 @@ func TestMarkControlPlane(t *testing.T) {
46
44
expectedPatch string
47
45
}{
48
46
{
49
- "control-plane label and taint missing" ,
50
- "" ,
51
- nil ,
52
- []v1.Taint {kubeadmconstants .ControlPlaneTaint },
53
- "{ \ " metadata\ " :{\ " labels\ " :{\ " node-role.kubernetes.io/master\" : \" \ " }},\ " spec\ " :{\ " taints\ " :[{\ " effect\" : \ " NoSchedule\" , \ " key\" : \ " node-role.kubernetes.io/master\ " }]}}" ,
47
+ name : "control-plane label and taint missing" ,
48
+ existingLabel : "" ,
49
+ existingTaints : nil ,
50
+ newTaints : []v1.Taint {kubeadmconstants .ControlPlaneTaint },
51
+ expectedPatch : `{ "metadata":{"labels":{"node-role.kubernetes.io/master":" "}},"spec":{"taints":[{"effect": "NoSchedule", "key": "node-role.kubernetes.io/master"}]}}` ,
54
52
},
55
53
{
56
- "control-plane label and taint missing but taint not wanted" ,
57
- "" ,
58
- nil ,
59
- nil ,
60
- "{ \ " metadata\ " :{\ " labels\ " :{\ " node-role.kubernetes.io/master\" : \" \ " }}}" ,
54
+ name : "control-plane label and taint missing but taint not wanted" ,
55
+ existingLabel : "" ,
56
+ existingTaints : nil ,
57
+ newTaints : nil ,
58
+ expectedPatch : `{ "metadata":{"labels":{"node-role.kubernetes.io/master":" "}}}` ,
61
59
},
62
60
{
63
- "control-plane label missing" ,
64
- "" ,
65
- []v1.Taint {kubeadmconstants .ControlPlaneTaint },
66
- []v1.Taint {kubeadmconstants .ControlPlaneTaint },
67
- "{ \ " metadata\ " :{\ " labels\ " :{\ " node-role.kubernetes.io/master\" : \" \ " }}}" ,
61
+ name : "control-plane label missing" ,
62
+ existingLabel : "" ,
63
+ existingTaints : []v1.Taint {kubeadmconstants .ControlPlaneTaint },
64
+ newTaints : []v1.Taint {kubeadmconstants .ControlPlaneTaint },
65
+ expectedPatch : `{ "metadata":{"labels":{"node-role.kubernetes.io/master":" "}}}` ,
68
66
},
69
67
{
70
- "control-plane taint missing" ,
71
- kubeadmconstants .LabelNodeRoleMaster ,
72
- nil ,
73
- []v1.Taint {kubeadmconstants .ControlPlaneTaint },
74
- "{ \ " spec\ " :{\ " taints\ " :[{\ " effect\" : \ " NoSchedule\" , \ " key\" : \ " node-role.kubernetes.io/master\ " }]}}" ,
68
+ name : "control-plane taint missing" ,
69
+ existingLabel : kubeadmconstants .LabelNodeRoleMaster ,
70
+ existingTaints : nil ,
71
+ newTaints : []v1.Taint {kubeadmconstants .ControlPlaneTaint },
72
+ expectedPatch : `{ "spec":{"taints":[{"effect": "NoSchedule", "key": "node-role.kubernetes.io/master"}]}}` ,
75
73
},
76
74
{
77
- "nothing missing" ,
78
- kubeadmconstants .LabelNodeRoleMaster ,
79
- []v1.Taint {kubeadmconstants .ControlPlaneTaint },
80
- []v1.Taint {kubeadmconstants .ControlPlaneTaint },
81
- "{}" ,
75
+ name : "nothing missing" ,
76
+ existingLabel : kubeadmconstants .LabelNodeRoleMaster ,
77
+ existingTaints : []v1.Taint {kubeadmconstants .ControlPlaneTaint },
78
+ newTaints : []v1.Taint {kubeadmconstants .ControlPlaneTaint },
79
+ expectedPatch : `{}` ,
82
80
},
83
81
{
84
- "has taint and no new taints wanted" ,
85
- kubeadmconstants .LabelNodeRoleMaster ,
86
- []v1.Taint {
82
+ name : "has taint and no new taints wanted" ,
83
+ existingLabel : kubeadmconstants .LabelNodeRoleMaster ,
84
+ existingTaints : []v1.Taint {
87
85
{
88
86
Key : "node.cloudprovider.kubernetes.io/uninitialized" ,
89
87
Effect : v1 .TaintEffectNoSchedule ,
90
88
},
91
89
},
92
- nil ,
93
- "{}" ,
90
+ newTaints : nil ,
91
+ expectedPatch : `{}` ,
94
92
},
95
93
{
96
- "has taint and should merge with wanted taint" ,
97
- kubeadmconstants .LabelNodeRoleMaster ,
98
- []v1.Taint {
94
+ name : "has taint and should merge with wanted taint" ,
95
+ existingLabel : kubeadmconstants .LabelNodeRoleMaster ,
96
+ existingTaints : []v1.Taint {
99
97
{
100
98
Key : "node.cloudprovider.kubernetes.io/uninitialized" ,
101
99
Effect : v1 .TaintEffectNoSchedule ,
102
100
},
103
101
},
104
- []v1.Taint {kubeadmconstants .ControlPlaneTaint },
105
- "{ \ " spec\ " :{\ " taints\ " :[{\ " effect\" : \ " NoSchedule\" , \ " key\" : \ " node-role.kubernetes.io/master\ " },{\ " effect\" : \ " NoSchedule\" , \ " key\" : \ " node.cloudprovider.kubernetes.io/uninitialized\ " }]}}" ,
102
+ newTaints : []v1.Taint {kubeadmconstants .ControlPlaneTaint },
103
+ expectedPatch : `{ "spec":{"taints":[{"effect": "NoSchedule", "key": "node-role.kubernetes.io/master"},{"effect": "NoSchedule", "key": "node.cloudprovider.kubernetes.io/uninitialized"}]}}` ,
106
104
},
107
105
}
108
106
109
107
for _ , tc := range tests {
110
108
t .Run (tc .name , func (t * testing.T ) {
111
- hostname , err := kubeadmutil .GetHostname ("" )
112
- if err != nil {
113
- t .Fatalf ("MarkControlPlane(%s): unexpected error: %v" , tc .name , err )
114
- }
109
+ nodename := "node01"
115
110
controlPlaneNode := & v1.Node {
116
111
ObjectMeta : metav1.ObjectMeta {
117
- Name : hostname ,
112
+ Name : nodename ,
118
113
Labels : map [string ]string {
119
- v1 .LabelHostname : hostname ,
114
+ v1 .LabelHostname : nodename ,
120
115
},
121
116
},
122
117
}
@@ -131,25 +126,27 @@ func TestMarkControlPlane(t *testing.T) {
131
126
132
127
jsonNode , err := json .Marshal (controlPlaneNode )
133
128
if err != nil {
134
- t .Fatalf ("MarkControlPlane(%s): unexpected encoding error: %v" , tc . name , err )
129
+ t .Fatalf ("unexpected encoding error: %v" , err )
135
130
}
136
131
137
132
var patchRequest string
138
133
s := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , req * http.Request ) {
139
134
w .Header ().Set ("Content-Type" , "application/json" )
140
135
141
- if req .URL .Path != "/api/v1/nodes/" + hostname {
142
- t .Errorf ("MarkControlPlane(%s): request for unexpected HTTP resource: %v" , tc . name , req .URL .Path )
136
+ if req .URL .Path != "/api/v1/nodes/" + nodename {
137
+ t .Errorf ("request for unexpected HTTP resource: %v" , req .URL .Path )
143
138
http .Error (w , "" , http .StatusNotFound )
144
139
return
145
140
}
146
141
147
142
switch req .Method {
148
143
case "GET" :
149
144
case "PATCH" :
150
- patchRequest = toString (req .Body )
145
+ buf := new (bytes.Buffer )
146
+ buf .ReadFrom (req .Body )
147
+ patchRequest = buf .String ()
151
148
default :
152
- t .Errorf ("MarkControlPlane(%s): request for unexpected HTTP verb: %v" , tc . name , req .Method )
149
+ t .Errorf ("request for unexpected HTTP verb: %v" , req .Method )
153
150
http .Error (w , "" , http .StatusNotFound )
154
151
return
155
152
}
@@ -161,22 +158,16 @@ func TestMarkControlPlane(t *testing.T) {
161
158
162
159
cs , err := clientset .NewForConfig (& restclient.Config {Host : s .URL })
163
160
if err != nil {
164
- t .Fatalf ("MarkControlPlane(%s): unexpected error building clientset: %v" , tc . name , err )
161
+ t .Fatalf ("unexpected error building clientset: %v" , err )
165
162
}
166
163
167
- if err := MarkControlPlane (cs , hostname , tc .newTaints ); err != nil {
168
- t .Errorf ("MarkControlPlane(%s) returned unexpected error: %v" , tc . name , err )
164
+ if err := MarkControlPlane (cs , nodename , tc .newTaints ); err != nil {
165
+ t .Errorf ("unexpected error: %v" , err )
169
166
}
170
167
171
168
if tc .expectedPatch != patchRequest {
172
- t .Errorf ("MarkControlPlane(%s) wanted patch %v, got %v" , tc . name , tc .expectedPatch , patchRequest )
169
+ t .Errorf ("unexpected error: wanted patch %v, got %v" , tc .expectedPatch , patchRequest )
173
170
}
174
171
})
175
172
}
176
173
}
177
-
178
- func toString (r io.Reader ) string {
179
- buf := new (bytes.Buffer )
180
- buf .ReadFrom (r )
181
- return buf .String ()
182
- }
0 commit comments