@@ -638,12 +638,16 @@ def test_validate_cluster_create_args_for_correct_super_slicing_args_pass(
638638 args = construct_args (
639639 super_slicing = True ,
640640 reservation = 'test-reservation/reservationBlocks/block' ,
641+ num_cubes = None ,
642+ num_slices = None ,
641643 )
642644
643645 _validate_cluster_create_args (args , SUPER_SLICING_SYSTEM )
644646 args = construct_args (
645647 super_slicing = True ,
646648 reservation = 'test-reservation/reservationBlocks/block/reservationSubBlocks/subblock' ,
649+ num_cubes = None ,
650+ num_slices = None ,
647651 )
648652 _validate_cluster_create_args (
649653 args , UserFacingNameToSystemCharacteristics ['tpu7x-128' ]
@@ -659,6 +663,8 @@ def test_validate_cluster_create_args_for_super_slicing_system_not_supported_thr
659663 args = construct_args (
660664 super_slicing = True ,
661665 reservation = 'test-reservation/reservationBlocks/block' ,
666+ num_cubes = None ,
667+ num_slices = None ,
662668 )
663669
664670 with pytest .raises (SystemExit ):
@@ -680,6 +686,8 @@ def test_validate_cluster_create_args_for_super_slicing_missing_reservation(
680686 args = construct_args (
681687 super_slicing = True ,
682688 reservation = None ,
689+ num_cubes = None ,
690+ num_slices = None ,
683691 )
684692
685693 with pytest .raises (SystemExit ):
@@ -699,6 +707,8 @@ def test_validate_cluster_create_args_for_super_slicing_reservation_no_blocks(
699707 args = construct_args (
700708 super_slicing = True ,
701709 reservation = 'reservation' ,
710+ num_cubes = None ,
711+ num_slices = None ,
702712 )
703713
704714 with pytest .raises (SystemExit ):
@@ -718,6 +728,8 @@ def test_validate_cluster_create_args_for_super_slicing_sparse_deployment_type_r
718728 args = construct_args (
719729 super_slicing = True ,
720730 reservation = 'test-reservation/reservationBlocks/block' ,
731+ num_cubes = None ,
732+ num_slices = None ,
721733 )
722734 mocks .commands_get_reservation_deployment_type .return_value = 'SPARSE'
723735
@@ -729,3 +741,73 @@ def test_validate_cluster_create_args_for_super_slicing_sparse_deployment_type_r
729741 'Refer to the documentation for more information on creating Cluster'
730742 in mocks .commands_print_mock .call_args [0 ][0 ]
731743 )
744+
745+
746+ def test_validate_cluster_create_args_forbids_num_cubes_without_superslicing (
747+ mocks : _Mocks ,
748+ ):
749+ FeatureFlags .SUPER_SLICING_ENABLED = True # enable the feature
750+ args = construct_args (
751+ super_slicing = False , # but disable the flag
752+ reservation = 'test-reservation/reservationBlocks/block' ,
753+ num_cubes = 1 ,
754+ num_slices = None ,
755+ )
756+
757+ with pytest .raises (SystemExit ):
758+ _validate_cluster_create_args (args , SUPER_SLICING_SYSTEM )
759+
760+ assert mocks .commands_print_mock .call_count == 1
761+ assert (
762+ '--num-cubes can only be used with --super-slicing'
763+ in mocks .commands_print_mock .call_args [0 ][0 ]
764+ )
765+
766+
767+ def test_validate_cluster_create_args_forbids_num_cubes_different_from_num_slices (
768+ mocks : _Mocks ,
769+ ):
770+ FeatureFlags .SUPER_SLICING_ENABLED = True
771+ args = construct_args (
772+ super_slicing = True ,
773+ reservation = 'test-reservation/reservationBlocks/block' ,
774+ num_cubes = 1 ,
775+ num_slices = 2 ,
776+ )
777+
778+ with pytest .raises (SystemExit ):
779+ _validate_cluster_create_args (args , SUPER_SLICING_SYSTEM )
780+
781+ assert mocks .commands_print_mock .call_count == 1
782+ assert (
783+ '--num-cubes must not be different from --num-slices'
784+ in mocks .commands_print_mock .call_args [0 ][0 ]
785+ )
786+
787+
788+ @pytest .mark .parametrize (
789+ 'num_cubes, num_slices, expected' ,
790+ [
791+ (None , None , 1 ),
792+ (3 , None , 3 ),
793+ (None , 3 , 3 ),
794+ (3 , 3 , 3 ),
795+ ],
796+ )
797+ def test_validate_cluster_create_args_sets_correct_num_slices (
798+ mocks : _Mocks ,
799+ num_cubes : int | None ,
800+ num_slices : int | None ,
801+ expected : int ,
802+ ):
803+ FeatureFlags .SUPER_SLICING_ENABLED = True
804+ args = construct_args (
805+ super_slicing = True ,
806+ reservation = 'test-reservation/reservationBlocks/block' ,
807+ num_cubes = num_cubes ,
808+ num_slices = num_slices ,
809+ )
810+
811+ _validate_cluster_create_args (args , SUPER_SLICING_SYSTEM )
812+
813+ assert args .num_slices == expected
0 commit comments