6
from tests.utils import (
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,
23
from tests.gtk3.windows import (
24
get_test_window_appdetails,
25
get_test_window_catview,
29
class MemleakTestCase(unittest.TestCase):
30
"""The test suite for the recommendations ."""
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")
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")
48
do_events_with_sleep()
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")
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
64
do_events_with_sleep()
66
def test_memleak_catview(self):
68
win = get_test_window_catview(db)
69
lobby = win.get_data("lobby")
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()
77
def test_memleak_subcatview(self):
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")
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()
91
def test_memleak_app(self):
93
options.display_navlog = False
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)
105
do_events_with_sleep()
107
def test_memleak_pkginfo_open(self):
108
cache = get_pkg_info()
110
do_events_with_sleep()
111
with TraceMemoryUsage("PackageInfo.open()"):
112
for i in range(self.ITERATIONS):
114
do_events_with_sleep()
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()
126
if __name__ == "__main__":
127
logging.basicConfig(level=logging.WARN)