Skip to content

Commit 7f3eac5

Browse files
committed
Test if language can be retrieved when accounts service not running
1 parent 8438ce4 commit 7f3eac5

File tree

5 files changed

+62
-11
lines changed

5 files changed

+62
-11
lines changed

liblightdm-gobject/user.c

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -768,11 +768,16 @@ update_users (LightDMUserList *user_list)
768768
}
769769
else
770770
{
771+
const gchar *passwd_filename;
771772
GFile *passwd_file;
772773

773774
load_passwd_file (user_list, FALSE);
774775

775776
/* Watch for changes to user list */
777+
778+
passwd_filename = g_getenv ("LIGHTDM_TEST_PASSWD_FILE");
779+
if (!passwd_filename)
780+
passwd_filename = PASSWD_FILE;
776781
passwd_file = g_file_new_for_path (PASSWD_FILE);
777782
priv->passwd_monitor = g_file_monitor (passwd_file, G_FILE_MONITOR_NONE, NULL, &error);
778783
g_object_unref (passwd_file);
@@ -1127,14 +1132,9 @@ load_dmrc (LightDMUser *user)
11271132

11281133
// FIXME: Watch for changes
11291134

1135+
/* The Language field is actually a locale, strip the codeset off it to get the language */
11301136
if (priv->language)
11311137
g_free (priv->language);
1132-
if (priv->layout)
1133-
g_free (priv->layout);
1134-
if (priv->session)
1135-
g_free (priv->session);
1136-
1137-
/* The Language field is actually a locale, strip the codeset off it to get the language */
11381138
priv->language = g_key_file_get_string (priv->dmrc_file, "Desktop", "Language", NULL);
11391139
if (priv->language)
11401140
{
@@ -1143,7 +1143,12 @@ load_dmrc (LightDMUser *user)
11431143
*codeset = '\0';
11441144
}
11451145

1146+
if (priv->layout)
1147+
g_free (priv->layout);
11461148
priv->layout = g_key_file_get_string (priv->dmrc_file, "Desktop", "Layout", NULL);
1149+
1150+
if (priv->session)
1151+
g_free (priv->session);
11471152
priv->session = g_key_file_get_string (priv->dmrc_file, "Desktop", "Session", NULL);
11481153
}
11491154

@@ -1189,15 +1194,16 @@ load_accounts_service (LightDMUser *user)
11891194
{
11901195
LightDMUserPrivate *priv = GET_USER_PRIVATE (user);
11911196
LightDMUserListPrivate *list_priv = GET_LIST_PRIVATE (priv->user_list);
1192-
1193-
/* First, find AccountObject proxy */
11941197
UserAccountObject *account = NULL;
11951198
GList *iter;
1199+
1200+
/* First, find AccountObject proxy */
11961201
for (iter = list_priv->user_account_objects; iter; iter = iter->next)
11971202
{
1198-
if (((UserAccountObject *)iter->data)->user == user)
1203+
UserAccountObject *a = iter->data;
1204+
if (a->user == user)
11991205
{
1200-
account = (UserAccountObject *)iter->data;
1206+
account = a;
12011207
break;
12021208
}
12031209
}
@@ -1207,9 +1213,9 @@ load_accounts_service (LightDMUser *user)
12071213
/* We have proxy, let's grab some properties */
12081214
if (priv->language)
12091215
g_free (priv->language);
1216+
priv->language = get_string_property (account->proxy, "Language");
12101217
if (priv->session)
12111218
g_free (priv->session);
1212-
priv->language = get_string_property (account->proxy, "Language");
12131219
priv->session = get_string_property (account->proxy, "XSession");
12141220

12151221
return TRUE;

src/display.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,7 @@ create_session (Display *display, PAMSession *authentication, const gchar *sessi
507507
session_set_env (session, "LIGHTDM_TEST_STATUS_SOCKET", g_getenv ("LIGHTDM_TEST_STATUS_SOCKET"));
508508
session_set_env (session, "LIGHTDM_TEST_CONFIG", g_getenv ("LIGHTDM_TEST_CONFIG"));
509509
session_set_env (session, "LIGHTDM_TEST_HOME_DIR", g_getenv ("LIGHTDM_TEST_HOME_DIR"));
510+
session_set_env (session, "LIGHTDM_TEST_PASSWD_FILE", g_getenv ("LIGHTDM_TEST_PASSWD_FILE"));
510511
session_set_env (session, "DBUS_SYSTEM_BUS_ADDRESS", g_getenv ("DBUS_SYSTEM_BUS_ADDRESS"));
511512
session_set_env (session, "DBUS_SESSION_BUS_ADDRESS", g_getenv ("DBUS_SESSION_BUS_ADDRESS"));
512513
session_set_env (session, "LD_PRELOAD", g_getenv ("LD_PRELOAD"));

tests/Makefile.am

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ TESTS = \
1919
test-autologin-guest-logout \
2020
test-keyboard-layout \
2121
test-no-keyboard-layout \
22+
test-language \
23+
test-no-language \
24+
test-language-no-accounts-service \
2225
test-login-gobject \
2326
test-login-gobject-manual \
2427
test-login-gobject-manual-previous-session \
@@ -104,6 +107,7 @@ EXTRA_DIST = \
104107
scripts/home-dir-on-authenticate.conf \
105108
scripts/keyboard-layout.conf \
106109
scripts/language.conf \
110+
scripts/language-no-accounts-service.conf \
107111
scripts/login.conf \
108112
scripts/login-guest.conf \
109113
scripts/login-guest-disabled.conf \
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#
2+
# Check returns correct language for a user when Accounts Service is not running
3+
#
4+
5+
[test-runner-config]
6+
disable-accounts-service=true
7+
8+
[LightDM]
9+
minimum-display-number=50
10+
11+
[test-greeter-config]
12+
log-language=bob
13+
14+
#?RUNNER DAEMON-START
15+
16+
# X server starts
17+
#?XSERVER :50 START
18+
#?XSERVER :50 INDICATE-READY
19+
20+
# LightDM connects to X server
21+
#?XSERVER :50 ACCEPT-CONNECT
22+
23+
# Greeter starts
24+
#?GREETER START
25+
#?XSERVER :50 ACCEPT-CONNECT
26+
#?GREETER CONNECT-XSERVER :50
27+
#?GREETER CONNECT-TO-DAEMON
28+
#?GREETER CONNECTED-TO-DAEMON
29+
30+
# Correct layout is found
31+
#?GREETER GET-LANGUAGE USERNAME=bob LANGUAGE=en_AU
32+
33+
# Cleanup
34+
#?*STOP-DAEMON
35+
# Don't know what order they will terminate
36+
#?(GREETER TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
37+
#?(GREETER TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
38+
#?RUNNER DAEMON-EXIT STATUS=0
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/bin/sh
2+
./src/dbus-env ./src/test-runner language-no-accounts-service test-gobject-greeter

0 commit comments

Comments
 (0)