Skip to content

Commit 5475280

Browse files
committed
More tests
1 parent 6225c52 commit 5475280

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(
@@ -5609,6 +5764,65 @@ def test_set_up_addon_profiles_auto_enables_high_log_scale_mode_with_cnl(self):
56095764
# Verify high log scale mode is auto-enabled
56105765
self.assertTrue(dec.context.get_enable_high_log_scale_mode())
56115766

5767+
def test_set_up_addon_profiles_cnl_and_hlsm_flag_without_value(self):
5768+
"""Regression test: CREATE with --enable-container-network-logs --enable-acns
5769+
--enable-addons monitoring --enable-high-log-scale-mode (flag without boolean value).
5770+
5771+
When --enable-high-log-scale-mode is passed without a value, get_three_state_flag()
5772+
sets it to True via nargs='?'. This must NOT trigger the 'Container network logs
5773+
requires --enable-acns...' error when ACNS and monitoring are both provided.
5774+
"""
5775+
dec = AKSPreviewManagedClusterCreateDecorator(
5776+
self.cmd,
5777+
self.client,
5778+
{
5779+
"enable_addons": "monitoring",
5780+
"enable_container_network_logs": True,
5781+
"enable_high_log_scale_mode": True, # simulates --enable-high-log-scale-mode without value
5782+
"enable_acns": True,
5783+
"workspace_resource_id": "test_workspace_resource_id",
5784+
"enable_msi_auth_for_monitoring": True,
5785+
"enable_syslog": False,
5786+
"data_collection_settings": None,
5787+
},
5788+
CUSTOM_MGMT_AKS_PREVIEW,
5789+
)
5790+
network_profile = self.models.ContainerServiceNetworkProfile(
5791+
advanced_networking=self.models.AdvancedNetworking(enabled=True),
5792+
)
5793+
mc = self.models.ManagedCluster(location="test_location", network_profile=network_profile)
5794+
dec.context.attach_mc(mc)
5795+
dec.context.set_intermediate("subscription_id", "test_subscription_id")
5796+
external_functions = dec.context.external_functions
5797+
with patch.object(external_functions, 'ensure_container_insights_for_monitoring', return_value=None):
5798+
# Should NOT raise InvalidArgumentValueError
5799+
dec_mc = dec.set_up_addon_profiles(mc)
5800+
self.assertTrue(dec.context.get_enable_high_log_scale_mode())
5801+
5802+
def test_set_up_addon_profiles_hlsm_only_no_cnl(self):
5803+
"""Test that enabling HLSM without CNL does not set enableRetinaNetworkFlags in config."""
5804+
dec = AKSPreviewManagedClusterCreateDecorator(
5805+
self.cmd,
5806+
self.client,
5807+
{
5808+
"enable_addons": "monitoring",
5809+
"enable_high_log_scale_mode": True,
5810+
"workspace_resource_id": "test_workspace_resource_id",
5811+
"enable_msi_auth_for_monitoring": True,
5812+
"enable_syslog": False,
5813+
"data_collection_settings": None,
5814+
},
5815+
CUSTOM_MGMT_AKS_PREVIEW,
5816+
)
5817+
mc = self.models.ManagedCluster(location="test_location")
5818+
dec.context.attach_mc(mc)
5819+
dec.context.set_intermediate("subscription_id", "test_subscription_id")
5820+
external_functions = dec.context.external_functions
5821+
with patch.object(external_functions, 'ensure_container_insights_for_monitoring', return_value=None):
5822+
dec_mc = dec.set_up_addon_profiles(mc)
5823+
# enableRetinaNetworkFlags should NOT be set when CNL is not enabled
5824+
omsagent_config = dec_mc.addon_profiles[CONST_MONITORING_ADDON_NAME].config
5825+
self.assertNotIn("enableRetinaNetworkFlags", omsagent_config)
56125826

56135827
def test_set_up_http_proxy_config(self):
56145828
dec_1 = AKSPreviewManagedClusterCreateDecorator(
@@ -13309,6 +13523,129 @@ def test_update_standalone_high_log_scale_mode(self):
1330913523
dec_8.update_monitoring_profile_flow_logs(mc_8)
1331013524
self.assertTrue(dec_8.context.get_intermediate("monitoring_addon_postprocessing_required"))
1331113525

13526+
def test_update_monitoring_profile_flow_logs_no_flags_noop(self):
13527+
"""Test that update_monitoring_profile_flow_logs is a no-op when no CNL/HLSM flags are specified."""
13528+
dec = AKSPreviewManagedClusterUpdateDecorator(
13529+
self.cmd,
13530+
self.client,
13531+
{},
13532+
CUSTOM_MGMT_AKS_PREVIEW,
13533+
)
13534+
mc = self.models.ManagedCluster(
13535+
location="test_location",
13536+
addon_profiles={
13537+
"omsagent": self.models.ManagedClusterAddonProfile(
13538+
enabled=True,
13539+
config={"enableRetinaNetworkFlags": "True"},
13540+
)
13541+
},
13542+
)
13543+
dec.context.attach_mc(mc)
13544+
dec_mc = dec.update_monitoring_profile_flow_logs(mc)
13545+
# Existing config should remain unchanged
13546+
self.assertEqual(
13547+
dec_mc.addon_profiles["omsagent"].config["enableRetinaNetworkFlags"],
13548+
"True",
13549+
)
13550+
self.assertFalse(
13551+
dec.context.get_intermediate("monitoring_addon_postprocessing_required", default_value=False)
13552+
)
13553+
13554+
def test_update_enable_cnl_with_azure_monitor_logs_on_cluster(self):
13555+
"""Test enabling CNL on update when monitoring was enabled via enable_azure_monitor_logs on existing cluster."""
13556+
dec = AKSPreviewManagedClusterUpdateDecorator(
13557+
self.cmd,
13558+
self.client,
13559+
{
13560+
"enable_container_network_logs": True,
13561+
"enable_azure_monitor_logs": True,
13562+
},
13563+
CUSTOM_MGMT_AKS_PREVIEW,
13564+
)
13565+
mc = self.models.ManagedCluster(
13566+
location="test_location",
13567+
network_profile=self.models.ContainerServiceNetworkProfile(
13568+
advanced_networking=self.models.AdvancedNetworking(
13569+
enabled=True,
13570+
),
13571+
),
13572+
addon_profiles={
13573+
"omsagent": self.models.ManagedClusterAddonProfile(
13574+
enabled=True,
13575+
)
13576+
},
13577+
)
13578+
dec.context.attach_mc(mc)
13579+
dec_mc = dec.update_monitoring_profile_flow_logs(mc)
13580+
self.assertEqual(
13581+
dec_mc.addon_profiles["omsagent"].config["enableRetinaNetworkFlags"],
13582+
"True",
13583+
)
13584+
self.assertTrue(dec.context.get_intermediate("monitoring_addon_postprocessing_required"))
13585+
13586+
def test_update_cnl_explicit_true_hlsm_with_prerequisites(self):
13587+
"""Test enabling CNL + HLSM=True explicitly on update with all prerequisites met."""
13588+
dec = AKSPreviewManagedClusterUpdateDecorator(
13589+
self.cmd,
13590+
self.client,
13591+
{
13592+
"enable_container_network_logs": True,
13593+
"enable_high_log_scale_mode": True,
13594+
},
13595+
CUSTOM_MGMT_AKS_PREVIEW,
13596+
)
13597+
mc = self.models.ManagedCluster(
13598+
location="test_location",
13599+
network_profile=self.models.ContainerServiceNetworkProfile(
13600+
advanced_networking=self.models.AdvancedNetworking(
13601+
enabled=True,
13602+
),
13603+
),
13604+
addon_profiles={
13605+
"omsagent": self.models.ManagedClusterAddonProfile(
13606+
enabled=True,
13607+
config={
13608+
CONST_MONITORING_USING_AAD_MSI_AUTH: "true",
13609+
}
13610+
)
13611+
},
13612+
)
13613+
dec.context.attach_mc(mc)
13614+
dec_mc = dec.update_monitoring_profile_flow_logs(mc)
13615+
self.assertEqual(
13616+
dec_mc.addon_profiles["omsagent"].config["enableRetinaNetworkFlags"],
13617+
"True",
13618+
)
13619+
self.assertTrue(dec.context.get_enable_high_log_scale_mode())
13620+
self.assertTrue(dec.context.get_intermediate("monitoring_addon_postprocessing_required"))
13621+
13622+
def test_update_disable_hlsm_standalone_no_postprocessing(self):
13623+
"""Test that disabling HLSM standalone (no CNL flag) does not trigger postprocessing."""
13624+
dec = AKSPreviewManagedClusterUpdateDecorator(
13625+
self.cmd,
13626+
self.client,
13627+
{
13628+
"enable_high_log_scale_mode": False,
13629+
},
13630+
CUSTOM_MGMT_AKS_PREVIEW,
13631+
)
13632+
mc = self.models.ManagedCluster(
13633+
location="test_location",
13634+
addon_profiles={
13635+
"omsagent": self.models.ManagedClusterAddonProfile(
13636+
enabled=True,
13637+
config={
13638+
CONST_MONITORING_USING_AAD_MSI_AUTH: "true",
13639+
}
13640+
)
13641+
},
13642+
)
13643+
dec.context.attach_mc(mc)
13644+
dec.update_monitoring_profile_flow_logs(mc)
13645+
self.assertFalse(
13646+
dec.context.get_intermediate("monitoring_addon_postprocessing_required", default_value=False)
13647+
)
13648+
1331213649
def test_update_node_provisioning_profile(self):
1331313650
dec_0 = AKSPreviewManagedClusterUpdateDecorator(
1331413651
self.cmd,

0 commit comments

Comments
 (0)