11#! /usr/bin/env bats
22
3- setup_file () {
4- REPO_ROOT=" $( cd " $( dirname " $BATS_TEST_FILENAME " ) /.." > /dev/null 2>&1 && pwd ) "
5- cd $REPO_ROOT
6- # install cloud-provider-kind
7- make
8- TMP_DIR=$( mktemp -d)
9- export TMP_DIR
10- # install `kind` and `kubectl` to tempdir
11- curl -sLo " ${TMP_DIR} /kubectl" " https://dl.k8s.io/release/$( curl -L -s https://dl.k8s.io/release/stable.txt) /bin/linux/amd64/kubectl"
12- chmod +x " ${TMP_DIR} /kubectl"
13- curl -sLo " ${TMP_DIR} /kind" https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
14- chmod +x " ${TMP_DIR} /kind"
15-
16- PATH=" ${TMP_DIR} :${PATH} "
17- export PATH
18- # create cluster
19- kind create cluster --name kccm --wait 1m
20- kind get kubeconfig --name kccm > " ${TMP_DIR} /kubeconfig"
21- kubectl --kubeconfig " ${TMP_DIR} /kubeconfig" wait --for=condition=ready pods --namespace=kube-system -l k8s-app=kube-dns --timeout=3m
22- kubectl --kubeconfig " ${TMP_DIR} /kubeconfig" label node kccm-control-plane node.kubernetes.io/exclude-from-external-load-balancers-
23- # run cloud-provider-kind
24- nohup bin/cloud-provider-kind > ${TMP_DIR} /kccm-kind.log 2>&1 &
25- CLOUD_PROVIDER_KIND_PID=$( echo $! )
26- }
27-
28- teardown_file () {
29- kill -9 ${CLOUD_PROVIDER_KIND_PID}
30- kind delete cluster --name kccm || true
31-
32- if [[ -n " ${TMP_DIR:- } " ]]; then
33- rm -rf " ${TMP_DIR} "
34- fi
35- }
36-
373@test " ExternalTrafficPolicy: Local" {
38- kubectl --kubeconfig " ${TMP_DIR} /kubeconfig " apply -f examples/loadbalancer_etp_local.yaml
39- kubectl --kubeconfig " ${TMP_DIR} /kubeconfig " wait --for=condition=ready pods -l app=MyLocalApp
4+ kubectl apply -f " $BATS_TEST_DIRNAME " /../ examples/loadbalancer_etp_local.yaml
5+ kubectl wait --for=condition=ready pods -l app=MyLocalApp
406 for i in {1..5}
417 do
42- IP=$( kubectl --kubeconfig " ${TMP_DIR} /kubeconfig " get services lb-service-local --output jsonpath=' {.status.loadBalancer.ingress[0].ip}' )
8+ IP=$( kubectl get services lb-service-local --output jsonpath=' {.status.loadBalancer.ingress[0].ip}' )
439 [[ ! -z " $IP " ]] && break || sleep 1
4410 done
45- echo $IP
46- POD=$( kubectl --kubeconfig " ${TMP_DIR} /kubeconfig " get pod -l app=MyLocalApp -o jsonpath=' {.items[0].metadata.name}' )
47- echo $POD
11+ echo " IP: $IP "
12+ POD=$( kubectl get pod -l app=MyLocalApp -o jsonpath=' {.items[0].metadata.name}' )
13+ echo " Pod $POD "
4814 for i in {1..5}
4915 do
5016 HOSTNAME=$( curl -s http://${IP} :80/hostname || true)
5117 [[ ! -z " $HOSTNAME " ]] && break || sleep 1
5218 done
53- echo $HOSTNAME
19+ echo " Hostname via TCP: $HOSTNAME "
5420 [ " $HOSTNAME " = " $POD " ]
5521}
5622
5723@test " ExternalTrafficPolicy: Cluster" {
58- kubectl --kubeconfig " ${TMP_DIR} /kubeconfig" apply -f examples/loadbalancer_etp_cluster.yaml
59- kubectl --kubeconfig " ${TMP_DIR} /kubeconfig" wait --for=condition=ready pods -l app=MyClusterApp
24+ kubectl apply -f " $BATS_TEST_DIRNAME " /../examples/loadbalancer_etp_cluster.yaml
25+ kubectl wait --for=condition=ready pods -l app=MyClusterApp
26+ for i in {1..5}
27+ do
28+ IP=$( kubectl get services lb-service-cluster --output jsonpath=' {.status.loadBalancer.ingress[0].ip}' )
29+ [[ ! -z " $IP " ]] && break || sleep 1
30+ done
31+ echo " IP: $IP "
32+ POD=$( kubectl get pod -l app=MyClusterApp -o jsonpath=' {.items[0].metadata.name}' )
33+ echo " Pod $POD "
34+ for i in {1..5}
35+ do
36+ HOSTNAME=$( curl -s http://${IP} :80/hostname || true)
37+ [[ ! -z " $HOSTNAME " ]] && break || sleep 1
38+ done
39+ echo " Hostname via TCP: $HOSTNAME "
40+ [ " $HOSTNAME " = " $POD " ]
41+ }
42+
43+ @test " Multiple Protocols: UDP and TCP" {
44+ kubectl apply -f " $BATS_TEST_DIRNAME " /../examples/loadbalancer_etp_cluster.yaml
45+ kubectl wait --for=condition=ready pods -l app=MyClusterApp
6046 for i in {1..5}
6147 do
62- IP=$( kubectl --kubeconfig " ${TMP_DIR} /kubeconfig " get services lb-service-cluster --output jsonpath=' {.status.loadBalancer.ingress[0].ip}' )
48+ IP=$( kubectl get services lb-service-cluster --output jsonpath=' {.status.loadBalancer.ingress[0].ip}' )
6349 [[ ! -z " $IP " ]] && break || sleep 1
6450 done
65- echo $IP
66- POD=$( kubectl --kubeconfig " ${TMP_DIR} /kubeconfig " get pod -l app=MyClusterApp -o jsonpath=' {.items[0].metadata.name}' )
67- echo $POD
51+ echo " IP: $IP "
52+ POD=$( kubectl get pod -l app=MyClusterApp -o jsonpath=' {.items[0].metadata.name}' )
53+ echo " Pod $POD "
6854 for i in {1..5}
6955 do
7056 HOSTNAME=$( curl -s http://${IP} :80/hostname || true)
7157 [[ ! -z " $HOSTNAME " ]] && break || sleep 1
7258 done
73- echo $HOSTNAME
59+ echo " Hostname via TCP: $HOSTNAME "
60+ [ " $HOSTNAME " = " $POD " ]
61+
62+ for i in {1..5}
63+ do
64+ HOSTNAME=$( echo hostname | nc -u -w 3 ${IP} 80 || true)
65+ [[ ! -z " $HOSTNAME " ]] && break || sleep 1
66+ done
67+ echo " Hostname via UDP: $HOSTNAME "
7468 [ " $HOSTNAME " = " $POD " ]
7569}
0 commit comments