1#!/usr/bin/env python
2
3"""
4This is the first of many syscall tests
5"""
6
7import logging
8l = logging.getLogger("angr.tests")
9
10import angr
11import nose
12
13# load the tests
14import os
15test_location = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', '..', 'binaries', 'tests')
16p_rw = None
17p = None
18
19def setup_rw():
20    global p_rw
21    p_rw = angr.Project(os.path.join(test_location, 'x86_64', 'rw'),  use_sim_procedures=False)
22
23def setup_orwc():
24    global p
25    p = angr.Project(os.path.join(test_location, 'x86_64', 'orwc'),  use_sim_procedures=False)
26
27def setup_module():
28    setup_rw()
29    setup_orwc()
30
31def test_rw():
32    explore = angr.surveyors.Explorer(p_rw, find=[0x400100]).run()
33    path = explore.found[0]
34    state = path.state
35    system = state.get_plugin('posix')
36    w_len = system.get_file(1).pos
37    r_len = system.get_file(0).pos
38    r_len = state.solver.eval(r_len)
39
40    nose.tools.assert_equal(r_len, w_len)
41    nose.tools.assert_equal(32, r_len)
42
43
44def test_orwc():
45    four_files = angr.surveyors.Explorer(p, find=[0x400120]).run()
46    path = four_files.found[0]
47    state = path.state
48    system = state.get_plugin('posix')
49    num_files = len(system.files)
50    w_len = system.get_file(3).pos
51    r_len = system.get_file(0).pos
52    r_len = state.solver.eval(r_len)
53
54    after_close = angr.surveyors.Explorer(p, find=[0x400124]).run()
55    path = after_close.found[0]
56    state = path.state
57    system = state.get_plugin('posix')
58    files_ac = len(system.files) #files after close...so we expect one less file :)
59
60    nose.tools.assert_equal(4, num_files)
61    nose.tools.assert_equal(3, files_ac)
62    nose.tools.assert_equal(r_len, w_len)
63    nose.tools.assert_equal(32, r_len)
64
65
66if __name__ == '__main__':
67    try:
68        __import__('standard_logging')
69        __import__('angr_debug')
70    except ImportError:
71        pass
72
73    setup_module()
74    test_rw()
75    test_orwc()
76