summaryrefslogtreecommitdiff
path: root/suite/unit.py
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2018-07-13 11:20:49 -0400
committerPeter LaFosse <peter@vector35.com>2018-07-13 11:20:49 -0400
commit30bbb5a8a18183e8e7921ddd047c4cdd14c360ea (patch)
tree37fd1d15c6b85572caf83bcf172e97949aa74f59 /suite/unit.py
parentd0c8cf49ecb114b81007920b2e4e2b1ae168dbc4 (diff)
parent838cb56a8505fc78d09befedd58dd632eeb2ee62 (diff)
Merging with dev
Diffstat (limited to 'suite/unit.py')
-rw-r--r--suite/unit.py206
1 files changed, 206 insertions, 0 deletions
diff --git a/suite/unit.py b/suite/unit.py
new file mode 100644
index 00000000..993daf41
--- /dev/null
+++ b/suite/unit.py
@@ -0,0 +1,206 @@
+#!/usr/bin/env python
+# This is an auto generated unit test file do not edit directly
+import os
+import unittest
+import pickle
+import zipfile
+import testcommon
+import binaryninja
+import api_test
+import difflib
+
+
+
+class TestBinaryNinjaAPI(unittest.TestCase):
+ @classmethod
+ def setUpClass(self):
+ self.builder = testcommon.TestBuilder("suite/binaries/test_corpus")
+ try:
+ #Python 2 does not have the encodings option
+ self.oracle_test_data = pickle.load(open(os.path.join("suite", "oracle.pkl"), "rUb"), errors="ignore")
+ except TypeError:
+ self.oracle_test_data = pickle.load(open(os.path.join("suite", "oracle.pkl"), "rU"))
+ self.verifybuilder = testcommon.VerifyBuilder("suite/binaries/test_corpus")
+
+ def run_binary_test(self, testfile):
+ testname = None
+ with zipfile.ZipFile(testfile, "r") as zf:
+ testname = zf.namelist()[0]
+ zf.extractall()
+
+ self.assertTrue(os.path.exists(testname + ".pkl"), "Test pickle doesn't exist")
+ try:
+ #Python 2 does not have the encodings option
+ binary_oracle = pickle.load(open(testname + ".pkl", "rUb"), errors="ignore")
+ except TypeError:
+ binary_oracle = pickle.load(open(testname + ".pkl", "rU"))
+
+ test_builder = testcommon.BinaryViewTestBuilder(testname, "suite/binaries/test_corpus")
+ for method in test_builder.methods():
+ test = getattr(test_builder, method)()
+ oracle = binary_oracle[method]
+ if test == oracle:
+ continue
+
+ result = getattr(test_builder, method).__doc__
+ result += ":\n"
+ d = difflib.Differ(charjunk=difflib.IS_CHARACTER_JUNK)
+ skipped_lines = 0
+ for delta in d.compare(test, oracle):
+ if delta[0] == ' ':
+ skipped_lines += 1
+ continue
+ if skipped_lines > 0:
+ result += "<---" + str(skipped_lines) + ' same lines--->\n'
+ skipped_lines = 0
+ delta = delta.replace('\n', '')
+ result += delta + '\n'
+ self.assertTrue(False, result)
+ os.unlink(testname)
+
+ def test_Architecture(self):
+ oracle = self.oracle_test_data['test_Architecture']
+ test = self.builder.test_Architecture()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_Architecture.__doc__, oracle, test))
+
+ def test_Architecture_list(self):
+ oracle = self.oracle_test_data['test_Architecture_list']
+ test = self.builder.test_Architecture_list()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_Architecture_list.__doc__, oracle, test))
+
+ def test_Assemble(self):
+ oracle = self.oracle_test_data['test_Assemble']
+ test = self.builder.test_Assemble()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_Assemble.__doc__, oracle, test))
+
+ def test_BinaryViewType_list(self):
+ oracle = self.oracle_test_data['test_BinaryViewType_list']
+ test = self.builder.test_BinaryViewType_list()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_BinaryViewType_list.__doc__, oracle, test))
+
+ def test_Enumeration(self):
+ oracle = self.oracle_test_data['test_Enumeration']
+ test = self.builder.test_Enumeration()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_Enumeration.__doc__, oracle, test))
+
+ def test_Function(self):
+ oracle = self.oracle_test_data['test_Function']
+ test = self.builder.test_Function()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_Function.__doc__, oracle, test))
+
+ def test_Plugin_bin_info(self):
+ oracle = self.oracle_test_data['test_Plugin_bin_info']
+ test = self.builder.test_Plugin_bin_info()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_Plugin_bin_info.__doc__, oracle, test))
+
+ def test_Struct(self):
+ oracle = self.oracle_test_data['test_Struct']
+ test = self.builder.test_Struct()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_Struct.__doc__, oracle, test))
+
+ def test_Types(self):
+ oracle = self.oracle_test_data['test_Types']
+ test = self.builder.test_Types()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_Types.__doc__, oracle, test))
+
+ def test_events(self):
+ oracle = self.oracle_test_data['test_events']
+ test = self.builder.test_events()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_events.__doc__, oracle, test))
+
+ def test_linear_disassembly(self):
+ oracle = self.oracle_test_data['test_linear_disassembly']
+ test = self.builder.test_linear_disassembly()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_linear_disassembly.__doc__, oracle, test))
+
+ def test_low_il_stack(self):
+ oracle = self.oracle_test_data['test_low_il_stack']
+ test = self.builder.test_low_il_stack()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_low_il_stack.__doc__, oracle, test))
+
+ def test_med_il_stack(self):
+ oracle = self.oracle_test_data['test_med_il_stack']
+ test = self.builder.test_med_il_stack()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_med_il_stack.__doc__, oracle, test))
+
+ def test_partial_register_dataflow(self):
+ oracle = self.oracle_test_data['test_partial_register_dataflow']
+ test = self.builder.test_partial_register_dataflow()
+ self.assertTrue(oracle == test, "%s:\n'%s' does not equal\n'%s'" % (self.builder.test_partial_register_dataflow.__doc__, oracle, test))
+
+ def test_verify_BNDB_round_trip(self):
+ self.assertTrue(self.verifybuilder.test_verify_BNDB_round_trip(), self.test_verify_BNDB_round_trip.__doc__)
+
+ def test_binary___aliased_jumptable(self):
+ self.run_binary_test('suite/binaries/test_corpus/aliased_jumptable.zip')
+
+ def test_binary___byte_jump_table(self):
+ self.run_binary_test('suite/binaries/test_corpus/byte_jump_table.zip')
+
+ def test_binary___duff(self):
+ self.run_binary_test('suite/binaries/test_corpus/duff.zip')
+
+ def test_binary___helloworld(self):
+ self.run_binary_test('suite/binaries/test_corpus/helloworld.zip')
+
+ def test_binary___helloworld_armeb(self):
+ self.run_binary_test('suite/binaries/test_corpus/helloworld_armeb.zip')
+
+ def test_binary___integer_test(self):
+ self.run_binary_test('suite/binaries/test_corpus/integer_test.zip')
+
+ def test_binary___interprocedural_alias(self):
+ self.run_binary_test('suite/binaries/test_corpus/interprocedural_alias.zip')
+
+ def test_binary___jump_loop(self):
+ self.run_binary_test('suite/binaries/test_corpus/jump_loop.zip')
+
+ def test_binary___jumptable_aarch64(self):
+ self.run_binary_test('suite/binaries/test_corpus/jumptable_aarch64.zip')
+
+ def test_binary___jumptable_mips32(self):
+ self.run_binary_test('suite/binaries/test_corpus/jumptable_mips32.zip')
+
+ def test_binary___jumptable_multiple_indirect(self):
+ self.run_binary_test('suite/binaries/test_corpus/jumptable_multiple_indirect.zip')
+
+ def test_binary___jumptable_no_range_check(self):
+ self.run_binary_test('suite/binaries/test_corpus/jumptable_no_range_check.zip')
+
+ def test_binary___jumptable_reordered(self):
+ self.run_binary_test('suite/binaries/test_corpus/jumptable_reordered.zip')
+
+ def test_binary___jumptable_x86(self):
+ self.run_binary_test('suite/binaries/test_corpus/jumptable_x86.zip')
+
+ def test_binary___jumptable_x86_64(self):
+ self.run_binary_test('suite/binaries/test_corpus/jumptable_x86_64.zip')
+
+ def test_binary___loop_constant_propagate(self):
+ self.run_binary_test('suite/binaries/test_corpus/loop_constant_propagate.zip')
+
+ def test_binary___partial_register_dataflow(self):
+ self.run_binary_test('suite/binaries/test_corpus/partial_register_dataflow.zip')
+
+ def test_binary___pe_thumb(self):
+ self.run_binary_test('suite/binaries/test_corpus/pe_thumb.zip')
+
+ def test_binary___quick3dcoreplugin_dll(self):
+ self.run_binary_test('suite/binaries/test_corpus/quick3dcoreplugin.dll.zip')
+
+ def test_binary___rangecheck(self):
+ self.run_binary_test('suite/binaries/test_corpus/rangecheck.zip')
+
+ def test_binary___switch_linux_ppc_le_32(self):
+ self.run_binary_test('suite/binaries/test_corpus/switch_linux_ppc_le_32.zip')
+
+ def test_binary___x87(self):
+ self.run_binary_test('suite/binaries/test_corpus/x87.zip')
+
+
+if __name__ == "__main__":
+
+ test_suite = unittest.defaultTestLoader.loadTestsFromModule(api_test)
+ test_suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestBinaryNinjaAPI))
+ runner = unittest.TextTestRunner(verbosity=2)
+ runner.run(test_suite)