Skip to content

Commit b7a5450

Browse files
Merge pull request #66008 from smarterclayton/serving_test
Automatic merge from submit-queue (batch tested with PRs 66038, 65992, 66008). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Convert TestServerRunWithSNI to subtests to isolate flake This test is flaking - make it easier to pin down where and why by converting to subtests and making cleanup logic simpler. Also turn an ignored listen error into a "fatal". Make the test run in parallel to speed up individual runs and hopefully flush out issues. Noticed and reported in OpenShift, openshift/origin#20220 @deads2k / @sttts Kubernetes-commit: ff9a66bd176c0e0ad992fd3496cc2b4b2a144f15
2 parents 07a1d2e + 9cfed8d commit b7a5450

File tree

1 file changed

+62
-74
lines changed

1 file changed

+62
-74
lines changed

pkg/server/options/serving_test.go

Lines changed: 62 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -398,68 +398,63 @@ func TestServerRunWithSNI(t *testing.T) {
398398
return strings.Replace(name, "*", "star", -1)
399399
}
400400

401-
NextTest:
402-
for title, test := range tests {
403-
// create server cert
404-
certDir := "testdata/" + specToName(test.Cert)
405-
serverCertBundleFile := filepath.Join(certDir, "cert")
406-
serverKeyFile := filepath.Join(certDir, "key")
407-
err := getOrCreateTestCertFiles(serverCertBundleFile, serverKeyFile, test.Cert)
408-
if err != nil {
409-
t.Errorf("%q - failed to create server cert: %v", title, err)
410-
continue NextTest
411-
}
412-
ca, err := caCertFromBundle(serverCertBundleFile)
413-
if err != nil {
414-
t.Errorf("%q - failed to extract ca cert from server cert bundle: %v", title, err)
415-
continue NextTest
416-
}
417-
caCerts := []*x509.Certificate{ca}
418-
419-
// create SNI certs
420-
var namedCertKeys []utilflag.NamedCertKey
421-
serverSig, err := certFileSignature(serverCertBundleFile, serverKeyFile)
422-
if err != nil {
423-
t.Errorf("%q - failed to get server cert signature: %v", title, err)
424-
continue NextTest
425-
}
426-
signatures := map[string]int{
427-
serverSig: -1,
428-
}
429-
for j, c := range test.SNICerts {
430-
sniDir := filepath.Join(certDir, specToName(c.TestCertSpec))
431-
certBundleFile := filepath.Join(sniDir, "cert")
432-
keyFile := filepath.Join(sniDir, "key")
433-
err := getOrCreateTestCertFiles(certBundleFile, keyFile, c.TestCertSpec)
401+
for title := range tests {
402+
test := tests[title]
403+
t.Run(title, func(t *testing.T) {
404+
t.Parallel()
405+
// create server cert
406+
certDir := "testdata/" + specToName(test.Cert)
407+
serverCertBundleFile := filepath.Join(certDir, "cert")
408+
serverKeyFile := filepath.Join(certDir, "key")
409+
err := getOrCreateTestCertFiles(serverCertBundleFile, serverKeyFile, test.Cert)
434410
if err != nil {
435-
t.Errorf("%q - failed to create SNI cert %d: %v", title, j, err)
436-
continue NextTest
411+
t.Fatalf("failed to create server cert: %v", err)
437412
}
438-
439-
namedCertKeys = append(namedCertKeys, utilflag.NamedCertKey{
440-
KeyFile: keyFile,
441-
CertFile: certBundleFile,
442-
Names: c.explicitNames,
443-
})
444-
445-
ca, err := caCertFromBundle(certBundleFile)
413+
ca, err := caCertFromBundle(serverCertBundleFile)
446414
if err != nil {
447-
t.Errorf("%q - failed to extract ca cert from SNI cert %d: %v", title, j, err)
448-
continue NextTest
415+
t.Fatalf("failed to extract ca cert from server cert bundle: %v", err)
449416
}
450-
caCerts = append(caCerts, ca)
417+
caCerts := []*x509.Certificate{ca}
451418

452-
// store index in namedCertKeys with the signature as the key
453-
sig, err := certFileSignature(certBundleFile, keyFile)
419+
// create SNI certs
420+
var namedCertKeys []utilflag.NamedCertKey
421+
serverSig, err := certFileSignature(serverCertBundleFile, serverKeyFile)
454422
if err != nil {
455-
t.Errorf("%q - failed get SNI cert %d signature: %v", title, j, err)
456-
continue NextTest
423+
t.Fatalf("failed to get server cert signature: %v", err)
457424
}
458-
signatures[sig] = j
459-
}
425+
signatures := map[string]int{
426+
serverSig: -1,
427+
}
428+
for j, c := range test.SNICerts {
429+
sniDir := filepath.Join(certDir, specToName(c.TestCertSpec))
430+
certBundleFile := filepath.Join(sniDir, "cert")
431+
keyFile := filepath.Join(sniDir, "key")
432+
err := getOrCreateTestCertFiles(certBundleFile, keyFile, c.TestCertSpec)
433+
if err != nil {
434+
t.Fatalf("failed to create SNI cert %d: %v", j, err)
435+
}
460436

461-
stopCh := make(chan struct{})
462-
func() {
437+
namedCertKeys = append(namedCertKeys, utilflag.NamedCertKey{
438+
KeyFile: keyFile,
439+
CertFile: certBundleFile,
440+
Names: c.explicitNames,
441+
})
442+
443+
ca, err := caCertFromBundle(certBundleFile)
444+
if err != nil {
445+
t.Fatalf("failed to extract ca cert from SNI cert %d: %v", j, err)
446+
}
447+
caCerts = append(caCerts, ca)
448+
449+
// store index in namedCertKeys with the signature as the key
450+
sig, err := certFileSignature(certBundleFile, keyFile)
451+
if err != nil {
452+
t.Fatalf("failed get SNI cert %d signature: %v", j, err)
453+
}
454+
signatures[sig] = j
455+
}
456+
457+
stopCh := make(chan struct{})
463458
defer close(stopCh)
464459

465460
// launch server
@@ -483,22 +478,20 @@ NextTest:
483478
// use a random free port
484479
ln, err := net.Listen("tcp", "127.0.0.1:0")
485480
if err != nil {
486-
t.Errorf("failed to listen on 127.0.0.1:0")
481+
t.Fatalf("failed to listen on 127.0.0.1:0")
487482
}
488483

489484
secureOptions.Listener = ln
490485
// get port
491486
secureOptions.BindPort = ln.Addr().(*net.TCPAddr).Port
492487
config.LoopbackClientConfig = &restclient.Config{}
493488
if err := secureOptions.ApplyTo(&config); err != nil {
494-
t.Errorf("%q - failed applying the SecureServingOptions: %v", title, err)
495-
return
489+
t.Fatalf("failed applying the SecureServingOptions: %v", err)
496490
}
497491

498492
s, err := config.Complete(nil).New("test", server.NewEmptyDelegate())
499493
if err != nil {
500-
t.Errorf("%q - failed creating the server: %v", title, err)
501-
return
494+
t.Fatalf("failed creating the server: %v", err)
502495
}
503496

504497
// add poststart hook to know when the server is up.
@@ -530,22 +523,20 @@ NextTest:
530523
ServerName: test.ServerName, // used for SNI in the client HELLO packet
531524
})
532525
if err != nil {
533-
t.Errorf("%q - failed to connect: %v", title, err)
534-
return
526+
t.Fatalf("failed to connect: %v", err)
535527
}
528+
defer conn.Close()
536529

537530
// check returned server certificate
538531
sig := x509CertSignature(conn.ConnectionState().PeerCertificates[0])
539532
gotCertIndex, found := signatures[sig]
540533
if !found {
541-
t.Errorf("%q - unknown signature returned from server: %s", title, sig)
534+
t.Errorf("unknown signature returned from server: %s", sig)
542535
}
543536
if gotCertIndex != test.ExpectedCertIndex {
544-
t.Errorf("%q - expected cert index %d, got cert index %d", title, test.ExpectedCertIndex, gotCertIndex)
537+
t.Errorf("expected cert index %d, got cert index %d", test.ExpectedCertIndex, gotCertIndex)
545538
}
546539

547-
conn.Close()
548-
549540
// check that the loopback client can connect
550541
host := "127.0.0.1"
551542
if len(test.LoopbackClientBindAddressOverride) != 0 {
@@ -554,28 +545,25 @@ NextTest:
554545
s.LoopbackClientConfig.Host = net.JoinHostPort(host, strconv.Itoa(secureOptions.BindPort))
555546
if test.ExpectLoopbackClientError {
556547
if err == nil {
557-
t.Errorf("%q - expected error creating loopback client config", title)
548+
t.Fatalf("expected error creating loopback client config")
558549
}
559550
return
560551
}
561552
if err != nil {
562-
t.Errorf("%q - failed creating loopback client config: %v", title, err)
563-
return
553+
t.Fatalf("failed creating loopback client config: %v", err)
564554
}
565555
client, err := discovery.NewDiscoveryClientForConfig(s.LoopbackClientConfig)
566556
if err != nil {
567-
t.Errorf("%q - failed to create loopback client: %v", title, err)
568-
return
557+
t.Fatalf("failed to create loopback client: %v", err)
569558
}
570559
got, err := client.ServerVersion()
571560
if err != nil {
572-
t.Errorf("%q - failed to connect with loopback client: %v", title, err)
573-
return
561+
t.Fatalf("failed to connect with loopback client: %v", err)
574562
}
575563
if expected := &v; !reflect.DeepEqual(got, expected) {
576-
t.Errorf("%q - loopback client didn't get correct version info: expected=%v got=%v", title, expected, got)
564+
t.Errorf("loopback client didn't get correct version info: expected=%v got=%v", expected, got)
577565
}
578-
}()
566+
})
579567
}
580568
}
581569

0 commit comments

Comments
 (0)