@@ -182,6 +182,95 @@ def test_is_kubernetes_version_compatible_default_versions(self):
182182 self .assertTrue (is_kubernetes_version_compatible ((1 , 24 ), (0 , 0 )))
183183 self .assertTrue (is_kubernetes_version_compatible ((0 , 0 ), (0 , 0 )))
184184
185+ @patch ('click.secho' )
186+ @patch ('kubernetes.client.VersionApi' )
187+ @patch ('sagemaker.hyperpod.common.utils.kubernetes_client_version' , '12.0.0' )
188+ def test_verify_kubernetes_version_compatibility_incompatible_min_version (self , mock_version_api , mock_secho ):
189+ """Test verify_kubernetes_version_compatibility with incompatible minimum version"""
190+ # Mock server version info with minimum compatibility requirements
191+ mock_server_info = MagicMock ()
192+ mock_server_info .major = '1'
193+ mock_server_info .minor = '28'
194+ mock_server_info .min_compatibility_major = '1'
195+ mock_server_info .min_compatibility_minor = '25'
196+
197+ mock_version_api_instance = MagicMock ()
198+ mock_version_api_instance .get_code .return_value = mock_server_info
199+ mock_version_api .return_value = mock_version_api_instance
200+
201+ mock_logger = MagicMock ()
202+
203+ from sagemaker .hyperpod .common .utils import verify_kubernetes_version_compatibility
204+ result = verify_kubernetes_version_compatibility (mock_logger )
205+
206+ # Should return False for incompatible versions
207+ self .assertFalse (result )
208+
209+ # Should call click.secho with yellow color for warning
210+ mock_secho .assert_called_once ()
211+ call_args = mock_secho .call_args
212+ self .assertIn ('WARNING:' , call_args [0 ][0 ])
213+ self .assertIn ('1.16 is incompatible with server 1.28' , call_args [0 ][0 ])
214+ self .assertEqual (call_args [1 ]['fg' ], 'yellow' )
215+
216+ @patch ('click.secho' )
217+ @patch ('kubernetes.client.VersionApi' )
218+ @patch ('sagemaker.hyperpod.common.utils.kubernetes_client_version' , '12.0.0' )
219+ def test_verify_kubernetes_version_compatibility_incompatible_standard_policy (self , mock_version_api , mock_secho ):
220+ """Test verify_kubernetes_version_compatibility with standard policy incompatibility"""
221+ # Mock server version info without minimum compatibility requirements
222+ mock_server_info = MagicMock ()
223+ mock_server_info .major = '1'
224+ mock_server_info .minor = '28'
225+ mock_server_info .min_compatibility_major = None
226+ mock_server_info .min_compatibility_minor = None
227+
228+ mock_version_api_instance = MagicMock ()
229+ mock_version_api_instance .get_code .return_value = mock_server_info
230+ mock_version_api .return_value = mock_version_api_instance
231+
232+ mock_logger = MagicMock ()
233+
234+ from sagemaker .hyperpod .common .utils import verify_kubernetes_version_compatibility
235+ result = verify_kubernetes_version_compatibility (mock_logger )
236+
237+ # Should return False for incompatible versions
238+ self .assertFalse (result )
239+
240+ # Should call click.secho with yellow color for warning
241+ mock_secho .assert_called_once ()
242+ call_args = mock_secho .call_args
243+ self .assertIn ('WARNING:' , call_args [0 ][0 ])
244+ self .assertIn ('1.16 is incompatible with server 1.28' , call_args [0 ][0 ])
245+ self .assertEqual (call_args [1 ]['fg' ], 'yellow' )
246+
247+ @patch ('click.secho' )
248+ @patch ('kubernetes.client.VersionApi' )
249+ @patch ('sagemaker.hyperpod.common.utils.kubernetes_client_version' , '24.0.0' )
250+ def test_verify_kubernetes_version_compatibility_compatible_no_warning (self , mock_version_api , mock_secho ):
251+ """Test verify_kubernetes_version_compatibility with compatible versions - no warning should show"""
252+ # Mock server version info with compatible version
253+ mock_server_info = MagicMock ()
254+ mock_server_info .major = '1'
255+ mock_server_info .minor = '24'
256+ mock_server_info .min_compatibility_major = None
257+ mock_server_info .min_compatibility_minor = None
258+
259+ mock_version_api_instance = MagicMock ()
260+ mock_version_api_instance .get_code .return_value = mock_server_info
261+ mock_version_api .return_value = mock_version_api_instance
262+
263+ mock_logger = MagicMock ()
264+
265+ from sagemaker .hyperpod .common .utils import verify_kubernetes_version_compatibility
266+ result = verify_kubernetes_version_compatibility (mock_logger )
267+
268+ # Should return True for compatible versions
269+ self .assertTrue (result )
270+
271+ # Should NOT call click.secho since no warning needed
272+ mock_secho .assert_not_called ()
273+
185274 def test_is_eks_orchestrator_true (self ):
186275 mock_client = MagicMock ()
187276 mock_client .describe_cluster .return_value = {"Orchestrator" : {"Eks" : {}}}
0 commit comments