Fix flakiness in daemonset TestLaunchWithHashCollisiion

This commit is contained in:
Morten Torkildsen 2018-08-12 08:30:07 -07:00
parent a73ef59833
commit d6ffcae31d
2 changed files with 22 additions and 5 deletions

View File

@ -41,6 +41,7 @@ go_test(
"//staging/src/k8s.io/client-go/rest:go_default_library",
"//staging/src/k8s.io/client-go/tools/cache:go_default_library",
"//staging/src/k8s.io/client-go/tools/record:go_default_library",
"//staging/src/k8s.io/client-go/util/retry:go_default_library",
"//test/integration/framework:go_default_library",
],
)

View File

@ -51,6 +51,7 @@ import (
"k8s.io/kubernetes/pkg/scheduler/factory"
labelsutil "k8s.io/kubernetes/pkg/util/labels"
"k8s.io/kubernetes/pkg/util/metrics"
"k8s.io/kubernetes/staging/src/k8s.io/client-go/util/retry"
"k8s.io/kubernetes/test/integration/framework"
)
@ -461,6 +462,22 @@ func validateFailedPlacementEvent(eventClient corev1typed.EventInterface, t *tes
}
}
func updateDS(t *testing.T, dsClient appstyped.DaemonSetInterface, dsName string, updateFunc func(*apps.DaemonSet)) *apps.DaemonSet {
var ds *apps.DaemonSet
if err := retry.RetryOnConflict(retry.DefaultBackoff, func() error {
newDS, err := dsClient.Get(dsName, metav1.GetOptions{})
if err != nil {
return err
}
updateFunc(newDS)
ds, err = dsClient.Update(newDS)
return err
}); err != nil {
t.Fatalf("Failed to update DaemonSet: %v", err)
}
return ds
}
func forEachFeatureGate(t *testing.T, tf func(t *testing.T)) {
for _, fg := range featureGates() {
func() {
@ -832,7 +849,7 @@ func TestLaunchWithHashCollision(t *testing.T) {
// Wait for the DaemonSet to be created before proceeding
err = waitForDaemonSetAndControllerRevisionCreated(clientset, ds.Name, ds.Namespace)
if err != nil {
t.Fatalf("Failed to create DeamonSet: %v", err)
t.Fatalf("Failed to create DaemonSet: %v", err)
}
ds, err = dsClient.Get(ds.Name, metav1.GetOptions{})
@ -875,10 +892,9 @@ func TestLaunchWithHashCollision(t *testing.T) {
// Make an update of the DaemonSet which we know will create a hash collision when
// the next ControllerRevision is created.
_, err = dsClient.Update(ds)
if err != nil {
t.Fatalf("Failed to update DaemonSet: %v", err)
}
ds = updateDS(t, dsClient, ds.Name, func(updateDS *apps.DaemonSet) {
updateDS.Spec.Template.Spec.TerminationGracePeriodSeconds = &one
})
// Wait for any pod with the latest Spec to exist
err = wait.PollImmediate(100*time.Millisecond, 10*time.Second, func() (bool, error) {