Skip to content

Commit 601ae0c

Browse files
committed
add a helper func to dump namespaced events
* create DumpEventsInNamespace * tweak CreateTestingNS and DeleteTestingNS logic, move them to BeforeEach() * change the global wait-poll interval to a less aggressive value
1 parent 628090a commit 601ae0c

3 files changed

Lines changed: 45 additions & 63 deletions

File tree

test/e2e/cert_manager_deployment_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import (
3131
)
3232

3333
const (
34-
PollInterval = time.Second
34+
PollInterval = 5 * time.Second
3535
TestTimeout = 10 * time.Minute
3636
)
3737

@@ -44,7 +44,7 @@ func TestSelfSignedCerts(t *testing.T) {
4444

4545
ns, err := loader.CreateTestingNS("e2e-self-signed-cert")
4646
require.NoError(t, err)
47-
defer loader.DeleteTestingNS(ns.Name)
47+
defer loader.DeleteTestingNS(ns.Name, t.Failed)
4848
loader.CreateFromFile(testassets.ReadFile, filepath.Join("testdata", "self_signed", "cluster_issuer.yaml"), ns.Name)
4949
defer loader.DeleteFromFile(testassets.ReadFile, filepath.Join("testdata", "self_signed", "cluster_issuer.yaml"), ns.Name)
5050
loader.CreateFromFile(testassets.ReadFile, filepath.Join("testdata", "self_signed", "issuer.yaml"), ns.Name)
@@ -75,7 +75,7 @@ func TestACMECertsIngress(t *testing.T) {
7575

7676
ns, err := loader.CreateTestingNS("e2e-acme-ingress-cert")
7777
require.NoError(t, err)
78-
defer loader.DeleteTestingNS(ns.Name)
78+
defer loader.DeleteTestingNS(ns.Name, t.Failed)
7979
loader.CreateFromFile(testassets.ReadFile, filepath.Join("testdata", "acme", "clusterissuer.yaml"), ns.Name)
8080
defer loader.DeleteFromFile(testassets.ReadFile, filepath.Join("testdata", "acme", "clusterissuer.yaml"), ns.Name)
8181
loader.CreateFromFile(testassets.ReadFile, filepath.Join("testdata", "acme", "deployment.yaml"), ns.Name)
@@ -161,7 +161,7 @@ func TestCertRenew(t *testing.T) {
161161

162162
ns, err := loader.CreateTestingNS("e2e-cert-renew")
163163
require.NoErrorf(t, err, "failed to create namespace: %v", err)
164-
defer loader.DeleteTestingNS(ns.Name)
164+
defer loader.DeleteTestingNS(ns.Name, t.Failed)
165165
loader.CreateFromFile(testassets.ReadFile, filepath.Join("testdata", "self_signed", "cluster_issuer.yaml"), ns.Name)
166166
defer loader.DeleteFromFile(testassets.ReadFile, filepath.Join("testdata", "self_signed", "cluster_issuer.yaml"), ns.Name)
167167
loader.CreateFromFile(testassets.ReadFile, filepath.Join("testdata", "self_signed", "issuer.yaml"), ns.Name)

test/e2e/certificates_test.go

Lines changed: 16 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ const (
3434

3535
var _ = Describe("ACME Certificate", Ordered, func() {
3636
var ctx context.Context
37+
var ns *corev1.Namespace
3738
var appsDomain string
3839
var baseDomain string
3940

@@ -71,16 +72,20 @@ var _ = Describe("ACME Certificate", Ordered, func() {
7172
certManagerCAInjectorDeploymentControllerName},
7273
validOperatorStatusConditions)
7374
Expect(err).NotTo(HaveOccurred(), "Operator is expected to be available")
75+
76+
By("creating a test namespace")
77+
namespace, err := loader.CreateTestingNS("e2e-acme-certs")
78+
Expect(err).NotTo(HaveOccurred())
79+
ns = namespace
80+
81+
DeferCleanup(func() {
82+
loader.DeleteTestingNS(ns.Name, func() bool { return CurrentSpecReport().Failed() })
83+
})
7484
})
7585

7686
Context("dns-01 challenge with AWS Route53", Label("Platform:AWS"), func() {
7787
It("should obtain a valid LetsEncrypt certificate using explicit credentials", func() {
7888

79-
By("creating a test namespace")
80-
ns, err := loader.CreateTestingNS("e2e-acme-explicit-dns01")
81-
Expect(err).NotTo(HaveOccurred())
82-
defer loader.DeleteTestingNS(ns.Name)
83-
8489
By("obtaining AWS credentials from kube-system namespace")
8590
awsCredsSecret, err := loader.KubeClient.CoreV1().Secrets("kube-system").Get(ctx, "aws-creds", metav1.GetOptions{})
8691
Expect(err).NotTo(HaveOccurred())
@@ -185,16 +190,11 @@ var _ = Describe("ACME Certificate", Ordered, func() {
185190

186191
It("should obtain a valid LetsEncrypt certificate using ambient credentials with ClusterIssuer", func() {
187192

188-
By("creating a test namespace")
189-
ns, err := loader.CreateTestingNS("e2e-acme-ambient-dns01")
190-
Expect(err).NotTo(HaveOccurred())
191-
defer loader.DeleteTestingNS(ns.Name)
192-
193193
By("creating CredentialsRequest object")
194194
loader.CreateFromFile(testassets.ReadFile, filepath.Join("testdata", "credentials", "credentialsrequest_aws.yaml"), "")
195195

196196
By("waiting for cloud secret to be available")
197-
err = wait.PollImmediate(PollInterval, TestTimeout, func() (bool, error) {
197+
err := wait.PollImmediate(PollInterval, TestTimeout, func() (bool, error) {
198198
_, err := loader.KubeClient.CoreV1().Secrets("cert-manager").Get(ctx, "aws-creds", metav1.GetOptions{})
199199
if err != nil {
200200
return false, nil
@@ -282,16 +282,11 @@ var _ = Describe("ACME Certificate", Ordered, func() {
282282

283283
It("should obtain a valid LetsEncrypt certificate using ambient credentials with Issuer", func() {
284284

285-
By("creating a test namespace")
286-
ns, err := loader.CreateTestingNS("e2e-acme-issuer-ambient-dns01-aws")
287-
Expect(err).NotTo(HaveOccurred())
288-
defer loader.DeleteTestingNS(ns.Name)
289-
290285
By("creating CredentialsRequest object")
291286
loader.CreateFromFile(testassets.ReadFile, filepath.Join("testdata", "credentials", "credentialsrequest_aws.yaml"), "")
292287

293288
By("waiting for cloud secret to be available")
294-
err = wait.PollImmediate(PollInterval, TestTimeout, func() (bool, error) {
289+
err := wait.PollImmediate(PollInterval, TestTimeout, func() (bool, error) {
295290
_, err := loader.KubeClient.CoreV1().Secrets("cert-manager").Get(ctx, "aws-creds", metav1.GetOptions{})
296291
if err != nil {
297292
return false, nil
@@ -383,11 +378,6 @@ var _ = Describe("ACME Certificate", Ordered, func() {
383378
Context("dns-01 challenge with Google CloudDNS", Label("Platform:GCP"), func() {
384379
It("should obtain a valid LetsEncrypt certificate using explicit credentials with ClusterIssuer", func() {
385380

386-
By("creating a test namespace")
387-
ns, err := loader.CreateTestingNS("e2e-acme-explicit-dns01-gcp")
388-
Expect(err).NotTo(HaveOccurred())
389-
defer loader.DeleteTestingNS(ns.Name)
390-
391381
By("obtaining GCP credentials from kube-system namespace")
392382
gcpCredsSecret, err := loader.KubeClient.CoreV1().Secrets("kube-system").Get(ctx, "gcp-credentials", metav1.GetOptions{})
393383
Expect(err).NotTo(HaveOccurred())
@@ -489,18 +479,13 @@ var _ = Describe("ACME Certificate", Ordered, func() {
489479

490480
It("should obtain a valid LetsEncrypt certificate using ambient credentials with ClusterIssuer", func() {
491481

492-
By("Creating a test namespace")
493-
ns, err := loader.CreateTestingNS("e2e-acme-ambient-dns01")
494-
Expect(err).NotTo(HaveOccurred())
495-
defer loader.DeleteTestingNS(ns.Name)
496-
497482
By("Creating CredentialsRequest object")
498483
loader.CreateFromFile(testassets.ReadFile, filepath.Join("testdata", "credentials", "credentialsrequest_gcp.yaml"), "")
499484

500485
By("Waiting for cloud secret to be available")
501486
// The name is defined cloud credential by the testdata YAML file.
502487
credentialSecret := "gcp-credentials"
503-
err = wait.PollImmediate(PollInterval, TestTimeout, func() (bool, error) {
488+
err := wait.PollImmediate(PollInterval, TestTimeout, func() (bool, error) {
504489
_, err := loader.KubeClient.CoreV1().Secrets("cert-manager").Get(ctx, credentialSecret, metav1.GetOptions{})
505490
if err != nil {
506491
return false, nil
@@ -571,11 +556,6 @@ var _ = Describe("ACME Certificate", Ordered, func() {
571556
Skip("skipping as the cluster does not use IBM Cloud CIS")
572557
}
573558

574-
By("creating a test namespace")
575-
ns, err := loader.CreateTestingNS("e2e-acme-explicit-dns01-ibmcloud")
576-
Expect(err).NotTo(HaveOccurred())
577-
defer loader.DeleteTestingNS(ns.Name)
578-
579559
By("creating new certificate ClusterIssuer with IBM Cloud CIS webhook solver")
580560
randomString := randomStr(3)
581561
clusterIssuerName := "letsencrypt-dns01-explicit-ic"
@@ -604,7 +584,7 @@ var _ = Describe("ACME Certificate", Ordered, func() {
604584
loader.CreateFromFile(loadFileAndReplaceStr, filepath.Join("testdata", "acme", "certificate_ibmcis.yaml"), ns.Name)
605585

606586
By("waiting for certificate to get ready")
607-
err = waitForCertificateReadiness(ctx, certName, ns.Name)
587+
err := waitForCertificateReadiness(ctx, certName, ns.Name)
608588
Expect(err).NotTo(HaveOccurred())
609589

610590
By("checking for certificate validity from secret contents")
@@ -616,11 +596,6 @@ var _ = Describe("ACME Certificate", Ordered, func() {
616596
Context("http-01 challenge using ingress", func() {
617597
It("should obtain a valid LetsEncrypt certificate", func() {
618598

619-
By("creating a test namespace")
620-
ns, err := loader.CreateTestingNS("e2e-acme-explicit-dns01")
621-
Expect(err).NotTo(HaveOccurred())
622-
defer loader.DeleteTestingNS(ns.Name)
623-
624599
By("creating a cluster issuer")
625600
loader.CreateFromFile(testassets.ReadFile, filepath.Join("testdata", "acme", "clusterissuer.yaml"), ns.Name)
626601
defer loader.DeleteFromFile(testassets.ReadFile, filepath.Join("testdata", "acme", "clusterissuer.yaml"), ns.Name)
@@ -673,7 +648,7 @@ var _ = Describe("ACME Certificate", Ordered, func() {
673648
}},
674649
},
675650
}
676-
ingress, err = loader.KubeClient.NetworkingV1().Ingresses(ingress.ObjectMeta.Namespace).Create(ctx, ingress, metav1.CreateOptions{})
651+
ingress, err := loader.KubeClient.NetworkingV1().Ingresses(ingress.ObjectMeta.Namespace).Create(ctx, ingress, metav1.CreateOptions{})
677652
Expect(err).NotTo(HaveOccurred())
678653
defer loader.KubeClient.NetworkingV1().Ingresses(ingress.ObjectMeta.Namespace).Delete(ctx, ingress.ObjectMeta.Name, metav1.DeleteOptions{})
679654

@@ -713,7 +688,7 @@ var _ = Describe("Self-signed Certificate", Ordered, func() {
713688
ns = namespace
714689

715690
DeferCleanup(func() {
716-
loader.DeleteTestingNS(ns.Name)
691+
loader.DeleteTestingNS(ns.Name, func() bool { return CurrentSpecReport().Failed() })
717692
})
718693
})
719694

test/library/utils.go

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ package library
66
import (
77
"context"
88
"fmt"
9-
"testing"
9+
"log"
1010
"time"
1111

1212
v1 "k8s.io/api/core/v1"
@@ -18,7 +18,6 @@ import (
1818
)
1919

2020
func (d DynamicResourceLoader) CreateTestingNS(namespacePrefix string) (*v1.Namespace, error) {
21-
t := testing.T{}
2221
namespace := &v1.Namespace{
2322
ObjectMeta: metav1.ObjectMeta{
2423
GenerateName: fmt.Sprintf("%v-", namespacePrefix),
@@ -34,46 +33,54 @@ func (d DynamicResourceLoader) CreateTestingNS(namespacePrefix string) (*v1.Name
3433
var err error
3534
got, err = d.KubeClient.CoreV1().Namespaces().Create(context.Background(), namespace, metav1.CreateOptions{})
3635
if err != nil {
37-
t.Logf("Error creating namespace: %v", err)
36+
log.Printf("Error creating namespace: %v", err)
3837
return false, nil
3938
}
4039
return true, nil
4140
}); err != nil {
4241
return nil, err
4342
}
44-
4543
return got, nil
4644
}
4745

48-
func (d DynamicResourceLoader) DeleteTestingNS(name string) (bool, error) {
49-
t := testing.T{}
46+
func (d DynamicResourceLoader) DeleteTestingNS(name string, shouldDumpEvents func() bool) (bool, error) {
5047
ctx := context.Background()
48+
if shouldDumpEvents() {
49+
d.DumpEventsInNamespace(name)
50+
}
5151

5252
err := d.KubeClient.CoreV1().Namespaces().Delete(ctx, name, metav1.DeleteOptions{})
5353
if err != nil {
54-
t.Logf("Namespace: %v not found, err: %v", name, err)
54+
log.Printf("Error deleting namespace %v, err: %v", name, err)
5555
}
5656

5757
if err := wait.PollImmediate(1*time.Second, 30*time.Second, func() (bool, error) {
58-
5958
// Poll until namespace is deleted
60-
ns, err := d.KubeClient.CoreV1().Namespaces().Get(ctx, name, metav1.GetOptions{})
61-
t.Logf("Namespace: %v", ns)
62-
if err != nil {
63-
t.Logf("Error getting namespace: %v", err)
64-
if k8serrors.IsNotFound(err) {
65-
return true, err
66-
}
67-
return false, nil
59+
_, err := d.KubeClient.CoreV1().Namespaces().Get(ctx, name, metav1.GetOptions{})
60+
if err != nil && k8serrors.IsNotFound(err) {
61+
return true, nil
6862
}
6963
return false, nil
7064
}); err != nil {
71-
t.Logf("Error getting namespace: %v", err)
72-
return true, err
65+
log.Printf("Timed out after 30s waiting for namespace %v to become deleted", name)
66+
return false, err
7367
}
7468
return false, nil
7569
}
7670

71+
func (d DynamicResourceLoader) DumpEventsInNamespace(name string) {
72+
log.Printf("Dumping events in namespace %s...", name)
73+
events, err := d.KubeClient.CoreV1().Events(name).List(context.TODO(), metav1.ListOptions{})
74+
if err != nil {
75+
log.Printf("Error listing events in namespace %s: %v", name, err)
76+
return
77+
}
78+
79+
for _, e := range events.Items {
80+
log.Printf("At %v - event for %v %v: %v %v: %v", e.FirstTimestamp, e.InvolvedObject.Kind, e.InvolvedObject.Name, e.Source, e.Reason, e.Message)
81+
}
82+
}
83+
7784
func GetClusterBaseDomain(ctx context.Context, configClient configv1.ConfigV1Interface) (string, error) {
7885
dns, err := configClient.DNSes().Get(ctx, "cluster", metav1.GetOptions{})
7986
if err != nil {

0 commit comments

Comments
 (0)