Skip to content

Commit 38ff1f9

Browse files
committed
More tests
1 parent 53fbdc4 commit 38ff1f9

1 file changed

Lines changed: 337 additions & 0 deletions

File tree

src/aks-preview/azext_aks_preview/tests/latest/test_managed_cluster_decorator.py

Lines changed: 337 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4982,6 +4982,161 @@ def test_get_container_network_logs_legacy_retina_flow_logs_param(self):
49824982
result = ctx.get_container_network_logs(mc)
49834983
self.assertTrue(result)
49844984

4985+
def test_get_container_network_logs_with_azure_monitor_logs(self):
4986+
"""Test get_container_network_logs succeeds when monitoring is enabled via enable_azure_monitor_logs param."""
4987+
ctx = AKSPreviewManagedClusterContext(
4988+
self.cmd,
4989+
AKSManagedClusterParamDict({
4990+
"enable_container_network_logs": True,
4991+
"enable_acns": True,
4992+
"enable_azure_monitor_logs": True,
4993+
}),
4994+
self.models,
4995+
decorator_mode=DecoratorMode.CREATE,
4996+
)
4997+
mc = self.models.ManagedCluster(
4998+
location="test_location",
4999+
network_profile=self.models.ContainerServiceNetworkProfile(
5000+
advanced_networking=self.models.AdvancedNetworking(
5001+
enabled=True,
5002+
),
5003+
),
5004+
)
5005+
ctx.attach_mc(mc)
5006+
result = ctx.get_container_network_logs(mc)
5007+
self.assertTrue(result)
5008+
5009+
def test_get_container_network_logs_legacy_disable_retina_flow_logs(self):
5010+
"""Test get_container_network_logs returns False when legacy disable_retina_flow_logs is specified."""
5011+
ctx = AKSPreviewManagedClusterContext(
5012+
self.cmd,
5013+
AKSManagedClusterParamDict({
5014+
"disable_retina_flow_logs": True,
5015+
}),
5016+
self.models,
5017+
decorator_mode=DecoratorMode.UPDATE,
5018+
)
5019+
mc = self.models.ManagedCluster(location="test_location")
5020+
ctx.attach_mc(mc)
5021+
result = ctx.get_container_network_logs(mc)
5022+
self.assertFalse(result)
5023+
5024+
def test_get_container_network_logs_with_acns_already_on_mc(self):
5025+
"""Test get_container_network_logs succeeds when ACNS is already enabled on mc (not via raw param)."""
5026+
ctx = AKSPreviewManagedClusterContext(
5027+
self.cmd,
5028+
AKSManagedClusterParamDict({
5029+
"enable_container_network_logs": True,
5030+
"enable_addons": "monitoring",
5031+
}),
5032+
self.models,
5033+
decorator_mode=DecoratorMode.UPDATE,
5034+
)
5035+
mc = self.models.ManagedCluster(
5036+
location="test_location",
5037+
network_profile=self.models.ContainerServiceNetworkProfile(
5038+
advanced_networking=self.models.AdvancedNetworking(
5039+
enabled=True,
5040+
),
5041+
),
5042+
)
5043+
ctx.attach_mc(mc)
5044+
result = ctx.get_container_network_logs(mc)
5045+
self.assertTrue(result)
5046+
5047+
def test_get_enable_high_log_scale_mode_cnl_with_explicit_true(self):
5048+
"""Test when user enables both CNL and HLSM=True explicitly. Should succeed and return True."""
5049+
ctx = AKSPreviewManagedClusterContext(
5050+
self.cmd,
5051+
AKSManagedClusterParamDict({
5052+
"enable_container_network_logs": True,
5053+
"enable_high_log_scale_mode": True,
5054+
"enable_acns": True,
5055+
"enable_addons": "monitoring",
5056+
}),
5057+
self.models,
5058+
decorator_mode=DecoratorMode.CREATE,
5059+
)
5060+
result = ctx.get_enable_high_log_scale_mode()
5061+
self.assertTrue(result)
5062+
5063+
def test_get_enable_high_log_scale_mode_update_explicit_false_without_cnl(self):
5064+
"""Test that HLSM=False without CNL returns False in update mode without error."""
5065+
ctx = AKSPreviewManagedClusterContext(
5066+
self.cmd,
5067+
AKSManagedClusterParamDict({
5068+
"enable_high_log_scale_mode": False,
5069+
}),
5070+
self.models,
5071+
decorator_mode=DecoratorMode.UPDATE,
5072+
)
5073+
mc = self.models.ManagedCluster(
5074+
location="test_location",
5075+
addon_profiles={
5076+
"omsagent": self.models.ManagedClusterAddonProfile(
5077+
enabled=True,
5078+
)
5079+
},
5080+
)
5081+
ctx.attach_mc(mc)
5082+
result = ctx.get_enable_high_log_scale_mode()
5083+
self.assertFalse(result)
5084+
5085+
def test_get_enable_high_log_scale_mode_update_error_explicit_false_with_cnl(self):
5086+
"""Test error when user explicitly disables HLSM with CNL enabled in update mode."""
5087+
ctx = AKSPreviewManagedClusterContext(
5088+
self.cmd,
5089+
AKSManagedClusterParamDict({
5090+
"enable_container_network_logs": True,
5091+
"enable_high_log_scale_mode": False,
5092+
}),
5093+
self.models,
5094+
decorator_mode=DecoratorMode.UPDATE,
5095+
)
5096+
mc = self.models.ManagedCluster(
5097+
location="test_location",
5098+
network_profile=self.models.ContainerServiceNetworkProfile(
5099+
advanced_networking=self.models.AdvancedNetworking(
5100+
enabled=True,
5101+
),
5102+
),
5103+
addon_profiles={
5104+
"omsagent": self.models.ManagedClusterAddonProfile(
5105+
enabled=True,
5106+
)
5107+
},
5108+
)
5109+
ctx.attach_mc(mc)
5110+
with self.assertRaises(MutuallyExclusiveArgumentError):
5111+
ctx.get_enable_high_log_scale_mode()
5112+
5113+
def test_get_enable_high_log_scale_mode_update_monitoring_camelcase_key(self):
5114+
"""Test auto-enable HLSM in update mode when monitoring uses camelCase 'omsAgent' key."""
5115+
ctx = AKSPreviewManagedClusterContext(
5116+
self.cmd,
5117+
AKSManagedClusterParamDict({
5118+
"enable_container_network_logs": True,
5119+
}),
5120+
self.models,
5121+
decorator_mode=DecoratorMode.UPDATE,
5122+
)
5123+
mc = self.models.ManagedCluster(
5124+
location="test_location",
5125+
network_profile=self.models.ContainerServiceNetworkProfile(
5126+
advanced_networking=self.models.AdvancedNetworking(
5127+
enabled=True,
5128+
),
5129+
),
5130+
addon_profiles={
5131+
"omsAgent": self.models.ManagedClusterAddonProfile(
5132+
enabled=True,
5133+
)
5134+
},
5135+
)
5136+
ctx.attach_mc(mc)
5137+
result = ctx.get_enable_high_log_scale_mode()
5138+
self.assertTrue(result)
5139+
49855140
def test_get_enable_default_domain(self):
49865141
# default value
49875142
ctx_1 = AKSPreviewManagedClusterContext(
@@ -5666,6 +5821,65 @@ def test_set_up_addon_profiles_auto_enables_high_log_scale_mode_with_cnl(self):
56665821
# Verify high log scale mode is auto-enabled
56675822
self.assertTrue(dec.context.get_enable_high_log_scale_mode())
56685823

5824+
def test_set_up_addon_profiles_cnl_and_hlsm_flag_without_value(self):
5825+
"""Regression test: CREATE with --enable-container-network-logs --enable-acns
5826+
--enable-addons monitoring --enable-high-log-scale-mode (flag without boolean value).
5827+
5828+
When --enable-high-log-scale-mode is passed without a value, get_three_state_flag()
5829+
sets it to True via nargs='?'. This must NOT trigger the 'Container network logs
5830+
requires --enable-acns...' error when ACNS and monitoring are both provided.
5831+
"""
5832+
dec = AKSPreviewManagedClusterCreateDecorator(
5833+
self.cmd,
5834+
self.client,
5835+
{
5836+
"enable_addons": "monitoring",
5837+
"enable_container_network_logs": True,
5838+
"enable_high_log_scale_mode": True, # simulates --enable-high-log-scale-mode without value
5839+
"enable_acns": True,
5840+
"workspace_resource_id": "test_workspace_resource_id",
5841+
"enable_msi_auth_for_monitoring": True,
5842+
"enable_syslog": False,
5843+
"data_collection_settings": None,
5844+
},
5845+
CUSTOM_MGMT_AKS_PREVIEW,
5846+
)
5847+
network_profile = self.models.ContainerServiceNetworkProfile(
5848+
advanced_networking=self.models.AdvancedNetworking(enabled=True),
5849+
)
5850+
mc = self.models.ManagedCluster(location="test_location", network_profile=network_profile)
5851+
dec.context.attach_mc(mc)
5852+
dec.context.set_intermediate("subscription_id", "test_subscription_id")
5853+
external_functions = dec.context.external_functions
5854+
with patch.object(external_functions, 'ensure_container_insights_for_monitoring', return_value=None):
5855+
# Should NOT raise InvalidArgumentValueError
5856+
dec_mc = dec.set_up_addon_profiles(mc)
5857+
self.assertTrue(dec.context.get_enable_high_log_scale_mode())
5858+
5859+
def test_set_up_addon_profiles_hlsm_only_no_cnl(self):
5860+
"""Test that enabling HLSM without CNL does not set enableRetinaNetworkFlags in config."""
5861+
dec = AKSPreviewManagedClusterCreateDecorator(
5862+
self.cmd,
5863+
self.client,
5864+
{
5865+
"enable_addons": "monitoring",
5866+
"enable_high_log_scale_mode": True,
5867+
"workspace_resource_id": "test_workspace_resource_id",
5868+
"enable_msi_auth_for_monitoring": True,
5869+
"enable_syslog": False,
5870+
"data_collection_settings": None,
5871+
},
5872+
CUSTOM_MGMT_AKS_PREVIEW,
5873+
)
5874+
mc = self.models.ManagedCluster(location="test_location")
5875+
dec.context.attach_mc(mc)
5876+
dec.context.set_intermediate("subscription_id", "test_subscription_id")
5877+
external_functions = dec.context.external_functions
5878+
with patch.object(external_functions, 'ensure_container_insights_for_monitoring', return_value=None):
5879+
dec_mc = dec.set_up_addon_profiles(mc)
5880+
# enableRetinaNetworkFlags should NOT be set when CNL is not enabled
5881+
omsagent_config = dec_mc.addon_profiles[CONST_MONITORING_ADDON_NAME].config
5882+
self.assertNotIn("enableRetinaNetworkFlags", omsagent_config)
56695883

56705884
def test_set_up_http_proxy_config(self):
56715885
dec_1 = AKSPreviewManagedClusterCreateDecorator(
@@ -13401,6 +13615,129 @@ def test_update_standalone_high_log_scale_mode(self):
1340113615
dec_8.update_monitoring_profile_flow_logs(mc_8)
1340213616
self.assertTrue(dec_8.context.get_intermediate("monitoring_addon_postprocessing_required"))
1340313617

13618+
def test_update_monitoring_profile_flow_logs_no_flags_noop(self):
13619+
"""Test that update_monitoring_profile_flow_logs is a no-op when no CNL/HLSM flags are specified."""
13620+
dec = AKSPreviewManagedClusterUpdateDecorator(
13621+
self.cmd,
13622+
self.client,
13623+
{},
13624+
CUSTOM_MGMT_AKS_PREVIEW,
13625+
)
13626+
mc = self.models.ManagedCluster(
13627+
location="test_location",
13628+
addon_profiles={
13629+
"omsagent": self.models.ManagedClusterAddonProfile(
13630+
enabled=True,
13631+
config={"enableRetinaNetworkFlags": "True"},
13632+
)
13633+
},
13634+
)
13635+
dec.context.attach_mc(mc)
13636+
dec_mc = dec.update_monitoring_profile_flow_logs(mc)
13637+
# Existing config should remain unchanged
13638+
self.assertEqual(
13639+
dec_mc.addon_profiles["omsagent"].config["enableRetinaNetworkFlags"],
13640+
"True",
13641+
)
13642+
self.assertFalse(
13643+
dec.context.get_intermediate("monitoring_addon_postprocessing_required", default_value=False)
13644+
)
13645+
13646+
def test_update_enable_cnl_with_azure_monitor_logs_on_cluster(self):
13647+
"""Test enabling CNL on update when monitoring was enabled via enable_azure_monitor_logs on existing cluster."""
13648+
dec = AKSPreviewManagedClusterUpdateDecorator(
13649+
self.cmd,
13650+
self.client,
13651+
{
13652+
"enable_container_network_logs": True,
13653+
"enable_azure_monitor_logs": True,
13654+
},
13655+
CUSTOM_MGMT_AKS_PREVIEW,
13656+
)
13657+
mc = self.models.ManagedCluster(
13658+
location="test_location",
13659+
network_profile=self.models.ContainerServiceNetworkProfile(
13660+
advanced_networking=self.models.AdvancedNetworking(
13661+
enabled=True,
13662+
),
13663+
),
13664+
addon_profiles={
13665+
"omsagent": self.models.ManagedClusterAddonProfile(
13666+
enabled=True,
13667+
)
13668+
},
13669+
)
13670+
dec.context.attach_mc(mc)
13671+
dec_mc = dec.update_monitoring_profile_flow_logs(mc)
13672+
self.assertEqual(
13673+
dec_mc.addon_profiles["omsagent"].config["enableRetinaNetworkFlags"],
13674+
"True",
13675+
)
13676+
self.assertTrue(dec.context.get_intermediate("monitoring_addon_postprocessing_required"))
13677+
13678+
def test_update_cnl_explicit_true_hlsm_with_prerequisites(self):
13679+
"""Test enabling CNL + HLSM=True explicitly on update with all prerequisites met."""
13680+
dec = AKSPreviewManagedClusterUpdateDecorator(
13681+
self.cmd,
13682+
self.client,
13683+
{
13684+
"enable_container_network_logs": True,
13685+
"enable_high_log_scale_mode": True,
13686+
},
13687+
CUSTOM_MGMT_AKS_PREVIEW,
13688+
)
13689+
mc = self.models.ManagedCluster(
13690+
location="test_location",
13691+
network_profile=self.models.ContainerServiceNetworkProfile(
13692+
advanced_networking=self.models.AdvancedNetworking(
13693+
enabled=True,
13694+
),
13695+
),
13696+
addon_profiles={
13697+
"omsagent": self.models.ManagedClusterAddonProfile(
13698+
enabled=True,
13699+
config={
13700+
CONST_MONITORING_USING_AAD_MSI_AUTH: "true",
13701+
}
13702+
)
13703+
},
13704+
)
13705+
dec.context.attach_mc(mc)
13706+
dec_mc = dec.update_monitoring_profile_flow_logs(mc)
13707+
self.assertEqual(
13708+
dec_mc.addon_profiles["omsagent"].config["enableRetinaNetworkFlags"],
13709+
"True",
13710+
)
13711+
self.assertTrue(dec.context.get_enable_high_log_scale_mode())
13712+
self.assertTrue(dec.context.get_intermediate("monitoring_addon_postprocessing_required"))
13713+
13714+
def test_update_disable_hlsm_standalone_no_postprocessing(self):
13715+
"""Test that disabling HLSM standalone (no CNL flag) does not trigger postprocessing."""
13716+
dec = AKSPreviewManagedClusterUpdateDecorator(
13717+
self.cmd,
13718+
self.client,
13719+
{
13720+
"enable_high_log_scale_mode": False,
13721+
},
13722+
CUSTOM_MGMT_AKS_PREVIEW,
13723+
)
13724+
mc = self.models.ManagedCluster(
13725+
location="test_location",
13726+
addon_profiles={
13727+
"omsagent": self.models.ManagedClusterAddonProfile(
13728+
enabled=True,
13729+
config={
13730+
CONST_MONITORING_USING_AAD_MSI_AUTH: "true",
13731+
}
13732+
)
13733+
},
13734+
)
13735+
dec.context.attach_mc(mc)
13736+
dec.update_monitoring_profile_flow_logs(mc)
13737+
self.assertFalse(
13738+
dec.context.get_intermediate("monitoring_addon_postprocessing_required", default_value=False)
13739+
)
13740+
1340413741
def test_update_node_provisioning_profile(self):
1340513742
dec_0 = AKSPreviewManagedClusterUpdateDecorator(
1340613743
self.cmd,

0 commit comments

Comments
 (0)