Esempio n. 1
0
    def test_uncollectable(self):
        """Test uncollectable object tracking.

        This is fixed in Python 3.4 (PEP 442).
        """
        foo = Foo()
        foo.parent = foo

        enemy = Enemy()
        enemy.parent = enemy

        idfoo = id(foo)
        idenemy = id(enemy)

        del foo
        del enemy

        gb = GarbageGraph(collectable=0)

        gfoo = [x for x in gb.metadata if x.id == idfoo]
        self.assertEqual(len(gfoo), 0)
        genemy = [x for x in gb.metadata if x.id == idenemy]
        if sys.version_info < (3, 4):
            self.assertEqual(len(genemy), 1)

        self.assertEqual(gb.reduce_to_cycles(), None)
Esempio n. 2
0
    def test_prune(self):
        """Test pruning of reference graph.
        """
        foo = Foo()
        bar = Bar()

        foo.parent = foo
        foo.leaf = bar

        idb = id(bar)

        del foo
        del bar

        gb1 = GarbageGraph()
        gb2 = GarbageGraph(reduce=True)

        self.assertEqual(gb1.count, gb2.count)
        self.assertTrue(gb1.count > gb2.num_in_cycles)
        # Only foo and foo's __dict__ should be in the cycle
        self.assertEqual(gb2.num_in_cycles, 2)

        gbar = [x for x in gb1.metadata if x.id == idb]
        self.assertEqual(len(gbar), 1)
        gbar = [x for x in gb2.metadata if x.id == idb]
        self.assertEqual(len(gbar), 0)
Esempio n. 3
0
    def test_uncollectable(self):
        """Test uncollectable object tracking.

        This is fixed in Python 3.4 (PEP 442).
        """
        foo = Foo()
        foo.parent = foo

        enemy = Enemy()
        enemy.parent = enemy

        idfoo = id(foo)
        idenemy = id(enemy)

        del foo
        del enemy

        gb = GarbageGraph(collectable=0)

        gfoo = [x for x in gb.metadata if x.id == idfoo]
        self.assertEqual(len(gfoo), 0)
        genemy = [x for x in gb.metadata if x.id == idenemy]
        if sys.version_info < (3, 4):
            self.assertEqual(len(genemy), 1)

        self.assertEqual(gb.reduce_to_cycles(), None)
Esempio n. 4
0
    def test_write_graph(self):
        """Test writing graph as text.
        """
        foo = Foo()
        foo.parent = foo

        del foo

        g = GarbageGraph()
        g.write_graph("garbage.dot")
        os.unlink("garbage.dot")
Esempio n. 5
0
    def test_write_graph(self):
        """Test writing graph as text.
        """
        foo = Foo()
        foo.parent = foo

        del foo

        g = GarbageGraph()
        g.write_graph('garbage.dot')
        os.unlink('garbage.dot')
Esempio n. 6
0
    def test_findgarbage(self):
        """Test garbage annotation.
        """
        foo = Foo()
        bar = Bar()

        idfoo = id(foo)
        idbar = id(bar)

        foo.next = bar
        bar.prev = foo

        del foo
        del bar

        gb = GarbageGraph()

        self.assertEqual(gb.count, len(gc.garbage))
        self.assert_(gb.count >= 2, gb.count)

        gfoo = [x for x in gb.metadata if x.id == idfoo]
        self.assertEqual(len(gfoo), 1)
        gfoo = gfoo[0]
        self.assertEqual(gfoo.type, 'Foo')
        self.assert_(gfoo.size > 0, gfoo.size)
        self.assertNotEqual(gfoo.str, '')

        gbar = [x for x in gb.metadata if x.id == idbar]
        self.assertEqual(len(gbar), 1)
        gbar = gbar[0]
        self.assertEqual(gbar.type, 'Bar')
        self.assert_(gbar.size > 0, gbar.size)
        self.assertNotEqual(gbar.str, '')
Esempio n. 7
0
def _compute_garbage_graphs():
    """
    Retrieve garbage graph objects from cache, compute if cache is cold.
    """
    if server.garbage_graphs is None:
        server.garbage_graphs = GarbageGraph().split_and_sort()
    return server.garbage_graphs
Esempio n. 8
0
    def test_print_graph(self):
        """Test writing graph as text.
        """
        foo = Foo()
        foo.parent = foo
        del foo

        out = StringIO()
        GarbageGraph(reduce=True).print_stats(stream=out)
        self.assertTrue('Foo' in out.getvalue(), out.getvalue())
Esempio n. 9
0
    def test_split(self):
        """Test splitting into subgraphs.
        """
        foo = Foo()
        bar = Bar()

        idfoo = id(foo)
        idbar = id(bar)
        idfd = id(foo.__dict__)
        idbd = id(bar.__dict__)

        foo.next = bar
        bar.prev = foo

        l = []
        l.append(l)
        idl = id(l)

        del foo
        del bar
        del l

        gb = GarbageGraph()
        subs = gb.split_and_sort()
        self.assertEqual(len(subs), 2)

        self.assertEqual(subs[0].count, 4)
        self.assertEqual(subs[1].count, 1)
        fbg, lig = subs

        self.assert_(isinstance(fbg, GarbageGraph))
        self.assert_(isinstance(lig, GarbageGraph))

        self.assertEqual(len(fbg.edges), 4, fbg.edges)
        self.assertEqual(len(lig.edges), 1, lig.edges)

        self.assert_(_Edge(idl, idl, "") in lig.edges, lig.edges)

        self.assert_(_Edge(idfoo, idfd, "__dict__") in fbg.edges, fbg.edges)
        self.assert_(_Edge(idfd, idbar, "next") in fbg.edges, fbg.edges)
        self.assert_(_Edge(idbar, idbd, "__dict__") in fbg.edges, fbg.edges)
        self.assert_(_Edge(idbd, idfoo, "prev") in fbg.edges, fbg.edges)
Esempio n. 10
0
    def test_split(self):
        """Test splitting into subgraphs.
        """
        foo = Foo()
        bar = Bar()

        idfoo = id(foo)
        idbar = id(bar)
        idfd = id(foo.__dict__)
        idbd = id(bar.__dict__)

        foo.next = bar
        bar.prev = foo

        l = []
        l.append(l)
        idl = id(l)

        del foo
        del bar
        del l

        gb = GarbageGraph()
        subs = gb.split_and_sort()
        self.assertEqual(len(subs), 2)

        self.assertEqual(subs[0].count, 4)
        self.assertEqual(subs[1].count, 1)
        fbg, lig = subs

        self.assert_(isinstance(fbg, GarbageGraph))
        self.assert_(isinstance(lig, GarbageGraph))

        self.assertEqual(len(fbg.edges), 4, fbg.edges)
        self.assertEqual(len(lig.edges), 1, lig.edges)

        self.assert_(_Edge(idl, idl, '') in lig.edges, lig.edges)

        self.assert_(_Edge(idfoo, idfd, '__dict__') in fbg.edges, fbg.edges)
        self.assert_(_Edge(idfd, idbar, 'next') in fbg.edges, fbg.edges)
        self.assert_(_Edge(idbar, idbd, '__dict__') in fbg.edges, fbg.edges)
        self.assert_(_Edge(idbd, idfoo, 'prev') in fbg.edges, fbg.edges)
Esempio n. 11
0
    def test_render(self):
        """Test rendering of graph.
        """
        foo = Foo()
        foo.parent = foo
        foo.constructor = foo.__init__

        def leak_frame():
            frame = inspect.currentframe()

        leak_frame()
        del foo

        g = GarbageGraph()
        try:
            g.render("garbage.eps")
            g.render("garbage.eps", unflatten=True)
        except OSError:
            # Graphviz not installed.
            pass
        else:
            os.unlink("garbage.eps")
Esempio n. 12
0
    def test_prune(self):
        """Test pruning of reference graph.
        """
        foo = Foo()
        bar = Bar()

        foo.parent = foo
        foo.leaf = bar

        idb = id(bar)

        del foo
        del bar

        gb1 = GarbageGraph()
        gb2 = GarbageGraph(reduce=True)

        self.assertEqual(gb1.count, gb2.count)
        self.assert_(len(gb1.metadata) > len(gb2.metadata))

        gbar = [x for x in gb1.metadata if x.id == idb]
        self.assertEqual(len(gbar), 1)
        gbar = [x for x in gb2.metadata if x.id == idb]
        self.assertEqual(len(gbar), 0)

        full = StringIO()
        gb1.print_stats(stream=full)
        reduced = StringIO()
        gb2.print_stats(stream=reduced)
        lazy_reduce = StringIO()
        gb1_pruned = gb1.reduce_to_cycles()
        self.assertTrue(gb1_pruned is gb1.reduce_to_cycles())
        gb1_pruned.print_stats(stream=lazy_reduce)
        self.assertEqual(lazy_reduce.getvalue(), reduced.getvalue())

        self.assertTrue('Foo' in reduced.getvalue())
        self.assertFalse('Bar' in reduced.getvalue())
        self.assertTrue('Foo' in full.getvalue())
        self.assertTrue('Bar' in full.getvalue())
Esempio n. 13
0
    def test_uncollectable(self):
        """Test uncollectable object tracking.
        """
        foo = Foo()
        foo.parent = foo

        enemy = Enemy()
        enemy.parent = enemy

        idfoo = id(foo)
        idenemy = id(enemy)

        del foo
        del enemy

        gb = GarbageGraph(collectable=0)

        gfoo = [x for x in gb.metadata if x.id == idfoo]
        self.assertEqual(len(gfoo), 0)
        genemy = [x for x in gb.metadata if x.id == idenemy]
        self.assertEqual(len(genemy), 1)

        self.assertEqual(gb.reduce_to_cycles(), None)
Esempio n. 14
0
    def test_uncollectable(self):
        """Test uncollectable object tracking.
        """
        foo = Foo()
        foo.parent = foo

        enemy = Enemy()
        enemy.parent = enemy

        idfoo = id(foo)
        idenemy = id(enemy)

        del foo
        del enemy

        gb = GarbageGraph(collectable=0)

        gfoo = [x for x in gb.metadata if x.id == idfoo]
        self.assertEqual(len(gfoo), 0)
        genemy = [x for x in gb.metadata if x.id == idenemy]
        self.assertEqual(len(genemy), 1)

        self.assertEqual(gb.reduce_to_cycles(), None)
Esempio n. 15
0
    def test_prune(self):
        """Test pruning of reference graph.
        """
        foo = Foo()
        bar = Bar()

        foo.parent = foo
        foo.leaf = bar

        idb = id(bar)

        del foo
        del bar

        gb1 = GarbageGraph()
        gb2 = GarbageGraph(reduce=True)

        self.assertEqual(gb1.count, gb2.count)
        self.assert_(len(gb1.metadata) > len(gb2.metadata))

        gbar = [x for x in gb1.metadata if x.id == idb]
        self.assertEqual(len(gbar), 1)
        gbar = [x for x in gb2.metadata if x.id == idb]
        self.assertEqual(len(gbar), 0)

        full = StringIO()
        gb1.print_stats(stream=full)
        reduced = StringIO()
        gb2.print_stats(stream=reduced)
        lazy_reduce = StringIO()
        gb1_pruned = gb1.reduce_to_cycles()
        self.assertTrue(gb1_pruned is gb1.reduce_to_cycles())
        gb1_pruned.print_stats(stream=lazy_reduce)
        self.assertEqual(lazy_reduce.getvalue(), reduced.getvalue())

        self.assertTrue('Foo' in reduced.getvalue())
        self.assertFalse('Bar' in reduced.getvalue())
        self.assertTrue('Foo' in full.getvalue())
        self.assertTrue('Bar' in full.getvalue())
Esempio n. 16
0
    def test_edges_new(self):
        """Test referent identification for new-style classes.
        """
        foo = FooNew()
        bar = BarNew()

        idfoo = id(foo)
        idfd = id(foo.__dict__)
        idbar = id(bar)
        idbd = id(bar.__dict__)

        foo.next = bar
        bar.prev = foo

        del foo
        del bar

        gb = GarbageGraph()

        self.assert_(_Edge(idfoo, idfd, '__dict__') in gb.edges, gb.edges)
        self.assert_(_Edge(idfd, idbar, 'next') in gb.edges, gb.edges)
        self.assert_(_Edge(idbar, idbd, '__dict__') in gb.edges, gb.edges)
        self.assert_(_Edge(idbd, idfoo, 'prev') in gb.edges, gb.edges)
Esempio n. 17
0
    def test_render(self):
        """Test rendering of graph.
        """
        foo = Foo()
        foo.parent = foo
        foo.constructor = foo.__init__

        def leak_frame():
            frame = inspect.currentframe()

        leak_frame()
        del foo

        g = GarbageGraph()
        try:
            g.render('garbage.eps')
            g.render('garbage.eps', unflatten=True)
        except OSError:
            # Graphviz not installed.
            pass
        else:
            os.unlink('garbage.eps')
Esempio n. 18
0
 def test_empty(self):
     """Test empty garbage graph.
     """
     gb = GarbageGraph()
     self.assertEqual(gb.count, 0)
     self.assertEqual(gb.render("garbage.eps"), False)
Esempio n. 19
0
 def test_empty(self):
     """Test empty garbage graph.
     """
     gb = GarbageGraph()
     self.assertEqual(gb.count, 0)
     self.assertEqual(gb.render('garbage.eps'), False)