@@ -1830,6 +1830,135 @@ def common_construct_agentpool_profile_preview_with_managed_system_mode(self):
18301830 self .assertIsNone (attr_value ,
18311831 f"Attribute '{ attr_name } ' should be None but was '{ attr_value } ' when mode is ManagedSystem" )
18321832
1833+ def common_set_up_upgrade_strategy (self ):
1834+ # Test case 1: No upgrade strategy provided
1835+ dec_1 = AKSPreviewAgentPoolAddDecorator (
1836+ self .cmd ,
1837+ self .client ,
1838+ {},
1839+ self .resource_type ,
1840+ self .agentpool_decorator_mode ,
1841+ )
1842+ # fail on passing the wrong agentpool object
1843+ with self .assertRaises (CLIInternalError ):
1844+ dec_1 .set_up_upgrade_strategy (None )
1845+
1846+ agentpool_1 = self .create_initialized_agentpool_instance (restore_defaults = False )
1847+ dec_1 .context .attach_agentpool (agentpool_1 )
1848+ dec_agentpool_1 = dec_1 .set_up_upgrade_strategy (agentpool_1 )
1849+ dec_agentpool_1 = self ._restore_defaults_in_agentpool (dec_agentpool_1 )
1850+ ground_truth_agentpool_1 = self .create_initialized_agentpool_instance ()
1851+ self .assertEqual (dec_agentpool_1 , ground_truth_agentpool_1 )
1852+
1853+ # Test case 2: RollingUpdate upgrade strategy provided
1854+ dec_2 = AKSPreviewAgentPoolAddDecorator (
1855+ self .cmd ,
1856+ self .client ,
1857+ {"upgrade_strategy" : "RollingUpdate" },
1858+ self .resource_type ,
1859+ self .agentpool_decorator_mode ,
1860+ )
1861+ agentpool_2 = self .create_initialized_agentpool_instance (restore_defaults = False )
1862+ dec_2 .context .attach_agentpool (agentpool_2 )
1863+ dec_agentpool_2 = dec_2 .set_up_upgrade_strategy (agentpool_2 )
1864+ dec_agentpool_2 = self ._restore_defaults_in_agentpool (dec_agentpool_2 )
1865+ ground_truth_agentpool_2 = self .create_initialized_agentpool_instance (
1866+ upgrade_strategy = "RollingUpdate"
1867+ )
1868+ self .assertEqual (dec_agentpool_2 , ground_truth_agentpool_2 )
1869+
1870+ # Test case 3: BlueGreen upgrade strategy provided
1871+ dec_3 = AKSPreviewAgentPoolAddDecorator (
1872+ self .cmd ,
1873+ self .client ,
1874+ {"upgrade_strategy" : "BlueGreen" },
1875+ self .resource_type ,
1876+ self .agentpool_decorator_mode ,
1877+ )
1878+ agentpool_3 = self .create_initialized_agentpool_instance (restore_defaults = False )
1879+ dec_3 .context .attach_agentpool (agentpool_3 )
1880+ dec_agentpool_3 = dec_3 .set_up_upgrade_strategy (agentpool_3 )
1881+ dec_agentpool_3 = self ._restore_defaults_in_agentpool (dec_agentpool_3 )
1882+ ground_truth_agentpool_3 = self .create_initialized_agentpool_instance (
1883+ upgrade_strategy = "BlueGreen"
1884+ )
1885+ self .assertEqual (dec_agentpool_3 , ground_truth_agentpool_3 )
1886+
1887+ def common_set_up_blue_green_upgrade_settings (self ):
1888+ # scenario 1: no blue-green parameters
1889+ dec_1 = AKSPreviewAgentPoolAddDecorator (
1890+ self .cmd ,
1891+ self .client ,
1892+ {},
1893+ self .resource_type ,
1894+ self .agentpool_decorator_mode ,
1895+ )
1896+ agentpool_1 = self .create_initialized_agentpool_instance ()
1897+ agentpool_1 = self ._remove_defaults_in_agentpool (agentpool_1 )
1898+ dec_1 .context .attach_agentpool (agentpool_1 )
1899+ dec_agentpool_1 = dec_1 .set_up_blue_green_upgrade_settings (agentpool_1 )
1900+ dec_agentpool_1 = self ._restore_defaults_in_agentpool (dec_agentpool_1 )
1901+ ground_truth_agentpool_1 = self .create_initialized_agentpool_instance (
1902+ upgrade_settings_blue_green = self .models .AgentPoolBlueGreenUpgradeSettings ()
1903+ )
1904+ self .assertEqual (dec_agentpool_1 , ground_truth_agentpool_1 )
1905+
1906+ # scenario 2: with all blue-green parameters
1907+ dec_2 = AKSPreviewAgentPoolAddDecorator (
1908+ self .cmd ,
1909+ self .client ,
1910+ {
1911+ "drain_batch_size" : "5" ,
1912+ "drain_timeout_bg" : 15 ,
1913+ "batch_soak_duration" : 30 ,
1914+ "final_soak_duration" : 60 ,
1915+ },
1916+ self .resource_type ,
1917+ self .agentpool_decorator_mode ,
1918+ )
1919+ agentpool_2 = self .create_initialized_agentpool_instance ()
1920+ agentpool_2 = self ._remove_defaults_in_agentpool (agentpool_2 )
1921+ dec_2 .context .attach_agentpool (agentpool_2 )
1922+ dec_agentpool_2 = dec_2 .set_up_blue_green_upgrade_settings (agentpool_2 )
1923+ dec_agentpool_2 = self ._restore_defaults_in_agentpool (dec_agentpool_2 )
1924+
1925+ ground_truth_blue_green_settings = self .models .AgentPoolBlueGreenUpgradeSettings ()
1926+ ground_truth_blue_green_settings .drain_batch_size = "5"
1927+ ground_truth_blue_green_settings .drain_timeout_in_minutes = 15
1928+ ground_truth_blue_green_settings .batch_soak_duration_in_minutes = 30
1929+ ground_truth_blue_green_settings .final_soak_duration_in_minutes = 60
1930+
1931+ ground_truth_agentpool_2 = self .create_initialized_agentpool_instance (
1932+ upgrade_settings_blue_green = ground_truth_blue_green_settings
1933+ )
1934+ self .assertEqual (dec_agentpool_2 , ground_truth_agentpool_2 )
1935+
1936+ # scenario 3: with partial blue-green parameters
1937+ dec_3 = AKSPreviewAgentPoolAddDecorator (
1938+ self .cmd ,
1939+ self .client ,
1940+ {
1941+ "drain_timeout_bg" : 20 ,
1942+ "final_soak_duration" : 45 ,
1943+ },
1944+ self .resource_type ,
1945+ self .agentpool_decorator_mode ,
1946+ )
1947+ agentpool_3 = self .create_initialized_agentpool_instance ()
1948+ agentpool_3 = self ._remove_defaults_in_agentpool (agentpool_3 )
1949+ dec_3 .context .attach_agentpool (agentpool_3 )
1950+ dec_agentpool_3 = dec_3 .set_up_blue_green_upgrade_settings (agentpool_3 )
1951+ dec_agentpool_3 = self ._restore_defaults_in_agentpool (dec_agentpool_3 )
1952+
1953+ ground_truth_blue_green_settings_3 = self .models .AgentPoolBlueGreenUpgradeSettings ()
1954+ ground_truth_blue_green_settings_3 .drain_timeout_in_minutes = 20
1955+ ground_truth_blue_green_settings_3 .final_soak_duration_in_minutes = 45
1956+
1957+ ground_truth_agentpool_3 = self .create_initialized_agentpool_instance (
1958+ upgrade_settings_blue_green = ground_truth_blue_green_settings_3
1959+ )
1960+ self .assertEqual (dec_agentpool_3 , ground_truth_agentpool_3 )
1961+
18331962
18341963class AKSPreviewAgentPoolAddDecoratorStandaloneModeTestCase (
18351964 AKSPreviewAgentPoolAddDecoratorCommonTestCase
@@ -1885,6 +2014,9 @@ def test_set_up_virtual_machines_profile(self):
18852014 def test_set_up_managed_system_mode (self ):
18862015 self .common_set_up_managed_system_mode ()
18872016
2017+ def test_set_up_upgrade_strategy (self ):
2018+ self .common_set_up_upgrade_strategy ()
2019+
18882020 def test_construct_agentpool_profile_preview (self ):
18892021 import inspect
18902022
@@ -1963,6 +2095,9 @@ def test_construct_agentpool_profile_preview(self):
19632095
19642096 dec_1 .context .raw_param .print_usage_statistics ()
19652097
2098+ def test_set_up_blue_green_upgrade_settings (self ):
2099+ self .common_set_up_blue_green_upgrade_settings ()
2100+
19662101 def test_construct_agentpool_profile_preview_with_managed_system_mode (self ):
19672102 self .common_construct_agentpool_profile_preview_with_managed_system_mode ()
19682103
@@ -2018,6 +2153,9 @@ def test_set_up_virtual_machines_profile(self):
20182153 def test_set_up_managed_system_mode (self ):
20192154 self .common_set_up_managed_system_mode ()
20202155
2156+ def test_set_up_upgrade_strategy (self ):
2157+ self .common_set_up_upgrade_strategy ()
2158+
20212159 def test_construct_agentpool_profile_preview (self ):
20222160 import inspect
20232161
@@ -2094,6 +2232,9 @@ def test_construct_agentpool_profile_preview(self):
20942232
20952233 dec_1 .context .raw_param .print_usage_statistics ()
20962234
2235+ def test_set_up_blue_green_upgrade_settings (self ):
2236+ self .common_set_up_blue_green_upgrade_settings ()
2237+
20972238
20982239class AKSPreviewAgentPoolUpdateDecoratorCommonTestCase (unittest .TestCase ):
20992240 def _remove_defaults_in_agentpool (self , agentpool ):
@@ -2402,6 +2543,146 @@ def common_update_fips_image(self):
24022543 with self .assertRaises (MutuallyExclusiveArgumentError ):
24032544 dec_3 .update_fips_image (agentpool_2 )
24042545
2546+ def common_update_upgrade_strategy (self ):
2547+ # Test case 1: No upgrade strategy provided (should not change agentpool)
2548+ dec_1 = AKSPreviewAgentPoolUpdateDecorator (
2549+ self .cmd ,
2550+ self .client ,
2551+ {},
2552+ self .resource_type ,
2553+ self .agentpool_decorator_mode ,
2554+ )
2555+ # fail on passing the wrong agentpool object
2556+ with self .assertRaises (CLIInternalError ):
2557+ dec_1 .update_upgrade_strategy (None )
2558+
2559+ agentpool_1 = self .create_initialized_agentpool_instance (
2560+ upgrade_strategy = "RollingUpdate"
2561+ )
2562+ dec_1 .context .attach_agentpool (agentpool_1 )
2563+ dec_agentpool_1 = dec_1 .update_upgrade_strategy (agentpool_1 )
2564+ ground_truth_agentpool_1 = self .create_initialized_agentpool_instance (
2565+ upgrade_strategy = "RollingUpdate"
2566+ )
2567+ self .assertEqual (dec_agentpool_1 , ground_truth_agentpool_1 )
2568+
2569+ # Test case 2: Update to BlueGreen upgrade strategy
2570+ dec_2 = AKSPreviewAgentPoolUpdateDecorator (
2571+ self .cmd ,
2572+ self .client ,
2573+ {"upgrade_strategy" : "BlueGreen" },
2574+ self .resource_type ,
2575+ self .agentpool_decorator_mode ,
2576+ )
2577+ agentpool_2 = self .create_initialized_agentpool_instance (
2578+ upgrade_strategy = "RollingUpdate"
2579+ )
2580+ dec_2 .context .attach_agentpool (agentpool_2 )
2581+ dec_agentpool_2 = dec_2 .update_upgrade_strategy (agentpool_2 )
2582+ ground_truth_agentpool_2 = self .create_initialized_agentpool_instance (
2583+ upgrade_strategy = "BlueGreen"
2584+ )
2585+ self .assertEqual (dec_agentpool_2 , ground_truth_agentpool_2 )
2586+
2587+ # Test case 3: Update to RollingUpdate upgrade strategy
2588+ dec_3 = AKSPreviewAgentPoolUpdateDecorator (
2589+ self .cmd ,
2590+ self .client ,
2591+ {"upgrade_strategy" : "RollingUpdate" },
2592+ self .resource_type ,
2593+ self .agentpool_decorator_mode ,
2594+ )
2595+ agentpool_3 = self .create_initialized_agentpool_instance (
2596+ upgrade_strategy = "BlueGreen"
2597+ )
2598+ dec_3 .context .attach_agentpool (agentpool_3 )
2599+ dec_agentpool_3 = dec_3 .update_upgrade_strategy (agentpool_3 )
2600+ ground_truth_agentpool_3 = self .create_initialized_agentpool_instance (
2601+ upgrade_strategy = "RollingUpdate"
2602+ )
2603+ self .assertEqual (dec_agentpool_3 , ground_truth_agentpool_3 )
2604+
2605+ def common_update_blue_green_upgrade_settings (self ):
2606+ # Test case 1: Update with no existing blue-green settings
2607+ dec_1 = AKSPreviewAgentPoolUpdateDecorator (
2608+ self .cmd ,
2609+ self .client ,
2610+ {
2611+ "drain_batch_size" : "3" ,
2612+ "drain_timeout_bg" : 10 ,
2613+ "batch_soak_duration" : 25 ,
2614+ "final_soak_duration" : 50 ,
2615+ },
2616+ self .resource_type ,
2617+ self .agentpool_decorator_mode ,
2618+ )
2619+ agentpool_1 = self .create_initialized_agentpool_instance ()
2620+ dec_1 .context .attach_agentpool (agentpool_1 )
2621+ dec_agentpool_1 = dec_1 .update_blue_green_upgrade_settings (agentpool_1 )
2622+
2623+ expected_blue_green_settings_1 = self .models .AgentPoolBlueGreenUpgradeSettings ()
2624+ expected_blue_green_settings_1 .drain_batch_size = "3"
2625+ expected_blue_green_settings_1 .drain_timeout_in_minutes = 10
2626+ expected_blue_green_settings_1 .batch_soak_duration_in_minutes = 25
2627+ expected_blue_green_settings_1 .final_soak_duration_in_minutes = 50
2628+
2629+ ground_truth_agentpool_1 = self .create_initialized_agentpool_instance (
2630+ upgrade_settings_blue_green = expected_blue_green_settings_1
2631+ )
2632+ self .assertEqual (dec_agentpool_1 , ground_truth_agentpool_1 )
2633+
2634+ # Test case 2: Update with existing blue-green settings (partial update)
2635+ existing_blue_green_settings = self .models .AgentPoolBlueGreenUpgradeSettings ()
2636+ existing_blue_green_settings .drain_batch_size = "5"
2637+ existing_blue_green_settings .drain_timeout_in_minutes = 15
2638+ existing_blue_green_settings .batch_soak_duration_in_minutes = 30
2639+ existing_blue_green_settings .final_soak_duration_in_minutes = 60
2640+
2641+ dec_2 = AKSPreviewAgentPoolUpdateDecorator (
2642+ self .cmd ,
2643+ self .client ,
2644+ {
2645+ "drain_timeout_bg" : 20 ,
2646+ "final_soak_duration" : 45 ,
2647+ },
2648+ self .resource_type ,
2649+ self .agentpool_decorator_mode ,
2650+ )
2651+ agentpool_2 = self .create_initialized_agentpool_instance (
2652+ upgrade_settings_blue_green = existing_blue_green_settings
2653+ )
2654+ dec_2 .context .attach_agentpool (agentpool_2 )
2655+ dec_agentpool_2 = dec_2 .update_blue_green_upgrade_settings (agentpool_2 )
2656+
2657+ expected_blue_green_settings_2 = self .models .AgentPoolBlueGreenUpgradeSettings ()
2658+ expected_blue_green_settings_2 .drain_batch_size = "5" # unchanged
2659+ expected_blue_green_settings_2 .drain_timeout_in_minutes = 20 # updated
2660+ expected_blue_green_settings_2 .batch_soak_duration_in_minutes = 30 # unchanged
2661+ expected_blue_green_settings_2 .final_soak_duration_in_minutes = 45 # updated
2662+
2663+ ground_truth_agentpool_2 = self .create_initialized_agentpool_instance (
2664+ upgrade_settings_blue_green = expected_blue_green_settings_2
2665+ )
2666+ self .assertEqual (dec_agentpool_2 , ground_truth_agentpool_2 )
2667+
2668+ # Test case 3: No blue-green parameters provided (no change)
2669+ dec_3 = AKSPreviewAgentPoolUpdateDecorator (
2670+ self .cmd ,
2671+ self .client ,
2672+ {},
2673+ self .resource_type ,
2674+ self .agentpool_decorator_mode ,
2675+ )
2676+ agentpool_3 = self .create_initialized_agentpool_instance (
2677+ upgrade_settings_blue_green = existing_blue_green_settings
2678+ )
2679+ dec_3 .context .attach_agentpool (agentpool_3 )
2680+ dec_agentpool_3 = dec_3 .update_blue_green_upgrade_settings (agentpool_3 )
2681+ ground_truth_agentpool_3 = self .create_initialized_agentpool_instance (
2682+ upgrade_settings_blue_green = existing_blue_green_settings
2683+ )
2684+ self .assertEqual (dec_agentpool_3 , ground_truth_agentpool_3 )
2685+
24052686
24062687class AKSPreviewAgentPoolUpdateDecoratorStandaloneModeTestCase (
24072688 AKSPreviewAgentPoolUpdateDecoratorCommonTestCase
@@ -2433,6 +2714,12 @@ def test_update_vtpm(self):
24332714 def test_update_fips_image (self ):
24342715 self .common_update_fips_image ()
24352716
2717+ def test_update_upgrade_strategy (self ):
2718+ self .common_update_upgrade_strategy ()
2719+
2720+ def test_update_blue_green_upgrade_settings (self ):
2721+ self .common_update_blue_green_upgrade_settings ()
2722+
24362723 def test_update_agentpool_profile_preview (self ):
24372724 import inspect
24382725
@@ -2516,6 +2803,12 @@ def test_update_vtpm(self):
25162803 def test_update_fips_image (self ):
25172804 self .common_update_fips_image ()
25182805
2806+ def test_update_upgrade_strategy (self ):
2807+ self .common_update_upgrade_strategy ()
2808+
2809+ def test_update_blue_green_upgrade_settings (self ):
2810+ self .common_update_blue_green_upgrade_settings ()
2811+
25192812 def test_update_agentpool_profile_preview (self ):
25202813 import inspect
25212814
0 commit comments