github.com/kubernetes-incubator/kube-aws@v0.16.4/pkg/api/asg_test.go (about) 1 package api 2 3 import ( 4 "github.com/stretchr/testify/require" 5 "testing" 6 ) 7 8 func TestValidateAsgSizes(t *testing.T) { 9 var minSize int 10 var rolMinInst int 11 a := AutoScalingGroup{ 12 MinSize: &minSize, 13 RollingUpdateMinInstancesInService: &rolMinInst, 14 } 15 16 err := a.Validate() 17 require.NoError(t, err) 18 19 // Expect error if minSize is negative 20 minSize = -1 21 err = a.Validate() 22 require.EqualError(t, err, "`autoScalingGroup.minSize` must be zero or greater if specified") 23 minSize = 1 24 25 // Expect error if maxSize is negative 26 a.MaxSize = -1 27 err = a.Validate() 28 require.EqualError(t, err, "`autoScalingGroup.maxSize` must be zero or greater if specified") 29 a.MaxSize = 3 30 31 // Expect error is minSize > maxSize 32 minSize = 5 33 err = a.Validate() 34 require.EqualError(t, err, "`autoScalingGroup.minSize` (5) must be less than or equal to `autoScalingGroup.maxSize` (3), if you have specified only minSize please specify maxSize as well") 35 minSize = 1 36 37 // Expect error if rollingUpdate is negative 38 rolMinInst = -1 39 err = a.Validate() 40 require.EqualError(t, err, "`autoScalingGroup.rollingUpdateMinInstancesInService` must be greater than or equal to 0 but was -1") 41 rolMinInst = 1 42 } 43 44 func TestValidateAsgMixedInstances(t *testing.T) { 45 a := AutoScalingGroup{ 46 MixedInstances: MixedInstances{ 47 Enabled: false, 48 }, 49 } 50 51 // Expect no error if MixedInstances are not enabled 52 err := a.Validate() 53 require.NoError(t, err) 54 55 // Expect no error if mixed instances are enabled with default values 56 a.MixedInstances.Enabled = true 57 err = a.Validate() 58 require.NoError(t, err) 59 60 // Expect error if string fields set to incorrect values 61 a.MixedInstances.OnDemandAllocationStrategy = "invalid-value" 62 err = a.Validate() 63 require.EqualError(t, err, "`mixedInstances.onDemandAllocationStrategy` must be equal to 'prioritized' if specified") 64 a.MixedInstances.OnDemandAllocationStrategy = "prioritized" 65 a.MixedInstances.SpotAllocationStrategy = "invalid-value" 66 err = a.Validate() 67 require.EqualError(t, err, "`mixedInstances.spotAllocationStrategy` must be equal to 'lowest-price' if specified") 68 69 // Expect no error if string fields set to correct values 70 a.MixedInstances.SpotAllocationStrategy = "lowest-price" 71 err = a.Validate() 72 require.NoError(t, err) 73 74 // Testing invalid values (out of range) for some fields 75 a.MixedInstances.OnDemandBaseCapacity = -1 76 err = a.Validate() 77 require.EqualError(t, err, "`mixedInstances.onDemandBaseCapacity` (-1) must be zero or greater if specified") 78 a.MixedInstances.OnDemandBaseCapacity = 10 79 80 a.MixedInstances.OnDemandPercentageAboveBaseCapacity = 102 81 err = a.Validate() 82 require.EqualError(t, err, "`mixedInstances.onDemandPercentageAboveBaseCapacity` (102) must be in range 0-100") 83 84 a.MixedInstances.OnDemandPercentageAboveBaseCapacity = -1 85 err = a.Validate() 86 require.EqualError(t, err, "`mixedInstances.onDemandPercentageAboveBaseCapacity` (-1) must be in range 0-100") 87 88 // Within ranges, everything should be fine again 89 a.MixedInstances.OnDemandPercentageAboveBaseCapacity = 42 90 a.MixedInstances.SpotInstancePools = 10 91 err = a.Validate() 92 require.NoError(t, err) 93 94 // More out of range 95 a.MixedInstances.SpotInstancePools = 42 96 err = a.Validate() 97 require.EqualError(t, err, "`mixedInstances.spotInstancePools` (42) must be in range 0-20") 98 99 a.MixedInstances.SpotInstancePools = -1 100 err = a.Validate() 101 require.EqualError(t, err, "`mixedInstances.spotInstancePools` (-1) must be in range 0-20") 102 a.MixedInstances.SpotInstancePools = 10 103 104 // Last error: too long string for SpotPrice 105 a.MixedInstances.SpotMaxPrice = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 106 err = a.Validate() 107 require.EqualError(t, err, "`mixedInstances.spotMaxPrice` can have a maximum length of 255") 108 109 // Every field filled with a valid value, no error expected 110 a.MixedInstances.SpotMaxPrice = "2" 111 err = a.Validate() 112 require.NoError(t, err) 113 }