Skip to content

Commit 1b0d9f4

Browse files
zijun726911Zijun Wang
andauthored
Improve Test framework, Optimize resource clean up and 'ExpectToBeClean' logic (#214)
* - Improved Test framework, adding VPC Lattice resource thorough clean up logic in the AfterSuite() - Trace each test run created k8s and VPC Lattice resource, properly clean up them in AfterSuite() - Add more retry and wait by Eventually(), base on vpc lattice api throttling setting and async api time spent - Add HeaderMatch httproute integ-test case * Delete header_match_httproute test case * - Add method: `AfterEach(func() {framework.ExpectToBeClean(ctx)})`. in `ExpectToBeClean`, it should expect only current cluster's resource is clean --------- Co-authored-by: Zijun Wang <zijunw@amazon.com>
1 parent ea09f5b commit 1b0d9f4

File tree

9 files changed

+523
-219
lines changed

9 files changed

+523
-219
lines changed

pkg/config/controller_config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const (
1616
// TODO endpoint, region
1717
var VpcID = "vpc-xxxx"
1818
var AccountID = "yyyyyy"
19-
var Region = "us-east-2"
19+
var Region = "us-west-2"
2020
var logLevel = defaultLogLevel
2121

2222
func GetLogLevel() string {

pkg/gateway/model_build_lattice_service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ func (t *latticeServiceModelBuildTask) buildLatticeService(ctx context.Context)
139139
glog.V(2).Infof("Setting customer-domain-name: %v for httpRoute %v-%v",
140140
spec.CustomerDomainName, t.httpRoute.Name, t.httpRoute.Namespace)
141141
} else {
142-
glog.V(2).Infof("No customter-domain-name for httproute :%v-%v",
142+
glog.V(2).Infof("No custom-domain-name for httproute :%v-%v",
143143
t.httpRoute.Name, t.httpRoute.Namespace)
144144
spec.CustomerDomainName = ""
145145
}

test/pkg/test/framework.go

Lines changed: 302 additions & 79 deletions
Large diffs are not rendered by default.

test/pkg/test/gateway.go

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,29 @@
11
package test
22

33
import (
4+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
45
"sigs.k8s.io/gateway-api/apis/v1beta1"
56
)
67

7-
var Gateway = New(&v1beta1.Gateway{
8-
Spec: v1beta1.GatewaySpec{
9-
GatewayClassName: "amazon-vpc-lattice",
10-
Listeners: []v1beta1.Listener{{
11-
Name: "http",
12-
Protocol: v1beta1.HTTPProtocolType,
13-
Port: 80,
14-
}},
15-
},
16-
})
8+
func (env *Framework) NewGateway() *v1beta1.Gateway {
9+
gateway := New(
10+
&v1beta1.Gateway{
11+
ObjectMeta: metav1.ObjectMeta{
12+
Annotations: map[string]string{
13+
"application-networking.k8s.aws/lattice-vpc-association": "true",
14+
},
15+
},
16+
Spec: v1beta1.GatewaySpec{
17+
GatewayClassName: "amazon-vpc-lattice",
18+
Listeners: []v1beta1.Listener{{
19+
Name: "http",
20+
Protocol: v1beta1.HTTPProtocolType,
21+
Port: 80,
22+
}},
23+
},
24+
Status: v1beta1.GatewayStatus{},
25+
},
26+
)
27+
env.TestCasesCreatedServiceNetworkNames[gateway.Name] = true
28+
return gateway
29+
}

test/pkg/test/httpapp.go

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package test
22

33
import (
4+
"github.com/aws/aws-application-networking-k8s/pkg/latticestore"
45
"github.com/samber/lo"
56
appsv1 "k8s.io/api/apps/v1"
67
v1 "k8s.io/api/core/v1"
@@ -16,50 +17,55 @@ type HTTPAppOptions struct {
1617
MergeFromService []*v1.Service
1718
}
1819

19-
func HTTPApp(options HTTPAppOptions) (*appsv1.Deployment, *v1.Service) {
20+
func (env *Framework) NewHttpApp(options HTTPAppOptions) (*appsv1.Deployment, *v1.Service) {
2021
if options.Port == 0 {
2122
options.Port = 80
2223
}
2324
if options.TargetPort == 0 {
2425
options.TargetPort = 8090
2526
}
26-
return New(&appsv1.Deployment{
27-
Spec: appsv1.DeploymentSpec{
28-
Replicas: lo.ToPtr(int32(1)),
29-
Selector: &metav1.LabelSelector{
30-
MatchLabels: map[string]string{
27+
deployment := New(&appsv1.Deployment{
28+
Spec: appsv1.DeploymentSpec{
29+
Replicas: lo.ToPtr(int32(1)),
30+
Selector: &metav1.LabelSelector{
31+
MatchLabels: map[string]string{
32+
"app": options.Name,
33+
},
34+
},
35+
Template: v1.PodTemplateSpec{
36+
ObjectMeta: metav1.ObjectMeta{
37+
Labels: map[string]string{
3138
"app": options.Name,
3239
},
3340
},
34-
Template: v1.PodTemplateSpec{
35-
ObjectMeta: metav1.ObjectMeta{
36-
Labels: map[string]string{
37-
"app": options.Name,
38-
},
39-
},
40-
Spec: v1.PodSpec{
41-
Containers: []v1.Container{{
42-
Name: options.Name,
43-
Image: "public.ecr.aws/x2j8p8w7/http-server:latest",
44-
Env: []v1.EnvVar{{
45-
Name: "PodName",
46-
Value: options.Name,
47-
}},
41+
Spec: v1.PodSpec{
42+
Containers: []v1.Container{{
43+
Name: options.Name,
44+
Image: "public.ecr.aws/x2j8p8w7/http-server:latest",
45+
Env: []v1.EnvVar{{
46+
Name: "PodName",
47+
Value: options.Name,
4848
}},
49-
},
49+
}},
5050
},
5151
},
52-
}, options.MergeFromDeployment...),
53-
New(&v1.Service{
54-
Spec: v1.ServiceSpec{
55-
Selector: map[string]string{
56-
"app": options.Name,
57-
},
58-
Ports: []v1.ServicePort{{
59-
Protocol: v1.ProtocolTCP,
60-
Port: int32(options.Port),
61-
TargetPort: intstr.FromInt(options.TargetPort),
62-
}},
52+
},
53+
}, options.MergeFromDeployment...)
54+
55+
service := New(&v1.Service{
56+
Spec: v1.ServiceSpec{
57+
Selector: map[string]string{
58+
"app": options.Name,
6359
},
64-
}, options.MergeFromService...)
60+
Ports: []v1.ServicePort{{
61+
Protocol: v1.ProtocolTCP,
62+
Port: int32(options.Port),
63+
TargetPort: intstr.FromInt(options.TargetPort),
64+
}},
65+
},
66+
}, options.MergeFromService...)
67+
env.TestCasesCreatedTargetGroupNames[latticestore.TargetGroupName(service.Name, service.Namespace)] = true
68+
69+
return deployment, service
70+
6571
}

test/pkg/test/metadata.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var (
1616
sequentialNumber = 0
1717
randomizer = rand.New(rand.NewSource(time.Now().UnixNano())) //nolint
1818
sequentialNumberLock = new(sync.Mutex)
19-
DiscoveryLabel = "testing.kubernetes.io"
19+
DiscoveryLabel = "testing.kubernetes.io-" + randomdata.Alphanumeric(8) // Each time test suite run have a different label for k8s resource
2020
)
2121

2222
func New[T client.Object](t T, mergeFrom ...T) T {
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package test
2+
3+
import (
4+
"github.com/aws/aws-application-networking-k8s/pkg/latticestore"
5+
"github.com/samber/lo"
6+
v1 "k8s.io/api/core/v1"
7+
"sigs.k8s.io/gateway-api/apis/v1beta1"
8+
"strconv"
9+
)
10+
11+
func (env *Framework) NewPathMatchHttpRoute(parentRefsGateway *v1beta1.Gateway, services []*v1.Service) *v1beta1.HTTPRoute {
12+
var rules []v1beta1.HTTPRouteRule
13+
for i, service := range services {
14+
rule := v1beta1.HTTPRouteRule{
15+
BackendRefs: []v1beta1.HTTPBackendRef{{
16+
BackendRef: v1beta1.BackendRef{
17+
BackendObjectReference: v1beta1.BackendObjectReference{
18+
Name: v1beta1.ObjectName(service.Name),
19+
Kind: lo.ToPtr(v1beta1.Kind("Service")),
20+
},
21+
},
22+
}},
23+
Matches: []v1beta1.HTTPRouteMatch{
24+
{
25+
Path: &v1beta1.HTTPPathMatch{
26+
Type: lo.ToPtr(v1beta1.PathMatchPathPrefix),
27+
Value: lo.ToPtr("/pathmatch" + strconv.Itoa(i)),
28+
},
29+
},
30+
},
31+
}
32+
rules = append(rules, rule)
33+
}
34+
httpRoute := New(&v1beta1.HTTPRoute{
35+
Spec: v1beta1.HTTPRouteSpec{
36+
CommonRouteSpec: v1beta1.CommonRouteSpec{
37+
ParentRefs: []v1beta1.ParentReference{{
38+
Name: v1beta1.ObjectName(parentRefsGateway.Name),
39+
SectionName: lo.ToPtr(v1beta1.SectionName("http")),
40+
}},
41+
},
42+
Rules: rules,
43+
},
44+
})
45+
46+
env.TestCasesCreatedServiceNames[latticestore.AWSServiceName(httpRoute.Name, httpRoute.Namespace)] = true
47+
return httpRoute
48+
}

0 commit comments

Comments
 (0)