Skip to content

Commit 32ab671

Browse files
authored
Merge pull request kubernetes#94535 from liggitt/kubeadm-unit-fix
Speed up slow Kubeadm unit tests, avoid mutating global variables
2 parents 60c421b + c0ba236 commit 32ab671

File tree

7 files changed

+140
-111
lines changed

7 files changed

+140
-111
lines changed

cmd/kubeadm/app/cmd/alpha/certs_test.go

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ func TestRunRenewCommands(t *testing.T) {
9898
CACerts := map[string]*x509.Certificate{}
9999
CAKeys := map[string]crypto.Signer{}
100100
for _, ca := range []*certsphase.KubeadmCert{
101-
&certsphase.KubeadmCertRootCA,
102-
&certsphase.KubeadmCertFrontProxyCA,
103-
&certsphase.KubeadmCertEtcdCA,
101+
certsphase.KubeadmCertRootCA(),
102+
certsphase.KubeadmCertFrontProxyCA(),
103+
certsphase.KubeadmCertEtcdCA(),
104104
} {
105105
caCert, caKey, err := ca.CreateAsCA(cfg)
106106
if err != nil {
@@ -112,13 +112,13 @@ func TestRunRenewCommands(t *testing.T) {
112112

113113
// Generate all the signed certificates
114114
for _, cert := range []*certsphase.KubeadmCert{
115-
&certsphase.KubeadmCertAPIServer,
116-
&certsphase.KubeadmCertKubeletClient,
117-
&certsphase.KubeadmCertFrontProxyClient,
118-
&certsphase.KubeadmCertEtcdAPIClient,
119-
&certsphase.KubeadmCertEtcdServer,
120-
&certsphase.KubeadmCertEtcdPeer,
121-
&certsphase.KubeadmCertEtcdHealthcheck,
115+
certsphase.KubeadmCertAPIServer(),
116+
certsphase.KubeadmCertKubeletClient(),
117+
certsphase.KubeadmCertFrontProxyClient(),
118+
certsphase.KubeadmCertEtcdAPIClient(),
119+
certsphase.KubeadmCertEtcdServer(),
120+
certsphase.KubeadmCertEtcdPeer(),
121+
certsphase.KubeadmCertEtcdHealthcheck(),
122122
} {
123123
caCert := CACerts[cert.CAName]
124124
caKey := CAKeys[cert.CAName]
@@ -146,13 +146,13 @@ func TestRunRenewCommands(t *testing.T) {
146146
{
147147
command: "all",
148148
Certs: []*certsphase.KubeadmCert{
149-
&certsphase.KubeadmCertAPIServer,
150-
&certsphase.KubeadmCertKubeletClient,
151-
&certsphase.KubeadmCertFrontProxyClient,
152-
&certsphase.KubeadmCertEtcdAPIClient,
153-
&certsphase.KubeadmCertEtcdServer,
154-
&certsphase.KubeadmCertEtcdPeer,
155-
&certsphase.KubeadmCertEtcdHealthcheck,
149+
certsphase.KubeadmCertAPIServer(),
150+
certsphase.KubeadmCertKubeletClient(),
151+
certsphase.KubeadmCertFrontProxyClient(),
152+
certsphase.KubeadmCertEtcdAPIClient(),
153+
certsphase.KubeadmCertEtcdServer(),
154+
certsphase.KubeadmCertEtcdPeer(),
155+
certsphase.KubeadmCertEtcdHealthcheck(),
156156
},
157157
KubeconfigFiles: []string{
158158
kubeadmconstants.AdminKubeConfigFileName,
@@ -163,43 +163,43 @@ func TestRunRenewCommands(t *testing.T) {
163163
{
164164
command: "apiserver",
165165
Certs: []*certsphase.KubeadmCert{
166-
&certsphase.KubeadmCertAPIServer,
166+
certsphase.KubeadmCertAPIServer(),
167167
},
168168
},
169169
{
170170
command: "apiserver-kubelet-client",
171171
Certs: []*certsphase.KubeadmCert{
172-
&certsphase.KubeadmCertKubeletClient,
172+
certsphase.KubeadmCertKubeletClient(),
173173
},
174174
},
175175
{
176176
command: "apiserver-etcd-client",
177177
Certs: []*certsphase.KubeadmCert{
178-
&certsphase.KubeadmCertEtcdAPIClient,
178+
certsphase.KubeadmCertEtcdAPIClient(),
179179
},
180180
},
181181
{
182182
command: "front-proxy-client",
183183
Certs: []*certsphase.KubeadmCert{
184-
&certsphase.KubeadmCertFrontProxyClient,
184+
certsphase.KubeadmCertFrontProxyClient(),
185185
},
186186
},
187187
{
188188
command: "etcd-server",
189189
Certs: []*certsphase.KubeadmCert{
190-
&certsphase.KubeadmCertEtcdServer,
190+
certsphase.KubeadmCertEtcdServer(),
191191
},
192192
},
193193
{
194194
command: "etcd-peer",
195195
Certs: []*certsphase.KubeadmCert{
196-
&certsphase.KubeadmCertEtcdPeer,
196+
certsphase.KubeadmCertEtcdPeer(),
197197
},
198198
},
199199
{
200200
command: "etcd-healthcheck-client",
201201
Certs: []*certsphase.KubeadmCert{
202-
&certsphase.KubeadmCertEtcdHealthcheck,
202+
certsphase.KubeadmCertEtcdHealthcheck(),
203203
},
204204
},
205205
{
@@ -271,14 +271,14 @@ func TestRunRenewCommands(t *testing.T) {
271271
func TestRenewUsingCSR(t *testing.T) {
272272
tmpDir := testutil.SetupTempDir(t)
273273
defer os.RemoveAll(tmpDir)
274-
cert := &certsphase.KubeadmCertEtcdServer
274+
cert := certsphase.KubeadmCertEtcdServer()
275275

276276
cfg := testutil.GetDefaultInternalConfig(t)
277277
cfg.CertificatesDir = tmpDir
278278

279-
caCert, caKey, err := certsphase.KubeadmCertEtcdCA.CreateAsCA(cfg)
279+
caCert, caKey, err := certsphase.KubeadmCertEtcdCA().CreateAsCA(cfg)
280280
if err != nil {
281-
t.Fatalf("couldn't write out CA %s: %v", certsphase.KubeadmCertEtcdCA.Name, err)
281+
t.Fatalf("couldn't write out CA %s: %v", certsphase.KubeadmCertEtcdCA().Name, err)
282282
}
283283

284284
if err := cert.CreateFromCA(cfg, caCert, caKey); err != nil {

cmd/kubeadm/app/cmd/phases/init/certs_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func TestCertsWithCSRs(t *testing.T) {
4444
defer os.RemoveAll(csrDir)
4545
certDir := testutil.SetupTempDir(t)
4646
defer os.RemoveAll(certDir)
47-
cert := &certs.KubeadmCertAPIServer
47+
cert := certs.KubeadmCertAPIServer()
4848

4949
certsData := &testCertsData{
5050
cfg: testutil.GetDefaultInternalConfig(t),

cmd/kubeadm/app/phases/certs/certlist.go

Lines changed: 61 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -212,36 +212,36 @@ func (c Certificates) AsMap() CertificateMap {
212212
// GetDefaultCertList returns all of the certificates kubeadm requires to function.
213213
func GetDefaultCertList() Certificates {
214214
return Certificates{
215-
&KubeadmCertRootCA,
216-
&KubeadmCertAPIServer,
217-
&KubeadmCertKubeletClient,
215+
KubeadmCertRootCA(),
216+
KubeadmCertAPIServer(),
217+
KubeadmCertKubeletClient(),
218218
// Front Proxy certs
219-
&KubeadmCertFrontProxyCA,
220-
&KubeadmCertFrontProxyClient,
219+
KubeadmCertFrontProxyCA(),
220+
KubeadmCertFrontProxyClient(),
221221
// etcd certs
222-
&KubeadmCertEtcdCA,
223-
&KubeadmCertEtcdServer,
224-
&KubeadmCertEtcdPeer,
225-
&KubeadmCertEtcdHealthcheck,
226-
&KubeadmCertEtcdAPIClient,
222+
KubeadmCertEtcdCA(),
223+
KubeadmCertEtcdServer(),
224+
KubeadmCertEtcdPeer(),
225+
KubeadmCertEtcdHealthcheck(),
226+
KubeadmCertEtcdAPIClient(),
227227
}
228228
}
229229

230230
// GetCertsWithoutEtcd returns all of the certificates kubeadm needs when etcd is hosted externally.
231231
func GetCertsWithoutEtcd() Certificates {
232232
return Certificates{
233-
&KubeadmCertRootCA,
234-
&KubeadmCertAPIServer,
235-
&KubeadmCertKubeletClient,
233+
KubeadmCertRootCA(),
234+
KubeadmCertAPIServer(),
235+
KubeadmCertKubeletClient(),
236236
// Front Proxy certs
237-
&KubeadmCertFrontProxyCA,
238-
&KubeadmCertFrontProxyClient,
237+
KubeadmCertFrontProxyCA(),
238+
KubeadmCertFrontProxyClient(),
239239
}
240240
}
241241

242-
var (
243-
// KubeadmCertRootCA is the definition of the Kubernetes Root CA for the API Server and kubelet.
244-
KubeadmCertRootCA = KubeadmCert{
242+
// KubeadmCertRootCA is the definition of the Kubernetes Root CA for the API Server and kubelet.
243+
func KubeadmCertRootCA() *KubeadmCert {
244+
return &KubeadmCert{
245245
Name: "ca",
246246
LongName: "self-signed Kubernetes CA to provision identities for other Kubernetes components",
247247
BaseName: kubeadmconstants.CACertAndKeyBaseName,
@@ -251,8 +251,11 @@ var (
251251
},
252252
},
253253
}
254-
// KubeadmCertAPIServer is the definition of the cert used to serve the Kubernetes API.
255-
KubeadmCertAPIServer = KubeadmCert{
254+
}
255+
256+
// KubeadmCertAPIServer is the definition of the cert used to serve the Kubernetes API.
257+
func KubeadmCertAPIServer() *KubeadmCert {
258+
return &KubeadmCert{
256259
Name: "apiserver",
257260
LongName: "certificate for serving the Kubernetes API",
258261
BaseName: kubeadmconstants.APIServerCertAndKeyBaseName,
@@ -267,8 +270,11 @@ var (
267270
makeAltNamesMutator(pkiutil.GetAPIServerAltNames),
268271
},
269272
}
270-
// KubeadmCertKubeletClient is the definition of the cert used by the API server to access the kubelet.
271-
KubeadmCertKubeletClient = KubeadmCert{
273+
}
274+
275+
// KubeadmCertKubeletClient is the definition of the cert used by the API server to access the kubelet.
276+
func KubeadmCertKubeletClient() *KubeadmCert {
277+
return &KubeadmCert{
272278
Name: "apiserver-kubelet-client",
273279
LongName: "certificate for the API server to connect to kubelet",
274280
BaseName: kubeadmconstants.APIServerKubeletClientCertAndKeyBaseName,
@@ -281,9 +287,11 @@ var (
281287
},
282288
},
283289
}
290+
}
284291

285-
// KubeadmCertFrontProxyCA is the definition of the CA used for the front end proxy.
286-
KubeadmCertFrontProxyCA = KubeadmCert{
292+
// KubeadmCertFrontProxyCA is the definition of the CA used for the front end proxy.
293+
func KubeadmCertFrontProxyCA() *KubeadmCert {
294+
return &KubeadmCert{
287295
Name: "front-proxy-ca",
288296
LongName: "self-signed CA to provision identities for front proxy",
289297
BaseName: kubeadmconstants.FrontProxyCACertAndKeyBaseName,
@@ -293,9 +301,11 @@ var (
293301
},
294302
},
295303
}
304+
}
296305

297-
// KubeadmCertFrontProxyClient is the definition of the cert used by the API server to access the front proxy.
298-
KubeadmCertFrontProxyClient = KubeadmCert{
306+
// KubeadmCertFrontProxyClient is the definition of the cert used by the API server to access the front proxy.
307+
func KubeadmCertFrontProxyClient() *KubeadmCert {
308+
return &KubeadmCert{
299309
Name: "front-proxy-client",
300310
BaseName: kubeadmconstants.FrontProxyClientCertAndKeyBaseName,
301311
LongName: "certificate for the front proxy client",
@@ -307,9 +317,11 @@ var (
307317
},
308318
},
309319
}
320+
}
310321

311-
// KubeadmCertEtcdCA is the definition of the root CA used by the hosted etcd server.
312-
KubeadmCertEtcdCA = KubeadmCert{
322+
// KubeadmCertEtcdCA is the definition of the root CA used by the hosted etcd server.
323+
func KubeadmCertEtcdCA() *KubeadmCert {
324+
return &KubeadmCert{
313325
Name: "etcd-ca",
314326
LongName: "self-signed CA to provision identities for etcd",
315327
BaseName: kubeadmconstants.EtcdCACertAndKeyBaseName,
@@ -319,8 +331,11 @@ var (
319331
},
320332
},
321333
}
322-
// KubeadmCertEtcdServer is the definition of the cert used to serve etcd to clients.
323-
KubeadmCertEtcdServer = KubeadmCert{
334+
}
335+
336+
// KubeadmCertEtcdServer is the definition of the cert used to serve etcd to clients.
337+
func KubeadmCertEtcdServer() *KubeadmCert {
338+
return &KubeadmCert{
324339
Name: "etcd-server",
325340
LongName: "certificate for serving etcd",
326341
BaseName: kubeadmconstants.EtcdServerCertAndKeyBaseName,
@@ -339,8 +354,11 @@ var (
339354
setCommonNameToNodeName(),
340355
},
341356
}
342-
// KubeadmCertEtcdPeer is the definition of the cert used by etcd peers to access each other.
343-
KubeadmCertEtcdPeer = KubeadmCert{
357+
}
358+
359+
// KubeadmCertEtcdPeer is the definition of the cert used by etcd peers to access each other.
360+
func KubeadmCertEtcdPeer() *KubeadmCert {
361+
return &KubeadmCert{
344362
Name: "etcd-peer",
345363
LongName: "certificate for etcd nodes to communicate with each other",
346364
BaseName: kubeadmconstants.EtcdPeerCertAndKeyBaseName,
@@ -355,8 +373,11 @@ var (
355373
setCommonNameToNodeName(),
356374
},
357375
}
358-
// KubeadmCertEtcdHealthcheck is the definition of the cert used by Kubernetes to check the health of the etcd server.
359-
KubeadmCertEtcdHealthcheck = KubeadmCert{
376+
}
377+
378+
// KubeadmCertEtcdHealthcheck is the definition of the cert used by Kubernetes to check the health of the etcd server.
379+
func KubeadmCertEtcdHealthcheck() *KubeadmCert {
380+
return &KubeadmCert{
360381
Name: "etcd-healthcheck-client",
361382
LongName: "certificate for liveness probes to healthcheck etcd",
362383
BaseName: kubeadmconstants.EtcdHealthcheckClientCertAndKeyBaseName,
@@ -369,8 +390,11 @@ var (
369390
},
370391
},
371392
}
372-
// KubeadmCertEtcdAPIClient is the definition of the cert used by the API server to access etcd.
373-
KubeadmCertEtcdAPIClient = KubeadmCert{
393+
}
394+
395+
// KubeadmCertEtcdAPIClient is the definition of the cert used by the API server to access etcd.
396+
func KubeadmCertEtcdAPIClient() *KubeadmCert {
397+
return &KubeadmCert{
374398
Name: "apiserver-etcd-client",
375399
LongName: "certificate the apiserver uses to access etcd",
376400
BaseName: kubeadmconstants.APIServerEtcdClientCertAndKeyBaseName,
@@ -383,7 +407,7 @@ var (
383407
},
384408
},
385409
}
386-
)
410+
}
387411

388412
func makeAltNamesMutator(f func(*kubeadmapi.InitConfiguration) (*certutil.AltNames, error)) configMutatorsFunc {
389413
return func(mc *kubeadmapi.InitConfiguration, cc *pkiutil.CertConfig) error {

cmd/kubeadm/app/phases/certs/certs_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -685,15 +685,15 @@ func TestValidateMethods(t *testing.T) {
685685
}
686686

687687
func TestNewCSR(t *testing.T) {
688-
kubeadmCert := KubeadmCertAPIServer
688+
kubeadmCert := KubeadmCertAPIServer()
689689
cfg := testutil.GetDefaultInternalConfig(t)
690690

691691
certConfig, err := kubeadmCert.GetConfig(cfg)
692692
if err != nil {
693693
t.Fatalf("couldn't get cert config: %v", err)
694694
}
695695

696-
csr, _, err := NewCSR(&kubeadmCert, cfg)
696+
csr, _, err := NewCSR(kubeadmCert, cfg)
697697

698698
if err != nil {
699699
t.Errorf("invalid signature on CSR: %v", err)

cmd/kubeadm/app/phases/upgrade/staticpods.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -554,9 +554,9 @@ func renewCertsByComponent(cfg *kubeadmapi.InitConfiguration, component string,
554554
if component == constants.Etcd {
555555
if cfg.Etcd.Local != nil {
556556
certificates = []string{
557-
certsphase.KubeadmCertEtcdServer.Name,
558-
certsphase.KubeadmCertEtcdPeer.Name,
559-
certsphase.KubeadmCertEtcdHealthcheck.Name,
557+
certsphase.KubeadmCertEtcdServer().Name,
558+
certsphase.KubeadmCertEtcdPeer().Name,
559+
certsphase.KubeadmCertEtcdHealthcheck().Name,
560560
}
561561
}
562562
}
@@ -565,12 +565,12 @@ func renewCertsByComponent(cfg *kubeadmapi.InitConfiguration, component string,
565565
//if local etcd, renew also the etcd client certificate
566566
if component == constants.KubeAPIServer {
567567
certificates = []string{
568-
certsphase.KubeadmCertAPIServer.Name,
569-
certsphase.KubeadmCertKubeletClient.Name,
570-
certsphase.KubeadmCertFrontProxyClient.Name,
568+
certsphase.KubeadmCertAPIServer().Name,
569+
certsphase.KubeadmCertKubeletClient().Name,
570+
certsphase.KubeadmCertFrontProxyClient().Name,
571571
}
572572
if cfg.Etcd.Local != nil {
573-
certificates = append(certificates, certsphase.KubeadmCertEtcdAPIClient.Name)
573+
certificates = append(certificates, certsphase.KubeadmCertEtcdAPIClient().Name)
574574
}
575575
}
576576

0 commit comments

Comments
 (0)