mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Tolarate nil inputs on maxSurge and maxUnavailable when parsing IntOrString
This commit is contained in:
		@@ -863,11 +863,11 @@ func WaitForObservedDeployment(getDeploymentFunc func() (*apps.Deployment, error
 | 
				
			|||||||
// 2 desired, max unavailable 0%, surge 1% - should scale new(+1), then old(-1), then new(+1), then old(-1)
 | 
					// 2 desired, max unavailable 0%, surge 1% - should scale new(+1), then old(-1), then new(+1), then old(-1)
 | 
				
			||||||
// 1 desired, max unavailable 0%, surge 1% - should scale new(+1), then old(-1)
 | 
					// 1 desired, max unavailable 0%, surge 1% - should scale new(+1), then old(-1)
 | 
				
			||||||
func ResolveFenceposts(maxSurge, maxUnavailable *intstrutil.IntOrString, desired int32) (int32, int32, error) {
 | 
					func ResolveFenceposts(maxSurge, maxUnavailable *intstrutil.IntOrString, desired int32) (int32, int32, error) {
 | 
				
			||||||
	surge, err := intstrutil.GetValueFromIntOrPercent(maxSurge, int(desired), true)
 | 
						surge, err := intstrutil.GetValueFromIntOrPercent(intstrutil.ValueOrDefault(maxSurge, intstrutil.FromInt(0)), int(desired), true)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return 0, 0, err
 | 
							return 0, 0, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	unavailable, err := intstrutil.GetValueFromIntOrPercent(maxUnavailable, int(desired), false)
 | 
						unavailable, err := intstrutil.GetValueFromIntOrPercent(intstrutil.ValueOrDefault(maxUnavailable, intstrutil.FromInt(0)), int(desired), false)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return 0, 0, err
 | 
							return 0, 0, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -618,52 +618,83 @@ func TestGetReplicaCountForReplicaSets(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func TestResolveFenceposts(t *testing.T) {
 | 
					func TestResolveFenceposts(t *testing.T) {
 | 
				
			||||||
	tests := []struct {
 | 
						tests := []struct {
 | 
				
			||||||
		maxSurge          string
 | 
							maxSurge          *string
 | 
				
			||||||
		maxUnavailable    string
 | 
							maxUnavailable    *string
 | 
				
			||||||
		desired           int32
 | 
							desired           int32
 | 
				
			||||||
		expectSurge       int32
 | 
							expectSurge       int32
 | 
				
			||||||
		expectUnavailable int32
 | 
							expectUnavailable int32
 | 
				
			||||||
		expectError       bool
 | 
							expectError       bool
 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			maxSurge:          "0%",
 | 
								maxSurge:          newString("0%"),
 | 
				
			||||||
			maxUnavailable:    "0%",
 | 
								maxUnavailable:    newString("0%"),
 | 
				
			||||||
			desired:           0,
 | 
								desired:           0,
 | 
				
			||||||
			expectSurge:       0,
 | 
								expectSurge:       0,
 | 
				
			||||||
			expectUnavailable: 1,
 | 
								expectUnavailable: 1,
 | 
				
			||||||
			expectError:       false,
 | 
								expectError:       false,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			maxSurge:          "39%",
 | 
								maxSurge:          newString("39%"),
 | 
				
			||||||
			maxUnavailable:    "39%",
 | 
								maxUnavailable:    newString("39%"),
 | 
				
			||||||
			desired:           10,
 | 
								desired:           10,
 | 
				
			||||||
			expectSurge:       4,
 | 
								expectSurge:       4,
 | 
				
			||||||
			expectUnavailable: 3,
 | 
								expectUnavailable: 3,
 | 
				
			||||||
			expectError:       false,
 | 
								expectError:       false,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			maxSurge:          "oops",
 | 
								maxSurge:          newString("oops"),
 | 
				
			||||||
			maxUnavailable:    "39%",
 | 
								maxUnavailable:    newString("39%"),
 | 
				
			||||||
			desired:           10,
 | 
								desired:           10,
 | 
				
			||||||
			expectSurge:       0,
 | 
								expectSurge:       0,
 | 
				
			||||||
			expectUnavailable: 0,
 | 
								expectUnavailable: 0,
 | 
				
			||||||
			expectError:       true,
 | 
								expectError:       true,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			maxSurge:          "55%",
 | 
								maxSurge:          newString("55%"),
 | 
				
			||||||
			maxUnavailable:    "urg",
 | 
								maxUnavailable:    newString("urg"),
 | 
				
			||||||
			desired:           10,
 | 
								desired:           10,
 | 
				
			||||||
			expectSurge:       0,
 | 
								expectSurge:       0,
 | 
				
			||||||
			expectUnavailable: 0,
 | 
								expectUnavailable: 0,
 | 
				
			||||||
			expectError:       true,
 | 
								expectError:       true,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								maxSurge:          nil,
 | 
				
			||||||
 | 
								maxUnavailable:    newString("39%"),
 | 
				
			||||||
 | 
								desired:           10,
 | 
				
			||||||
 | 
								expectSurge:       0,
 | 
				
			||||||
 | 
								expectUnavailable: 3,
 | 
				
			||||||
 | 
								expectError:       false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								maxSurge:          newString("39%"),
 | 
				
			||||||
 | 
								maxUnavailable:    nil,
 | 
				
			||||||
 | 
								desired:           10,
 | 
				
			||||||
 | 
								expectSurge:       4,
 | 
				
			||||||
 | 
								expectUnavailable: 0,
 | 
				
			||||||
 | 
								expectError:       false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								maxSurge:          nil,
 | 
				
			||||||
 | 
								maxUnavailable:    nil,
 | 
				
			||||||
 | 
								desired:           10,
 | 
				
			||||||
 | 
								expectSurge:       0,
 | 
				
			||||||
 | 
								expectUnavailable: 1,
 | 
				
			||||||
 | 
								expectError:       false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for num, test := range tests {
 | 
						for num, test := range tests {
 | 
				
			||||||
		t.Run("maxSurge="+test.maxSurge, func(t *testing.T) {
 | 
							t.Run(fmt.Sprintf("%d", num), func(t *testing.T) {
 | 
				
			||||||
			maxSurge := intstr.FromString(test.maxSurge)
 | 
								var maxSurge, maxUnavail *intstr.IntOrString
 | 
				
			||||||
			maxUnavail := intstr.FromString(test.maxUnavailable)
 | 
								if test.maxSurge != nil {
 | 
				
			||||||
			surge, unavail, err := ResolveFenceposts(&maxSurge, &maxUnavail, test.desired)
 | 
									surge := intstr.FromString(*test.maxSurge)
 | 
				
			||||||
 | 
									maxSurge = &surge
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if test.maxUnavailable != nil {
 | 
				
			||||||
 | 
									unavail := intstr.FromString(*test.maxUnavailable)
 | 
				
			||||||
 | 
									maxUnavail = &unavail
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								surge, unavail, err := ResolveFenceposts(maxSurge, maxUnavail, test.desired)
 | 
				
			||||||
			if err != nil && !test.expectError {
 | 
								if err != nil && !test.expectError {
 | 
				
			||||||
				t.Errorf("unexpected error %v", err)
 | 
									t.Errorf("unexpected error %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -677,6 +708,10 @@ func TestResolveFenceposts(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func newString(s string) *string {
 | 
				
			||||||
 | 
						return &s
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestNewRSNewReplicas(t *testing.T) {
 | 
					func TestNewRSNewReplicas(t *testing.T) {
 | 
				
			||||||
	tests := []struct {
 | 
						tests := []struct {
 | 
				
			||||||
		Name          string
 | 
							Name          string
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user