示例#1
0
def test_clemory():
    """
    Some basic tests of the Clemory class
    """

    # directly write bytes to backers
    clemory = cle.Clemory(None, root=True)
    clemory.add_backer(0, "A" * 20)
    clemory.add_backer(20, "A" * 20)
    clemory.add_backer(50, "A" * 20)
    nose.tools.assert_equal(len(clemory._backers), 3)

    clemory.write_bytes_to_backer(10, "B" * 70)

    nose.tools.assert_equal(len(clemory._backers), 4)
    nose.tools.assert_equal("".join(clemory.read_bytes(0, 80)),
                            "A" * 10 + "B" * 70)

    clemory = cle.Clemory(None, root=True)
    clemory.add_backer(10, "A" * 20)
    clemory.add_backer(50, "A" * 20)
    nose.tools.assert_equal(len(clemory._backers), 2)
    clemory.write_bytes_to_backer(0, "")  # Should not except out
    nose.tools.assert_equal(len(clemory._backers), 2)
    clemory.write_bytes_to_backer(0, "B" * 10)
    nose.tools.assert_equal(len(clemory._backers), 3)
    nose.tools.assert_equal("".join(clemory.read_bytes(0, 25)),
                            "B" * 10 + "A" * 15)
示例#2
0
def test_cclemory():
    # This is a test case for C-backed Clemory.

    clemory = cle.Clemory(None, root=True)
    clemory.add_backer(0, "\x90" * 1000)
    clemory.add_backer(2000, "A" * 1000)
    clemory.add_backer(3000, "ABCDEFGH")
    clemory._flatten_to_c()

    ffi = cffi.FFI()
    ffi.cdef("""
        int memcmp(const void* s1, const void* s2, size_t n);
    """)
    c = ffi.verify("""
        #include <string.h>
    """)
    # pylint: disable=no-member
    byte_str = clemory.read_bytes_c(0)[0]
    out = c.memcmp(ffi.new("unsigned char []", "\x90" * 10), byte_str, 10)
    nose.tools.assert_equal(out, 0)

    byte_str = clemory.read_bytes_c(2000)[0]
    out = c.memcmp(ffi.new("unsigned char []", "B" * 1000), byte_str, 1000)
    nose.tools.assert_not_equal(out, 0)
    out = c.memcmp(ffi.new("unsigned char []", "A" * 1000), byte_str, 1000)
    nose.tools.assert_equal(out, 0)

    byte_str = clemory.read_bytes_c(3000)[0]
    out = c.memcmp(ffi.new("unsigned char []", "ABCDEFGH"), byte_str, 8)
    nose.tools.assert_equal(out, 0)
示例#3
0
def test_clemory_contains():

    clemory = cle.Clemory(None, root=True)
    nose.tools.assert_equal(clemory.min_addr, None)
    nose.tools.assert_equal(clemory.max_addr, None)
    nose.tools.assert_equal(clemory.consecutive, None)

    # Add one backer
    clemory.add_backer(0, "A" * 10)
    nose.tools.assert_equal(clemory.min_addr, 0)
    nose.tools.assert_equal(clemory.max_addr, 10)
    nose.tools.assert_equal(clemory.consecutive, True)

    # Add another backer
    clemory.add_backer(10, "B" * 20)
    nose.tools.assert_equal(clemory.min_addr, 0)
    nose.tools.assert_equal(clemory.max_addr, 30)
    nose.tools.assert_equal(clemory.consecutive, True)

    # Add one more
    clemory.add_backer(40, "A" * 30)
    nose.tools.assert_equal(clemory.min_addr, 0)
    nose.tools.assert_equal(clemory.max_addr, 70)
    nose.tools.assert_equal(clemory.consecutive, False)

    # Add another one to make it consecutive
    clemory.add_backer(30, "C" * 10)
    nose.tools.assert_equal(clemory.min_addr, 0)
    nose.tools.assert_equal(clemory.max_addr, 70)
    nose.tools.assert_equal(clemory.consecutive, True)