memory_map_unittest.py revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1# Copyright 2014 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import unittest 6 7from memory_inspector.core import memory_map 8 9 10class MemoryMapTest(unittest.TestCase): 11 def runTest(self): 12 mmap = memory_map.Map() 13 map_entry1 = memory_map.MapEntry(4096, 8191, 'rw--', '/foo', 0) 14 map_entry2 = memory_map.MapEntry(65536, 81919, 'rw--', '/bar', 4096) 15 16 # Test the file de-offset logic. 17 self.assertEqual(map_entry1.GetRelativeFileOffset(4096), 0) 18 self.assertEqual(map_entry1.GetRelativeFileOffset(4100), 4) 19 self.assertEqual(map_entry2.GetRelativeFileOffset(65536), 4096) 20 21 # Test the mm de-offset logic (address to relative page_index + offset). 22 self.assertEqual(map_entry1.GetRelativeMMOffset(4096), (0, 0)) 23 self.assertEqual(map_entry1.GetRelativeMMOffset(4097), (0, 1)) 24 self.assertEqual(map_entry1.GetRelativeMMOffset(8191), (0, 4095)) 25 self.assertEqual(map_entry2.GetRelativeMMOffset(69632), (1, 0)) 26 self.assertEqual(map_entry2.GetRelativeMMOffset(69633), (1, 1)) 27 self.assertEqual(map_entry2.GetRelativeMMOffset(81919), (3, 4095)) 28 29 # Test the page-resident logic. 30 map_entry2.resident_pages = [5] # 5 -> 101b. 31 self.assertTrue(map_entry2.IsPageResident(0)) 32 self.assertFalse(map_entry2.IsPageResident(1)) 33 self.assertTrue(map_entry2.IsPageResident(2)) 34 35 # Test the lookup logic. 36 mmap.Add(map_entry1) 37 mmap.Add(map_entry2) 38 self.assertIsNone(mmap.Lookup(1024)) 39 self.assertEqual(mmap.Lookup(4096), map_entry1) 40 self.assertEqual(mmap.Lookup(6000), map_entry1) 41 self.assertEqual(mmap.Lookup(8191), map_entry1) 42 self.assertIsNone(mmap.Lookup(8192)) 43 self.assertIsNone(mmap.Lookup(65535)) 44 self.assertEqual(mmap.Lookup(65536), map_entry2) 45 self.assertEqual(mmap.Lookup(67000), map_entry2) 46 self.assertEqual(mmap.Lookup(81919), map_entry2) 47 self.assertIsNone(mmap.Lookup(81920)) 48