]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blobdiff - tests/src/test-python-greeter
Return errors from all liblightdm methods
[sojka/lightdm.git] / tests / src / test-python-greeter
index b5b02eee6d0777f00a43605a8b929d946a7ef00e..6c8fa79b40a775a5bada780c4b0aeb2e0827f357 100755 (executable)
@@ -10,12 +10,17 @@ from gi.repository import GLib
 from gi.repository import LightDM
 
 display = os.getenv ('DISPLAY');
-if display is None:
-    greeter_id = 'GREETER-?'
-elif display.startswith (':'):
-    greeter_id = 'GREETER-X-%s' % display[1:]
+xdg_seat = os.getenv ('XDG_SEAT');
+xdg_vtnr = os.getenv ('XDG_VTNR');
+xdg_session_cookie = os.getenv ('XDG_SESSION_COOKIE');
+xdg_session_class = os.getenv ('XDG_SESSION_CLASS');
+if display is not None:
+    if display.startswith (':'):
+        greeter_id = 'GREETER-X-%s' % display[1:]
+    else:
+        greeter_id = 'GREETER-X-%s' % display
 else:
-    greeter_id = 'GREETER-X-%s' % display
+    greeter_id = 'GREETER-?'
 
 loop = GLib.MainLoop ()
 
@@ -71,13 +76,33 @@ def request_cb (channel, condition):
 
     r = '%s START-SESSION' % greeter_id
     if request == r:
-        if not greeter.start_session_sync (None):
-            status_notify ('%s SESSION-FAILED' % greeter_id)
+        try:
+            greeter.start_session_sync (None)
+        except GLib.Error as e:
+            status_notify ('%s SESSION-FAILED ERROR=%s' % (greeter_id, e.message))
 
     r = '%s START-SESSION SESSION=' % greeter_id
     if request.startswith (r):
-        if not greeter.start_session_sync (request[len(r):]):
-            status_notify ('%s SESSION-FAILED' % greeter_id)
+        try:
+            greeter.start_session_sync (request[len(r):])
+        except GLib.Error as e:
+            status_notify ('%s SESSION-FAILED ERROR=%s' % (greeter_id, e.message))
+
+    r = '%s LOG-USER-LIST-LENGTH' % greeter_id
+    if request == r:
+        status_notify ('%s LOG-USER-LIST-LENGTH N=%d' % (greeter_id, LightDM.UserList.get_instance ().get_length ()))
+
+    r = '%s LOG-USER USERNAME=' % greeter_id
+    if request.startswith (r):
+        username = request[len(r):]
+        user = LightDM.UserList.get_instance ().get_user_by_name (username)
+        status_notify ('%s LOG-USER USERNAME=%s' % (greeter_id, user.get_name ()))
+
+    r = '%s LOG-USER-LIST' % greeter_id
+    if request == r:
+        users = LightDM.UserList.get_instance ().get_users ();
+        for user in users:
+            status_notify ('%s LOG-USER USERNAME=%s' % (greeter_id, user.get_name ()))
 
     r = '%s LOG-LAYOUT' % greeter_id
     if request == r:
@@ -96,8 +121,8 @@ def request_cb (channel, condition):
     r = '%s LOG-LANGUAGE USERNAME=' % greeter_id
     if request.startswith (r):
         username = request[len(r):]
-        user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username)
-        language = lightdm_user_get_language (user)
+        user = LightDM.UserList.get_instance ().get_user_by_name (username)
+        language = user.get_language ()
         if language is None:
             language = ''
         status_notify ('%s LOG-LANGUAGE USERNAME=%s LANGUAGE=%s' % (greeter_id, username, language))
@@ -164,37 +189,63 @@ def request_cb (channel, condition):
 
     return True
 
-path = os.getenv ('LIGHTDM_TEST_ROOT') + '/.status-socket'
+def notify_hints (greeter):
+    if greeter.get_select_user_hint () is not None:
+        status_notify ('%s SELECT-USER-HINT USERNAME=%s' % (greeter_id, greeter.get_select_user_hint ()))
+    if greeter.get_select_guest_hint ():
+        status_notify ('%s SELECT-GUEST-HINT' % greeter_id)
+    if greeter.get_lock_hint ():
+        status_notify ('%s LOCK-HINT' % greeter_id)
+    if not greeter.get_has_guest_account_hint ():
+        status_notify ('%s HAS-GUEST-ACCOUNT-HINT=FALSE' % greeter_id)
+    if greeter.get_hide_users_hint ():
+        status_notify ('%s HIDE-USERS-HINT' % greeter_id)
+    if greeter.get_show_manual_login_hint ():
+        status_notify ('%s SHOW-MANUAL-LOGIN-HINT' % greeter_id)
+    if not greeter.get_show_remote_login_hint ():
+        status_notify ('%s SHOW-REMOTE-LOGIN-HINT=FALSE' % greeter_id)
+    timeout = greeter.get_autologin_timeout_hint ()
+    if greeter.get_autologin_user_hint () is not None:
+        if timeout != 0:
+            status_notify ('%s AUTOLOGIN-USER USERNAME=%s TIMEOUT=%d' % (greeter_id, greeter.get_autologin_user_hint (), timeout))
+        else:
+            status_notify ('%s AUTOLOGIN-USER USERNAME=%s' % (greeter_id, greeter.get_autologin_user_hint ()))
+    elif greeter.get_autologin_guest_hint ():
+        if timeout != 0:
+            status_notify ('%s AUTOLOGIN-GUEST TIMEOUT=%d' % (greeter_id, timeout))
+        else:
+            status_notify ('%s AUTOLOGIN-GUEST' % greeter_id)
+
+path = os.getenv ('LIGHTDM_TEST_ROOT') + '/.s'
 status_socket = socket.socket (socket.AF_UNIX, socket.SOCK_STREAM)
 status_socket.connect (path)
 GLib.io_add_watch (status_socket.fileno (), GLib.IO_IN | GLib.IO_HUP, request_cb)
 
-status_notify ('%s START' % greeter_id)
+status_text = '%s START' % greeter_id
+if xdg_seat is not None:
+    status_text += ' XDG_SEAT=%s' % xdg_seat
+if xdg_vtnr is not None:
+    status_text += ' XDG_VTNR=%s' % xdg_vtnr
+if xdg_session_cookie is not None:
+    status_text += ' XDG_SESSION_COOKIE=%s' % xdg_session_cookie
+if xdg_session_class is not None:
+    status_text += ' XDG_SESSION_CLASS=%s' % xdg_session_class
+status_notify (status_text)
+
+config = GLib.KeyFile ()
+config.load_from_file (os.getenv ('LIGHTDM_TEST_ROOT') + '/script', GLib.KeyFileFlags.NONE)
 
 # NOTE: There don't seem to be any good X bindings so we have to mock up our own...
-(host, display_number) = display.split (':')
-if host == '':
-    x_socket = socket.socket (socket.AF_UNIX, socket.SOCK_STREAM)
-    x_socket.connect (os.getenv ('LIGHTDM_TEST_ROOT') + '/tmp/' + display)
-else:
-    x_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
-    x_socket.connect ((host, 6000 + int (display_number)))
-authority = subprocess.check_output(['xauth', 'list']).split ()
-auth_name = ''
-auth_data = ''
-if len (authority) >= 3:
-    auth_name = authority[1]
-    hex = authority[2]
-    while len (hex) >= 2:
-        auth_data += chr (int (hex[:2], 16))
-        hex = hex[2:]
-def pad (value):
-    if len (value) % 4 != 0:
-        return value + '\x00' * (4 - len (value) % 4)
+if display is not None:
+    (host, display_number) = display.split (':')
+    if host == '':
+        x_socket = socket.socket (socket.AF_UNIX, socket.SOCK_STREAM)
+        x_socket.connect (os.getenv ('LIGHTDM_TEST_ROOT') + '/.x' + display)
     else:
-        return value
+        x_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
+        x_socket.connect ((host, 6000 + int (display_number)))
 
-status_notify ('%s CONNECT-XSERVER' % (greeter_id))
+    status_notify ('%s CONNECT-XSERVER' % (greeter_id))
 
 def show_message_cb (greeter, text, type):
     status_notify ('%s SHOW-MESSAGE TEXT=\"%s\"' % (greeter_id, text))
@@ -213,24 +264,51 @@ def authentication_complete_cb (greeter):
         status_notify ('%s AUTHENTICATION-COMPLETE AUTHENTICATED=%s' % (greeter_id, is_authenticated))
 
 def autologin_timer_expired_cb (greeter):
-    status_notify ('%s AUTOLOGIN-TIMER-EXPIRED' % greeter_id)
+    pass
 
 greeter = LightDM.Greeter ()
 greeter.connect ('show-message', show_message_cb)
 greeter.connect ('show-prompt', show_prompt_cb)
 greeter.connect ('authentication-complete', authentication_complete_cb)
 greeter.connect ('autologin-timer-expired', autologin_timer_expired_cb)
+resettable = False
+try:
+    resettable = config.get_boolean ('test-greeter-config', 'resettable')
+except:
+    pass
+if resettable:
+    LightDM.Greeter.get_instance ().set_resettable (True)
+    LightDM.Greeter.get_instance ().connect ('idle', idle_cb)
+    LightDM.Greeter.get_instance ().connect ('reset', reset_cb)
+
+def user_added_cb (user_list, user):
+    status_notify ('%s USER-ADDED USERNAME=%s' % (greeter_id, user.get_name ()))
+def user_removed_cb (user_list, user):
+    status_notify ('%s USER-REMOVED USERNAME=%s' % (greeter_id, user.get_name ()))
+log_user_changes = False
+try:
+    log_user_changes = config.get_boolean ('test-greeter-config', 'log-user-changes')
+except:
+    pass
+if log_user_changes:
+    LightDM.UserList.get_instance ().connect ('user-added', user_added_cb)
+    LightDM.UserList.get_instance ().connect ('user-removed', user_removed_cb)
 
 status_notify ('%s CONNECT-TO-DAEMON' % greeter_id)
-if not greeter.connect_sync ():
+try:
+    greeter.connect_to_daemon_sync ()
+except:
     status_notify ('%s FAIL-CONNECT-DAEMON' % greeter_id)
     exit (1)
 
 status_notify ('%s CONNECTED-TO-DAEMON' % greeter_id)
 
-if greeter.get_select_user_hint () is not None:
-    status_notify ('%s SELECT-USER-HINT USERNAME=%s' % (greeter_id, greeter.get_select_user_hint ()))
-if greeter.get_lock_hint ():
-    status_notify ('%s LOCK-HINT' % greeter_id);
+def idle_cb (greeter):
+    status_notify ('%s IDLE' % (greeter_id))
+def reset_cb (greeter):
+    status_notify ('%s RESET' % (greeter_id))
+    notify_hints (greeter)
+
+notify_hints (greeter)
 
 loop.run ()