Skip to content

Commit

Permalink
Merge pull request #1 from adityavenneti/lb-test
Browse files Browse the repository at this point in the history
Adding a Loadbalancer test to validate annotations
  • Loading branch information
nckturner authored Feb 16, 2022
2 parents 952f23b + e76018e commit 56b2a07
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 0 deletions.
1 change: 1 addition & 0 deletions tests/e2e/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1110,6 +1110,7 @@ k8s.io/apiserver v0.23.0/go.mod h1:Cec35u/9zAepDPPFyT+UMrgqOCjgJ5qtfVJDxjZYmt4=
k8s.io/cli-runtime v0.23.0/go.mod h1:B5N3YH0KP1iKr6gEuJ/RRmGjO0mJQ/f/JrsmEiPQAlU=
k8s.io/client-go v0.23.0 h1:vcsOqyPq7XV3QmQRCBH/t9BICJM9Q1M18qahjv+rebY=
k8s.io/client-go v0.23.0/go.mod h1:hrDnpnK1mSr65lHHcUuIZIXDgEbzc7/683c6hyG4jTA=
k8s.io/cloud-provider v0.23.0 h1:9LATZJu57XanN7po4Xfj6jTLp44uhKiu5Xa3+3Cutz0=
k8s.io/cloud-provider v0.23.0/go.mod h1:vY9zulPUCjwCg9TBMh5Qi42JUZUNecQNF7FojNELWws=
k8s.io/cluster-bootstrap v0.23.0/go.mod h1:VltEnKWfrRTiKgOXp3ts3vh7yqNlH6KFKFflo9GtCBg=
k8s.io/code-generator v0.23.0/go.mod h1:vQvOhDXhuzqiVfM/YHp+dmg10WDZCchJVObc9MvowsE=
Expand Down
60 changes: 60 additions & 0 deletions tests/e2e/loadbalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ package e2e
import (
. "github.com/onsi/ginkgo"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/intstr"
clientset "k8s.io/client-go/kubernetes"
"k8s.io/cloud-provider-aws/tests/e2e/testsuites"
"k8s.io/kubernetes/test/e2e/framework"
e2eservice "k8s.io/kubernetes/test/e2e/framework/service"
)

var _ = Describe("[cloud-provider-aws-e2e] loadbalancer", func() {
Expand All @@ -45,4 +47,62 @@ var _ = Describe("[cloud-provider-aws-e2e] loadbalancer", func() {
}
test.Run(cs, ns)
})

It("should configure the loadbalancer based on annotations", func() {
loadBalancerCreateTimeout := e2eservice.GetServiceLoadBalancerCreationTimeout(cs)
framework.Logf("Running tests against AWS with timeout %s", loadBalancerCreateTimeout)

serviceName := "lbconfig-test"
framework.Logf("namespace for load balancer conig test: %s", ns.Name)

By("creating a TCP service " + serviceName + " with type=LoadBalancerType in namespace " + ns.Name)
lbJig := e2eservice.NewTestJig(cs, ns.Name, serviceName)

serviceUpdateFunc := func(svc *v1.Service) {
annotations := make(map[string]string)
annotations["aws-load-balancer-backend-protocol"] = "http"
annotations["aws-load-balancer-ssl-ports"] = "https"

svc.Annotations = annotations
svc.Spec.Ports = []v1.ServicePort{
{
Name: "http",
Protocol: v1.ProtocolTCP,
Port: int32(80),
TargetPort: intstr.FromInt(80),
},
{
Name: "https",
Protocol: v1.ProtocolTCP,
Port: int32(443),
TargetPort: intstr.FromInt(80),
},
}
}

lbService, err := lbJig.CreateLoadBalancerService(loadBalancerCreateTimeout, serviceUpdateFunc)
framework.ExpectNoError(err)

By("creating a pod to be part of the TCP service " + serviceName)
_, err = lbJig.Run(nil)
framework.ExpectNoError(err)

By("hitting the TCP service's LB External IP")
svcPort := int(lbService.Spec.Ports[0].Port)
ingressIP := e2eservice.GetIngressPoint(&lbService.Status.LoadBalancer.Ingress[0])
framework.Logf("Load balancer's ingress IP: %s", ingressIP)

e2eservice.TestReachableHTTP(ingressIP, svcPort, e2eservice.KubeProxyLagTimeout)

// Update the service to cluster IP
By("changing TCP service back to type=ClusterIP")
_, err = lbJig.UpdateService(func(s *v1.Service) {
s.Spec.Type = v1.ServiceTypeClusterIP
})
framework.ExpectNoError(err)

// Wait for the load balancer to be destroyed asynchronously
_, err = lbJig.WaitForLoadBalancerDestroy(ingressIP, svcPort, loadBalancerCreateTimeout)
framework.ExpectNoError(err)
})
})

0 comments on commit 56b2a07

Please sign in to comment.