def test_finishTasksAfterAssigningTasksToWorkers(self):
        workers = [
            Worker(workerID="W1",
                   begin=tHour(0, 00),
                   end=tHour(23, 59),
                   multitask=1),
            Worker(workerID="W2",
                   begin=tHour(0, 00),
                   end=tHour(23, 59),
                   multitask=1),
            Worker(workerID="W3",
                   begin=tHour(0, 00),
                   end=tHour(23, 59),
                   multitask=1)
        ]
        taskManager = TaskManager(period=self.tPeriod(), multitask=1)
        taskManager.addTask(self.tasks[0])
        taskManager.addTask(self.tasks[1])
        taskManager.addWorkers(workers)
        taskManager.assignTasksToWorkers()
        self.assertEqual(len(taskManager.workers), 3)
        taskManager.finishTask(self.tasks[0].taskID)
        self.assertEqual(len(workers[0].assignedTasks), 0)
        self.assertEqual(len(taskManager.workers), 3)

        taskManager.finishTask(self.tasks[1].taskID)  # test with id too.
        self.assertEqual(len(workers[1].assignedTasks), 0)
        self.assertEqual(len(taskManager.workers), 3)
Example #2
0
 def test_removeWorker(self):
     workers = [
         Worker(workerID="W1",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
         Worker(workerID="W2",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
         Worker(workerID="W3",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
         Worker(workerID="W4",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1)
     ]
     workerQ = WorkerQueue()
     workerQ.put(workers)
     workerQ.removeWorker(workers[2])
     self.assertEqual(workerQ.nextWorker(), workers[0])
     self.assertEqual(workerQ.nextWorker(), workers[1])
     self.assertEqual(workerQ.nextWorker(), workers[3])
     self.assertEqual(workerQ.size(), 3)
Example #3
0
 def test_putList(self):
     workers1 = [
         Worker(workerID="W1",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=2),
         Worker(workerID="W2",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=2),
     ]
     workers2 = [
         Worker(workerID="W3",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
         Worker(workerID="W4",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
     ]
     workerQ = WorkerQueue()
     workerQ.put(workers1)
     self.assertEqual(workerQ.nextWorker(), workers1[0])
     self.assertEqual(workerQ.nextWorker(), workers1[1])
     workerQ.put(workers2)
     self.assertEqual(workerQ.nextWorker(), workers1[0])
     self.assertEqual(workerQ.nextWorker(), workers1[1])
     self.assertEqual(workerQ.nextWorker(), workers2[0])
     self.assertEqual(workerQ.nextWorker(), workers2[1])
Example #4
0
 def test_maxTasksAchievable(self):
     workers = [
         Worker(workerID="W1",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=2),
         Worker(workerID="W2",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=2)
     ]
     worker3 = Worker(workerID="W3",
                      begin=tHour(0, 00),
                      end=tHour(23, 59),
                      multitask=1)
     worker4 = Worker(workerID="W4",
                      begin=tHour(0, 00),
                      end=tHour(23, 59),
                      multitask=1)
     workerQ = WorkerQueue()
     workerQ.put(workers)
     self.assertEqual(workerQ.maxTasksAchievable(), 4)
     workerQ.put(worker3)
     self.assertEqual(workerQ.maxTasksAchievable(), 5)
     workerQ.put(worker4)
     self.assertEqual(workerQ.maxTasksAchievable(), 6)
 def test_removeWorkerAfterAssigningTasks(self):
     workers = [
         Worker(workerID="W1",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
         Worker(workerID="W2",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1)
     ]
     taskManager = TaskManager(self.tPeriod(), multitask=1)
     taskManager.addTasks([self.tasks[0], self.tasks[1]])
     taskManager.addWorkers(workers)
     taskManager.assignTasksToWorkers()
     # make sure the exception is thrown as the tasks are not finished yet.
     with self.assertRaises(UnfinishedTasksHeldByWorkerException):
         taskManager.removeWorker(workers[0].workerID)
     # finish the tasks and remove workers
     taskManager.finishTask(self.tasks[0].taskID)
     taskManager.removeWorker(workers[0].workerID)
     self.assertEqual(len(taskManager.workers), 1)
     taskManager.finishTask(self.tasks[1].taskID)
     taskManager.removeWorker(workers[1].workerID)
     self.assertEqual(len(taskManager.workers), 0)
Example #6
0
    def test_putWorkers(self):
        worker1 = Worker(workerID="W1",
                         begin=tHour(0, 00),
                         end=tHour(23, 59),
                         multitask=2)
        worker2 = Worker(workerID="W2",
                         begin=tHour(0, 00),
                         end=tHour(23, 59),
                         multitask=2),
        worker3 = Worker(workerID="W3",
                         begin=tHour(0, 00),
                         end=tHour(23, 59),
                         multitask=1),
        worker4 = Worker(workerID="W4",
                         begin=tHour(0, 00),
                         end=tHour(23, 59),
                         multitask=1),

        workerQ = WorkerQueue()
        workerQ.put(worker1)
        self.assertEqual(workerQ.nextWorker(), worker1)
        workerQ.put(worker2)
        self.assertEqual(workerQ.nextWorker(), worker1)
        self.assertEqual(workerQ.nextWorker(), worker2)
        workerQ.put(worker3)
        self.assertEqual(workerQ.nextWorker(), worker1)
        self.assertEqual(workerQ.nextWorker(), worker2)
        self.assertEqual(workerQ.nextWorker(), worker3)
        workerQ.put(worker4)
        self.assertEqual(workerQ.nextWorker(), worker1)
        self.assertEqual(workerQ.nextWorker(), worker2)
        self.assertEqual(workerQ.nextWorker(), worker3)
        self.assertEqual(workerQ.nextWorker(), worker4)
Example #7
0
 def test_canAssignTasks(self):
   worker = Worker(workerID="W1", begin=tHour(0, 00), end=tHour(23, 59), multitask=2)
   self.assertFalse(worker.hasReachedTaskLimit())
   worker.assignTask(self.task1)
   self.assertFalse(worker.hasReachedTaskLimit())
   worker.assignTask(self.task2)
   self.assertTrue(worker.hasReachedTaskLimit())
 def test_addWorkers(self):
     workers = [
         Worker(workerID="W1",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
         Worker(workerID="W2",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1)
     ]
     taskManager = TaskManager(self.tPeriod(), multitask=1)
     taskManager.addWorkers(workers)
     self.assertEqual(len(taskManager.workers), 2)
    def test_assignTaskToWorkersThatNeedsToBeSwapped(self, isProcessing):
        # mock task unit so its isProcessing method always returns true
        # as it is time dependent, and will fail if this test if run at certain times
        isProcessing.return_value = False

        task1 = TaskUnit(createdAt=tHour(0, 0),
                         deadline=tHour(10, 00),
                         profit=0,
                         processing=0,
                         release=tHour(9, 30),
                         taskID="t1")
        task2 = TaskUnit(createdAt=tHour(0, 0),
                         deadline=tHour(11, 00),
                         profit=0,
                         processing=0,
                         release=tHour(9, 40),
                         taskID="t2")
        task3 = TaskUnit(createdAt=tHour(0, 0),
                         deadline=tHour(12, 00),
                         profit=0,
                         processing=0,
                         release=tHour(11, 30),
                         taskID="t3")
        workers = [
            Worker(workerID="W4",
                   begin=tHour(0, 00),
                   end=tHour(23, 59),
                   multitask=1),
            Worker(workerID="W1",
                   begin=tHour(0, 00),
                   end=tHour(23, 59),
                   multitask=1)
        ]
        taskManager = TaskManager(period=self.tPeriod(), multitask=1)
        taskManager.addTask(task2)
        taskManager.addTask(task3)
        taskManager.addWorkers(workers)
        taskManager.assignTasksToWorkers()
        self.assertEqual(task2, workers[0].assignedTasks[0])
        self.assertEqual(task3, workers[1].assignedTasks[0])
        taskManager.addTask(
            task1)  # earlier release, therfore should be swapped.
        taskManager.assignTasksToWorkers()
        self.assertEqual(
            task1, workers[0].assignedTasks[0])  # should be assigned to worker
        self.assertIsNone(
            task3.assignedWorker)  # workers for task3 should be None
 def test_assignTasksToWorkers(self):
     initialWorkers = [
         Worker(workerID="W1",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
         Worker(workerID="W2",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
         Worker(workerID="W3",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1)
     ]
     extraWorkers = [
         Worker(workerID="W4",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
         Worker(workerID="W1",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1)
     ]
     taskManager = TaskManager(self.tPeriod(), multitask=1)
     taskManager.addTasks(self.tasks)
     taskManager.addWorkers(initialWorkers)
     taskManager.assignTasksToWorkers()
     self.assertEqual(self.tasks[0],
                      initialWorkers[0].assignedTasks[0])  #check w1
     self.assertEqual(self.tasks[1],
                      initialWorkers[1].assignedTasks[0])  #check w2
     self.assertEqual(self.tasks[2],
                      initialWorkers[2].assignedTasks[0])  #check w3
     self.assertEqual(taskManager.unassignedTasks[0], self.tasks[3])
     self.assertEqual(taskManager.unassignedTasks[1], self.tasks[4])
     self.assertEqual(taskManager.unassignedTasks[2], self.tasks[5])
     #add more tasks and make sure they were assigned to the new workers.
     taskManager.addWorkers(extraWorkers)
     taskManager.assignTasksToWorkers()
     self.assertEqual(self.tasks[3],
                      extraWorkers[0].assignedTasks[0])  #check w4
     self.assertEqual(self.tasks[4],
                      extraWorkers[1].assignedTasks[0])  #check w5
     self.assertEqual(taskManager.unassignedTasks[0], self.tasks[5])
 def test_addWorkersAfterInitialAssignment(self):
     workers = [
         Worker(workerID="W1",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
         Worker(workerID="W2",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1)
     ]
     taskManager = TaskManager(self.tPeriod(), multitask=1)
     taskManager.addTasks(self.tasks)
     taskManager.addWorkers(workers)
     taskManager.assignTasksToWorkers()
     self.assertEqual(self.tasks[0], workers[0].assignedTasks[0])
     self.assertEqual(self.tasks[1], workers[1].assignedTasks[0])
Example #12
0
    def test_availableWorkersInPeriod(self):
        worker1 = Worker(workerID="W1",
                         begin=tHour(0, 00),
                         end=tHour(23, 59),
                         multitask=2)
        worker2 = Worker(workerID="W2",
                         begin=tHour(0, 00),
                         end=tHour(23, 59),
                         multitask=2)

        workerQ = WorkerQueue()
        workerQ.put(worker1)
        workerQ.put(worker2)
        availableWorkers = workerQ.availableWorkersDuringPeriod(
            tHour(00, 00), tHour(23, 59))
        self.assertEqual(availableWorkers[0], worker1)
        self.assertEqual(availableWorkers[1], worker2)
        self.assertEqual(len(availableWorkers), 2)
 def test_analyseWorkersNeededTaskSet(self):
     workers = [
         Worker(workerID="W1",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=2),
         Worker(workerID="W2",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=2),
     ]
     taskManager = TaskManager(period=self.tPeriod(), multitask=2)
     taskManager.addWorkers(workers)
     taskManager.addTasks(self.tasks)
     taskManager.assignTasksToWorkers()
     conflicts, nonConflicts = taskManager.analyseWorkersForNeededTaskSet()
     self.assertEqual(len(conflicts), 2)
     self.assertEqual(len(nonConflicts), 1)
 def test_removeUnkownWorker(self):
     worker = Worker(workerID="W1",
                     begin=tHour(0, 00),
                     end=tHour(23, 59),
                     multitask=1)
     taskManager = TaskManager(self.tPeriod(), multitask=1)
     taskManager.addWorker(worker)
     with self.assertRaises(UnkownWorkerException):
         taskManager.removeWorker("thisworkerdoesnotexists")
 def test_assignedTasksCountAndUnassignedTasksCount(self):
     workers = [
         Worker(workerID="W1",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
         Worker(workerID="W2",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1)
     ]
     taskManager = TaskManager(period=self.tPeriod(), multitask=1)
     taskManager.addTask(self.tasks[0])
     taskManager.addTask(self.tasks[1])
     taskManager.addTask(self.tasks[2])
     taskManager.addWorkers(workers)
     taskManager.assignTasksToWorkers()
     self.assertEqual(len(taskManager.assignedTasks), 2)
     self.assertEqual(len(taskManager.unassignedTasks), 1)
def transormWorkerObject(obj):
  # change to datetime format
  beginHour, beginMinute = obj["begin"].split(".")
  endHour, endMinute = obj["end"].split(".")
  obj["begin"] = tHour(int(beginHour), int(beginMinute))
  obj["end"] = tHour(int(endHour), int(endMinute))
  return Worker(
    workerID=obj["id"],
    begin=obj["begin"],
    end=obj["end"],
    multitask=int(obj["multitask"])
  )
Example #17
0
 def test_assignedWorker(self):
     taskUnit = TaskUnit(createdAt=self.createdAt,
                         deadline=self.deadline,
                         profit=self.profit,
                         processing=self.processing,
                         taskID=self.taskID)
     worker = Worker(workerID="W1",
                     begin=tHour(0, 00),
                     end=tHour(23, 59),
                     multitask=2)
     taskUnit.assignWorker(worker)
     self.assertEqual(taskUnit.assignedWorker, worker)
 def test_noConflictsAfterAllTasksRemoved(self):
     workers = [
         Worker(workerID="W1",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
         Worker(workerID="W2",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
     ]
     taskManager = TaskManager(period=self.tPeriod(), multitask=1)
     taskManager.addWorkers(workers)
     taskManager.addTask(self.tasks[0])
     taskManager.addTask(self.tasks[1])
     taskManager.assignTasksToWorkers()
     conflicts = taskManager.analyseWorkersForNeededTaskSet()[0]
     self.assertEqual(conflicts[0].workersNeeded, 2)
     taskManager.finishTask(self.tasks[0].taskID)
     taskManager.finishTask(self.tasks[1].taskID)
     conflicts = taskManager.analyseWorkersForNeededTaskSet()[0]
     self.assertEqual(len(conflicts), 0)  # there should be not conflicts
Example #19
0
 def setUp(self):
     self.createdAt = datetime.now()
     self.taskID = "test1234"
     self.deadline = 500
     self.profit = 2.56
     self.processing = 100
     self.worker = Worker(workerID="W1",
                          begin=tHour(0, 00),
                          end=tHour(23, 59),
                          multitask=2)
     self.globalTask = TaskUnit(createdAt=self.createdAt,
                                deadline=self.deadline,
                                profit=self.profit,
                                processing=self.processing,
                                taskID="test1")
 def test_workerGetsAssignedAnotherTaskAfterFinishing(self):
     workers = [
         Worker(workerID="W1",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
         Worker(workerID="W2",
                begin=tHour(0, 00),
                end=tHour(23, 59),
                multitask=1),
     ]
     taskManager = TaskManager(period=self.tPeriod(), multitask=1)
     taskManager.addWorkers(workers)
     taskManager.addTasks(self.tasks)
     taskManager.assignTasksToWorkers()
     self.assertEqual(len(workers[0].assignedTasks), 1)
     self.assertEqual(len(workers[1].assignedTasks), 1)
     # check that task was unnasigned from worker.
     assignedTask = workers[0].assignedTasks[0]
     taskManager.finishTask(assignedTask.taskID)
     self.assertEqual(len(workers[0].assignedTasks), 0)
     # now assign tasks if theres any more.
     taskManager.assignTasksToWorkers()
     self.assertEqual(len(workers[0].assignedTasks), 1)
Example #21
0
 def test_maxTasksLimit(self):
   worker = Worker(workerID="W1", begin=tHour(0, 00), end=tHour(23, 59), multitask=2)
   worker.assignTask(self.task1)
   worker.assignTask(self.task2)
   with self.assertRaises(MaxTaskLimitReachedException):
     worker.assignTask(self.task3)
Example #22
0
 def test_exactTaskLimit(self):
   worker = Worker(workerID="W1", begin=tHour(0, 00), end=tHour(23, 59), multitask=2)
   worker.assignTask(self.task1)
   worker.assignTask(self.task2)
   self.assertEqual(len(worker.assignedTasks), 2)
Example #23
0
 def test_unnasignTask(self):
   worker = Worker(workerID="W1", begin=tHour(0, 00), end=tHour(23, 59), multitask=2)
   worker.assignTask(self.task1)
   worker.unassignTask(self.task1.taskID)
   self.assertEqual(len(worker.assignedTasks), 0)
Example #24
0
 def test_availableInPeriod(self):
   worker = Worker(workerID="W1", begin=tHour(0, 00), end=tHour(23, 59), multitask=2)
   available = worker.availableInPeriod(begin=tHour(12, 00), end=tHour(13, 00))
   self.assertTrue(available)