@@ -285,6 +285,7 @@ var _ = Describe("Windows Integration Test", func() {
285
285
})
286
286
})
287
287
288
+ // TODO: remove this context when VPC CNI also updates the flag name to windows prefixed.
288
289
Context ("When warm-prefix-target is set to 2" , Label ("warm-prefix-target" ), func () {
289
290
BeforeEach (func () {
290
291
data = map [string ]string {
@@ -316,6 +317,7 @@ var _ = Describe("Windows Integration Test", func() {
316
317
})
317
318
})
318
319
320
+ // TODO: remove this context when VPC CNI also updates the flag name to windows prefixed.
319
321
Context ("When warm-ip-target is set to 15" , Label ("warm-ip-target" ), func () {
320
322
BeforeEach (func () {
321
323
data = map [string ]string {
@@ -362,6 +364,7 @@ var _ = Describe("Windows Integration Test", func() {
362
364
})
363
365
})
364
366
367
+ // TODO: remove this context when VPC CNI also updates the flag name to windows prefixed.
365
368
Context ("When minimum-ip-target is set to 20" , Label ("minimum-ip-target" ), func () {
366
369
BeforeEach (func () {
367
370
data = map [string ]string {
@@ -415,6 +418,137 @@ var _ = Describe("Windows Integration Test", func() {
415
418
})
416
419
})
417
420
421
+ Context ("When windows-warm-prefix-target is set to 2" , Label ("windows-warm-prefix-target" ), func () {
422
+ BeforeEach (func () {
423
+ data = map [string ]string {
424
+ config .EnableWindowsIPAMKey : "true" ,
425
+ config .EnableWindowsPrefixDelegationKey : "true" ,
426
+ config .WinWarmPrefixTarget : "2" }
427
+
428
+ })
429
+
430
+ It ("two prefixes should be assigned" , func () {
431
+ // allow some time for previous test pod to cool down
432
+ time .Sleep (bufferForCoolDown )
433
+ _ , prefixesBefore , err := frameWork .EC2Manager .GetPrivateIPv4AddressAndPrefix (instanceID )
434
+ Expect (err ).ToNot (HaveOccurred ())
435
+ Expect (len (prefixesBefore )).To (Equal (2 ))
436
+
437
+ By ("creating pod and waiting for ready should have 1 new prefix assigned" )
438
+ // verify if ip assigned is coming from a prefix
439
+ createdPod , err = frameWork .PodManager .CreateAndWaitTillPodIsRunning (ctx , testPod , utils .WindowsPodsCreationTimeout )
440
+ Expect (err ).ToNot (HaveOccurred ())
441
+ verify .WindowsPodHaveIPv4AddressFromPrefixes (createdPod , prefixesBefore )
442
+
443
+ // number of prefixes should increase by 1 since need 1 more prefix to fulfill warm-prefix-target of 2
444
+ _ , prefixesAfter , err := frameWork .EC2Manager .GetPrivateIPv4AddressAndPrefix (instanceID )
445
+ Expect (err ).ToNot (HaveOccurred ())
446
+ Expect (len (prefixesAfter ) - len (prefixesBefore )).To (Equal (1 ))
447
+
448
+ err = frameWork .PodManager .DeleteAndWaitTillPodIsDeleted (ctx , testPod )
449
+ Expect (err ).ToNot (HaveOccurred ())
450
+ })
451
+ })
452
+
453
+ Context ("When windows-warm-ip-target is set to 15" , Label ("windows-warm-ip-target" ), func () {
454
+ BeforeEach (func () {
455
+ data = map [string ]string {
456
+ config .EnableWindowsIPAMKey : "true" ,
457
+ config .EnableWindowsPrefixDelegationKey : "true" ,
458
+ config .WinWarmIPTarget : "15" }
459
+ })
460
+ It ("should assign new prefix when 2nd pod is launched" , func () {
461
+ // allow some time for previous test pod to cool down
462
+ time .Sleep (bufferForCoolDown )
463
+ // before running any pod, should have 1 prefix assigned
464
+ privateIPsBefore , prefixesBefore , err := frameWork .EC2Manager .GetPrivateIPv4AddressAndPrefix (instanceID )
465
+ Expect (err ).ToNot (HaveOccurred ())
466
+ Expect (len (prefixesBefore )).To (Equal (1 ))
467
+
468
+ By ("creating 1 pod and waiting for ready should not create new prefix" )
469
+ // verify if ip assigned is coming from a prefix
470
+ createdPod , err = frameWork .PodManager .CreateAndWaitTillPodIsRunning (ctx , testPod , utils .WindowsPodsCreationTimeout )
471
+ Expect (err ).ToNot (HaveOccurred ())
472
+
473
+ _ , prefixesAfterPod1 , err := frameWork .EC2Manager .GetPrivateIPv4AddressAndPrefix (instanceID )
474
+ Expect (err ).ToNot (HaveOccurred ())
475
+ Expect (len (prefixesAfterPod1 )).To (Equal (len (prefixesBefore )))
476
+ verify .WindowsPodHaveIPv4AddressFromPrefixes (createdPod , prefixesAfterPod1 )
477
+
478
+ // launch 2nd pod to trigger a new prefix to be assigned since warm-ip-target=15
479
+ By ("creating 2nd pod and waiting for ready should have 1 more prefix assigned" )
480
+ createdPod , err = frameWork .PodManager .CreateAndWaitTillPodIsRunning (ctx , testPod2 , utils .WindowsPodsCreationTimeout )
481
+ Expect (err ).ToNot (HaveOccurred ())
482
+ verify .WindowsPodHaveResourceLimits (createdPod , true )
483
+
484
+ privateIPsAfter , prefixesAfterPod2 , err := frameWork .EC2Manager .GetPrivateIPv4AddressAndPrefix (instanceID )
485
+ Expect (err ).ToNot (HaveOccurred ())
486
+ // 1 more prefix should be created to fulfill warm-ip-target=15
487
+ Expect (len (prefixesAfterPod2 ) - len (prefixesAfterPod1 )).To (Equal (1 ))
488
+ // number of secondary ips should not change
489
+ Expect (len (privateIPsBefore )).To (Equal (len (privateIPsAfter )))
490
+ verify .WindowsPodHaveIPv4AddressFromPrefixes (createdPod , prefixesAfterPod2 )
491
+
492
+ err = frameWork .PodManager .DeleteAndWaitTillPodIsDeleted (ctx , testPod )
493
+ Expect (err ).ToNot (HaveOccurred ())
494
+ err = frameWork .PodManager .DeleteAndWaitTillPodIsDeleted (ctx , testPod2 )
495
+ Expect (err ).ToNot (HaveOccurred ())
496
+ })
497
+ })
498
+
499
+ Context ("When windows-minimum-ip-target is set to 20" , Label ("windows-minimum-ip-target" ), func () {
500
+ BeforeEach (func () {
501
+ data = map [string ]string {
502
+ config .EnableWindowsIPAMKey : "true" ,
503
+ config .EnableWindowsPrefixDelegationKey : "true" ,
504
+ config .WinMinimumIPTarget : "20" }
505
+ })
506
+ It ("should have 2 prefixes to satisfy windows-minimum-ip-target when no pods running" , func () {
507
+ By ("adding labels to selected nodes for testing" )
508
+ node := windowsNodeList .Items [0 ]
509
+ err = frameWork .NodeManager .AddLabels ([]v1.Node {node }, map [string ]string {podLabelKey : podLabelVal })
510
+ Expect (err ).ToNot (HaveOccurred ())
511
+
512
+ // allow some time for previous test pod to cool down
513
+ time .Sleep (bufferForCoolDown )
514
+ // before running any pod, should have 2 prefixes assigned
515
+ instanceID = manager .GetNodeInstanceID (& node )
516
+ privateIPsBefore , prefixesBefore , err := frameWork .EC2Manager .GetPrivateIPv4AddressAndPrefix (instanceID )
517
+ Expect (err ).ToNot (HaveOccurred ())
518
+ Expect (len (prefixesBefore )).To (Equal (2 ))
519
+
520
+ By ("creating 33 pods and waiting for ready should have 3 prefixes attached" )
521
+ deployment := manifest .NewWindowsDeploymentBuilder ().
522
+ Replicas (33 ).
523
+ Container (manifest .NewWindowsContainerBuilder ().Build ()).
524
+ PodLabel (podLabelKey , podLabelVal ).
525
+ NodeSelector (map [string ]string {"kubernetes.io/os" : "windows" , podLabelKey : podLabelVal }).
526
+ Build ()
527
+ _ , err = frameWork .DeploymentManager .CreateAndWaitUntilDeploymentReady (ctx , deployment )
528
+ Expect (err ).ToNot (HaveOccurred ())
529
+
530
+ _ , prefixesAfterDeployment , err := frameWork .EC2Manager .GetPrivateIPv4AddressAndPrefix (instanceID )
531
+ Expect (err ).ToNot (HaveOccurred ())
532
+ Expect (len (prefixesAfterDeployment )).To (Equal (3 ))
533
+
534
+ By ("deleting 33 pods should still have 2 prefixes attached" )
535
+ err = frameWork .DeploymentManager .DeleteAndWaitUntilDeploymentDeleted (ctx , deployment )
536
+ Expect (err ).ToNot (HaveOccurred ())
537
+
538
+ // allow some time for previous test pods to cool down since deletion of deployment doesn't wait for pods to terminate
539
+ time .Sleep (utils .WindowsPodsDeletionTimeout )
540
+ privateIPsAfter , prefixesAfterDelete , err := frameWork .EC2Manager .GetPrivateIPv4AddressAndPrefix (instanceID )
541
+ Expect (err ).ToNot (HaveOccurred ())
542
+ Expect (len (prefixesAfterDelete )).To (Equal (2 ))
543
+ // number of secondary ips should not change
544
+ Expect (len (privateIPsBefore )).To (Equal (len (privateIPsAfter )))
545
+
546
+ By ("removing labels on selected nodes for testing" )
547
+ err = frameWork .NodeManager .RemoveLabels ([]v1.Node {node }, map [string ]string {podLabelKey : podLabelVal })
548
+ Expect (err ).ToNot (HaveOccurred ())
549
+ })
550
+ })
551
+
418
552
Context ("[CANARY] When enable-windows-prefix-delegation is toggled to false" , func () {
419
553
BeforeEach (func () {
420
554
data = map [string ]string {
0 commit comments