Skip to content

Commit 83ebf2f

Browse files
authored
Merge pull request kubernetes#86050 from SataQiu/clean-e2e-framework-20191209
e2e: move funs of framework/deployment to e2e/apps
2 parents d842c19 + 10b1738 commit 83ebf2f

File tree

5 files changed

+73
-110
lines changed

5 files changed

+73
-110
lines changed

test/e2e/apps/deployment.go

Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package apps
1818

1919
import (
20+
"context"
2021
"fmt"
2122
"math/rand"
2223
"time"
@@ -36,6 +37,7 @@ import (
3637
"k8s.io/apimachinery/pkg/util/wait"
3738
"k8s.io/apimachinery/pkg/watch"
3839
clientset "k8s.io/client-go/kubernetes"
40+
watchtools "k8s.io/client-go/tools/watch"
3941
appsinternal "k8s.io/kubernetes/pkg/apis/apps"
4042
deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util"
4143
"k8s.io/kubernetes/test/e2e/framework"
@@ -48,6 +50,7 @@ import (
4850
)
4951

5052
const (
53+
poll = 2 * time.Second
5154
dRetryPeriod = 2 * time.Second
5255
dRetryTimeout = 5 * time.Minute
5356
)
@@ -333,7 +336,7 @@ func testRecreateDeployment(f *framework.Framework) {
333336
framework.ExpectNoError(err)
334337

335338
framework.Logf("Watching deployment %q to verify that new pods will not run with olds pods", deploymentName)
336-
err = e2edeploy.WatchRecreateDeployment(c, deployment)
339+
err = watchRecreateDeployment(c, deployment)
337340
framework.ExpectNoError(err)
338341
}
339342

@@ -403,7 +406,7 @@ func testDeploymentCleanUpPolicy(f *framework.Framework) {
403406
framework.ExpectNoError(err)
404407

405408
ginkgo.By(fmt.Sprintf("Waiting for deployment %s history to be cleaned up", deploymentName))
406-
err = e2edeploy.WaitForDeploymentOldRSsNum(c, ns, deploymentName, int(*revisionHistoryLimit))
409+
err = waitForDeploymentOldRSsNum(c, ns, deploymentName, int(*revisionHistoryLimit))
407410
framework.ExpectNoError(err)
408411
}
409412

@@ -1018,3 +1021,71 @@ func setAffinities(d *appsv1.Deployment, setAffinity bool) {
10181021
}
10191022
d.Spec.Template.Spec.Affinity = affinity
10201023
}
1024+
1025+
// watchRecreateDeployment watches Recreate deployments and ensures no new pods will run at the same time with
1026+
// old pods.
1027+
func watchRecreateDeployment(c clientset.Interface, d *appsv1.Deployment) error {
1028+
if d.Spec.Strategy.Type != appsv1.RecreateDeploymentStrategyType {
1029+
return fmt.Errorf("deployment %q does not use a Recreate strategy: %s", d.Name, d.Spec.Strategy.Type)
1030+
}
1031+
1032+
w, err := c.AppsV1().Deployments(d.Namespace).Watch(metav1.SingleObject(metav1.ObjectMeta{Name: d.Name, ResourceVersion: d.ResourceVersion}))
1033+
if err != nil {
1034+
return err
1035+
}
1036+
1037+
status := d.Status
1038+
1039+
condition := func(event watch.Event) (bool, error) {
1040+
d := event.Object.(*appsv1.Deployment)
1041+
status = d.Status
1042+
1043+
if d.Status.UpdatedReplicas > 0 && d.Status.Replicas != d.Status.UpdatedReplicas {
1044+
_, allOldRSs, err := deploymentutil.GetOldReplicaSets(d, c.AppsV1())
1045+
newRS, nerr := deploymentutil.GetNewReplicaSet(d, c.AppsV1())
1046+
if err == nil && nerr == nil {
1047+
framework.Logf("%+v", d)
1048+
testutil.LogReplicaSetsOfDeployment(d, allOldRSs, newRS, framework.Logf)
1049+
testutil.LogPodsOfDeployment(c, d, append(allOldRSs, newRS), framework.Logf)
1050+
}
1051+
return false, fmt.Errorf("deployment %q is running new pods alongside old pods: %#v", d.Name, status)
1052+
}
1053+
1054+
return *(d.Spec.Replicas) == d.Status.Replicas &&
1055+
*(d.Spec.Replicas) == d.Status.UpdatedReplicas &&
1056+
d.Generation <= d.Status.ObservedGeneration, nil
1057+
}
1058+
1059+
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
1060+
defer cancel()
1061+
_, err = watchtools.UntilWithoutRetry(ctx, w, condition)
1062+
if err == wait.ErrWaitTimeout {
1063+
err = fmt.Errorf("deployment %q never completed: %#v", d.Name, status)
1064+
}
1065+
return err
1066+
}
1067+
1068+
// waitForDeploymentOldRSsNum waits for the deployment to clean up old rcs.
1069+
func waitForDeploymentOldRSsNum(c clientset.Interface, ns, deploymentName string, desiredRSNum int) error {
1070+
var oldRSs []*appsv1.ReplicaSet
1071+
var d *appsv1.Deployment
1072+
1073+
pollErr := wait.PollImmediate(poll, 5*time.Minute, func() (bool, error) {
1074+
deployment, err := c.AppsV1().Deployments(ns).Get(deploymentName, metav1.GetOptions{})
1075+
if err != nil {
1076+
return false, err
1077+
}
1078+
d = deployment
1079+
1080+
_, oldRSs, err = deploymentutil.GetOldReplicaSets(deployment, c.AppsV1())
1081+
if err != nil {
1082+
return false, err
1083+
}
1084+
return len(oldRSs) == desiredRSNum, nil
1085+
})
1086+
if pollErr == wait.ErrWaitTimeout {
1087+
pollErr = fmt.Errorf("%d old replica sets were not cleaned up for deployment %q", len(oldRSs)-desiredRSNum, deploymentName)
1088+
testutil.LogReplicaSetsOfDeployment(d, oldRSs, nil, framework.Logf)
1089+
}
1090+
return pollErr
1091+
}

test/e2e/framework/deployment/BUILD

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ go_library(
66
name = "go_default_library",
77
srcs = [
88
"fixtures.go",
9-
"logging.go",
109
"wait.go",
1110
],
1211
importpath = "k8s.io/kubernetes/test/e2e/framework/deployment",
@@ -17,9 +16,7 @@ go_library(
1716
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
1817
"//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library",
1918
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
20-
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
2119
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
22-
"//staging/src/k8s.io/client-go/tools/watch:go_default_library",
2320
"//test/e2e/framework:go_default_library",
2421
"//test/utils:go_default_library",
2522
"//test/utils/image:go_default_library",

test/e2e/framework/deployment/fixtures.go

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,13 @@ limitations under the License.
1717
package deployment
1818

1919
import (
20-
"context"
2120
"fmt"
22-
"time"
2321

2422
appsv1 "k8s.io/api/apps/v1"
2523
v1 "k8s.io/api/core/v1"
2624
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2725
"k8s.io/apimachinery/pkg/util/uuid"
28-
"k8s.io/apimachinery/pkg/util/wait"
29-
"k8s.io/apimachinery/pkg/watch"
3026
clientset "k8s.io/client-go/kubernetes"
31-
watchtools "k8s.io/client-go/tools/watch"
3227
deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util"
3328
"k8s.io/kubernetes/test/e2e/framework"
3429
testutils "k8s.io/kubernetes/test/utils"
@@ -45,49 +40,6 @@ func CheckDeploymentRevisionAndImage(c clientset.Interface, ns, deploymentName,
4540
return testutils.CheckDeploymentRevisionAndImage(c, ns, deploymentName, revision, image)
4641
}
4742

48-
// WatchRecreateDeployment watches Recreate deployments and ensures no new pods will run at the same time with
49-
// old pods.
50-
func WatchRecreateDeployment(c clientset.Interface, d *appsv1.Deployment) error {
51-
if d.Spec.Strategy.Type != appsv1.RecreateDeploymentStrategyType {
52-
return fmt.Errorf("deployment %q does not use a Recreate strategy: %s", d.Name, d.Spec.Strategy.Type)
53-
}
54-
55-
w, err := c.AppsV1().Deployments(d.Namespace).Watch(metav1.SingleObject(metav1.ObjectMeta{Name: d.Name, ResourceVersion: d.ResourceVersion}))
56-
if err != nil {
57-
return err
58-
}
59-
60-
status := d.Status
61-
62-
condition := func(event watch.Event) (bool, error) {
63-
d := event.Object.(*appsv1.Deployment)
64-
status = d.Status
65-
66-
if d.Status.UpdatedReplicas > 0 && d.Status.Replicas != d.Status.UpdatedReplicas {
67-
_, allOldRSs, err := deploymentutil.GetOldReplicaSets(d, c.AppsV1())
68-
newRS, nerr := deploymentutil.GetNewReplicaSet(d, c.AppsV1())
69-
if err == nil && nerr == nil {
70-
framework.Logf("%+v", d)
71-
logReplicaSetsOfDeployment(d, allOldRSs, newRS)
72-
logPodsOfDeployment(c, d, append(allOldRSs, newRS))
73-
}
74-
return false, fmt.Errorf("deployment %q is running new pods alongside old pods: %#v", d.Name, status)
75-
}
76-
77-
return *(d.Spec.Replicas) == d.Status.Replicas &&
78-
*(d.Spec.Replicas) == d.Status.UpdatedReplicas &&
79-
d.Generation <= d.Status.ObservedGeneration, nil
80-
}
81-
82-
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
83-
defer cancel()
84-
_, err = watchtools.UntilWithoutRetry(ctx, w, condition)
85-
if err == wait.ErrWaitTimeout {
86-
err = fmt.Errorf("deployment %q never completed: %#v", d.Name, status)
87-
}
88-
return err
89-
}
90-
9143
// NewDeployment returns a deployment spec with the specified argument.
9244
func NewDeployment(deploymentName string, replicas int32, podLabels map[string]string, imageName, image string, strategyType appsv1.DeploymentStrategyType) *appsv1.Deployment {
9345
zero := int64(0)

test/e2e/framework/deployment/logging.go

Lines changed: 0 additions & 32 deletions
This file was deleted.

test/e2e/framework/deployment/wait.go

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -77,31 +77,6 @@ func WaitForDeploymentRollbackCleared(c clientset.Interface, ns, deploymentName
7777
return testutils.WaitForDeploymentRollbackCleared(c, ns, deploymentName, poll, pollShortTimeout)
7878
}
7979

80-
// WaitForDeploymentOldRSsNum waits for the deployment to clean up old rcs.
81-
func WaitForDeploymentOldRSsNum(c clientset.Interface, ns, deploymentName string, desiredRSNum int) error {
82-
var oldRSs []*appsv1.ReplicaSet
83-
var d *appsv1.Deployment
84-
85-
pollErr := wait.PollImmediate(poll, 5*time.Minute, func() (bool, error) {
86-
deployment, err := c.AppsV1().Deployments(ns).Get(deploymentName, metav1.GetOptions{})
87-
if err != nil {
88-
return false, err
89-
}
90-
d = deployment
91-
92-
_, oldRSs, err = deploymentutil.GetOldReplicaSets(deployment, c.AppsV1())
93-
if err != nil {
94-
return false, err
95-
}
96-
return len(oldRSs) == desiredRSNum, nil
97-
})
98-
if pollErr == wait.ErrWaitTimeout {
99-
pollErr = fmt.Errorf("%d old replica sets were not cleaned up for deployment %q", len(oldRSs)-desiredRSNum, deploymentName)
100-
logReplicaSetsOfDeployment(d, oldRSs, nil)
101-
}
102-
return pollErr
103-
}
104-
10580
// WaitForDeploymentRevision waits for becoming the target revision of a delopyment.
10681
func WaitForDeploymentRevision(c clientset.Interface, d *appsv1.Deployment, targetRevision string) error {
10782
err := wait.PollImmediate(poll, pollLongTimeout, func() (bool, error) {

0 commit comments

Comments
 (0)