2022-11-10 15:37:44 +01:00
#!/usr/bin/perl
use strict ;
use warnings ;
2022-11-15 11:10:32 +01:00
use Test::More ;
2022-11-10 15:37:44 +01:00
use PVE::RS::ResourceScheduling::Static ;
my $ static = PVE::RS::ResourceScheduling::Static - > new ( ) ;
2022-11-15 11:10:32 +01:00
is ( scalar ( $ static - > list_nodes ( ) - > @ * ) , 0 , 'node list empty' ) ;
2022-11-10 15:37:44 +01:00
$ static - > add_node ( "A" , 10 , 100_000_000_000 ) ;
2022-11-15 11:10:32 +01:00
is ( scalar ( $ static - > list_nodes ( ) - > @ * ) , 1 , '1 node added' ) ;
2022-11-10 15:37:44 +01:00
$ static - > add_node ( "B" , 20 , 200_000_000_000 ) ;
2022-11-15 11:10:32 +01:00
is ( scalar ( $ static - > list_nodes ( ) - > @ * ) , 2 , '2nd node' ) ;
2022-11-10 15:37:44 +01:00
$ static - > add_node ( "C" , 30 , 300_000_000_000 ) ;
2022-11-15 11:10:32 +01:00
is ( scalar ( $ static - > list_nodes ( ) - > @ * ) , 3 , '3rd node' ) ;
2022-11-10 15:37:44 +01:00
$ static - > remove_node ( "C" ) ;
2022-11-15 11:10:32 +01:00
is ( scalar ( $ static - > list_nodes ( ) - > @ * ) , 2 , '3rd removed should be 2' ) ;
ok ( $ static - > contains_node ( "A" ) , 'should contain a node A' ) ;
ok ( $ static - > contains_node ( "B" ) , 'should contain a node B' ) ;
ok ( ! $ static - > contains_node ( "C" ) , 'should not contain a node C' ) ;
2022-11-10 15:37:44 +01:00
my $ service = {
maxcpu = > 4 ,
maxmem = > 20_000_000_000 ,
} ;
for ( my $ i = 0 ; $ i < 15 ; $ i + + ) {
my $ score_list = $ static - > score_nodes_to_start_service ( $ service ) ;
# imitate HA manager
my $ scores = { map { $ _ - > [ 0 ] = > - $ _ - > [ 1 ] } $ score_list - > @ * } ;
my @ nodes = sort {
$ scores - > { $ a } <=> $ scores - > { $ b } || $ a cmp $ b
} keys $ scores - > % * ;
if ( $ i % 3 == 2 ) {
2022-11-15 11:10:32 +01:00
is ( $ nodes [ 0 ] , "A" , 'first should be A' ) ;
is ( $ nodes [ 1 ] , "B" , 'second should be A' ) ;
2022-11-10 15:37:44 +01:00
} else {
2022-11-15 11:10:32 +01:00
is ( $ nodes [ 0 ] , "B" , 'first should be B' ) ;
is ( $ nodes [ 1 ] , "A" , 'second should be A' ) ;
2022-11-10 15:37:44 +01:00
}
$ static - > add_service_usage_to_node ( $ nodes [ 0 ] , $ service ) ;
}
2022-11-15 11:10:32 +01:00
done_testing ( ) ;