diff --git a/SAS/ResourceAssignment/ResourceAssigner/lib/assignment.py b/SAS/ResourceAssignment/ResourceAssigner/lib/assignment.py index 81ed5e2b7240e6e536a3df2bec059a0d761419f4..27ba9db691da29793ca1c534ef97cadff248f687 100755 --- a/SAS/ResourceAssignment/ResourceAssigner/lib/assignment.py +++ b/SAS/ResourceAssignment/ResourceAssigner/lib/assignment.py @@ -659,17 +659,18 @@ class ResourceAssigner(): def is_claimable_rcu_wise(self, needed_resources, resource_claims_rcus, rcu_resource_type_id): is_claimable = True - for res_type, used_rcus in needed_resources.items(): - if res_type == rcu_resource_type_id: - for claimed_rcus in resource_claims_rcus['used_rcus']: - length_difference = abs(len(claimed_rcus) - len(used_rcus)) - if len(claimed_rcus) < len(used_rcus): - claimed_rcus.ljust(length_difference, '0') - elif len(claimed_rcus) > len(used_rcus): - used_rcus.ljust(length_difference, '0') - - is_claimable &= all(not (int(used_rcus[idx]) & int(character)) - for idx, character in enumerate(claimed_rcus)) + if resource_claims_rcus: + for res_type, used_rcus in needed_resources.items(): + if res_type == rcu_resource_type_id: + for claimed_rcus in resource_claims_rcus['used_rcus']: + length_difference = abs(len(claimed_rcus) - len(used_rcus)) + if len(claimed_rcus) < len(used_rcus): + claimed_rcus.ljust(length_difference, '0') + elif len(claimed_rcus) > len(used_rcus): + used_rcus.ljust(length_difference, '0') + + is_claimable &= all(not (int(used_rcus[idx]) & int(character)) + for idx, character in enumerate(claimed_rcus)) return is_claimable diff --git a/SAS/ResourceAssignment/ResourceAssigner/test/t_resourceassigner.py b/SAS/ResourceAssignment/ResourceAssigner/test/t_resourceassigner.py index 41d23f217dd45e0070f55aa7c216426ac5ce5973..27ed675d806e3efd2fd51d8b8a6c1f3d70294f14 100755 --- a/SAS/ResourceAssignment/ResourceAssigner/test/t_resourceassigner.py +++ b/SAS/ResourceAssignment/ResourceAssigner/test/t_resourceassigner.py @@ -1931,11 +1931,12 @@ class ResourceAssignerTest(unittest.TestCase): self.rarpc_mock.insertResourceClaims.assert_any_call(self.task_id, self.specification_claims, 1, 'anonymous', -1) - def test_do_assignment_inserts_resource_claims_with_rcu_bit_pattern_in_radb(self): + def test_do_assignment_inserts_resource_claims_with_used_rcus_should_succeed(self): used_rcus = '111100010111100101101010' self.rarpc_mock.insertRcuSpecifications.return_value = [1] self.rarpc_mock.insertResourceClaims.return_value = {'ids': [1]} + self.rarpc_mock.getResourceClaims.return_value = [] rcu_claim = { 'resource_id': 212,