From b9fe3a839e9212b809d64c11bf92b703adb18fb2 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Fri, 4 Jan 2019 19:50:07 +0100
Subject: Updated the test suite for the current API.

---
 tests/analysis/contents/endian.py       | 25 +++++++++++++------------
 tests/analysis/contents/memory.py       |  7 ++++---
 tests/analysis/contents/restricted.py   | 21 +++++++++++----------
 tests/analysis/disass/block.py          |  6 +++---
 tests/arch/errors.py                    |  7 ++++++-
 tests/arch/immediate.py                 |  8 ++++----
 tests/arch/processor.py                 |  5 ++---
 tests/core/logs.py                      | 10 +++++-----
 tests/format/elf/non_existing_binary.py |  4 ++--
 tests/format/elf/oob_section_name.py    | 17 +++++++++++++++--
 tests/format/elf/overlapping_areas.py   | 30 +++++++++++++++++++-----------
 tests/format/elf/strings.py             | 32 ++++++++++++++++++++------------
 tests/format/errors.py                  | 17 +++++++++++++++--
 13 files changed, 119 insertions(+), 70 deletions(-)

diff --git a/tests/analysis/contents/endian.py b/tests/analysis/contents/endian.py
index 209600a..77ed77a 100644
--- a/tests/analysis/contents/endian.py
+++ b/tests/analysis/contents/endian.py
@@ -6,6 +6,7 @@
 
 
 from chrysacase import ChrysalideTestCase
+from pychrysalide import arch
 from pychrysalide.analysis.contents import FileContent, RestrictedContent
 from pychrysalide.arch import vmpa
 import tempfile
@@ -54,36 +55,36 @@ class TestEndianness(ChrysalideTestCase):
 
         start = vmpa(12, vmpa.VMPA_NO_VIRTUAL)
 
-        val = fcnt.read_u16(start, vmpa.SRE_LITTLE_WORD)
+        val = fcnt.read_u16(start, arch.SRE_LITTLE_WORD)
         self.assertEqual(val, 0x1516)
 
         start = vmpa(12, vmpa.VMPA_NO_VIRTUAL)
 
-        val = fcnt.read_u16(start, vmpa.SRE_BIG_WORD)
+        val = fcnt.read_u16(start, arch.SRE_BIG_WORD)
         self.assertEqual(val, 0x1615)
 
         # 32 bits
 
         start = vmpa(12, vmpa.VMPA_NO_VIRTUAL)
 
-        val = fcnt.read_u32(start, vmpa.SRE_LITTLE_WORD)
+        val = fcnt.read_u32(start, arch.SRE_LITTLE_WORD)
         self.assertEqual(val, 0x17181516)
 
         start = vmpa(12, vmpa.VMPA_NO_VIRTUAL)
 
-        val = fcnt.read_u32(start, vmpa.SRE_BIG_WORD)
+        val = fcnt.read_u32(start, arch.SRE_BIG_WORD)
         self.assertEqual(val, 0x16151817)
 
         # 64 bits
 
         start = vmpa(0, vmpa.VMPA_NO_VIRTUAL)
 
-        val = fcnt.read_u64(start, vmpa.SRE_LITTLE_WORD)
+        val = fcnt.read_u64(start, arch.SRE_LITTLE_WORD)
         self.assertEqual(val, 0x0708050603040102)
 
         start = vmpa(0, vmpa.VMPA_NO_VIRTUAL)
 
-        val = fcnt.read_u64(start, vmpa.SRE_BIG_WORD)
+        val = fcnt.read_u64(start, arch.SRE_BIG_WORD)
         self.assertEqual(val, 0x0201040306050807)
 
 
@@ -96,34 +97,34 @@ class TestEndianness(ChrysalideTestCase):
 
         start = vmpa(12, vmpa.VMPA_NO_VIRTUAL)
 
-        val = fcnt.read_u16(start, vmpa.SRE_LITTLE)
+        val = fcnt.read_u16(start, arch.SRE_LITTLE)
         self.assertEqual(val, 0x1615)
 
         start = vmpa(12, vmpa.VMPA_NO_VIRTUAL)
 
-        val = fcnt.read_u16(start, vmpa.SRE_BIG)
+        val = fcnt.read_u16(start, arch.SRE_BIG)
         self.assertEqual(val, 0x1516)
 
         # 32 bits
 
         start = vmpa(12, vmpa.VMPA_NO_VIRTUAL)
 
-        val = fcnt.read_u32(start, vmpa.SRE_LITTLE)
+        val = fcnt.read_u32(start, arch.SRE_LITTLE)
         self.assertEqual(val, 0x18171615)
 
         start = vmpa(12, vmpa.VMPA_NO_VIRTUAL)
 
-        val = fcnt.read_u32(start, vmpa.SRE_BIG)
+        val = fcnt.read_u32(start, arch.SRE_BIG)
         self.assertEqual(val, 0x15161718)
 
         # 64 bits
 
         start = vmpa(0, vmpa.VMPA_NO_VIRTUAL)
 
-        val = fcnt.read_u64(start, vmpa.SRE_LITTLE)
+        val = fcnt.read_u64(start, arch.SRE_LITTLE)
         self.assertEqual(val, 0x0807060504030201)
 
         start = vmpa(0, vmpa.VMPA_NO_VIRTUAL)
 
-        val = fcnt.read_u64(start, vmpa.SRE_BIG)
+        val = fcnt.read_u64(start, arch.SRE_BIG)
         self.assertEqual(val, 0x0102030405060708)
diff --git a/tests/analysis/contents/memory.py b/tests/analysis/contents/memory.py
index e8ba6b5..55ce035 100644
--- a/tests/analysis/contents/memory.py
+++ b/tests/analysis/contents/memory.py
@@ -7,6 +7,7 @@
 
 
 from chrysacase import ChrysalideTestCase
+from pychrysalide import arch
 from pychrysalide.analysis.contents import MemoryContent
 from pychrysalide.arch import vmpa, mrange
 
@@ -38,12 +39,12 @@ class TestMemoryContent(ChrysalideTestCase):
 
         start = vmpa(14, vmpa.VMPA_NO_VIRTUAL)
 
-        val = cnt.read_u16(start, vmpa.SRE_LITTLE)
+        val = cnt.read_u16(start, arch.SRE_LITTLE)
         self.assertEqual(val, 0x1817)
 
         start = vmpa(10, vmpa.VMPA_NO_VIRTUAL)
 
-        val = cnt.read_u32(start, vmpa.SRE_LITTLE)
+        val = cnt.read_u32(start, arch.SRE_LITTLE)
         self.assertEqual(val, 0x16150013)
 
 
@@ -62,4 +63,4 @@ class TestMemoryContent(ChrysalideTestCase):
         with self.assertRaisesRegex(Exception, 'Invalid read access.'):
 
             start = vmpa(0, vmpa.VMPA_NO_VIRTUAL)
-            val = cnt.read_u16(start, vmpa.SRE_LITTLE)
+            val = cnt.read_u16(start, arch.SRE_LITTLE)
diff --git a/tests/analysis/contents/restricted.py b/tests/analysis/contents/restricted.py
index 6484299..08aa968 100644
--- a/tests/analysis/contents/restricted.py
+++ b/tests/analysis/contents/restricted.py
@@ -7,6 +7,7 @@
 
 
 from chrysacase import ChrysalideTestCase
+from pychrysalide import arch
 from pychrysalide.analysis.contents import FileContent, RestrictedContent
 from pychrysalide.arch import vmpa, mrange
 import tempfile
@@ -63,10 +64,10 @@ class TestRestrictedContent(ChrysalideTestCase):
         val = rcnt.read_u8(start)
         self.assertEqual(val, 0x16)
 
-        val = rcnt.read_u16(start, vmpa.SRE_LITTLE)
+        val = rcnt.read_u16(start, arch.SRE_LITTLE)
         self.assertEqual(val, 0x1817)
 
-        val = rcnt.read_u32(start, vmpa.SRE_LITTLE)
+        val = rcnt.read_u32(start, arch.SRE_LITTLE)
         self.assertEqual(val, 0x24232221)
 
 
@@ -110,15 +111,15 @@ class TestRestrictedContent(ChrysalideTestCase):
         self.assertEqual(val, 0x15)
 
         start = vmpa(12, vmpa.VMPA_NO_VIRTUAL)
-        val = rcnt.read_u16(start, vmpa.SRE_LITTLE)
+        val = rcnt.read_u16(start, arch.SRE_LITTLE)
         self.assertEqual(val, 0x1615)
 
         start = vmpa(12, vmpa.VMPA_NO_VIRTUAL)
-        val = rcnt.read_u32(start, vmpa.SRE_LITTLE)
+        val = rcnt.read_u32(start, arch.SRE_LITTLE)
         self.assertEqual(val, 0x18171615)
 
         start = vmpa(12, vmpa.VMPA_NO_VIRTUAL)
-        val = rcnt.read_u64(start, vmpa.SRE_LITTLE)
+        val = rcnt.read_u64(start, arch.SRE_LITTLE)
         self.assertEqual(val, 0x2423222118171615)
 
         start = vmpa(23, vmpa.VMPA_NO_VIRTUAL)
@@ -126,15 +127,15 @@ class TestRestrictedContent(ChrysalideTestCase):
         self.assertEqual(val, 0x28)
 
         start = vmpa(22, vmpa.VMPA_NO_VIRTUAL)
-        val = rcnt.read_u16(start, vmpa.SRE_LITTLE)
+        val = rcnt.read_u16(start, arch.SRE_LITTLE)
         self.assertEqual(val, 0x2827)
 
         start = vmpa(20, vmpa.VMPA_NO_VIRTUAL)
-        val = rcnt.read_u32(start, vmpa.SRE_LITTLE)
+        val = rcnt.read_u32(start, arch.SRE_LITTLE)
         self.assertEqual(val, 0x28272625)
 
         start = vmpa(16, vmpa.VMPA_NO_VIRTUAL)
-        val = rcnt.read_u64(start, vmpa.SRE_LITTLE)
+        val = rcnt.read_u64(start, arch.SRE_LITTLE)
         self.assertEqual(val, 0x2827262524232221)
 
 
@@ -201,9 +202,9 @@ class TestRestrictedContent(ChrysalideTestCase):
         with self.assertRaisesRegex(Exception, 'Invalid read access.'):
 
             start = vmpa(11, vmpa.VMPA_NO_VIRTUAL)
-            val = rcnt.read_u16(start, vmpa.SRE_LITTLE)
+            val = rcnt.read_u16(start, arch.SRE_LITTLE)
 
         with self.assertRaisesRegex(Exception, 'Invalid read access.'):
 
             start = vmpa(23, vmpa.VMPA_NO_VIRTUAL)
-            val = rcnt.read_u16(start, vmpa.SRE_LITTLE)
+            val = rcnt.read_u16(start, arch.SRE_LITTLE)
diff --git a/tests/analysis/disass/block.py b/tests/analysis/disass/block.py
index 8de44e1..1663150 100644
--- a/tests/analysis/disass/block.py
+++ b/tests/analysis/disass/block.py
@@ -26,7 +26,7 @@ class TestBasicBlocks(ChrysalideTestCase):
         fullname = sys.modules[cls.__module__].__file__
         dirpath = os.path.dirname(fullname)
 
-        os.system('make -C %s hello 2>&1 > /dev/null' % dirpath)
+        os.system('make -C %s hello > /dev/null 2>&1' % dirpath)
 
 
     @classmethod
@@ -39,7 +39,7 @@ class TestBasicBlocks(ChrysalideTestCase):
         fullname = sys.modules[cls.__module__].__file__
         dirpath = os.path.dirname(fullname)
 
-        os.system('make -C %s clean 2>&1 > /dev/null' % dirpath)
+        os.system('make -C %s clean > /dev/null 2>&1' % dirpath)
 
 
     def testBlockList(self):
@@ -67,7 +67,7 @@ class TestBasicBlocks(ChrysalideTestCase):
         found = sym.basic_blocks.find_by_starting_addr(sym.range.addr)
         self.assertIsNotNone(found)
 
-        self.assertEqual(found, sym.basic_blocks.items[0])
+        self.assertEqual(found, list(sym.basic_blocks)[0])
 
         self.assertEqual(found.index, 0)
 
diff --git a/tests/arch/errors.py b/tests/arch/errors.py
index 9d5e273..8affb77 100644
--- a/tests/arch/errors.py
+++ b/tests/arch/errors.py
@@ -26,7 +26,12 @@ class TestArchErrors(ChrysalideTestCase):
 
             pattern.append([ArchProcessor.APE_LABEL, addr, 'random desc #%d' % i])
 
-        proc = ArchProcessor()
+
+        class NewProc(ArchProcessor):
+            pass
+
+
+        proc = NewProc()
 
         for i in range(errlen):
 
diff --git a/tests/arch/immediate.py b/tests/arch/immediate.py
index b3ddc6d..74b8069 100644
--- a/tests/arch/immediate.py
+++ b/tests/arch/immediate.py
@@ -13,7 +13,7 @@ class TestImmediate(ChrysalideTestCase):
     """TestCase for arch.ImmOperand."""
 
 
-    def validateValue(self, value, size, padding, syntax, strings):
+    def validateValue(self, value, size, padding, strings):
         """Check all kinds of things with a given immediate operand."""
 
         display = [
@@ -32,7 +32,7 @@ class TestImmediate(ChrysalideTestCase):
             op.padding = padding
             op.display = d
 
-            string = op.to_string(syntax)
+            string = op.to_string()
             self.assertEqual(string, strings[d])
 
 
@@ -46,7 +46,7 @@ class TestImmediate(ChrysalideTestCase):
             ImmOperand.IOD_HEX: '0x1'
         }
 
-        self.validateValue(1, arch.MDS_8_BITS_UNSIGNED, False, arch.ASX_INTEL, strings)
+        self.validateValue(1, arch.MDS_8_BITS_UNSIGNED, False, strings)
 
 
     def testByteOnePadded(self):
@@ -59,4 +59,4 @@ class TestImmediate(ChrysalideTestCase):
             ImmOperand.IOD_HEX: '0x01'
         }
 
-        self.validateValue(1, arch.MDS_8_BITS_UNSIGNED, True, arch.ASX_INTEL, strings)
+        self.validateValue(1, arch.MDS_8_BITS_UNSIGNED, True, strings)
diff --git a/tests/arch/processor.py b/tests/arch/processor.py
index 5ad6490..97a713d 100644
--- a/tests/arch/processor.py
+++ b/tests/arch/processor.py
@@ -16,7 +16,6 @@ class TestProcessor(ChrysalideTestCase):
     """TestCase for arch.ArchProcessor."""
 
 
-
     def testGI(self):
         """Validate the GObject introspection."""
 
@@ -27,7 +26,7 @@ class TestProcessor(ChrysalideTestCase):
         class NewContext(ProcContext):
             pass
 
-        class NewProc(ArchProcessor):
+        class NewProcWithCtx(ArchProcessor):
 
             def _get_context(self):
                 return NewContext()
@@ -36,7 +35,7 @@ class TestProcessor(ChrysalideTestCase):
                 return None
 
 
-        np = NewProc()
+        np = NewProcWithCtx()
 
         data  = b'\x01\x02\x03\x04'
         cnt = MemoryContent(data)
diff --git a/tests/core/logs.py b/tests/core/logs.py
index 96be519..69a4775 100644
--- a/tests/core/logs.py
+++ b/tests/core/logs.py
@@ -6,16 +6,16 @@
 
 
 from chrysacase import ChrysalideTestCase
-from pychrysalide.core import logs
+from pychrysalide import core
 
 
 class TestCoreLogs(ChrysalideTestCase):
-    """TestCase for analysis.core.logs."""
+    """TestCase for analysis.core.core."""
 
     def testDefaultLevel(self):
         """Ensure all messages are hidden by default."""
 
-        self.assertEqual(logs.get_verbosity(), logs.LMT_COUNT)
+        self.assertEqual(core.get_verbosity(), core.LMT_COUNT)
 
 
     def testWrongLevel(self):
@@ -23,7 +23,7 @@ class TestCoreLogs(ChrysalideTestCase):
 
         with self.assertRaisesRegex(Exception, 'argument 1 must be int, not str'):
 
-            logs.set_verbosity('XXX')
+            core.set_verbosity('XXX')
 
 
     def testWrongMessage(self):
@@ -31,4 +31,4 @@ class TestCoreLogs(ChrysalideTestCase):
 
         with self.assertRaisesRegex(Exception, 'Invalid type of message'):
 
-            logs.log_message(logs.LMT_COUNT, 'Message')
+            core.log_message(core.LMT_COUNT, 'Message')
diff --git a/tests/format/elf/non_existing_binary.py b/tests/format/elf/non_existing_binary.py
index a6eddd3..c984344 100644
--- a/tests/format/elf/non_existing_binary.py
+++ b/tests/format/elf/non_existing_binary.py
@@ -19,6 +19,6 @@ class TestNonExistingBinary(ChrysalideTestCase):
         cnt = FileContent('non_existing_binary')
         self.assertIsNone(cnt)
 
-        with self.assertRaisesRegex(TypeError, 'The argument must be an instance of BinContent.'):
+        with self.assertRaisesRegex(TypeError, 'argument 1 must be pychrysalide.analysis.BinContent, not None'):
 
-            fmt = ElfFormat(cnt, None, None)
+            fmt = ElfFormat(cnt)
diff --git a/tests/format/elf/oob_section_name.py b/tests/format/elf/oob_section_name.py
index a478ec7..64d7dc3 100644
--- a/tests/format/elf/oob_section_name.py
+++ b/tests/format/elf/oob_section_name.py
@@ -30,7 +30,20 @@ class TestNonExistingBinary(ChrysalideTestCase):
         fullname = sys.modules[cls.__module__].__file__
         dirpath = os.path.dirname(fullname)
 
-        os.system('make -C %s oob_section_name 2>&1 > /dev/null' % dirpath)
+        os.system('make -C %s oob_section_name > /dev/null 2>&1' % dirpath)
+
+
+    @classmethod
+    def tearDownClass(cls):
+
+        super(TestNonExistingBinary, cls).tearDownClass()
+
+        cls.log('Delete built binaries...')
+
+        fullname = sys.modules[cls.__module__].__file__
+        dirpath = os.path.dirname(fullname)
+
+        os.system('make -C %s clean > /dev/null 2>&1' % dirpath)
 
 
     def testOOBSectionName(self):
@@ -44,5 +57,5 @@ class TestNonExistingBinary(ChrysalideTestCase):
         cnt = FileContent(fullname[:baselen] + 'oob_section_name')
         self.assertIsNotNone(cnt)
 
-        fmt = ElfFormat(cnt, None, None)
+        fmt = ElfFormat(cnt)
         self.assertIsInstance(fmt, ElfFormat)
diff --git a/tests/format/elf/overlapping_areas.py b/tests/format/elf/overlapping_areas.py
index 4c78625..5e3ba07 100644
--- a/tests/format/elf/overlapping_areas.py
+++ b/tests/format/elf/overlapping_areas.py
@@ -16,6 +16,7 @@
 from chrysacase import ChrysalideTestCase
 from pychrysalide.analysis import LoadedBinary
 from pychrysalide.analysis.contents import FileContent
+from pychrysalide.format.elf import ElfFormat
 from threading import Event
 import os
 import sys
@@ -34,7 +35,20 @@ class TestOverlappingAreas(ChrysalideTestCase):
         fullname = sys.modules[cls.__module__].__file__
         dirpath = os.path.dirname(fullname)
 
-        os.system('make -C %s overlapping_areas 2>&1 > /dev/null' % dirpath)
+        os.system('make -C %s overlapping_areas > /dev/null 2>&1' % dirpath)
+
+
+    @classmethod
+    def tearDownClass(cls):
+
+        super(TestOverlappingAreas, cls).tearDownClass()
+
+        cls.log('Delete built binaries...')
+
+        fullname = sys.modules[cls.__module__].__file__
+        dirpath = os.path.dirname(fullname)
+
+        os.system('make -C %s clean > /dev/null 2>&1' % dirpath)
 
 
     def testOOBSectionName(self):
@@ -48,15 +62,9 @@ class TestOverlappingAreas(ChrysalideTestCase):
         cnt = FileContent(fullname[:baselen] + 'overlapping_areas')
         self.assertIsNotNone(cnt)
 
-        binary = LoadedBinary(cnt)
-
-        def disass_done(binary):
-            worker.set()
-
-        binary.connect('disassembly-done', disass_done)
-
-        worker = Event()
+        fmt = ElfFormat(cnt)
+        self.assertIsInstance(fmt, ElfFormat)
 
-        binary.analyse()
+        binary = LoadedBinary(fmt)
 
-        worker.wait()
+        binary.analyze_and_wait()
diff --git a/tests/format/elf/strings.py b/tests/format/elf/strings.py
index 0e09d75..71d365e 100644
--- a/tests/format/elf/strings.py
+++ b/tests/format/elf/strings.py
@@ -9,6 +9,7 @@ from chrysacase import ChrysalideTestCase
 from pychrysalide.analysis.contents import FileContent
 from pychrysalide.analysis import LoadedBinary
 from pychrysalide.arch import RawInstruction
+from pychrysalide.format.elf import ElfFormat
 from threading import Event
 import os
 import sys
@@ -27,7 +28,20 @@ class TestElfString(ChrysalideTestCase):
         fullname = sys.modules[cls.__module__].__file__
         dirpath = os.path.dirname(fullname)
 
-        os.system('make -C %s strings 2>&1 > /dev/null' % dirpath)
+        os.system('make -C %s strings > /dev/null 2>&1' % dirpath)
+
+
+    @classmethod
+    def tearDownClass(cls):
+
+        super(TestElfString, cls).tearDownClass()
+
+        cls.log('Delete built binaries...')
+
+        fullname = sys.modules[cls.__module__].__file__
+        dirpath = os.path.dirname(fullname)
+
+        os.system('make -C %s clean > /dev/null 2>&1' % dirpath)
 
 
     def testElfStrings(self):
@@ -41,19 +55,13 @@ class TestElfString(ChrysalideTestCase):
         cnt = FileContent(fullname[:baselen] + 'strings')
         self.assertIsNotNone(cnt)
 
-        binary = LoadedBinary(cnt)
-        self.assertIsNotNone(binary)
-
-        def disass_done(binary):
-            worker.set()
+        fmt = ElfFormat(cnt)
+        self.assertIsInstance(fmt, ElfFormat)
 
-        binary.connect('disassembly-done', disass_done)
-
-        worker = Event()
-
-        binary.analyse()
+        binary = LoadedBinary(fmt)
+        self.assertIsNotNone(binary)
 
-        worker.wait()
+        binary.analyze_and_wait()
 
         expected = {
             'hello_arm_str'        : False,
diff --git a/tests/format/errors.py b/tests/format/errors.py
index 36b7129..4ee38f1 100644
--- a/tests/format/errors.py
+++ b/tests/format/errors.py
@@ -27,7 +27,20 @@ class TestFormatErrors(ChrysalideTestCase):
         fullname = sys.modules[cls.__module__].__file__
         dirpath = os.path.dirname(fullname)
 
-        os.system('make -C %s%self strings 2>&1 > /dev/null' % (dirpath, os.sep))
+        os.system('make -C %s%self strings > /dev/null 2>&1' % (dirpath, os.sep))
+
+
+    @classmethod
+    def tearDownClass(cls):
+
+        super(TestFormatErrors, cls).tearDownClass()
+
+        cls.log('Delete built binaries...')
+
+        fullname = sys.modules[cls.__module__].__file__
+        dirpath = os.path.dirname(fullname)
+
+        os.system('make -C %s%self clean > /dev/null 2>&1' % (dirpath, os.sep))
 
 
     def testBasic(self):
@@ -49,7 +62,7 @@ class TestFormatErrors(ChrysalideTestCase):
         baselen = len(fullname) - len(filename)
 
         cnt = FileContent(fullname[:baselen] + 'elf' + os.sep + 'strings')
-        fmt = ElfFormat(cnt, None, None)
+        fmt = ElfFormat(cnt)
 
         for i in range(errlen):
 
-- 
cgit v0.11.2-87-g4458