github.com/stakater/IngressMonitorController@v1.0.103/pkg/kube/wrappers/ingress-wrapper_test.go (about) 1 package wrappers 2 3 import ( 4 "testing" 5 6 "github.com/stakater/IngressMonitorController/pkg/kube" 7 "github.com/stakater/IngressMonitorController/pkg/util" 8 "k8s.io/api/extensions/v1beta1" 9 "k8s.io/client-go/kubernetes" 10 "k8s.io/client-go/rest" 11 ) 12 13 const ( 14 testUrl = "testurl.stackator.com" 15 ) 16 17 func createIngressObjectWithPath(ingressName string, namespace string, url string, path string) *v1beta1.Ingress { 18 ingress := util.CreateIngressObject(ingressName, namespace, url) 19 ingress.Spec.Rules[0].IngressRuleValue = v1beta1.IngressRuleValue{ 20 HTTP: &v1beta1.HTTPIngressRuleValue{ 21 Paths: []v1beta1.HTTPIngressPath{ 22 v1beta1.HTTPIngressPath{ 23 Path: path, 24 }, 25 }, 26 }, 27 } 28 29 return ingress 30 } 31 32 func createIngressObjectWithAnnotations(ingressName string, namespace string, url string, annotations map[string]string) *v1beta1.Ingress { 33 ingress := util.CreateIngressObject(ingressName, namespace, url) 34 ingress.ObjectMeta.SetAnnotations(annotations) 35 36 return ingress 37 } 38 39 func createIngressObjectWithTLS(ingressName string, namespace string, url string, tlsHostname string) *v1beta1.Ingress { 40 ingress := util.CreateIngressObject(ingressName, namespace, url) 41 ingress.Spec.TLS = []v1beta1.IngressTLS{ 42 v1beta1.IngressTLS{ 43 Hosts: []string{ 44 tlsHostname, 45 }, 46 }, 47 } 48 return ingress 49 } 50 51 func TestIngressWrapper_getURL(t *testing.T) { 52 type fields struct { 53 ingress *v1beta1.Ingress 54 namespace string 55 kubeClient kubernetes.Interface 56 } 57 tests := []struct { 58 name string 59 fields fields 60 want string 61 }{ 62 { 63 name: "TestGetUrlWithEmptyPath", 64 fields: fields{ 65 ingress: createIngressObjectWithPath("testIngress", "test", testUrl, "/"), 66 namespace: "test", 67 kubeClient: getTestKubeClient(), 68 }, 69 want: "http://testurl.stackator.com/", 70 }, 71 { 72 name: "TestGetUrlWithHelloPath", 73 fields: fields{ 74 ingress: createIngressObjectWithPath("testIngress", "test", testUrl, "/hello"), 75 namespace: "test", 76 kubeClient: getTestKubeClient(), 77 }, 78 want: "http://testurl.stackator.com/hello", 79 }, 80 { 81 name: "TestGetUrlWithNoPath", 82 fields: fields{ 83 ingress: util.CreateIngressObject("testIngress", "test", testUrl), 84 namespace: "test", 85 kubeClient: getTestKubeClient(), 86 }, 87 want: "http://testurl.stackator.com", 88 }, 89 { 90 name: "TestGetUrlWithForceHTTPSAnnotation", 91 fields: fields{ 92 ingress: createIngressObjectWithAnnotations("testIngress", "test", testUrl, map[string]string{"monitor.stakater.com/forceHttps": "true"}), 93 namespace: "test", 94 kubeClient: getTestKubeClient(), 95 }, 96 want: "https://testurl.stackator.com", 97 }, 98 { 99 name: "TestGetUrlWithForceHTTPSAnnotationOff", 100 fields: fields{ 101 ingress: createIngressObjectWithAnnotations("testIngress", "test", testUrl, map[string]string{"monitor.stakater.com/forceHttps": "false"}), 102 namespace: "test", 103 kubeClient: getTestKubeClient(), 104 }, 105 want: "http://testurl.stackator.com", 106 }, 107 { 108 name: "TestGetUrlWithOverridePathAnnotation", 109 fields: fields{ 110 ingress: createIngressObjectWithAnnotations("testIngress", "test", testUrl, map[string]string{"monitor.stakater.com/overridePath": "/overriden-path"}), 111 namespace: "test", 112 kubeClient: getTestKubeClient(), 113 }, 114 want: "http://testurl.stackator.com/overriden-path", 115 }, { 116 name: "TestGetUrlWithWildCardInPath", 117 fields: fields{ 118 ingress: createIngressObjectWithPath("testIngress", "test", testUrl, "/*"), 119 namespace: "test", 120 kubeClient: getTestKubeClient(), 121 }, 122 want: "http://testurl.stackator.com/", 123 }, { 124 name: "TestGetUrlWithRegexCaptureGroupInPath", 125 fields: fields{ 126 ingress: createIngressObjectWithPath("testIngress", "test", testUrl, "/api(/|$)(.*)"), 127 namespace: "test", 128 kubeClient: getTestKubeClient(), 129 }, 130 want: "http://testurl.stackator.com/api", 131 }, { 132 name: "TestGetUrlWithTLS", 133 fields: fields{ 134 ingress: createIngressObjectWithTLS("testIngress", "test", testUrl, "customtls.stackator.com"), 135 namespace: "test", 136 kubeClient: getTestKubeClient(), 137 }, 138 want: "https://customtls.stackator.com", 139 }, { 140 name: "TestGetUrlWithEmptyTLS", 141 fields: fields{ 142 ingress: createIngressObjectWithTLS("testIngress", "test", testUrl, ""), 143 namespace: "test", 144 kubeClient: getTestKubeClient(), 145 }, 146 want: "http://testurl.stackator.com", 147 }, 148 } 149 for _, tt := range tests { 150 t.Run(tt.name, func(t *testing.T) { 151 iw := &IngressWrapper{ 152 Ingress: tt.fields.ingress, 153 Namespace: tt.fields.namespace, 154 KubeClient: tt.fields.kubeClient, 155 } 156 if got := iw.GetURL(); got != tt.want { 157 t.Errorf("IngressWrapper.getURL() = %v, want %v", got, tt.want) 158 } 159 }) 160 } 161 } 162 163 func getTestKubeClient() kubernetes.Interface { 164 var kubeClient kubernetes.Interface 165 _, err := rest.InClusterConfig() 166 if err != nil { 167 kubeClient = kube.GetClientOutOfCluster() 168 } else { 169 kubeClient = kube.GetClient() 170 } 171 172 return kubeClient 173 }