Skip to content

Commit 5446171

Browse files
committed
Add versioned pod number validation
Signed-off-by: Anton Troshin <[email protected]>
1 parent 1152a1e commit 5446171

File tree

2 files changed

+160
-8
lines changed

2 files changed

+160
-8
lines changed

tests/e2e/common/common.go

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"testing"
2424
"time"
2525

26+
"github.com/Masterminds/semver/v3"
2627
"github.com/stretchr/testify/assert"
2728
"github.com/stretchr/testify/require"
2829
core_v1 "k8s.io/api/core/v1"
@@ -46,14 +47,18 @@ const (
4647
ClusterRoles
4748
ClusterRoleBindings
4849

49-
numHAPods = 16
50-
numNonHAPods = 6
50+
numHAPodsWithScheduler = 16
51+
numHAPodsOld = 13
52+
numNonHAPodsWithScheduler = 6
53+
numNonHAPodsOld = 5
5154

5255
thirdPartyDevNamespace = "default"
5356
devRedisReleaseName = "dapr-dev-redis"
5457
devZipkinReleaseName = "dapr-dev-zipkin"
5558
)
5659

60+
var VersionWithScheduler = semver.MustParse("1.14.0")
61+
5762
type VersionDetails struct {
5863
RuntimeVersion string
5964
DashboardVersion string
@@ -131,7 +136,7 @@ func UpgradeTest(details VersionDetails, opts TestOptions) func(t *testing.T) {
131136
done := make(chan struct{})
132137
podsRunning := make(chan struct{})
133138

134-
go waitAllPodsRunning(t, DaprTestNamespace, opts.HAEnabled, done, podsRunning)
139+
go waitAllPodsRunning(t, DaprTestNamespace, opts.HAEnabled, done, podsRunning, details)
135140
select {
136141
case <-podsRunning:
137142
t.Logf("verified all pods running in namespace %s are running after upgrade", DaprTestNamespace)
@@ -544,7 +549,7 @@ func GenerateNewCertAndRenew(details VersionDetails, opts TestOptions) func(t *t
544549
done := make(chan struct{})
545550
podsRunning := make(chan struct{})
546551

547-
go waitAllPodsRunning(t, DaprTestNamespace, opts.HAEnabled, done, podsRunning)
552+
go waitAllPodsRunning(t, DaprTestNamespace, opts.HAEnabled, done, podsRunning, details)
548553
select {
549554
case <-podsRunning:
550555
t.Logf("verified all pods running in namespace %s are running after certficate change", DaprTestNamespace)
@@ -575,7 +580,7 @@ func UseProvidedPrivateKeyAndRenewCerts(details VersionDetails, opts TestOptions
575580
done := make(chan struct{})
576581
podsRunning := make(chan struct{})
577582

578-
go waitAllPodsRunning(t, DaprTestNamespace, opts.HAEnabled, done, podsRunning)
583+
go waitAllPodsRunning(t, DaprTestNamespace, opts.HAEnabled, done, podsRunning, details)
579584
select {
580585
case <-podsRunning:
581586
t.Logf("verified all pods running in namespace %s are running after certficate change", DaprTestNamespace)
@@ -608,7 +613,7 @@ func UseProvidedNewCertAndRenew(details VersionDetails, opts TestOptions) func(t
608613
done := make(chan struct{})
609614
podsRunning := make(chan struct{})
610615

611-
go waitAllPodsRunning(t, DaprTestNamespace, opts.HAEnabled, done, podsRunning)
616+
go waitAllPodsRunning(t, DaprTestNamespace, opts.HAEnabled, done, podsRunning, details)
612617
select {
613618
case <-podsRunning:
614619
t.Logf("verified all pods running in namespace %s are running after certficate change", DaprTestNamespace)
@@ -1164,7 +1169,7 @@ func waitPodDeletion(t *testing.T, done, podsDeleted chan struct{}) {
11641169
}
11651170
}
11661171

1167-
func waitAllPodsRunning(t *testing.T, namespace string, haEnabled bool, done, podsRunning chan struct{}) {
1172+
func waitAllPodsRunning(t *testing.T, namespace string, haEnabled bool, done, podsRunning chan struct{}, details VersionDetails) {
11681173
for {
11691174
select {
11701175
case <-done: // if timeout was reached.
@@ -1198,14 +1203,48 @@ func waitAllPodsRunning(t *testing.T, namespace string, haEnabled bool, done, po
11981203
}
11991204
}
12001205
}
1201-
if len(list.Items) == countOfReadyPods && ((haEnabled && countOfReadyPods == numHAPods) || (!haEnabled && countOfReadyPods == numNonHAPods)) {
1206+
pods, err := getVersionedNumberOfPods(haEnabled, details)
1207+
if err != nil {
1208+
t.Error(err)
1209+
}
1210+
if len(list.Items) == countOfReadyPods && ((haEnabled && countOfReadyPods == pods) || (!haEnabled && countOfReadyPods == pods)) {
12021211
podsRunning <- struct{}{}
12031212
}
12041213

12051214
time.Sleep(15 * time.Second)
12061215
}
12071216
}
12081217

1218+
func getVersionedNumberOfPods(isHAEnabled bool, details VersionDetails) (int, error) {
1219+
if isHAEnabled {
1220+
if details.UseDaprLatestVersion {
1221+
return numHAPodsWithScheduler, nil
1222+
}
1223+
rv, err := semver.NewVersion(details.RuntimeVersion)
1224+
if err != nil {
1225+
return 0, err
1226+
}
1227+
1228+
if rv.LessThan(VersionWithScheduler) {
1229+
return numHAPodsOld, nil
1230+
}
1231+
return numHAPodsWithScheduler, nil
1232+
} else {
1233+
if details.UseDaprLatestVersion {
1234+
return numNonHAPodsWithScheduler, nil
1235+
}
1236+
rv, err := semver.NewVersion(details.RuntimeVersion)
1237+
if err != nil {
1238+
return 0, err
1239+
}
1240+
1241+
if rv.LessThan(VersionWithScheduler) {
1242+
return numNonHAPodsOld, nil
1243+
}
1244+
return numNonHAPodsWithScheduler, nil
1245+
}
1246+
}
1247+
12091248
func exportCurrentCertificate(daprPath string) error {
12101249
_, err := os.Stat("./certs")
12111250
if err != nil {

tests/e2e/common/common_test.go

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
/*
2+
Copyright 2024 The Dapr Authors
3+
Licensed under the Apache License, Version 2.0 (the "License");
4+
you may not use this file except in compliance with the License.
5+
You may obtain a copy of the License at
6+
http://www.apache.org/licenses/LICENSE-2.0
7+
Unless required by applicable law or agreed to in writing, software
8+
distributed under the License is distributed on an "AS IS" BASIS,
9+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
See the License for the specific language governing permissions and
11+
limitations under the License.
12+
*/
13+
14+
package common
15+
16+
import (
17+
"testing"
18+
19+
"github.com/stretchr/testify/assert"
20+
)
21+
22+
func TestGetVersionedNumberOfPods(t *testing.T) {
23+
tests := []struct {
24+
name string
25+
isHAEnabled bool
26+
details VersionDetails
27+
expectedNumber int
28+
expectedError bool
29+
}{
30+
{
31+
name: "HA enabled with latest version",
32+
isHAEnabled: true,
33+
details: VersionDetails{UseDaprLatestVersion: true},
34+
expectedNumber: numHAPodsWithScheduler,
35+
expectedError: false,
36+
},
37+
{
38+
name: "HA enabled with old version",
39+
isHAEnabled: true,
40+
details: VersionDetails{UseDaprLatestVersion: false, RuntimeVersion: "1.13.0"},
41+
expectedNumber: numHAPodsOld,
42+
expectedError: false,
43+
},
44+
{
45+
name: "HA disabled with latest version",
46+
isHAEnabled: false,
47+
details: VersionDetails{UseDaprLatestVersion: true},
48+
expectedNumber: numNonHAPodsWithScheduler,
49+
expectedError: false,
50+
},
51+
{
52+
name: "HA disabled with old version",
53+
isHAEnabled: false,
54+
details: VersionDetails{UseDaprLatestVersion: false, RuntimeVersion: "1.13.0"},
55+
expectedNumber: numNonHAPodsOld,
56+
expectedError: false,
57+
},
58+
{
59+
name: "HA enabled with new version",
60+
isHAEnabled: true,
61+
details: VersionDetails{UseDaprLatestVersion: false, RuntimeVersion: "1.14.4"},
62+
expectedNumber: numHAPodsWithScheduler,
63+
expectedError: false,
64+
},
65+
{
66+
name: "HA disabled with new version",
67+
isHAEnabled: false,
68+
details: VersionDetails{UseDaprLatestVersion: false, RuntimeVersion: "1.14.4"},
69+
expectedNumber: numNonHAPodsWithScheduler,
70+
expectedError: false,
71+
},
72+
{
73+
name: "HA enabled with invalid version",
74+
isHAEnabled: true,
75+
details: VersionDetails{UseDaprLatestVersion: false, RuntimeVersion: "invalid version"},
76+
expectedNumber: 0,
77+
expectedError: true,
78+
},
79+
{
80+
name: "HA disabled with invalid version",
81+
isHAEnabled: false,
82+
details: VersionDetails{UseDaprLatestVersion: false, RuntimeVersion: "invalid version"},
83+
expectedNumber: 0,
84+
expectedError: true,
85+
},
86+
{
87+
name: "HA enabled with new RC version",
88+
isHAEnabled: true,
89+
details: VersionDetails{UseDaprLatestVersion: false, RuntimeVersion: "1.15.0-rc.1"},
90+
expectedNumber: numHAPodsWithScheduler,
91+
expectedError: false,
92+
},
93+
{
94+
name: "HA disabled with new RC version",
95+
isHAEnabled: false,
96+
details: VersionDetails{UseDaprLatestVersion: false, RuntimeVersion: "1.15.0-rc.1"},
97+
expectedNumber: numNonHAPodsWithScheduler,
98+
expectedError: false,
99+
},
100+
}
101+
102+
for _, tc := range tests {
103+
t.Run(tc.name, func(t *testing.T) {
104+
number, err := getVersionedNumberOfPods(tc.isHAEnabled, tc.details)
105+
if tc.expectedError {
106+
assert.Error(t, err)
107+
} else {
108+
assert.NoError(t, err)
109+
assert.Equal(t, tc.expectedNumber, number)
110+
}
111+
})
112+
}
113+
}

0 commit comments

Comments
 (0)