Fix DS expectations on recreate

This commit is contained in:
Tomas Nozicka
2020-06-17 09:22:17 +02:00
parent 0e2220b446
commit 5cf3f8b79c
5 changed files with 963 additions and 195 deletions

View File

@@ -34,36 +34,66 @@ func TestDaemonSetUpdatesPods(t *testing.T) {
}
maxUnavailable := 2
addNodes(manager.nodeStore, 0, 5, nil)
manager.dsStore.Add(ds)
syncAndValidateDaemonSets(t, manager, ds, podControl, 5, 0, 0)
err = manager.dsStore.Add(ds)
if err != nil {
t.Fatal(err)
}
err = syncAndValidateDaemonSets(manager, ds, podControl, 5, 0, 0)
if err != nil {
t.Error(err)
}
markPodsReady(podControl.podStore)
ds.Spec.Template.Spec.Containers[0].Image = "foo2/bar2"
ds.Spec.UpdateStrategy.Type = apps.RollingUpdateDaemonSetStrategyType
intStr := intstr.FromInt(maxUnavailable)
ds.Spec.UpdateStrategy.RollingUpdate = &apps.RollingUpdateDaemonSet{MaxUnavailable: &intStr}
manager.dsStore.Update(ds)
err = manager.dsStore.Update(ds)
if err != nil {
t.Fatal(err)
}
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, 0, maxUnavailable, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, 0, maxUnavailable, 0)
if err != nil {
t.Error(err)
}
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, maxUnavailable, 0, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, maxUnavailable, 0, 0)
if err != nil {
t.Error(err)
}
markPodsReady(podControl.podStore)
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, 0, maxUnavailable, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, 0, maxUnavailable, 0)
if err != nil {
t.Error(err)
}
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, maxUnavailable, 0, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, maxUnavailable, 0, 0)
if err != nil {
t.Error(err)
}
markPodsReady(podControl.podStore)
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, 0, 1, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, 0, 1, 0)
if err != nil {
t.Error(err)
}
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, 1, 0, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, 1, 0, 0)
if err != nil {
t.Error(err)
}
markPodsReady(podControl.podStore)
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, 0, 0, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, 0, 0, 0)
if err != nil {
t.Error(err)
}
clearExpectations(t, manager, ds, podControl)
}
@@ -75,24 +105,42 @@ func TestDaemonSetUpdatesWhenNewPosIsNotReady(t *testing.T) {
}
maxUnavailable := 3
addNodes(manager.nodeStore, 0, 5, nil)
manager.dsStore.Add(ds)
syncAndValidateDaemonSets(t, manager, ds, podControl, 5, 0, 0)
err = manager.dsStore.Add(ds)
if err != nil {
t.Fatal(err)
}
err = syncAndValidateDaemonSets(manager, ds, podControl, 5, 0, 0)
if err != nil {
t.Error(err)
}
markPodsReady(podControl.podStore)
ds.Spec.Template.Spec.Containers[0].Image = "foo2/bar2"
ds.Spec.UpdateStrategy.Type = apps.RollingUpdateDaemonSetStrategyType
intStr := intstr.FromInt(maxUnavailable)
ds.Spec.UpdateStrategy.RollingUpdate = &apps.RollingUpdateDaemonSet{MaxUnavailable: &intStr}
manager.dsStore.Update(ds)
err = manager.dsStore.Update(ds)
if err != nil {
t.Fatal(err)
}
// new pods are not ready numUnavailable == maxUnavailable
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, 0, maxUnavailable, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, 0, maxUnavailable, 0)
if err != nil {
t.Error(err)
}
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, maxUnavailable, 0, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, maxUnavailable, 0, 0)
if err != nil {
t.Error(err)
}
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, 0, 0, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, 0, 0, 0)
if err != nil {
t.Error(err)
}
clearExpectations(t, manager, ds, podControl)
}
@@ -104,23 +152,41 @@ func TestDaemonSetUpdatesAllOldPodsNotReady(t *testing.T) {
}
maxUnavailable := 3
addNodes(manager.nodeStore, 0, 5, nil)
manager.dsStore.Add(ds)
syncAndValidateDaemonSets(t, manager, ds, podControl, 5, 0, 0)
err = manager.dsStore.Add(ds)
if err != nil {
t.Fatal(err)
}
err = syncAndValidateDaemonSets(manager, ds, podControl, 5, 0, 0)
if err != nil {
t.Error(err)
}
ds.Spec.Template.Spec.Containers[0].Image = "foo2/bar2"
ds.Spec.UpdateStrategy.Type = apps.RollingUpdateDaemonSetStrategyType
intStr := intstr.FromInt(maxUnavailable)
ds.Spec.UpdateStrategy.RollingUpdate = &apps.RollingUpdateDaemonSet{MaxUnavailable: &intStr}
manager.dsStore.Update(ds)
err = manager.dsStore.Update(ds)
if err != nil {
t.Fatal(err)
}
// all old pods are unavailable so should be removed
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, 0, 5, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, 0, 5, 0)
if err != nil {
t.Error(err)
}
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, 5, 0, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, 5, 0, 0)
if err != nil {
t.Error(err)
}
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, 0, 0, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, 0, 0, 0)
if err != nil {
t.Error(err)
}
clearExpectations(t, manager, ds, podControl)
}
@@ -132,17 +198,29 @@ func TestDaemonSetUpdatesNoTemplateChanged(t *testing.T) {
}
maxUnavailable := 3
addNodes(manager.nodeStore, 0, 5, nil)
manager.dsStore.Add(ds)
syncAndValidateDaemonSets(t, manager, ds, podControl, 5, 0, 0)
err = manager.dsStore.Add(ds)
if err != nil {
t.Fatal(err)
}
err = syncAndValidateDaemonSets(manager, ds, podControl, 5, 0, 0)
if err != nil {
t.Error(err)
}
ds.Spec.UpdateStrategy.Type = apps.RollingUpdateDaemonSetStrategyType
intStr := intstr.FromInt(maxUnavailable)
ds.Spec.UpdateStrategy.RollingUpdate = &apps.RollingUpdateDaemonSet{MaxUnavailable: &intStr}
manager.dsStore.Update(ds)
err = manager.dsStore.Update(ds)
if err != nil {
t.Fatal(err)
}
// template is not changed no pod should be removed
clearExpectations(t, manager, ds, podControl)
syncAndValidateDaemonSets(t, manager, ds, podControl, 0, 0, 0)
err = syncAndValidateDaemonSets(manager, ds, podControl, 0, 0, 0)
if err != nil {
t.Error(err)
}
clearExpectations(t, manager, ds, podControl)
}