@@ -310,6 +310,27 @@ func TestPartitionCapacity(t *testing.T) {
310310 mock .On (r .DB ("mockdb" ).Table ("event" )).Return (events , nil )
311311 mock .On (r .DB ("mockdb" ).Table ("partition" )).Return (partitions , nil )
312312 mock .On (r .DB ("mockdb" ).Table ("size" )).Return (sizes , nil )
313+
314+ //Filtered mocks
315+ var filteredPartition []metal.Partition
316+ for _ , partition := range partitions {
317+ if partition .ID == "partition-a" {
318+ filteredPartition = append (filteredPartition , partition )
319+ }
320+ }
321+ var filteredMachinesByPartition []metal.Machine
322+ var filteredMachinesByPartitionBySize []metal.Machine
323+ for _ , machine := range ms {
324+ if machine .PartitionID == "partition-a" {
325+ filteredMachinesByPartition = append (filteredMachinesByPartition , machine )
326+ if machine .SizeID == "size-a" {
327+ filteredMachinesByPartitionBySize = append (filteredMachinesByPartitionBySize , machine )
328+ }
329+ }
330+ }
331+ mock .On (r .DB ("mockdb" ).Table ("partition" ).Get ("partition-a" )).Return (filteredPartition , nil )
332+ mock .On (r .DB ("mockdb" ).Table ("machine" ).Filter (func (var_1 r.Term ) r.Term { return var_1 .Field ("partitionid" ).Eq ("partition-a" ) })).Return (filteredMachinesByPartition , nil )
333+ mock .On (r .DB ("mockdb" ).Table ("machine" ).Filter (func (var_1 r.Term ) r.Term { return var_1 .Field ("partitionid" ).Eq ("partition-a" ) }).Filter (func (var_1 r.Term ) r.Term { return var_1 .Field ("sizeid" ).Eq ("size-a" ) })).Return (filteredMachinesByPartitionBySize , nil )
313334 }
314335
315336 machineTpl = func (id , partition , size , project string ) metal.Machine {
@@ -411,6 +432,92 @@ func TestPartitionCapacity(t *testing.T) {
411432 },
412433 },
413434 },
435+ {
436+ name : "filter considers all machines" ,
437+ pcr : & v1.PartitionCapacityRequest {
438+ ID : pointer .Pointer ("partition-a" ),
439+ Size : pointer .Pointer ("size-a" ),
440+ },
441+ mockFn : func (mock * r.Mock ) {
442+ m1 := machineTpl ("1" , "partition-a" , "size-a" , "project-123" )
443+ m2 := machineTpl ("2" , "partition-a" , "size-a" , "project-123" )
444+ m3 := machineTpl ("3" , "partition-a" , "size-a" , "project-123" )
445+ m4 := machineTpl ("4" , "partition-a" , "size-b" , "project-123" )
446+ m4 .IPMI .Address = "1.2.3.1"
447+ m5 := machineTpl ("5" , "partition-b" , "size-a" , "project-123" )
448+ mockMachines (mock , metal .MachineLivelinessAlive , nil , m1 , m2 , m3 , m4 , m5 )
449+ },
450+
451+ want : []* v1.PartitionCapacity {
452+ {
453+ Common : v1.Common {
454+ Identifiable : v1.Identifiable {ID : "partition-a" }, Describable : v1.Describable {Name : pointer .Pointer ("" ), Description : pointer .Pointer ("" )},
455+ },
456+ ServerCapacities : v1.ServerCapacities {
457+ {
458+ Size : "size-a" ,
459+ Total : 3 ,
460+ PhonedHome : 3 ,
461+ Faulty : 1 ,
462+ Allocated : 3 ,
463+ FaultyMachines : []string {"1" },
464+ },
465+ },
466+ },
467+ },
468+ },
469+ {
470+ name : "non filter considers all machines" ,
471+ pcr : & v1.PartitionCapacityRequest {},
472+ mockFn : func (mock * r.Mock ) {
473+ m1 := machineTpl ("1" , "partition-a" , "size-a" , "project-123" )
474+ m2 := machineTpl ("2" , "partition-a" , "size-a" , "project-123" )
475+ m3 := machineTpl ("3" , "partition-a" , "size-a" , "project-123" )
476+ m4 := machineTpl ("4" , "partition-a" , "size-b" , "project-123" )
477+ m4 .IPMI .Address = "1.2.3.1"
478+ m5 := machineTpl ("5" , "partition-b" , "size-a" , "project-123" )
479+ mockMachines (mock , metal .MachineLivelinessAlive , nil , m1 , m2 , m3 , m4 , m5 )
480+ },
481+ want : []* v1.PartitionCapacity {
482+ {
483+ Common : v1.Common {
484+ Identifiable : v1.Identifiable {ID : "partition-a" }, Describable : v1.Describable {Name : pointer .Pointer ("" ), Description : pointer .Pointer ("" )},
485+ },
486+ ServerCapacities : v1.ServerCapacities {
487+ {
488+ Size : "size-a" ,
489+ Total : 3 ,
490+ PhonedHome : 3 ,
491+ Faulty : 1 ,
492+ Allocated : 3 ,
493+ FaultyMachines : []string {"1" },
494+ },
495+ {
496+ Size : "size-b" ,
497+ Total : 1 ,
498+ PhonedHome : 1 ,
499+ Faulty : 1 ,
500+ Allocated : 1 ,
501+ FaultyMachines : []string {"4" },
502+ },
503+ },
504+ },
505+ {
506+ Common : v1.Common {
507+ Identifiable : v1.Identifiable {ID : "partition-b" }, Describable : v1.Describable {Name : pointer .Pointer ("" ), Description : pointer .Pointer ("" )},
508+ },
509+ ServerCapacities : v1.ServerCapacities {
510+ {
511+ Size : "size-a" ,
512+ Total : 1 ,
513+ PhonedHome : 1 ,
514+ Faulty : 0 ,
515+ Allocated : 1 ,
516+ },
517+ },
518+ },
519+ },
520+ },
414521 {
415522 name : "one waiting machine" ,
416523 mockFn : func (mock * r.Mock ) {
0 commit comments