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  }