@@ -25,6 +25,7 @@ import (
2525 "time"
2626
2727 "github.com/aws/aws-sdk-go/aws"
28+ "github.com/aws/aws-sdk-go/aws/awserr"
2829 "github.com/aws/aws-sdk-go/service/ec2"
2930 "github.com/golang/mock/gomock"
3031 "github.com/samber/lo"
@@ -468,32 +469,37 @@ func getDummyENIMetadataWithV6Prefix() awsutils.ENIMetadata {
468469
469470func TestIncreaseIPPoolDefault (t * testing.T ) {
470471 _ = os .Unsetenv (envCustomNetworkCfg )
471- testIncreaseIPPool (t , false , false )
472+ testIncreaseIPPool (t , false , false , false )
473+ }
474+
475+ func TestIncreaseIPPoolSubnetDiscoveryUnfilledENI (t * testing.T ) {
476+ _ = os .Unsetenv (envCustomNetworkCfg )
477+ testIncreaseIPPool (t , false , false , true )
472478}
473479
474480func TestIncreaseIPPoolCustomENI (t * testing.T ) {
475481 _ = os .Setenv (envCustomNetworkCfg , "true" )
476482 _ = os .Setenv ("MY_NODE_NAME" , myNodeName )
477- testIncreaseIPPool (t , true , false )
483+ testIncreaseIPPool (t , true , false , false )
478484}
479485
480486// Testing that the ENI will be allocated on non schedulable node when the AWS_MANAGE_ENIS_NON_SCHEDULABLE is set to `true`
481487func TestIncreaseIPPoolCustomENIOnNonSchedulableNode (t * testing.T ) {
482488 _ = os .Setenv (envCustomNetworkCfg , "true" )
483489 _ = os .Setenv (envManageENIsNonSchedulable , "true" )
484490 _ = os .Setenv ("MY_NODE_NAME" , myNodeName )
485- testIncreaseIPPool (t , true , true )
491+ testIncreaseIPPool (t , true , true , false )
486492}
487493
488494// Testing that the ENI will NOT be allocated on non schedulable node when the AWS_MANAGE_ENIS_NON_SCHEDULABLE is not set
489495func TestIncreaseIPPoolCustomENIOnNonSchedulableNodeDefault (t * testing.T ) {
490496 _ = os .Unsetenv (envManageENIsNonSchedulable )
491497 _ = os .Setenv (envCustomNetworkCfg , "true" )
492498 _ = os .Setenv ("MY_NODE_NAME" , myNodeName )
493- testIncreaseIPPool (t , true , true )
499+ testIncreaseIPPool (t , true , true , false )
494500}
495501
496- func testIncreaseIPPool (t * testing.T , useENIConfig bool , unschedulabeNode bool ) {
502+ func testIncreaseIPPool (t * testing.T , useENIConfig bool , unschedulabeNode bool , subnetDiscovery bool ) {
497503 m := setup (t )
498504 defer m .ctrl .Finish ()
499505 ctx := context .Background ()
@@ -506,11 +512,15 @@ func testIncreaseIPPool(t *testing.T, useENIConfig bool, unschedulabeNode bool)
506512 warmENITarget : 1 ,
507513 networkClient : m .network ,
508514 useCustomNetworking : UseCustomNetworkCfg (),
515+ useSubnetDiscovery : UseSubnetDiscovery (),
509516 manageENIsNonScheduleable : ManageENIsOnNonSchedulableNode (),
510517 primaryIP : make (map [string ]string ),
511518 terminating : int32 (0 ),
512519 }
513520 mockContext .dataStore = testDatastore ()
521+ if subnetDiscovery {
522+ mockContext .dataStore .AddENI (primaryENIid , primaryDevice , true , false , false )
523+ }
514524
515525 primary := true
516526 notPrimary := false
@@ -564,13 +574,14 @@ func testIncreaseIPPool(t *testing.T, useENIConfig bool, unschedulabeNode bool)
564574 if unschedulabeNode {
565575 val , exist := os .LookupEnv (envManageENIsNonSchedulable )
566576 if exist && val == "true" {
567- assertAllocationExternalCalls (true , useENIConfig , m , sg , podENIConfig , eni2 , eniMetadata )
577+ assertAllocationExternalCalls (true , useENIConfig , m , sg , podENIConfig , eni2 , eniMetadata , false )
568578 } else {
569- assertAllocationExternalCalls (false , useENIConfig , m , sg , podENIConfig , eni2 , eniMetadata )
579+ assertAllocationExternalCalls (false , useENIConfig , m , sg , podENIConfig , eni2 , eniMetadata , false )
570580 }
571-
581+ } else if subnetDiscovery {
582+ assertAllocationExternalCalls (true , useENIConfig , m , sg , podENIConfig , eni2 , eniMetadata , true )
572583 } else {
573- assertAllocationExternalCalls (true , useENIConfig , m , sg , podENIConfig , eni2 , eniMetadata )
584+ assertAllocationExternalCalls (true , useENIConfig , m , sg , podENIConfig , eni2 , eniMetadata , false )
574585 }
575586
576587 if mockContext .useCustomNetworking {
@@ -609,14 +620,18 @@ func testIncreaseIPPool(t *testing.T, useENIConfig bool, unschedulabeNode bool)
609620 mockContext .increaseDatastorePool (ctx )
610621}
611622
612- func assertAllocationExternalCalls (shouldCall bool , useENIConfig bool , m * testMocks , sg []* string , podENIConfig * eniconfigscheme.ENIConfigSpec , eni2 string , eniMetadata []awsutils.ENIMetadata ) {
623+ func assertAllocationExternalCalls (shouldCall bool , useENIConfig bool , m * testMocks , sg []* string , podENIConfig * eniconfigscheme.ENIConfigSpec , eni2 string , eniMetadata []awsutils.ENIMetadata , subnetDiscovery bool ) {
613624 callCount := 0
614625 if shouldCall {
615626 callCount = 1
616627 }
617628
618629 if useENIConfig {
619630 m .awsutils .EXPECT ().AllocENI (true , sg , podENIConfig .Subnet , 14 ).Times (callCount ).Return (eni2 , nil )
631+ } else if subnetDiscovery {
632+ m .awsutils .EXPECT ().AllocIPAddresses (primaryENIid , 14 ).Times (callCount ).Return (nil , awserr .New ("InsufficientFreeAddressesInSubnet" , "" , errors .New ("err" )))
633+ m .awsutils .EXPECT ().AllocIPAddresses (primaryENIid , 1 ).Times (callCount ).Return (nil , awserr .New ("InsufficientFreeAddressesInSubnet" , "" , errors .New ("err" )))
634+ m .awsutils .EXPECT ().AllocENI (false , nil , "" , 14 ).Times (callCount ).Return (eni2 , nil )
620635 } else {
621636 m .awsutils .EXPECT ().AllocENI (false , nil , "" , 14 ).Times (callCount ).Return (eni2 , nil )
622637 }
@@ -627,15 +642,20 @@ func assertAllocationExternalCalls(shouldCall bool, useENIConfig bool, m *testMo
627642
628643func TestIncreasePrefixPoolDefault (t * testing.T ) {
629644 _ = os .Unsetenv (envCustomNetworkCfg )
630- testIncreasePrefixPool (t , false )
645+ testIncreasePrefixPool (t , false , false )
646+ }
647+
648+ func TestIncreasePrefixPoolSubnetDiscoveryUnfilledENI (t * testing.T ) {
649+ _ = os .Unsetenv (envCustomNetworkCfg )
650+ testIncreasePrefixPool (t , false , true )
631651}
632652
633653func TestIncreasePrefixPoolCustomENI (t * testing.T ) {
634654 _ = os .Setenv (envCustomNetworkCfg , "true" )
635- testIncreasePrefixPool (t , true )
655+ testIncreasePrefixPool (t , true , false )
636656}
637657
638- func testIncreasePrefixPool (t * testing.T , useENIConfig bool ) {
658+ func testIncreasePrefixPool (t * testing.T , useENIConfig , subnetDiscovery bool ) {
639659 m := setup (t )
640660 defer m .ctrl .Finish ()
641661 ctx := context .Background ()
@@ -650,13 +670,17 @@ func testIncreasePrefixPool(t *testing.T, useENIConfig bool) {
650670 warmPrefixTarget : 1 ,
651671 networkClient : m .network ,
652672 useCustomNetworking : UseCustomNetworkCfg (),
673+ useSubnetDiscovery : UseSubnetDiscovery (),
653674 manageENIsNonScheduleable : ManageENIsOnNonSchedulableNode (),
654675 primaryIP : make (map [string ]string ),
655676 terminating : int32 (0 ),
656677 enablePrefixDelegation : true ,
657678 }
658679
659680 mockContext .dataStore = testDatastorewithPrefix ()
681+ if subnetDiscovery {
682+ mockContext .dataStore .AddENI (primaryENIid , primaryDevice , true , false , false )
683+ }
660684
661685 primary := true
662686 testAddr1 := ipaddr01
@@ -677,6 +701,10 @@ func testIncreasePrefixPool(t *testing.T, useENIConfig bool) {
677701
678702 if useENIConfig {
679703 m .awsutils .EXPECT ().AllocENI (true , sg , podENIConfig .Subnet , 1 ).Return (eni2 , nil )
704+ } else if subnetDiscovery {
705+ m .awsutils .EXPECT ().AllocIPAddresses (primaryENIid , 1 ).Return (nil , awserr .New ("InsufficientFreeAddressesInSubnet" , "" , errors .New ("err" )))
706+ m .awsutils .EXPECT ().AllocIPAddresses (primaryENIid , 1 ).Return (nil , awserr .New ("InsufficientFreeAddressesInSubnet" , "" , errors .New ("err" )))
707+ m .awsutils .EXPECT ().AllocENI (false , nil , "" , 1 ).Return (eni2 , nil )
680708 } else {
681709 m .awsutils .EXPECT ().AllocENI (false , nil , "" , 1 ).Return (eni2 , nil )
682710 }
0 commit comments