fixed parsing for structures containing uids or gids in core dumps for most architect...
[pyelftools.git] / test / test_core_notes32_mips.py
1 #------------------------------------------------------------------------------
2 # elftools tests
3 #
4 # Lukas Dresel (lukas.dresel@cs.ucsb.edu)
5 # This code is in the public domain
6 #------------------------------------------------------------------------------
7 import unittest
8 import os
9
10 from elftools.elf.elffile import ELFFile
11 from elftools.elf.segments import NoteSegment
12
13
14 class TestCoreNotes(unittest.TestCase):
15 """ This test ensures that core dump specific notes
16 are properly analyzed. Specifically, tests for a
17 regression where MIPS PRPSINFO structures would be
18 parsed incorrectly due to being treated as 16-bit
19 fields instead of 32-bit fields.
20 """
21 @classmethod
22 def setUpClass(cls):
23 cls._core_file = open(os.path.join('test',
24 'testfiles_for_unittests', 'core_linux32_qemu_mips.elf'),
25 'rb')
26
27 def test_core_prpsinfo(self):
28 elf = ELFFile(self._core_file)
29 for segment in elf.iter_segments():
30 if not isinstance(segment, NoteSegment):
31 continue
32 for note in segment.iter_notes():
33 if note['n_type'] != 'NT_PRPSINFO':
34 continue
35 desc = note['n_desc']
36 self.assertEqual(desc['pr_state'], 0)
37 self.assertEqual(desc['pr_sname'], b'\0')
38 self.assertEqual(desc['pr_zomb'], 0)
39 self.assertEqual(desc['pr_nice'], 0)
40 self.assertEqual(desc['pr_flag'], 0x0)
41 self.assertEqual(desc['pr_uid'], 1000)
42 self.assertEqual(desc['pr_gid'], 1000)
43 self.assertEqual(desc['pr_pid'], 449015)
44 self.assertEqual(desc['pr_ppid'], 4238)
45 self.assertEqual(desc['pr_pgrp'], 449015)
46 self.assertEqual(desc['pr_sid'], 4238)
47 self.assertEqual(
48 desc['pr_fname'],
49 b'crash'.ljust(16, b'\0'))
50 self.assertEqual(
51 desc['pr_psargs'],
52 b'./crash '.ljust(80, b'\x00'))
53
54 @classmethod
55 def tearDownClass(cls):
56 cls._core_file.close()
57
58
59 if __name__ == '__main__':
60 unittest.main()