kubectl: respect DaemonSet strategy parameters for rollout status

It handles "after-merge" comments from #41116
This commit is contained in:
Łukasz Oleś
2017-03-07 13:58:18 +01:00
parent 342ef1115c
commit b32afe1720
4 changed files with 146 additions and 6 deletions

View File

@@ -170,3 +170,138 @@ func TestDeploymentStatusViewerStatus(t *testing.T) {
}
}
}
func TestDaemonSetStatusViewerStatus(t *testing.T) {
tests := []struct {
generation int64
maxUnavailable *intstrutil.IntOrString
status extensions.DaemonSetStatus
msg string
done bool
}{
{
generation: 0,
status: extensions.DaemonSetStatus{
ObservedGeneration: 1,
UpdatedNumberScheduled: 0,
DesiredNumberScheduled: 1,
NumberAvailable: 0,
},
msg: "Waiting for rollout to finish: 0 out of 1 new pods have been updated...\n",
done: false,
},
{
generation: 1,
maxUnavailable: intOrStringP(0),
status: extensions.DaemonSetStatus{
ObservedGeneration: 1,
UpdatedNumberScheduled: 2,
DesiredNumberScheduled: 2,
NumberAvailable: 1,
},
msg: "Waiting for rollout to finish: 1 of 2 updated pods are available (minimum required: 2)...\n",
done: false,
},
{
generation: 1,
status: extensions.DaemonSetStatus{
ObservedGeneration: 1,
UpdatedNumberScheduled: 2,
DesiredNumberScheduled: 2,
NumberAvailable: 2,
},
msg: "daemon set \"foo\" successfully rolled out\n",
done: true,
},
{
generation: 2,
status: extensions.DaemonSetStatus{
ObservedGeneration: 1,
UpdatedNumberScheduled: 2,
DesiredNumberScheduled: 2,
NumberAvailable: 2,
},
msg: "Waiting for daemon set spec update to be observed...\n",
done: false,
},
{
generation: 1,
maxUnavailable: intOrStringP(1),
status: extensions.DaemonSetStatus{
ObservedGeneration: 1,
UpdatedNumberScheduled: 2,
DesiredNumberScheduled: 2,
NumberAvailable: 1,
},
msg: "daemon set \"foo\" successfully rolled out\n",
done: true,
},
}
for i := range tests {
test := tests[i]
t.Logf("testing scenario %d", i)
d := &extensions.DaemonSet{
ObjectMeta: metav1.ObjectMeta{
Namespace: "bar",
Name: "foo",
UID: "8764ae47-9092-11e4-8393-42010af018ff",
Generation: test.generation,
},
Spec: extensions.DaemonSetSpec{
UpdateStrategy: extensions.DaemonSetUpdateStrategy{
Type: extensions.RollingUpdateDaemonSetStrategyType,
RollingUpdate: &extensions.RollingUpdateDaemonSet{},
},
},
Status: test.status,
}
if test.maxUnavailable != nil {
d.Spec.UpdateStrategy.RollingUpdate.MaxUnavailable = *test.maxUnavailable
}
client := fake.NewSimpleClientset(d).Extensions()
dsv := &DaemonSetStatusViewer{c: client}
msg, done, err := dsv.Status("bar", "foo", 0)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if done != test.done || msg != test.msg {
t.Errorf("daemon set with generation %d, %d pods specified, and status:\n%+v\nreturned:\n%q, %t\nwant:\n%q, %t",
test.generation,
d.Status.DesiredNumberScheduled,
test.status,
msg,
done,
test.msg,
test.done,
)
}
}
}
func TestDaemonSetStatusViewerStatusWithWrongUpdateStrategyType(t *testing.T) {
d := &extensions.DaemonSet{
ObjectMeta: metav1.ObjectMeta{
Namespace: "bar",
Name: "foo",
UID: "8764ae47-9092-11e4-8393-42010af018ff",
},
Spec: extensions.DaemonSetSpec{
UpdateStrategy: extensions.DaemonSetUpdateStrategy{
Type: extensions.OnDeleteDaemonSetStrategyType,
},
},
}
client := fake.NewSimpleClientset(d).Extensions()
dsv := &DaemonSetStatusViewer{c: client}
msg, done, err := dsv.Status("bar", "foo", 0)
errMsg := "Status is available only for RollingUpdate strategy type"
if err == nil || err.Error() != errMsg {
t.Errorf("Status for daemon sets with UpdateStrategy type different than RollingUpdate should return error. Instead got: msg: %s\ndone: %t\n err: %v", msg, done, err)
}
}