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  }