1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
#!/usr/bin/python3 -u
'''GNOME settings daemon tests for xsettings plugin.'''
__author__ = 'Bastien Nocera <hadess@hadess.net>'
__copyright__ = '(C) 2018 Red Hat, Inc.'
__license__ = 'GPL v2 or later'
import unittest
import subprocess
import sys
import time
import os
import os.path
import signal
import shutil
project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
builddir = os.environ.get('BUILDDIR', os.path.dirname(__file__))
sys.path.insert(0, os.path.join(project_root, 'tests'))
sys.path.insert(0, builddir)
import gsdtestcase
import dbus
import dbusmock
from output_checker import OutputChecker
from gi.repository import Gio
from gi.repository import GLib
class XsettingsPluginTest(gsdtestcase.GSDTestCase):
'''Test the xsettings plugin'''
gsd_plugin = 'xsettings'
gsd_plugin_case = 'XSettings'
def setUp(self):
self.start_logind()
self.addCleanup(self.stop_logind)
self.start_session()
self.addCleanup(self.stop_session)
self.obj_session_mgr = self.session_bus_con.get_object(
'org.gnome.SessionManager', '/org/gnome/SessionManager')
self.start_mutter()
self.addCleanup(self.stop_mutter)
Gio.Settings.sync()
os.environ['GSD_ignore_llvmpipe'] = '1'
# Setup fontconfig config path before starting the daemon
self.fc_dir = os.path.join(self.workdir, 'fontconfig')
os.environ['FONTCONFIG_PATH'] = self.fc_dir
try:
os.makedirs(self.fc_dir)
except:
pass
shutil.copy(os.path.join(os.path.dirname(__file__), 'fontconfig-test/fonts.conf'),
os.path.join(self.fc_dir, 'fonts.conf'))
# Setup GTK+ modules before starting the daemon
modules_dir = os.path.join(self.workdir, 'gtk-modules')
os.environ['GSD_gtk_modules_dir'] = modules_dir
try:
os.makedirs(modules_dir)
except:
pass
shutil.copy(os.path.join(os.path.dirname(__file__), 'gtk-modules-test/canberra-gtk-module.desktop'),
os.path.join(modules_dir, 'canberra-gtk-module.desktop'))
shutil.copy(os.path.join(os.path.dirname(__file__), 'gtk-modules-test/pk-gtk-module.desktop'),
os.path.join(modules_dir, 'pk-gtk-module.desktop'))
self.settings_sound = Gio.Settings.new('org.gnome.desktop.sound')
self.addCleanup(self.reset_settings, self.settings_sound)
Gio.Settings.sync()
env = os.environ.copy()
self.start_plugin(os.environ.copy())
# flush notification log
self.p_notify_log.clear()
self.plugin_log.check_line(b'GsdXSettingsGtk initializing', timeout=10)
obj_xsettings = self.session_bus_con.get_object(
'org.gtk.Settings', '/org/gtk/Settings')
self.obj_xsettings_props = dbus.Interface(obj_xsettings, dbus.PROPERTIES_IFACE)
def check_plugin_log(self, needle, timeout=0, failmsg=None):
'''Check that needle is found in the log within the given timeout.
Returns immediately when found.
Fail after the given timeout.
'''
self.plugin_log.check_line(needle, timeout=timeout, failmsg=failmsg)
def test_gtk_modules(self):
# Turn off event sounds
self.settings_sound['event-sounds'] = False
Gio.Settings.sync()
time.sleep(2)
# Verify that only the PackageKit plugin is enabled
self.assertEqual(self.obj_xsettings_props.Get('org.gtk.Settings', 'Modules'),
dbus.String('pk-gtk-module', variant_level=1))
# Turn on sounds
self.settings_sound['event-sounds'] = True
Gio.Settings.sync()
time.sleep(2)
# Check that both PK and canberra plugin are enabled
retval = self.obj_xsettings_props.Get('org.gtk.Settings', 'Modules')
values = sorted(str(retval).split(':'))
self.assertEqual(values, ['canberra-gtk-module', 'pk-gtk-module'])
def test_fontconfig_timestamp(self):
# Initially, the value is zero
before = self.obj_xsettings_props.Get('org.gtk.Settings', 'FontconfigTimestamp')
self.assertEqual(before, 0)
# Make sure the seconds changed
time.sleep(1)
# Copy the fonts.conf again
shutil.copy(os.path.join(os.path.dirname(__file__), 'fontconfig-test/fonts.conf'),
os.path.join(self.fc_dir, 'fonts.conf'))
# Wait for gsd-xsettings to pick up the change (and process it)
self.check_plugin_log("Fontconfig update successful", timeout=5, failmsg="Fontconfig was not updated!")
# Sleep a bit to ensure that the setting is updated
time.sleep(1)
after = self.obj_xsettings_props.Get('org.gtk.Settings', 'FontconfigTimestamp')
self.assertTrue(after > before)
# avoid writing to stderr
unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, verbosity=2))
|