class TestScheduler(unittest.TestCase): def setUp(self): program1 = Program('D') program2 = Program('E') program3 = Program('H') program4 = Program('S') self.pcb1 = PCB(1, 20, PageHolder(program1)) self.pcb1.set_priority(PCBPriorities.HIGH) self.pcb2 = PCB(2, 25, PageHolder(program2)) self.pcb2.set_priority(PCBPriorities.MEDIUM) self.pcb3 = PCB(3, 15, PageHolder(program3)) self.pcb3.set_priority(PCBPriorities.LOW) self.pcb4 = PCB(4, 6, PageHolder(program4)) self.pcb4.set_priority(PCBPriorities.LOW) self.scheduler = Scheduler() def test_scheduler_with_fifo(self): self.fifo = FifoPolicy(self.scheduler) self.fifo.add_pcb(self.pcb1) self.fifo.add_pcb(self.pcb2) self.fifo.add_pcb(self.pcb3) self.fifo.add_pcb(self.pcb4) result = self.scheduler.next_process() self.assertEquals(self.pcb1.get_pid, result.get_pid) def test_scheduler_with_round_robin(self): quantum = 1 self.round_robin = RoundRobinPolicy(self.scheduler, quantum) self.round_robin.add_pcb(self.pcb1) self.round_robin.add_pcb(self.pcb2) self.round_robin.add_pcb(self.pcb3) self.round_robin.add_pcb(self.pcb4) expected_elements = [self.pcb1, self.pcb2, self.pcb3, self.pcb4] for expected_element in expected_elements: self.assertEqual(expected_element.get_pid, self.round_robin.next_process().get_pid) def test_scheduler_with_priority(self): self.priority_policy = PriorityPolicy(self.scheduler) self.priority_policy.add_pcb(self.pcb1) self.priority_policy.add_pcb(self.pcb2) self.priority_policy.add_pcb(self.pcb3) self.priority_policy.add_pcb(self.pcb4) expected_elems = [self.pcb1, self.pcb2, self.pcb3, self.pcb4] for expected_elem in expected_elems: self.assertEqual(expected_elem.get_pid, self.scheduler.next_process().get_pid)
def test_when_given_scheduler_with_priority_and_cpu_then_scheduler_sends_next_process_to_cpu(self): queue = PriorityQueue() scheduler_priority = Scheduler(None, ready_queue=queue) self.a_kernel.set_scheduler(scheduler_priority) scheduler_priority.set_cpu(self.cpu) scheduler_priority.set_as_priority() self.pcb1.set_priority(1) scheduler_priority.push_to_queue(self.pcb1) self.pcb2.set_priority(2) scheduler_priority.push_to_queue(self.pcb2) expected_pcb = scheduler_priority.next_process() scheduler_priority.send_next_to_cpu() self.assertEqual(self.pcb2, self.cpu.get_actual_pcb())