~ubuntu-branches/ubuntu/raring/software-center/raring-proposed

« back to all changes in this revision

Viewing changes to tests/gtk3/test_memleak.py

  • Committer: Package Import Robot
  • Author(s): Michael Vogt
  • Date: 2012-10-11 15:33:05 UTC
  • mfrom: (195.1.18 quantal)
  • Revision ID: package-import@ubuntu.com-20121011153305-fm5ln7if3rpzts4n
Tags: 5.4.1.1
* lp:~mvo/software-center/reinstall-previous-purchase-token-fix:
  - fix reinstall previous purchases that have a system-wide
    license key LP: #1065481
* lp:~mvo/software-center/lp1060106:
  - Add missing gettext init for utils/update-software-center-agent
    (LP: #1060106)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import logging
 
2
import unittest
 
3
 
 
4
from mock import Mock
 
5
 
 
6
from tests.utils import (
 
7
    do_events_with_sleep,
 
8
    get_test_db,
 
9
    setup_test_env,
 
10
)
 
11
setup_test_env()
 
12
 
 
13
 
 
14
from softwarecenter.backend.installbackend import get_install_backend
 
15
from softwarecenter.db.application import Application
 
16
from softwarecenter.db.pkginfo import get_pkg_info
 
17
from softwarecenter.ui.gtk3.app import SoftwareCenterAppGtk3
 
18
from softwarecenter.utils import (
 
19
    TraceActiveObjectTypes,
 
20
    TraceMemoryUsage,
 
21
    )
 
22
 
 
23
from tests.gtk3.windows import (
 
24
    get_test_window_appdetails,
 
25
    get_test_window_catview,
 
26
    )
 
27
 
 
28
 
 
29
class MemleakTestCase(unittest.TestCase):
 
30
    """The test suite for the recommendations ."""
 
31
 
 
32
    ITERATIONS = 2
 
33
 
 
34
    def test_memleak_app_recommendations(self):
 
35
        cache = get_pkg_info()
 
36
        cache.open(blocking=True)
 
37
        win = get_test_window_appdetails()
 
38
        view = win.get_data("view")
 
39
        app = Application("", "gedit")
 
40
        # get baseline
 
41
        view.show_app(app)
 
42
        do_events_with_sleep()
 
43
        with TraceMemoryUsage("AppdetailsView.show_app()"):
 
44
            with TraceActiveObjectTypes("view.recommended_for_app.set_pkgname"):
 
45
                for i in range(self.ITERATIONS):
 
46
                    view.recommended_for_app_panel.set_pkgname("gedit")
 
47
                    cache.open()
 
48
                    do_events_with_sleep()
 
49
 
 
50
    def test_memleak_appdetails(self):
 
51
        cache = get_pkg_info()
 
52
        cache.open(blocking=True)
 
53
        win = get_test_window_appdetails()
 
54
        view = win.get_data("view")
 
55
        app = Application("", "gedit")
 
56
        # get baseline
 
57
        view.show_app(app)
 
58
        do_events_with_sleep()
 
59
        with TraceMemoryUsage("AppdetailsView.show_app()"):
 
60
            for i in range(self.ITERATIONS):
 
61
                view.show_app(app, force=True)
 
62
                # this causes a huge memleak of ~35mb/run
 
63
                cache.open()
 
64
                do_events_with_sleep()
 
65
 
 
66
    def test_memleak_catview(self):
 
67
        db = get_test_db()
 
68
        win = get_test_window_catview(db)
 
69
        lobby = win.get_data("lobby")
 
70
        # get baseline
 
71
        do_events_with_sleep()
 
72
        with TraceMemoryUsage("LobbyView.on_db_reopen()"):
 
73
            for i in range(self.ITERATIONS):
 
74
                lobby._on_db_reopen(db)
 
75
                do_events_with_sleep()
 
76
 
 
77
    def test_memleak_subcatview(self):
 
78
        db = get_test_db()
 
79
        win = get_test_window_catview(db)
 
80
        lobby =  win.get_data("lobby")
 
81
        cat = [cat for cat in lobby.categories if cat.name == "Internet"][0]
 
82
        subcat = win.get_data("subcat")
 
83
        # get baseline
 
84
        subcat.set_subcategory(cat)
 
85
        do_events_with_sleep()
 
86
        with TraceMemoryUsage("SubcategoryView.set_subcategory()"):
 
87
            for i in range(self.ITERATIONS):
 
88
                subcat._set_subcategory(cat, 0)
 
89
                do_events_with_sleep()
 
90
 
 
91
    def test_memleak_app(self):
 
92
        options = Mock()
 
93
        options.display_navlog = False
 
94
        args = []
 
95
        # ensure the cache is fully ready before taking the baseline
 
96
        cache = get_pkg_info()
 
97
        cache.open(blocking=True)
 
98
        app = SoftwareCenterAppGtk3(options, args)
 
99
        app.window_main.show_all()
 
100
        do_events_with_sleep()
 
101
        with TraceMemoryUsage("app._on_transaction_finished"):
 
102
            for i in range(self.ITERATIONS):
 
103
                app._on_transaction_finished(None, None)
 
104
                cache.open()
 
105
                do_events_with_sleep()
 
106
 
 
107
    def test_memleak_pkginfo_open(self):
 
108
        cache = get_pkg_info()
 
109
        cache.open()
 
110
        do_events_with_sleep()
 
111
        with TraceMemoryUsage("PackageInfo.open()"):
 
112
            for i in range(self.ITERATIONS):
 
113
                cache.open()
 
114
                do_events_with_sleep()
 
115
 
 
116
    def test_memleak_backend_finished(self):
 
117
        backend = get_install_backend()
 
118
        backend.emit("transaction-finished", Mock())
 
119
        do_events_with_sleep()
 
120
        with TraceMemoryUsage("backend.emit('transaction-finished')"):
 
121
            for i in range(self.ITERATIONS):
 
122
                backend.emit("transaction-finished", Mock())
 
123
                do_events_with_sleep()
 
124
 
 
125
 
 
126
if __name__ == "__main__":
 
127
    logging.basicConfig(level=logging.WARN)
 
128
    unittest.main()