Blame test_pytalloc.py

Packit Service fa3ceb
#!/usr/bin/env python3
Packit Service fa3ceb
# Simple tests for the talloc python bindings.
Packit Service fa3ceb
# Copyright (C) 2015 Petr Viktorin <pviktori@redhat.com>
Packit Service fa3ceb
Packit Service fa3ceb
import unittest
Packit Service fa3ceb
import subprocess
Packit Service fa3ceb
import sys
Packit Service fa3ceb
import gc
Packit Service fa3ceb
Packit Service fa3ceb
import talloc
Packit Service fa3ceb
import _test_pytalloc
Packit Service fa3ceb
Packit Service fa3ceb
Packit Service fa3ceb
def dummy_func():
Packit Service fa3ceb
    pass
Packit Service fa3ceb
Packit Service fa3ceb
Packit Service fa3ceb
class TallocTests(unittest.TestCase):
Packit Service fa3ceb
Packit Service fa3ceb
    def test_report_full(self):
Packit Service fa3ceb
        # report_full is hardcoded to print to stdout, so use a subprocess
Packit Service fa3ceb
        process = subprocess.Popen([
Packit Service fa3ceb
            sys.executable, '-c',
Packit Service fa3ceb
            """if True:
Packit Service fa3ceb
            import talloc, _test_pytalloc
Packit Service fa3ceb
            obj = _test_pytalloc.new()
Packit Service fa3ceb
            talloc.report_full(obj)
Packit Service fa3ceb
            """
Packit Service fa3ceb
        ], stdout=subprocess.PIPE)
Packit Service fa3ceb
        output, stderr = process.communicate()
Packit Service fa3ceb
        output = str(output)
Packit Service fa3ceb
        self.assertTrue("full talloc report on 'talloc.Object" in output)
Packit Service fa3ceb
        self.assertTrue("This is a test string" in output)
Packit Service fa3ceb
Packit Service fa3ceb
    def test_totalblocks(self):
Packit Service fa3ceb
        obj = _test_pytalloc.new()
Packit Service fa3ceb
        # Two blocks: the string, and the name
Packit Service fa3ceb
        self.assertEqual(talloc.total_blocks(obj), 2)
Packit Service fa3ceb
Packit Service fa3ceb
    def test_repr(self):
Packit Service fa3ceb
        obj = _test_pytalloc.new()
Packit Service fa3ceb
        prefix = '
Packit Service fa3ceb
        self.assertTrue(repr(obj).startswith(prefix))
Packit Service fa3ceb
        self.assertEqual(repr(obj), str(obj))
Packit Service fa3ceb
Packit Service fa3ceb
    def test_base_repr(self):
Packit Service fa3ceb
        obj = _test_pytalloc.base_new()
Packit Service fa3ceb
        prefix = '
Packit Service fa3ceb
        self.assertTrue(repr(obj).startswith(prefix))
Packit Service fa3ceb
        self.assertEqual(repr(obj), str(obj))
Packit Service fa3ceb
Packit Service fa3ceb
    def test_destructor(self):
Packit Service fa3ceb
        # Check correct lifetime of the talloc'd data
Packit Service fa3ceb
        lst = []
Packit Service fa3ceb
        obj = _test_pytalloc.DObject(lambda: lst.append('dead'))
Packit Service fa3ceb
        self.assertEqual(lst, [])
Packit Service fa3ceb
        del obj
Packit Service fa3ceb
        gc.collect()
Packit Service fa3ceb
        self.assertEqual(lst, ['dead'])
Packit Service fa3ceb
Packit Service fa3ceb
    def test_base_destructor(self):
Packit Service fa3ceb
        # Check correct lifetime of the talloc'd data
Packit Service fa3ceb
        lst = []
Packit Service fa3ceb
        obj = _test_pytalloc.DBaseObject(lambda: lst.append('dead'))
Packit Service fa3ceb
        self.assertEqual(lst, [])
Packit Service fa3ceb
        del obj
Packit Service fa3ceb
        gc.collect()
Packit Service fa3ceb
        self.assertEqual(lst, ['dead'])
Packit Service fa3ceb
Packit Service fa3ceb
Packit Service fa3ceb
class TallocComparisonTests(unittest.TestCase):
Packit Service fa3ceb
Packit Service fa3ceb
    def test_compare_same(self):
Packit Service fa3ceb
        obj1 = _test_pytalloc.new()
Packit Service fa3ceb
        self.assertTrue(obj1 == obj1)
Packit Service fa3ceb
        self.assertFalse(obj1 != obj1)
Packit Service fa3ceb
        self.assertTrue(obj1 <= obj1)
Packit Service fa3ceb
        self.assertFalse(obj1 < obj1)
Packit Service fa3ceb
        self.assertTrue(obj1 >= obj1)
Packit Service fa3ceb
        self.assertFalse(obj1 > obj1)
Packit Service fa3ceb
Packit Service fa3ceb
    def test_compare_different(self):
Packit Service fa3ceb
        # object comparison is consistent
Packit Service fa3ceb
        obj1, obj2 = sorted([
Packit Service fa3ceb
            _test_pytalloc.new(),
Packit Service fa3ceb
            _test_pytalloc.new()])
Packit Service fa3ceb
        self.assertFalse(obj1 == obj2)
Packit Service fa3ceb
        self.assertTrue(obj1 != obj2)
Packit Service fa3ceb
        self.assertTrue(obj1 <= obj2)
Packit Service fa3ceb
        self.assertTrue(obj1 < obj2)
Packit Service fa3ceb
        self.assertFalse(obj1 >= obj2)
Packit Service fa3ceb
        self.assertFalse(obj1 > obj2)
Packit Service fa3ceb
Packit Service fa3ceb
    def test_compare_different_types(self):
Packit Service fa3ceb
        # object comparison falls back to comparing types
Packit Service fa3ceb
        if sys.version_info >= (3, 0):
Packit Service fa3ceb
            # In Python 3, types are unorderable -- nothing to test
Packit Service fa3ceb
            return
Packit Service fa3ceb
        if talloc.Object < _test_pytalloc.DObject:
Packit Service fa3ceb
            obj1 = _test_pytalloc.new()
Packit Service fa3ceb
            obj2 = _test_pytalloc.DObject(dummy_func)
Packit Service fa3ceb
        else:
Packit Service fa3ceb
            obj2 = _test_pytalloc.new()
Packit Service fa3ceb
            obj1 = _test_pytalloc.DObject(dummy_func)
Packit Service fa3ceb
        self.assertFalse(obj1 == obj2)
Packit Service fa3ceb
        self.assertTrue(obj1 != obj2)
Packit Service fa3ceb
        self.assertTrue(obj1 <= obj2)
Packit Service fa3ceb
        self.assertTrue(obj1 < obj2)
Packit Service fa3ceb
        self.assertFalse(obj1 >= obj2)
Packit Service fa3ceb
        self.assertFalse(obj1 > obj2)
Packit Service fa3ceb
Packit Service fa3ceb
Packit Service fa3ceb
class TallocBaseComparisonTests(unittest.TestCase):
Packit Service fa3ceb
Packit Service fa3ceb
    def test_compare_same(self):
Packit Service fa3ceb
        obj1 = _test_pytalloc.base_new()
Packit Service fa3ceb
        self.assertTrue(obj1 == obj1)
Packit Service fa3ceb
        self.assertFalse(obj1 != obj1)
Packit Service fa3ceb
        self.assertTrue(obj1 <= obj1)
Packit Service fa3ceb
        self.assertFalse(obj1 < obj1)
Packit Service fa3ceb
        self.assertTrue(obj1 >= obj1)
Packit Service fa3ceb
        self.assertFalse(obj1 > obj1)
Packit Service fa3ceb
Packit Service fa3ceb
    def test_compare_different(self):
Packit Service fa3ceb
        # object comparison is consistent
Packit Service fa3ceb
        obj1, obj2 = sorted([
Packit Service fa3ceb
            _test_pytalloc.base_new(),
Packit Service fa3ceb
            _test_pytalloc.base_new()])
Packit Service fa3ceb
        self.assertFalse(obj1 == obj2)
Packit Service fa3ceb
        self.assertTrue(obj1 != obj2)
Packit Service fa3ceb
        self.assertTrue(obj1 <= obj2)
Packit Service fa3ceb
        self.assertTrue(obj1 < obj2)
Packit Service fa3ceb
        self.assertFalse(obj1 >= obj2)
Packit Service fa3ceb
        self.assertFalse(obj1 > obj2)
Packit Service fa3ceb
Packit Service fa3ceb
    def test_compare_different_types(self):
Packit Service fa3ceb
        # object comparison falls back to comparing types
Packit Service fa3ceb
        if sys.version_info >= (3, 0):
Packit Service fa3ceb
            # In Python 3, types are unorderable -- nothing to test
Packit Service fa3ceb
            return
Packit Service fa3ceb
        if talloc.BaseObject < _test_pytalloc.DBaseObject:
Packit Service fa3ceb
            obj1 = _test_pytalloc.base_new()
Packit Service fa3ceb
            obj2 = _test_pytalloc.DBaseObject(dummy_func)
Packit Service fa3ceb
        else:
Packit Service fa3ceb
            obj2 = _test_pytalloc.base_new()
Packit Service fa3ceb
            obj1 = _test_pytalloc.DBaseObject(dummy_func)
Packit Service fa3ceb
        self.assertFalse(obj1 == obj2)
Packit Service fa3ceb
        self.assertTrue(obj1 != obj2)
Packit Service fa3ceb
        self.assertTrue(obj1 <= obj2)
Packit Service fa3ceb
        self.assertTrue(obj1 < obj2)
Packit Service fa3ceb
        self.assertFalse(obj1 >= obj2)
Packit Service fa3ceb
        self.assertFalse(obj1 > obj2)
Packit Service fa3ceb
Packit Service fa3ceb
Packit Service fa3ceb
class TallocUtilTests(unittest.TestCase):
Packit Service fa3ceb
Packit Service fa3ceb
    def test_get_type(self):
Packit Service fa3ceb
        self.assertTrue(talloc.Object is _test_pytalloc.get_object_type())
Packit Service fa3ceb
Packit Service fa3ceb
    def test_reference(self):
Packit Service fa3ceb
        # Check correct lifetime of the talloc'd data with multiple references
Packit Service fa3ceb
        lst = []
Packit Service fa3ceb
        obj = _test_pytalloc.DObject(lambda: lst.append('dead'))
Packit Service fa3ceb
        ref = _test_pytalloc.reference(obj)
Packit Service fa3ceb
        del obj
Packit Service fa3ceb
        gc.collect()
Packit Service fa3ceb
        self.assertEqual(lst, [])
Packit Service fa3ceb
        del ref
Packit Service fa3ceb
        gc.collect()
Packit Service fa3ceb
        self.assertEqual(lst, ['dead'])
Packit Service fa3ceb
Packit Service fa3ceb
    def test_get_base_type(self):
Packit Service fa3ceb
        self.assertTrue(talloc.BaseObject is _test_pytalloc.base_get_object_type())
Packit Service fa3ceb
Packit Service fa3ceb
    def test_base_reference(self):
Packit Service fa3ceb
        # Check correct lifetime of the talloc'd data with multiple references
Packit Service fa3ceb
        lst = []
Packit Service fa3ceb
        obj = _test_pytalloc.DBaseObject(lambda: lst.append('dead'))
Packit Service fa3ceb
        ref = _test_pytalloc.base_reference(obj)
Packit Service fa3ceb
        del obj
Packit Service fa3ceb
        gc.collect()
Packit Service fa3ceb
        self.assertEqual(lst, [])
Packit Service fa3ceb
        del ref
Packit Service fa3ceb
        gc.collect()
Packit Service fa3ceb
        self.assertEqual(lst, ['dead'])
Packit Service fa3ceb
Packit Service fa3ceb
Packit Service fa3ceb
if __name__ == '__main__':
Packit Service fa3ceb
    unittest.TestProgram()