class TestMemoryPagination_ValidateVirtualAddress(unittest.TestCase): def setUp(self): bits_for_physical_addres = 3 bits_for_page_size = 1 self.memory = Memory(2**bits_for_physical_addres) self.mem_pag = PaginationStrategy(self.memory, 2**bits_for_page_size) ## Mockeo el Pcb, solo necesito su pid self.pcb = Mock() self.pcb.get_pid.return_value = 1 ''' Page table has 2 pages, and virtual address has 2 bits for page and 1 for offset, so possible virtual addresses are: 000 : page 0, offset 0 001 : page 0, offset 1 010 : page 1, offset 0 011 : page 1, offset 1 ''' self.page_table = self.mem_pag.malloc(self.pcb,3) def test_when_trying_all_posible_virtual_address_then_wrong_ones_should_raise_InvalidAddressException(self): ins_put = "instruction" for n in range(2**3): addr = self.mem_pag.virtual_address_for(self.pcb, n) print "addr: " + addr + "- n: " + str(n) if (n < 4): self.assertTrue(self.mem_pag.validate_virtual_address(self.pcb, addr)) else : with self.assertRaises(InvalidAddressException) : self.mem_pag.validate_virtual_address(self.pcb, addr)
class TestMemoryPagination_Put_and_Get(unittest.TestCase): def setUp(self): bits_for_physical_addres = 3 bits_for_page_size = 1 self.memory = Memory(2**bits_for_physical_addres) self.mem_pag = PaginationStrategy(self.memory, 2**bits_for_page_size) ## Mockeo el Pcb, solo necesito su pid self.pcb = Mock() self.pcb.get_pid.return_value = 1 ''' Page table has 2 pages, and virtual address has 2 bits for page and 1 for offset, so possible virtual addresses are: 000 : page 0, offset 0 001 : page 0, offset 1 010 : page 1, offset 0 011 : page 1, offset 1 ''' self.page_table = self.mem_pag.malloc(self.pcb,3) def test_when_put_instruction_in_001_for_page_table_then_get_001_returns_instruction(self): address = '001' ins_put = "instruction" self.mem_pag.put(self.pcb, address, ins_put) ins_get = self.mem_pag.get(self.pcb, address) self.assertEqual(ins_get , ins_put) def test_when_put_instruction_in_111_for_page_table_then_raises_IndexError(self): address = '111' ins_put = "instruction" with self.assertRaises(IndexError): self.mem_pag.put(self.pcb, address, ins_put)
class TestMemoryPagination_Malloc(unittest.TestCase): def setUp(self): self.memory = Memory(2**2) self.mem_pag = PaginationStrategy(self.memory, 2) ## Mockeo el Pcb, solo necesito su pid self.pcb = Mock() self.pcb.get_pid.return_value = 1 def test_when_mallocing_4_spaces_then_page_table_has_2_pages(self): page_table = self.mem_pag.malloc(self.pcb,4) pages = page_table.get_page_count() self.assertEqual(pages,2) def test_when_mallocing_3_spaces_then_page_table_has_2_pages(self): page_table = self.mem_pag.malloc(self.pcb,3) pages = page_table.get_page_count() self.assertEqual(pages,2) def test_when_mallocing_2_spaces_then_page_table_has_1_page(self): page_table = self.mem_pag.malloc(self.pcb,2) pages = page_table.get_page_count() self.assertEqual(pages,1) def test_when_mallocing_4_spaces_then_free_space_is_0(self): page_table = self.mem_pag.malloc(self.pcb,4) self.assertEqual(self.mem_pag.free_space(),0) def test_when_mallocing_3_spaces_then_free_space_is_0(self): page_table = self.mem_pag.malloc(self.pcb,4) self.assertEqual(self.mem_pag.free_space(),0) def test_when_mallocing_2_spaces_then_free_space_is_2(self): page_table = self.mem_pag.malloc(self.pcb,4) self.assertEqual(self.mem_pag.free_space(),0)