@@ -931,6 +931,48 @@ def test_update_provider_tree_with_rc_occupied(self, mock_nfc, mock_nr,
931931
932932 self .driver .update_provider_tree (self .ptree , mock .sentinel .nodename )
933933
934+ expected = {
935+ 'CUSTOM_IRON_NFV' : {
936+ 'total' : 1 ,
937+ 'reserved' : 1 ,
938+ 'min_unit' : 1 ,
939+ 'max_unit' : 1 ,
940+ 'step_size' : 1 ,
941+ 'allocation_ratio' : 1.0 ,
942+ },
943+ }
944+ mock_nfc .assert_called_once_with (mock .sentinel .nodename )
945+ mock_nr .assert_called_once_with (mock_nfc .return_value )
946+ mock_res_used .assert_called_once_with (mock_nfc .return_value )
947+ mock_res_unavail .assert_called_once_with (mock_nfc .return_value )
948+ result = self .ptree .data (mock .sentinel .nodename ).inventory
949+ self .assertEqual (expected , result )
950+
951+ @mock .patch .object (ironic_driver .IronicDriver ,
952+ '_node_resources_used' , return_value = True )
953+ @mock .patch .object (ironic_driver .IronicDriver ,
954+ '_node_resources_unavailable' , return_value = False )
955+ @mock .patch .object (ironic_driver .IronicDriver , '_node_resource' )
956+ @mock .patch .object (ironic_driver .IronicDriver , '_node_from_cache' )
957+ def test_update_provider_tree_with_rc_occupied_workaround (self ,
958+ mock_nfc , mock_nr , mock_res_unavail , mock_res_used ):
959+ """Ensure that when a node is used, we report the inventory matching
960+ the consumed resources.
961+ """
962+ self .flags (skip_reserve_in_use_ironic_nodes = True ,
963+ group = "workarounds" )
964+ mock_nr .return_value = {
965+ 'vcpus' : 24 ,
966+ 'vcpus_used' : 24 ,
967+ 'memory_mb' : 1024 ,
968+ 'memory_mb_used' : 1024 ,
969+ 'local_gb' : 100 ,
970+ 'local_gb_used' : 100 ,
971+ 'resource_class' : 'iron-nfv' ,
972+ }
973+
974+ self .driver .update_provider_tree (self .ptree , mock .sentinel .nodename )
975+
934976 expected = {
935977 'CUSTOM_IRON_NFV' : {
936978 'total' : 1 ,
@@ -944,7 +986,7 @@ def test_update_provider_tree_with_rc_occupied(self, mock_nfc, mock_nr,
944986 mock_nfc .assert_called_once_with (mock .sentinel .nodename )
945987 mock_nr .assert_called_once_with (mock_nfc .return_value )
946988 mock_res_used .assert_called_once_with (mock_nfc .return_value )
947- self . assertFalse ( mock_res_unavail . called )
989+ mock_res_unavail . assert_called_once_with ( mock_nfc . return_value )
948990 result = self .ptree .data (mock .sentinel .nodename ).inventory
949991 self .assertEqual (expected , result )
950992
@@ -1015,7 +1057,7 @@ def test_update_provider_tree_no_traits(self, mock_nfc, mock_nr,
10151057 mock_nfc .assert_called_once_with (mock .sentinel .nodename )
10161058 mock_nr .assert_called_once_with (mock_nfc .return_value )
10171059 mock_res_used .assert_called_once_with (mock_nfc .return_value )
1018- self . assertFalse ( mock_res_unavail . called )
1060+ mock_res_unavail . assert_called_once_with ( mock_nfc . return_value )
10191061 result = self .ptree .data (mock .sentinel .nodename ).traits
10201062 self .assertEqual (set (), result )
10211063
@@ -1047,7 +1089,7 @@ def test_update_provider_tree_with_traits(self, mock_nfc, mock_nr,
10471089 mock_nfc .assert_called_once_with (mock .sentinel .nodename )
10481090 mock_nr .assert_called_once_with (mock_nfc .return_value )
10491091 mock_res_used .assert_called_once_with (mock_nfc .return_value )
1050- self . assertFalse ( mock_res_unavail . called )
1092+ mock_res_unavail . assert_called_once_with ( mock_nfc . return_value )
10511093 result = self .ptree .data (mock .sentinel .nodename ).traits
10521094 self .assertEqual (set (traits ), result )
10531095
0 commit comments