Update tests for new truncate behavior
[platform/upstream/glib.git] / gio / tests / gdbus-peer.c
index 152c588..f0e93b4 100644 (file)
 #include <gio/gnetworking.h>
 #include <gio/gunixsocketaddress.h>
 #include <gio/gunixfdlist.h>
+#include <gio/gcredentialsprivate.h>
 
-/* used in test_overflow */
 #ifdef G_OS_UNIX
 #include <gio/gunixconnection.h>
 #include <errno.h>
 #endif
 
-#if (defined(__linux__) || \
-  defined(__FreeBSD__) || \
-  defined(__FreeBSD_kernel__) || \
-  defined(__OpenBSD__))
-#define SHOULD_HAVE_CREDENTIALS_PASSING
-#endif
-
 #include "gdbus-tests.h"
 
-#include "gdbus-example-objectmanager-generated.h"
+#include "gdbus-object-manager-example/gdbus-example-objectmanager-generated.h"
 
 #ifdef G_OS_UNIX
 static gboolean is_unix = TRUE;
@@ -313,7 +306,7 @@ on_new_connection (GDBusServer *server,
 
   g_ptr_array_add (data->current_connections, g_object_ref (connection));
 
-#ifdef SHOULD_HAVE_CREDENTIALS_PASSING
+#if G_CREDENTIALS_SUPPORTED
     {
       GCredentials *credentials;
 
@@ -845,9 +838,8 @@ test_peer (void)
   g_error_free (error);
 #endif /* G_OS_UNIX */
 
-  /* Check that g_socket_get_credentials() work - this really should
-   * be in a GSocket-specific test suite but no such test suite exists
-   * right now.
+  /* Check that g_socket_get_credentials() work - (though this really
+   * should be in socket.c)
    */
   {
     GSocket *socket;
@@ -856,30 +848,15 @@ test_peer (void)
     g_assert (G_IS_SOCKET (socket));
     error = NULL;
     credentials = g_socket_get_credentials (socket, &error);
-#ifdef __linux__
-    {
-      struct ucred *native_creds;
-      g_assert_no_error (error);
-      g_assert (G_IS_CREDENTIALS (credentials));
-      native_creds = g_credentials_get_native (credentials, G_CREDENTIALS_TYPE_LINUX_UCRED);
-      g_assert (native_creds != NULL);
-      g_assert (native_creds->uid == getuid ());
-      g_assert (native_creds->gid == getgid ());
-      g_assert (native_creds->pid == getpid ());
-    }
-    g_object_unref (credentials);
-#elif defined (__OpenBSD__)
-    {
-      struct sockpeercred *native_creds;
-      g_assert_no_error (error);
-      g_assert (G_IS_CREDENTIALS (credentials));
-      native_creds = g_credentials_get_native (credentials, G_CREDENTIALS_TYPE_OPENBSD_SOCKPEERCRED);
-      g_assert (native_creds != NULL);
-      g_assert (native_creds->uid == getuid ());
-      g_assert (native_creds->gid == getgid ());
-      g_assert (native_creds->pid == getpid ());
-    }
-    g_object_unref (credentials);
+
+#if G_CREDENTIALS_SOCKET_GET_CREDENTIALS_SUPPORTED
+    g_assert_no_error (error);
+    g_assert (G_IS_CREDENTIALS (credentials));
+
+    g_assert_cmpuint (g_credentials_get_unix_user (credentials, NULL), ==,
+                      getuid ());
+    g_assert_cmpuint (g_credentials_get_unix_pid (credentials, NULL), ==,
+                      getpid ());
 #else
     g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED);
     g_assert (credentials == NULL);
@@ -1394,129 +1371,6 @@ test_credentials (void)
 
 /* ---------------------------------------------------------------------------------------------------- */
 
-#ifdef G_OS_UNIX
-
-/* Chosen to be big enough to overflow the socket buffer */
-#define OVERFLOW_NUM_SIGNALS 5000
-#define OVERFLOW_TIMEOUT_SEC 10
-
-static GDBusMessage *
-overflow_filter_func (GDBusConnection *connection,
-                      GDBusMessage    *message,
-                      gboolean         incoming,
-                      gpointer         user_data)
-{
-  volatile gint *counter = user_data;
-  *counter += 1;
-  return message;
-}
-
-static gboolean
-overflow_on_500ms_later_func (gpointer user_data)
-{
-  g_main_loop_quit (loop);
-  return FALSE; /* don't keep the idle */
-}
-
-static void
-test_overflow (void)
-{
-  gint sv[2];
-  gint n;
-  GSocket *socket;
-  GSocketConnection *socket_connection;
-  GDBusConnection *producer, *consumer;
-  GError *error;
-  GTimer *timer;
-  volatile gint n_messages_received;
-  volatile gint n_messages_sent;
-
-  g_assert_cmpint (socketpair (AF_UNIX, SOCK_STREAM, 0, sv), ==, 0);
-
-  error = NULL;
-  socket = g_socket_new_from_fd (sv[0], &error);
-  g_assert_no_error (error);
-  socket_connection = g_socket_connection_factory_create_connection (socket);
-  g_assert (socket_connection != NULL);
-  g_object_unref (socket);
-  producer = g_dbus_connection_new_sync (G_IO_STREAM (socket_connection),
-                                        NULL, /* guid */
-                                        G_DBUS_CONNECTION_FLAGS_NONE,
-                                        NULL, /* GDBusAuthObserver */
-                                        NULL, /* GCancellable */
-                                        &error);
-  g_dbus_connection_set_exit_on_close (producer, TRUE);
-  g_assert_no_error (error);
-  g_object_unref (socket_connection);
-  n_messages_sent = 0;
-  g_dbus_connection_add_filter (producer, overflow_filter_func, (gpointer) &n_messages_sent, NULL);
-
-  /* send enough data that we get an EAGAIN */
-  for (n = 0; n < OVERFLOW_NUM_SIGNALS; n++)
-    {
-      error = NULL;
-      g_dbus_connection_emit_signal (producer,
-                                     NULL, /* destination */
-                                     "/org/foo/Object",
-                                     "org.foo.Interface",
-                                     "Member",
-                                     g_variant_new ("(s)", "a string"),
-                                     &error);
-      g_assert_no_error (error);
-    }
-
-  /* sleep for 0.5 sec (to allow the GDBus IO thread to fill up the
-   * kernel buffers) and verify that n_messages_sent <
-   * OVERFLOW_NUM_SIGNALS
-   *
-   * This is to verify that not all the submitted messages have been
-   * sent to the underlying transport.
-   */
-  g_timeout_add (500, overflow_on_500ms_later_func, NULL);
-  g_main_loop_run (loop);
-  g_assert_cmpint (n_messages_sent, <, OVERFLOW_NUM_SIGNALS);
-
-  /* now suck it all out as a client, and add it up */
-  socket = g_socket_new_from_fd (sv[1], &error);
-  g_assert_no_error (error);
-  socket_connection = g_socket_connection_factory_create_connection (socket);
-  g_assert (socket_connection != NULL);
-  g_object_unref (socket);
-  consumer = g_dbus_connection_new_sync (G_IO_STREAM (socket_connection),
-                                        NULL, /* guid */
-                                        G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING,
-                                        NULL, /* GDBusAuthObserver */
-                                        NULL, /* GCancellable */
-                                        &error);
-  g_assert_no_error (error);
-  g_object_unref (socket_connection);
-  n_messages_received = 0;
-  g_dbus_connection_add_filter (consumer, overflow_filter_func, (gpointer) &n_messages_received, NULL);
-  g_dbus_connection_start_message_processing (consumer);
-
-  timer = g_timer_new ();
-  g_timer_start (timer);
-
-  while (n_messages_received < OVERFLOW_NUM_SIGNALS && g_timer_elapsed (timer, NULL) < OVERFLOW_TIMEOUT_SEC)
-      g_main_context_iteration (NULL, FALSE);
-
-  g_assert_cmpint (n_messages_sent, ==, OVERFLOW_NUM_SIGNALS);
-  g_assert_cmpint (n_messages_received, ==, OVERFLOW_NUM_SIGNALS);
-
-  g_timer_destroy (timer);
-  g_object_unref (consumer);
-  g_object_unref (producer);
-}
-#else
-static void
-test_overflow (void)
-{
-  /* TODO: test this with e.g. GWin32InputStream/GWin32OutputStream */
-}
-#endif
-
-/* ---------------------------------------------------------------------------------------------------- */
-
 static gboolean
 tcp_anonymous_on_new_connection (GDBusServer     *server,
                                  GDBusConnection *connection,
@@ -1871,9 +1725,9 @@ main (int   argc,
   g_test_add_func ("/gdbus/peer-to-peer", test_peer);
   g_test_add_func ("/gdbus/delayed-message-processing", delayed_message_processing);
   g_test_add_func ("/gdbus/nonce-tcp", test_nonce_tcp);
+
   g_test_add_func ("/gdbus/tcp-anonymous", test_tcp_anonymous);
   g_test_add_func ("/gdbus/credentials", test_credentials);
-  g_test_add_func ("/gdbus/overflow", test_overflow);
   g_test_add_func ("/gdbus/codegen-peer-to-peer", codegen_test_peer);
 
   ret = g_test_run();