diff --git a/SAS/ResourceAssignment/ResourceAssigner/lib/schedulers.py b/SAS/ResourceAssignment/ResourceAssigner/lib/schedulers.py index f3b1c3cf5244536396b49800b8893b5e07e09fcb..f5e5d3b22f6b8e2e2d548bd514e19274a15712b3 100644 --- a/SAS/ResourceAssignment/ResourceAssigner/lib/schedulers.py +++ b/SAS/ResourceAssignment/ResourceAssigner/lib/schedulers.py @@ -1,4 +1,4 @@ -from datetime import datetime +from datetime import datetime, timedelta from lofar.common.cache import cache @@ -70,6 +70,9 @@ class BasicScheduler(object): # Any resources that we cannot schedule on for some reason self.unusable_resources = [] + # Duration must be non-negative or weird stuff will happen + assert self.starttime <= self.endtime + def allocate_resources(self, estimates): """ Tries to allocate resources for the given estimates. @@ -471,6 +474,12 @@ class DwellScheduler(PriorityScheduler): self.max_starttime = max_starttime self.duration = duration + # Duration must be non-negative or weird stuff will happen + assert self.duration >= timedelta(0, 0, 0) + + # Time span for starttime must be sane + assert self.min_starttime <= self.max_starttime + def _new_starttime(self, starttime): """ Set new start and end time based on the start time diff --git a/SAS/ResourceAssignment/ResourceAssigner/test/t_schedulers.py b/SAS/ResourceAssignment/ResourceAssigner/test/t_schedulers.py index 9780ffee5ee9954240d2f8252e9e3677e72b2bb3..4c1a7533f00de013f675acebebe34948283d3f8e 100755 --- a/SAS/ResourceAssignment/ResourceAssigner/test/t_schedulers.py +++ b/SAS/ResourceAssignment/ResourceAssigner/test/t_schedulers.py @@ -223,14 +223,6 @@ class BasicSchedulerTest(SchedulerTest): self.scheduler = BasicScheduler(task_id, self.fake_resource_availability_checker, None) - def verify_claim(self, claim): - """ Verify whether a claim is correct and complete. """ - self.assertIn("status", claim) - self.assertIn("starttime", claim) - self.assertIn("endtime", claim) - - self.assertIn("claim_size", claim) - self.assertIn("resource_type_id", claim) def test_schedule_task(self): """ Whether a task (that fits) can be scheduled. """ @@ -245,11 +237,21 @@ class BasicSchedulerTest(SchedulerTest): self.assertTrue(self.fake_ra_database.committed) self.assertFalse(self.fake_ra_database.rolled_back) - # Claims must be present in database and valid + # Claim must be present in database claims = self.fake_ra_database.claims[0] self.assertTrue(claims) - for c in claims: - self.verify_claim(c) + self.assertEqual(len(claims), 1) + + # Claim must be valid + claim = claims[0] + task = self.fake_ra_database.tasks[0] + + self.assertEqual(claim["status"], "claimed") + self.assertEqual(claim["starttime"], task["starttime"]) + self.assertEqual(claim["endtime"], task["endtime"]) + self.assertEqual(claim["claim_size"], 512) + self.assertEqual(claim["resource_type_id"], FakeResourceAvailabilityChecker.resource_types["bandwidth"]) + def test_multiple_resources(self): """ Whether a task (that fits) can be scheduled. """