Handle maxUnavailable larger than spec.replicas

This commit is contained in:
Haoran Wang
2017-03-30 17:11:52 +08:00
parent acca01bcc2
commit b6aadd2b7e
2 changed files with 80 additions and 0 deletions

View File

@@ -1150,3 +1150,80 @@ func TestDeploymentTimedOut(t *testing.T) {
}
}
}
func TestMaxUnavailable(t *testing.T) {
deployment := func(replicas int32, maxUnavailable intstr.IntOrString) extensions.Deployment {
return extensions.Deployment{
Spec: extensions.DeploymentSpec{
Replicas: func(i int32) *int32 { return &i }(replicas),
Strategy: extensions.DeploymentStrategy{
RollingUpdate: &extensions.RollingUpdateDeployment{
MaxSurge: func(i int) *intstr.IntOrString { x := intstr.FromInt(i); return &x }(int(1)),
MaxUnavailable: &maxUnavailable,
},
Type: extensions.RollingUpdateDeploymentStrategyType,
},
},
}
}
tests := []struct {
name string
deployment extensions.Deployment
expected int32
}{
{
name: "maxUnavailable less than replicas",
deployment: deployment(10, intstr.FromInt(5)),
expected: int32(5),
},
{
name: "maxUnavailable equal replicas",
deployment: deployment(10, intstr.FromInt(10)),
expected: int32(10),
},
{
name: "maxUnavailable greater than replicas",
deployment: deployment(5, intstr.FromInt(10)),
expected: int32(5),
},
{
name: "maxUnavailable with replicas is 0",
deployment: deployment(0, intstr.FromInt(10)),
expected: int32(0),
},
{
name: "maxUnavailable with Recreate deployment strategy",
deployment: extensions.Deployment{
Spec: extensions.DeploymentSpec{
Strategy: extensions.DeploymentStrategy{
Type: extensions.RecreateDeploymentStrategyType,
},
},
},
expected: int32(0),
},
{
name: "maxUnavailable less than replicas with percents",
deployment: deployment(10, intstr.FromString("50%")),
expected: int32(5),
},
{
name: "maxUnavailable equal replicas with percents",
deployment: deployment(10, intstr.FromString("100%")),
expected: int32(10),
},
{
name: "maxUnavailable greater than replicas with percents",
deployment: deployment(5, intstr.FromString("100%")),
expected: int32(5),
},
}
for _, test := range tests {
t.Log(test.name)
maxUnavailable := MaxUnavailable(test.deployment)
if test.expected != maxUnavailable {
t.Fatalf("expected:%v, got:%v", test.expected, maxUnavailable)
}
}
}