Skip to content

Commit 7b54f1f

Browse files
committed
test: separate serial tests from parallel tests
Signed-off-by: Wantong Jiang <[email protected]>
1 parent aeb3c6c commit 7b54f1f

14 files changed

+71
-41
lines changed

.github/workflows/ci.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,16 @@ jobs:
8989
strategy:
9090
fail-fast: false
9191
matrix:
92-
customized-settings: [default, custom]
92+
customized-settings: [default, serial, custom]
9393
include:
9494
- customized-settings: default
9595
# to shorten the test duration, set the resource snapshot creation interval to 0
9696
resource-snapshot-creation-minimum-interval: 0m
9797
resource-changes-collection-duration: 0m
98+
- customized-settings: serial
99+
# to shorten the test duration, set the resource snapshot creation interval to 0
100+
resource-snapshot-creation-minimum-interval: 0m
101+
resource-changes-collection-duration: 0m
98102
- customized-settings: custom
99103
resource-snapshot-creation-minimum-interval: 30s
100104
resource-changes-collection-duration: 15s
@@ -132,7 +136,9 @@ jobs:
132136
- name: Run e2e tests
133137
run: |
134138
if [ "${{ matrix.customized-settings }}" = "default" ]; then
135-
make e2e-tests
139+
make e2e-tests-parallel
140+
elif [ "${{ matrix.customized-settings }}" = "serial" ]; then
141+
make e2e-tests-serial
136142
else
137143
make e2e-tests-custom
138144
fi

CLAUDE.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,19 @@ make setup-clusters
6060

6161
# Run E2E tests with custom cluster count
6262
make setup-clusters MEMBER_CLUSTER_COUNT=5
63+
64+
# Run parallel E2E tests (default - excludes custom tests)
6365
make e2e-tests
6466

67+
# Run tests that can run in parallel
68+
make e2e-tests-parallel
69+
70+
# Run serial tests (tests that must run sequentially)
71+
make e2e-tests-serial
72+
73+
# Run custom configuration tests
74+
make e2e-tests-custom
75+
6576
# Clean up test clusters
6677
make clean-e2e-tests
6778
```

Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,14 @@ e2e-tests-v1alpha1: create-kind-cluster run-e2e-v1alpha1
215215
e2e-tests: setup-clusters
216216
cd ./test/e2e && ginkgo --timeout=70m --label-filter="!custom" -v -p .
217217

218+
# Tests that can be run in parallel
219+
e2e-tests-parallel: setup-clusters
220+
cd ./test/e2e && ginkgo --label-filter="!custom && !serial" -v -p .
221+
222+
# Tests that must be run serially
223+
e2e-tests-serial: setup-clusters
224+
cd ./test/e2e && ginkgo --label-filter="!custom && serial" -v .
225+
218226
e2e-tests-custom: setup-clusters
219227
cd ./test/e2e && ginkgo --label-filter="custom" -v -p .
220228

test/e2e/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ test suites, follow the steps below:
4040
ginkgo --label-filter="custom" -v -p .
4141
```
4242

43+
or run the serial e2e tests with the following command
44+
```sh
45+
ginkgo --label-filter="serial" -v .
46+
```
47+
4348
or create a launch.json in your vscode workspace.
4449
```yaml
4550
{

test/e2e/drain_tool_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import (
3535
toolsutils "github.com/kubefleet-dev/kubefleet/tools/utils"
3636
)
3737

38-
var _ = Describe("Drain cluster successfully", Ordered, Serial, func() {
38+
var _ = Describe("Drain cluster successfully", Label("serial"), Ordered, Serial, func() {
3939
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
4040
var drainEvictions []placementv1beta1.ClusterResourcePlacementEviction
4141
var drainClusters, noDrainClusters []*framework.Cluster
@@ -120,7 +120,7 @@ var _ = Describe("Drain cluster successfully", Ordered, Serial, func() {
120120
})
121121
})
122122

123-
var _ = Describe("Drain cluster blocked - ClusterResourcePlacementDisruptionBudget blocks evictions on all clusters", Ordered, Serial, func() {
123+
var _ = Describe("Drain cluster blocked - ClusterResourcePlacementDisruptionBudget blocks evictions on all clusters", Label("serial"), Ordered, Serial, func() {
124124
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
125125
var drainEvictions []placementv1beta1.ClusterResourcePlacementEviction
126126
var testStartTime time.Time
@@ -203,7 +203,7 @@ var _ = Describe("Drain cluster blocked - ClusterResourcePlacementDisruptionBudg
203203
})
204204
})
205205

206-
var _ = Describe("Drain is allowed on one cluster, blocked on others - ClusterResourcePlacementDisruptionBudget blocks evictions on some clusters", Ordered, Serial, func() {
206+
var _ = Describe("Drain is allowed on one cluster, blocked on others - ClusterResourcePlacementDisruptionBudget blocks evictions on some clusters", Label("serial"), Ordered, Serial, func() {
207207
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
208208
var drainEvictions []placementv1beta1.ClusterResourcePlacementEviction
209209
var drainClusters, noDrainClusters []*framework.Cluster

test/e2e/fleet_guard_rail_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ var _ = Describe("fleet guard rail tests for deny fleet MC CREATE operations", f
8282
})
8383
})
8484

85-
var _ = Describe("fleet guard rail tests for allow/deny fleet MC UPDATE, DELETE operations", Serial, Ordered, func() {
85+
var _ = Describe("fleet guard rail tests for allow/deny fleet MC UPDATE, DELETE operations", Label("serial"), Serial, Ordered, func() {
8686
mcName := fmt.Sprintf(mcNameTemplate, GinkgoParallelProcess())
8787

8888
BeforeAll(func() {
@@ -346,7 +346,7 @@ var _ = Describe("fleet guard rail tests for allow upstream MC CREATE, DELETE op
346346
})
347347
})
348348

349-
var _ = Describe("fleet guard rail tests for allow/deny upstream MC UPDATE operations", Serial, Ordered, func() {
349+
var _ = Describe("fleet guard rail tests for allow/deny upstream MC UPDATE operations", Label("serial"), Serial, Ordered, func() {
350350
mcName := fmt.Sprintf(mcNameTemplate, GinkgoParallelProcess())
351351

352352
BeforeAll(func() {
@@ -499,7 +499,7 @@ var _ = Describe("fleet guard rail tests for allow/deny upstream MC UPDATE opera
499499
})
500500
})
501501

502-
var _ = Describe("fleet guard rail tests for IMC UPDATE operation, in fleet-member prefixed namespace with user not in MC identity", Serial, Ordered, func() {
502+
var _ = Describe("fleet guard rail tests for IMC UPDATE operation, in fleet-member prefixed namespace with user not in MC identity", Label("serial"), Serial, Ordered, func() {
503503
mcName := fmt.Sprintf(mcNameTemplate, GinkgoParallelProcess())
504504
imcNamespace := fmt.Sprintf(utils.NamespaceNameFormat, mcName)
505505

@@ -578,7 +578,7 @@ var _ = Describe("fleet guard rail tests for IMC UPDATE operation, in fleet-memb
578578
})
579579
})
580580

581-
var _ = Describe("fleet guard rail tests for IMC UPDATE operation, in fleet-member prefixed namespace with user in MC identity", Serial, Ordered, func() {
581+
var _ = Describe("fleet guard rail tests for IMC UPDATE operation, in fleet-member prefixed namespace with user in MC identity", Label("serial"), Serial, Ordered, func() {
582582
mcName := fmt.Sprintf(mcNameTemplate, GinkgoParallelProcess())
583583
imcNamespace := fmt.Sprintf(utils.NamespaceNameFormat, mcName)
584584

@@ -640,7 +640,7 @@ var _ = Describe("fleet guard rail tests for IMC UPDATE operation, in fleet-memb
640640
})
641641
})
642642

643-
var _ = Describe("fleet guard rail for UPDATE work operations, in fleet prefixed namespace with user not in MC identity", Serial, Ordered, func() {
643+
var _ = Describe("fleet guard rail for UPDATE work operations, in fleet prefixed namespace with user not in MC identity", Label("serial"), Serial, Ordered, func() {
644644
mcName := fmt.Sprintf(mcNameTemplate, GinkgoParallelProcess())
645645
imcNamespace := fmt.Sprintf(utils.NamespaceNameFormat, mcName)
646646
workName := fmt.Sprintf(workNamespaceNameTemplate, GinkgoParallelProcess())
@@ -731,7 +731,7 @@ var _ = Describe("fleet guard rail for UPDATE work operations, in fleet prefixed
731731
})
732732
})
733733

734-
var _ = Describe("fleet guard rail for UPDATE work operations, in fleet prefixed namespace with user in MC identity", Serial, Ordered, func() {
734+
var _ = Describe("fleet guard rail for UPDATE work operations, in fleet prefixed namespace with user in MC identity", Label("serial"), Serial, Ordered, func() {
735735
mcName := fmt.Sprintf(mcNameTemplate, GinkgoParallelProcess())
736736
imcNamespace := fmt.Sprintf(utils.NamespaceNameFormat, mcName)
737737
workName := fmt.Sprintf(workNamespaceNameTemplate, GinkgoParallelProcess())
@@ -796,7 +796,7 @@ var _ = Describe("fleet guard rail for UPDATE work operations, in fleet prefixed
796796
})
797797
})
798798

799-
var _ = Describe("fleet guard rail networking E2Es", Serial, Ordered, func() {
799+
var _ = Describe("fleet guard rail networking E2Es", Label("serial"), Serial, Ordered, func() {
800800
Context("deny request to modify fleet networking resources in fleet member namespaces, for user not in member cluster identity", func() {
801801
mcName := fmt.Sprintf(mcNameTemplate, GinkgoParallelProcess())
802802
iseName := fmt.Sprintf(internalServiceExportNameTemplate, GinkgoParallelProcess())
@@ -916,7 +916,7 @@ var _ = Describe("fleet guard rail networking E2Es", Serial, Ordered, func() {
916916
})
917917
})
918918

919-
var _ = Describe("fleet guard rail restrict internal fleet resources from being created in fleet/kube pre-fixed namespaces", Serial, Ordered, func() {
919+
var _ = Describe("fleet guard rail restrict internal fleet resources from being created in fleet/kube pre-fixed namespaces", Label("serial"), Serial, Ordered, func() {
920920
Context("deny request to CREATE IMC in fleet-system namespace", func() {
921921
It("should deny CREATE operation on internal member cluster resource in fleet-system namespace for invalid user", func() {
922922
imc := clusterv1beta1.InternalMemberCluster{

test/e2e/join_and_leave_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const (
4343
)
4444

4545
// Note that this container cannot run in parallel with other containers.
46-
var _ = Describe("Test member cluster join and leave flow", Ordered, Serial, func() {
46+
var _ = Describe("Test member cluster join and leave flow", Label("serial"), Ordered, Serial, func() {
4747
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
4848
workNamespaceName := fmt.Sprintf(workNamespaceNameTemplate, GinkgoParallelProcess())
4949
internalServiceExportName := fmt.Sprintf("internal-service-export-%d", GinkgoParallelProcess())
@@ -79,7 +79,7 @@ var _ = Describe("Test member cluster join and leave flow", Ordered, Serial, fun
7979
}
8080
})
8181

82-
Context("Test cluster join and leave flow with CRP not deleted", Ordered, Serial, func() {
82+
Context("Test cluster join and leave flow with CRP not deleted", Label("serial"), Ordered, Serial, func() {
8383
It("Create the test resources in the namespace", createWrappedResourcesForEnvelopTest)
8484

8585
It("Create the CRP that select the name space and place it to all clusters", func() {
@@ -245,8 +245,8 @@ var _ = Describe("Test member cluster join and leave flow", Ordered, Serial, fun
245245
})
246246
})
247247

248-
var _ = Describe("Test member cluster force delete flow", Ordered, Serial, func() {
249-
Context("Test cluster join and leave flow with member agent down and force delete member cluster", Ordered, Serial, func() {
248+
var _ = Describe("Test member cluster force delete flow", Label("serial"), Ordered, Serial, func() {
249+
Context("Test cluster join and leave flow with member agent down and force delete member cluster", Label("serial"), Ordered, Serial, func() {
250250
It("Simulate the member agent going down in member cluster", func() {
251251
updateMemberAgentDeploymentReplicas(memberCluster3WestProdClient, 0)
252252
})

test/e2e/placement_eviction_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import (
3131
testutilseviction "github.com/kubefleet-dev/kubefleet/test/utils/eviction"
3232
)
3333

34-
var _ = Describe("ClusterResourcePlacement eviction of bound binding, taint cluster before eviction - No PDB specified", Ordered, Serial, func() {
34+
var _ = Describe("ClusterResourcePlacement eviction of bound binding, taint cluster before eviction - No PDB specified", Label("serial"), Ordered, Serial, func() {
3535
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
3636
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())
3737
var taintClusterNames, noTaintClusterNames []string
@@ -230,7 +230,7 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickAll C
230230
It("should still place resources on the all available member clusters", checkIfPlacedWorkResourcesOnAllMemberClusters)
231231
})
232232

233-
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickAll CRP, PDB with MinAvailable specified as Integer to protect resources in all but one cluster, eviction allowed", Ordered, Serial, func() {
233+
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickAll CRP, PDB with MinAvailable specified as Integer to protect resources in all but one cluster, eviction allowed", Label("serial"), Ordered, Serial, func() {
234234
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
235235
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())
236236
var taintClusterNames, noTaintClusterNames []string
@@ -405,7 +405,7 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP
405405
It("should still place resources on the all available member clusters", checkIfPlacedWorkResourcesOnAllMemberClusters)
406406
})
407407

408-
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP, PDB with MaxUnavailable specified as Integer to protect resources all clusters but one cluster, eviction allowed", Ordered, Serial, func() {
408+
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP, PDB with MaxUnavailable specified as Integer to protect resources all clusters but one cluster, eviction allowed", Label("serial"), Ordered, Serial, func() {
409409
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
410410
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())
411411
var taintClusterNames, noTaintClusterNames []string
@@ -511,7 +511,7 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP
511511
})
512512
})
513513

514-
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP, PDB with MaxUnavailable specified as percentage to protect all clusters but one, eviction allowed", Ordered, Serial, func() {
514+
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP, PDB with MaxUnavailable specified as percentage to protect all clusters but one, eviction allowed", Label("serial"), Ordered, Serial, func() {
515515
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
516516
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())
517517
var taintClusterNames, noTaintClusterNames []string
@@ -793,7 +793,7 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP
793793
It("should still place resources on the all available member clusters", checkIfPlacedWorkResourcesOnAllMemberClusters)
794794
})
795795

796-
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP, PDB with MinAvailable specified as Integer to protect resources all clusters but one cluster, eviction allowed", Ordered, Serial, func() {
796+
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP, PDB with MinAvailable specified as Integer to protect resources all clusters but one cluster, eviction allowed", Label("serial"), Ordered, Serial, func() {
797797
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
798798
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())
799799
var taintClusterNames, noTaintClusterNames []string
@@ -899,7 +899,7 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP
899899
})
900900
})
901901

902-
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP, PDB with MinAvailable specified as percentage to protect all clusters but one, eviction allowed", Ordered, Serial, func() {
902+
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP, PDB with MinAvailable specified as percentage to protect all clusters but one, eviction allowed", Label("serial"), Ordered, Serial, func() {
903903
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
904904
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())
905905
var taintClusterNames, noTaintClusterNames []string

test/e2e/placement_selecting_resources_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1213,7 +1213,7 @@ var _ = Describe("validating CRP revision history allowing multiple revisions wh
12131213
})
12141214

12151215
// running spec in parallel with other specs causes timeouts.
1216-
var _ = Describe("validating CRP when selected resources cross the 1MB limit", Ordered, Serial, func() {
1216+
var _ = Describe("validating CRP when selected resources cross the 1MB limit", Label("serial"), Ordered, Serial, func() {
12171217
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
12181218
BeforeAll(func() {
12191219
By("creating resources for multiple resource snapshots")

test/e2e/scheduler_watchers_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ const (
6161
// Note that most of the cases below are Serial ones, as they manipulate the list of member
6262
// clusters in the test environment directly, which may incur side effects when running in
6363
// parallel with other test cases.
64-
var _ = Describe("responding to specific member cluster changes", func() {
64+
var _ = Describe("responding to specific member cluster changes", Label("serial"), func() {
6565
Context("cluster becomes eligible for PickAll CRPs, just joined", Serial, Ordered, func() {
6666
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
6767

0 commit comments

Comments
 (0)