1818from unittest .mock import MagicMock , patch
1919import pytest
2020from ..core .system_characteristics import SystemCharacteristics
21- from .workload import _validate_sub_slicing_topology
21+ from .workload import _validate_sub_slicing_topology , _validate_sub_slicing_availability
22+ from packaging .version import Version
2223
2324
2425SYSTEM_CHARACTERISTICS = SystemCharacteristics (
@@ -40,7 +41,7 @@ def xpk_print(mocker):
4041
4142
4243def test_validate_sub_slicing_topology_exits_for_unsupported_topology (
43- xpk_print ,
44+ xpk_print : MagicMock ,
4445):
4546 with pytest .raises (SystemExit ):
4647 _validate_sub_slicing_topology (SYSTEM_CHARACTERISTICS , '2x1' )
@@ -50,7 +51,9 @@ def test_validate_sub_slicing_topology_exits_for_unsupported_topology(
5051 )
5152
5253
53- def test_validate_sub_slicing_topology_exits_for_too_large_topology (xpk_print ):
54+ def test_validate_sub_slicing_topology_exits_for_too_large_topology (
55+ xpk_print : MagicMock ,
56+ ):
5457 with pytest .raises (SystemExit ):
5558 _validate_sub_slicing_topology (SYSTEM_CHARACTERISTICS , '16x16' )
5659
@@ -64,6 +67,86 @@ def test_validate_sub_slicing_topology_does_nothing_for_supported_topology():
6467 _validate_sub_slicing_topology (SYSTEM_CHARACTERISTICS , '4x4' )
6568
6669
70+ def test_validate_sub_slicing_availability_exits_when_getting_topologies_fails (
71+ xpk_print : MagicMock , mocker
72+ ):
73+ mocker .patch (
74+ 'xpk.commands.workload.run_command_for_value' ,
75+ return_value = (1 , '' ),
76+ )
77+ with pytest .raises (SystemExit ):
78+ _validate_sub_slicing_availability ()
79+
80+ assert (
81+ 'Unable to validate sub-slicing support'
82+ in xpk_print .mock_calls [0 ].args [0 ]
83+ )
84+
85+
86+ def test_validate_sub_slicing_availability_exits_when_subslicing_topology_is_not_defined (
87+ xpk_print : MagicMock , mocker
88+ ):
89+ mocker .patch (
90+ 'xpk.commands.workload.run_command_for_value' ,
91+ return_value = (0 , '' ),
92+ )
93+ with pytest .raises (SystemExit ):
94+ _validate_sub_slicing_availability ()
95+
96+ assert (
97+ 'Cluster has not been not set up for Sub-slicing.'
98+ in xpk_print .mock_calls [0 ].args [0 ]
99+ )
100+
101+
102+ def test_validate_sub_slicing_availability_exits_when_kueue_version_cannot_be_determined (
103+ xpk_print : MagicMock , mocker
104+ ):
105+ mocker .patch (
106+ 'xpk.commands.workload.run_command_for_value' ,
107+ return_value = (0 , 'sub-slice-topology' ),
108+ )
109+ mocker .patch (
110+ 'xpk.commands.workload.KueueManager.get_installed_kueue_version' ,
111+ return_value = (1 , None ),
112+ )
113+ with pytest .raises (SystemExit ):
114+ _validate_sub_slicing_availability ()
115+
116+ assert 'Unable to validate sub-slicing' in xpk_print .mock_calls [0 ].args [0 ]
117+
118+
119+ def test_validate_sub_slicing_availability_exits_when_kueue_version_does_not_meet_minimum_requirements (
120+ xpk_print : MagicMock , mocker
121+ ):
122+ mocker .patch (
123+ 'xpk.commands.workload.run_command_for_value' ,
124+ return_value = (0 , 'sub-slice-topology' ),
125+ )
126+ mocker .patch (
127+ 'xpk.commands.workload.KueueManager.get_installed_kueue_version' ,
128+ return_value = (0 , Version ('0.0.0' )),
129+ )
130+ with pytest .raises (SystemExit ):
131+ _validate_sub_slicing_availability ()
132+
133+ assert 'The minimal required version is' in xpk_print .mock_calls [0 ].args [0 ]
134+
135+
136+ def test_validate_sub_slicing_availability_does_nothing_when_cluster_is_correctly_configured_for_subslicing (
137+ mocker ,
138+ ):
139+ mocker .patch (
140+ 'xpk.commands.workload.run_command_for_value' ,
141+ return_value = (0 , 'sub-slice-topology' ),
142+ )
143+ mocker .patch (
144+ 'xpk.commands.workload.KueueManager.get_installed_kueue_version' ,
145+ return_value = (0 , Version ('0.13.0' )),
146+ )
147+ _validate_sub_slicing_availability ()
148+
149+
67150@patch ('xpk.commands.common.xpk_print' )
68151def test_validate_sub_slicing_topology_fails_for_unsupported_system (
69152 common_xpk_print : MagicMock ,
0 commit comments