@@ -225,6 +225,27 @@ func (m *MockMachineTypeClient) GetMachineType(project, zone, machineType string
225225 return nil , fmt .Errorf ("mock not configured" )
226226}
227227
228+ func injectDefaultMocksForShorthand (mockResponses map [string ][]shell.CommandResult ) {
229+ if _ , ok := mockResponses ["kubectl get resourceflavors.kueue.x-k8s.io" ]; ! ok {
230+ mockResponses ["kubectl get resourceflavors.kueue.x-k8s.io" ] = []shell.CommandResult {
231+ {ExitCode : 0 , Stdout : "" },
232+ {ExitCode : 0 , Stdout : "" },
233+ }
234+ }
235+ if _ , ok := mockResponses ["kubectl get nodes -o jsonpath" ]; ! ok {
236+ mockResponses ["kubectl get nodes -o jsonpath" ] = []shell.CommandResult {
237+ {ExitCode : 0 , Stdout : "16x16\n " },
238+ {ExitCode : 0 , Stdout : "16x16\n " },
239+ }
240+ }
241+ if _ , ok := mockResponses ["kubectl get topologies.kueue.x-k8s.io -o json" ]; ! ok {
242+ mockResponses ["kubectl get topologies.kueue.x-k8s.io -o json" ] = []shell.CommandResult {
243+ {ExitCode : 0 , Stdout : `{"items":[{"spec":{"levels":[{"nodeLabel":"cloud.google.com/gke-tpu-slice-4x8-id"}]}}]}` },
244+ {ExitCode : 0 , Stdout : `{"items":[{"spec":{"levels":[{"nodeLabel":"cloud.google.com/gke-tpu-slice-4x8-id"}]}}]}` },
245+ }
246+ }
247+ }
248+
228249func TestResolveAcceleratorShorthand (t * testing.T ) {
229250 setupMockMachineConfig (t )
230251
@@ -338,12 +359,7 @@ func TestResolveAcceleratorShorthand(t *testing.T) {
338359 mockResponses = make (map [string ][]shell.CommandResult )
339360 }
340361 // Add default mocks for topology discovery if not provided
341- if _ , ok := mockResponses ["kubectl get resourceflavors" ]; ! ok {
342- mockResponses ["kubectl get resourceflavors" ] = []shell.CommandResult {{ExitCode : 0 , Stdout : "" }}
343- }
344- if _ , ok := mockResponses ["kubectl get nodes -o jsonpath" ]; ! ok {
345- mockResponses ["kubectl get nodes -o jsonpath" ] = []shell.CommandResult {{ExitCode : 0 , Stdout : "16x16\n " }}
346- }
362+ injectDefaultMocksForShorthand (mockResponses )
347363
348364 mockExecutor := NewMockExecutor (mockResponses )
349365 orc := newTestGKEOrchestrator (mockExecutor )
@@ -439,7 +455,7 @@ func TestVerifyStaticSlicingActive(t *testing.T) {
439455 requestedTopo : "2x2" ,
440456 mockResponses : map [string ][]shell.CommandResult {
441457 "kubectl get topologies.kueue.x-k8s.io -o json" : {
442- {ExitCode : 0 , Stdout : `{"items":[{"metadata":{"name":"tpu-topology"}}]}` },
458+ {ExitCode : 0 , Stdout : `{"items":[{"metadata":{"name":"tpu-topology"},"spec":{"levels":[{"nodeLabel":"cloud.google.com/gke-tpu-slice-2x2-id"}]} }]}` },
443459 },
444460 "kubectl get resourceflavors.kueue.x-k8s.io -o jsonpath={range .items[*]}{.spec.nodeLabels.cloud\\ .google\\ .com/gke-tpu-topology}{\" \\ n\" }{end} -l cloud.google.com/gke-tpu-accelerator=tpu-v6e-slice" : {
445461 {ExitCode : 0 , Stdout : "4x4\n " },
@@ -454,7 +470,7 @@ func TestVerifyStaticSlicingActive(t *testing.T) {
454470 requestedTopo : "4x4" ,
455471 mockResponses : map [string ][]shell.CommandResult {
456472 "kubectl get topologies.kueue.x-k8s.io -o json" : {
457- {ExitCode : 0 , Stdout : `{"items":[{"metadata":{"name":"tpu-topology"}}]}` },
473+ {ExitCode : 0 , Stdout : `{"items":[{"metadata":{"name":"tpu-topology"},"spec":{"levels":[{"nodeLabel":"cloud.google.com/gke-tpu-slice-4x4-id"}]} }]}` },
458474 },
459475 "kubectl get resourceflavors.kueue.x-k8s.io -o jsonpath={range .items[*]}{.spec.nodeLabels.cloud\\ .google\\ .com/gke-tpu-topology}{\" \\ n\" }{end} -l cloud.google.com/gke-tpu-accelerator=tpu-v6e-slice" : {
460476 {ExitCode : 0 , Stdout : "4x4\n " },
@@ -468,7 +484,7 @@ func TestVerifyStaticSlicingActive(t *testing.T) {
468484 requestedTopo : "8x8" ,
469485 mockResponses : map [string ][]shell.CommandResult {
470486 "kubectl get topologies.kueue.x-k8s.io -o json" : {
471- {ExitCode : 0 , Stdout : `{"items":[{"metadata":{"name":"tpu-topology"}}]}` },
487+ {ExitCode : 0 , Stdout : `{"items":[{"metadata":{"name":"tpu-topology"},"spec":{"levels":[{"nodeLabel":"cloud.google.com/gke-tpu-slice-4x4-id"}]} }]}` },
472488 },
473489 "kubectl get resourceflavors.kueue.x-k8s.io -o jsonpath={range .items[*]}{.spec.nodeLabels.cloud\\ .google\\ .com/gke-tpu-topology}{\" \\ n\" }{end} -l cloud.google.com/gke-tpu-accelerator=tpu-v6e-slice" : {
474490 {ExitCode : 0 , Stdout : "4x4\n " },
@@ -482,7 +498,7 @@ func TestVerifyStaticSlicingActive(t *testing.T) {
482498 requestedTopo : "2x2" ,
483499 mockResponses : map [string ][]shell.CommandResult {
484500 "kubectl get topologies.kueue.x-k8s.io -o json" : {
485- {ExitCode : 0 , Stdout : `{"items":[{"metadata":{"name":"tpu-topology"}}]}` },
501+ {ExitCode : 0 , Stdout : `{"items":[{"metadata":{"name":"tpu-topology"},"spec":{"levels":[{"nodeLabel":"cloud.google.com/gke-tpu-slice-2x2-id"}]} }]}` },
486502 },
487503 "kubectl get resourceflavors.kueue.x-k8s.io -o jsonpath={range .items[*]}{.spec.nodeLabels.cloud\\ .google\\ .com/gke-tpu-topology}{\" \\ n\" }{end} -l cloud.google.com/gke-tpu-accelerator=tpu-v6e-slice" : {
488504 {ExitCode : 0 , Stdout : "" },
@@ -583,7 +599,13 @@ func TestResolveHardwareRequirements_NAPIncompatibilities(t *testing.T) {
583599 machineType : "v6e-standard-8t" ,
584600 topology : "2x4" ,
585601 mockResponses : map [string ][]shell.CommandResult {
586- "kubectl get topologies.kueue.x-k8s.io" : {{ExitCode : 0 , Stdout : `{"items": [{"metadata":{"name":"tpu-v6e-slice"},"spec":{"topologies":["4x8"]}}]}` }},
602+ "kubectl get topologies.kueue.x-k8s.io" : {
603+ {ExitCode : 0 , Stdout : `{"items": [{"metadata":{"name":"tpu-v6e-slice"},"spec":{"levels":[{"nodeLabel":"cloud.google.com/gke-tpu-slice-2x4-id"}]}}]}` },
604+ {ExitCode : 0 , Stdout : `{"items": [{"metadata":{"name":"tpu-v6e-slice"},"spec":{"levels":[{"nodeLabel":"cloud.google.com/gke-tpu-slice-2x4-id"}]}}]}` },
605+ {ExitCode : 0 , Stdout : `{"items": [{"metadata":{"name":"tpu-v6e-slice"},"spec":{"levels":[{"nodeLabel":"cloud.google.com/gke-tpu-slice-2x4-id"}]}}]}` },
606+ },
607+ "kubectl get resourceflavors" : {{ExitCode : 0 , Stdout : "" }},
608+ "kubectl get nodes" : {{ExitCode : 0 , Stdout : "4x8\n " }},
587609 },
588610 wantErr : true ,
589611 expectedErrMatch : "TPU Static Sub-slicing is not supported on GKE Node Auto-Provisioning (NAP) workloads" ,
0 commit comments