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 141
|
#!/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(needs_x11=True)
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())
self.addCleanup(self.stop_plugin)
# 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))
|