From 974fc9e1bbed7d5cbc0832cca97c808268c4d332 Mon Sep 17 00:00:00 2001 From: James Munnelly Date: Tue, 14 Aug 2018 10:07:05 +0100 Subject: [PATCH] Add unit test for cleaning up existing ingress Signed-off-by: James Munnelly --- pkg/issuer/acme/http/ingress_test.go | 77 ++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/pkg/issuer/acme/http/ingress_test.go b/pkg/issuer/acme/http/ingress_test.go index 446e9b702..c5bdb7c88 100644 --- a/pkg/issuer/acme/http/ingress_test.go +++ b/pkg/issuer/acme/http/ingress_test.go @@ -25,9 +25,12 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/diff" + "k8s.io/apimachinery/pkg/util/intstr" coretesting "k8s.io/client-go/testing" "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1alpha1" + "github.com/jetstack/cert-manager/pkg/controller/test" "github.com/jetstack/cert-manager/test/util/generate" ) @@ -190,6 +193,80 @@ func TestCleanupIngresses(t *testing.T) { } }, }, + "should clean up an ingress with a single challenge path inserted": { + Builder: &test.Builder{ + KubeObjects: []runtime.Object{ + &v1beta1.Ingress{ + ObjectMeta: metav1.ObjectMeta{ + Name: "testingress", + Namespace: defaultTestNamespace, + }, + Spec: v1beta1.IngressSpec{ + Backend: &v1beta1.IngressBackend{ + ServiceName: "testsvc", + ServicePort: intstr.FromInt(8080), + }, + Rules: []v1beta1.IngressRule{ + { + Host: "example.com", + IngressRuleValue: v1beta1.IngressRuleValue{ + HTTP: &v1beta1.HTTPIngressRuleValue{ + Paths: []v1beta1.HTTPIngressPath{ + { + Path: "/.well-known/acme-challenge/abcd", + Backend: v1beta1.IngressBackend{ + ServiceName: "solversvc", + ServicePort: intstr.FromInt(8081), + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + Certificate: generate.Certificate(generate.CertificateConfig{ + Name: "test", + Namespace: defaultTestNamespace, + DNSNames: []string{"example.com"}, + ACMEOrderURL: "testurl", + SolverConfig: v1alpha1.SolverConfig{ + HTTP01: &v1alpha1.HTTP01SolverConfig{ + Ingress: "testingress", + }, + }, + }), + Challenge: v1alpha1.ACMEOrderChallenge{ + Domain: "example.com", + Token: "abcd", + SolverConfig: v1alpha1.SolverConfig{ + HTTP01: &v1alpha1.HTTP01SolverConfig{ + Ingress: "testingress", + }, + }, + }, + PreFn: func(t *testing.T, s *solverFixture) { + }, + CheckFn: func(t *testing.T, s *solverFixture, args ...interface{}) { + expectedIng := s.KubeObjects[0].(*v1beta1.Ingress).DeepCopy() + expectedIng.Spec.Rules = nil + + actualIng, err := s.Builder.FakeKubeClient().ExtensionsV1beta1().Ingresses(s.Certificate.Namespace).Get(expectedIng.Name, metav1.GetOptions{}) + if apierrors.IsNotFound(err) { + t.Errorf("expected ingress resource %q to not be deleted, but it was deleted", expectedIng.Name) + } + if err != nil { + t.Errorf("error getting ingress resource: %v", err) + } + + if !reflect.DeepEqual(expectedIng, actualIng) { + t.Errorf("expected did not match actual: %v", diff.ObjectDiff(expectedIng, actualIng)) + } + }, + }, "should return an error if a delete fails": { Certificate: generate.Certificate(generate.CertificateConfig{ Name: "test",