Skip to content

Commit 3835ec4

Browse files
committed
save
1 parent 99728dc commit 3835ec4

File tree

11 files changed

+873
-72
lines changed

11 files changed

+873
-72
lines changed

pkg/gateway/routeutils/tcp.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ func (tcpRoute *tcpRouteDescription) loadAttachedRules(ctx context.Context, k8sC
7373

7474
convertedRules = append(convertedRules, convertTCPRouteRule(&rule, convertedBackends))
7575
}
76-
7776
tcpRoute.rules = convertedRules
7877
return tcpRoute, nil
7978
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package gateway
2+
3+
import (
4+
"testing"
5+
6+
"sigs.k8s.io/aws-load-balancer-controller/test/framework"
7+
8+
. "github.com/onsi/ginkgo/v2"
9+
. "github.com/onsi/gomega"
10+
)
11+
12+
var tf *framework.Framework
13+
14+
func TestGateway(t *testing.T) {
15+
RegisterFailHandler(Fail)
16+
RunSpecs(t, "Gateway Suite")
17+
}
18+
19+
var _ = BeforeSuite(func() {
20+
var err error
21+
tf, err = framework.InitFramework()
22+
Expect(err).NotTo(HaveOccurred())
23+
})
Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
package gateway
2+
3+
import (
4+
"context"
5+
appsv1 "k8s.io/api/apps/v1"
6+
corev1 "k8s.io/api/core/v1"
7+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
8+
"k8s.io/apimachinery/pkg/util/intstr"
9+
elbv2gw "sigs.k8s.io/aws-load-balancer-controller/apis/gateway/v1beta1"
10+
"sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
11+
"sigs.k8s.io/aws-load-balancer-controller/test/framework"
12+
"sigs.k8s.io/aws-load-balancer-controller/test/framework/utils"
13+
"sigs.k8s.io/controller-runtime/pkg/client"
14+
gwv1 "sigs.k8s.io/gateway-api/apis/v1"
15+
gwalpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
16+
)
17+
18+
const (
19+
appContainerPort = 80
20+
defaultNumReplicas = 3
21+
defaultName = "instance-e2e"
22+
defaultGatewayClassName = "gwclass-e2e"
23+
defaultLbConfigName = "lbconfig-e2e"
24+
)
25+
26+
type NLBInstanceTestStack struct {
27+
resourceStack *resourceStack
28+
}
29+
30+
func (s *NLBInstanceTestStack) Deploy(ctx context.Context, f *framework.Framework, spec elbv2gw.LoadBalancerConfigurationSpec) error {
31+
dp := s.buildDeploymentSpec(f.Options.TestImageRegistry)
32+
svc := s.buildServiceSpec()
33+
gwc := s.buildGatewayClassSpec()
34+
gw := s.buildGatewaySpec()
35+
lbc := s.buildLoadBalancerConfig(spec)
36+
tcpr := s.buildTCPRoute()
37+
s.resourceStack = NewResourceStack(dp, svc, gwc, gw, lbc, tcpr, "service-instance-e2e", false)
38+
39+
return s.resourceStack.Deploy(ctx, f)
40+
}
41+
42+
func (s *NLBInstanceTestStack) UpdateServiceAnnotations(ctx context.Context, f *framework.Framework, svcAnnotations map[string]string) error {
43+
return s.resourceStack.UpdateServiceAnnotations(ctx, f, svcAnnotations)
44+
}
45+
46+
func (s *NLBInstanceTestStack) DeleteServiceAnnotations(ctx context.Context, f *framework.Framework, annotationKeys []string) error {
47+
return s.resourceStack.DeleteServiceAnnotations(ctx, f, annotationKeys)
48+
}
49+
50+
func (s *NLBInstanceTestStack) UpdateServiceTrafficPolicy(ctx context.Context, f *framework.Framework, trafficPolicy corev1.ServiceExternalTrafficPolicyType) error {
51+
return s.resourceStack.UpdateServiceTrafficPolicy(ctx, f, trafficPolicy)
52+
}
53+
54+
func (s *NLBInstanceTestStack) ScaleDeployment(ctx context.Context, f *framework.Framework, numReplicas int32) error {
55+
return s.resourceStack.ScaleDeployment(ctx, f, numReplicas)
56+
}
57+
58+
func (s *NLBInstanceTestStack) Cleanup(ctx context.Context, f *framework.Framework) error {
59+
return s.resourceStack.Cleanup(ctx, f)
60+
}
61+
62+
func (s *NLBInstanceTestStack) GetLoadBalancerIngressHostName() string {
63+
return s.resourceStack.GetLoadBalancerIngressHostname()
64+
}
65+
66+
func (s *NLBInstanceTestStack) GetWorkerNodes(ctx context.Context, f *framework.Framework) ([]corev1.Node, error) {
67+
allNodes := &corev1.NodeList{}
68+
err := f.K8sClient.List(ctx, allNodes)
69+
if err != nil {
70+
return nil, err
71+
}
72+
nodeList := []corev1.Node{}
73+
for _, node := range allNodes.Items {
74+
if _, notarget := node.Labels["node.kubernetes.io/exclude-from-external-load-balancers"]; !notarget {
75+
nodeList = append(nodeList, node)
76+
}
77+
}
78+
return nodeList, nil
79+
}
80+
81+
func (s *NLBInstanceTestStack) ApplyNodeLabels(ctx context.Context, f *framework.Framework, node *corev1.Node, labels map[string]string) error {
82+
f.Logger.Info("applying node labels", "node", k8s.NamespacedName(node))
83+
oldNode := node.DeepCopy()
84+
for key, value := range labels {
85+
node.Labels[key] = value
86+
}
87+
if err := f.K8sClient.Patch(ctx, node, client.MergeFrom(oldNode)); err != nil {
88+
f.Logger.Info("failed to update node", "node", k8s.NamespacedName(node))
89+
return err
90+
}
91+
return nil
92+
}
93+
94+
func (s *NLBInstanceTestStack) buildDeploymentSpec(testImageRegistry string) *appsv1.Deployment {
95+
numReplicas := int32(defaultNumReplicas)
96+
labels := map[string]string{
97+
"app.kubernetes.io/name": "multi-port",
98+
"app.kubernetes.io/instance": defaultName,
99+
}
100+
dpImage := utils.GetDeploymentImage(testImageRegistry, utils.HelloImage)
101+
return &appsv1.Deployment{
102+
ObjectMeta: metav1.ObjectMeta{
103+
Name: defaultName,
104+
},
105+
Spec: appsv1.DeploymentSpec{
106+
Replicas: &numReplicas,
107+
Selector: &metav1.LabelSelector{
108+
MatchLabels: labels,
109+
},
110+
Template: corev1.PodTemplateSpec{
111+
ObjectMeta: metav1.ObjectMeta{
112+
Labels: labels,
113+
},
114+
Spec: corev1.PodSpec{
115+
Containers: []corev1.Container{
116+
{
117+
Name: "app",
118+
ImagePullPolicy: corev1.PullAlways,
119+
Image: dpImage,
120+
Ports: []corev1.ContainerPort{
121+
{
122+
ContainerPort: appContainerPort,
123+
},
124+
},
125+
},
126+
},
127+
},
128+
},
129+
},
130+
}
131+
}
132+
133+
func (s *NLBInstanceTestStack) buildServiceSpec() *corev1.Service {
134+
labels := map[string]string{
135+
"app.kubernetes.io/name": "multi-port",
136+
"app.kubernetes.io/instance": defaultName,
137+
}
138+
svc := &corev1.Service{
139+
ObjectMeta: metav1.ObjectMeta{
140+
Name: defaultName,
141+
},
142+
Spec: corev1.ServiceSpec{
143+
Type: corev1.ServiceTypeClusterIP,
144+
Selector: labels,
145+
Ports: []corev1.ServicePort{
146+
{
147+
Port: 80,
148+
TargetPort: intstr.FromInt(80),
149+
Protocol: corev1.ProtocolTCP,
150+
},
151+
},
152+
},
153+
}
154+
return svc
155+
}
156+
157+
func (s *NLBInstanceTestStack) buildGatewayClassSpec() *gwv1.GatewayClass {
158+
gwc := &gwv1.GatewayClass{
159+
ObjectMeta: metav1.ObjectMeta{
160+
Name: defaultGatewayClassName,
161+
},
162+
Spec: gwv1.GatewayClassSpec{
163+
ControllerName: "gateway.k8s.aws/nlb",
164+
},
165+
}
166+
return gwc
167+
}
168+
169+
func (s *NLBInstanceTestStack) buildLoadBalancerConfig(spec elbv2gw.LoadBalancerConfigurationSpec) *elbv2gw.LoadBalancerConfiguration {
170+
lbc := &elbv2gw.LoadBalancerConfiguration{
171+
ObjectMeta: metav1.ObjectMeta{
172+
Name: defaultLbConfigName,
173+
},
174+
Spec: spec,
175+
}
176+
return lbc
177+
}
178+
179+
func (s *NLBInstanceTestStack) buildGatewaySpec() *gwv1.Gateway {
180+
gw := &gwv1.Gateway{
181+
ObjectMeta: metav1.ObjectMeta{
182+
Name: defaultName,
183+
},
184+
Spec: gwv1.GatewaySpec{
185+
GatewayClassName: defaultGatewayClassName,
186+
Listeners: []gwv1.Listener{
187+
{
188+
Port: 80,
189+
Protocol: gwv1.TCPProtocolType,
190+
},
191+
},
192+
Infrastructure: &gwv1.GatewayInfrastructure{
193+
ParametersRef: &gwv1.LocalParametersReference{
194+
Group: "gateway.k8s.aws",
195+
Kind: "LoadBalancerConfiguration",
196+
Name: defaultLbConfigName,
197+
},
198+
},
199+
},
200+
}
201+
return gw
202+
}
203+
204+
func (s *NLBInstanceTestStack) buildTCPRoute() *gwalpha2.TCPRoute {
205+
gw := &gwalpha2.TCPRoute{
206+
ObjectMeta: metav1.ObjectMeta{
207+
Name: defaultName,
208+
},
209+
Spec: gwalpha2.TCPRouteSpec{
210+
CommonRouteSpec: gwalpha2.CommonRouteSpec{
211+
ParentRefs: []gwv1.ParentReference{
212+
{
213+
Name: defaultName,
214+
},
215+
},
216+
},
217+
},
218+
}
219+
return gw
220+
}

0 commit comments

Comments
 (0)