2003-10-16 Havoc Pennington <hp@redhat.com>
[platform/upstream/dbus.git] / test / glib / test-dbus-glib.c
1 /* -*- mode: C; c-file-style: "gnu" -*- */
2 #include "dbus-glib.h"
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 int
8 main (int argc, char **argv)
9 {
10   DBusConnection *connection;
11   GMainLoop *loop;
12   GError *error;
13   DBusGProxy *driver;
14   DBusGProxy *proxy;
15   DBusPendingCall *call;
16   char **service_list;
17   int service_list_len;
18   int i;
19   dbus_uint32_t result;
20   char *str;
21   
22   g_type_init ();
23   
24   loop = g_main_loop_new (NULL, FALSE);
25
26   error = NULL;
27   connection = dbus_bus_get_with_g_main (DBUS_BUS_SESSION,
28                                          &error);
29   if (connection == NULL)
30     {
31       g_printerr ("Failed to open connection to bus: %s\n",
32                   error->message);
33       g_error_free (error);
34       exit (1);
35     }
36
37   /* Create a proxy object for the "bus driver" */
38   
39   driver = dbus_gproxy_new_for_service (connection,
40                                         DBUS_SERVICE_ORG_FREEDESKTOP_DBUS,
41                                         DBUS_PATH_ORG_FREEDESKTOP_DBUS,
42                                         DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS);
43
44   /* Call ListServices method */
45   
46   call = dbus_gproxy_begin_call (driver, "ListServices", DBUS_TYPE_INVALID);
47
48   error = NULL;
49   if (!dbus_gproxy_end_call (driver, call, &error,
50                              DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
51                              &service_list, &service_list_len,
52                              DBUS_TYPE_INVALID))
53     {
54       g_printerr ("Failed to complete ListServices call: %s\n",
55                   error->message);
56       g_error_free (error);
57       exit (1);
58     }
59
60   g_print ("Services on the message bus:\n");
61   i = 0;
62   while (i < service_list_len)
63     {
64       g_assert (service_list[i] != NULL);
65       g_print ("  %s\n", service_list[i]);
66       ++i;
67     }
68   g_assert (service_list[i] == NULL);
69   
70   dbus_free_string_array (service_list);
71
72   /* Test handling of unknown method */
73   call = dbus_gproxy_begin_call (driver, "ThisMethodDoesNotExist",
74                                  DBUS_TYPE_STRING,
75                                  "blah blah blah blah blah",
76                                  DBUS_TYPE_INT32,
77                                  10,
78                                  DBUS_TYPE_INVALID);
79
80   error = NULL;
81   if (dbus_gproxy_end_call (driver, call, &error,
82                             DBUS_TYPE_INVALID))
83     {
84       g_printerr ("Calling nonexistent method succeeded!\n");
85       exit (1);
86     }
87
88   g_print ("Got EXPECTED error from calling unknown method: %s\n",
89            error->message);
90   g_error_free (error);
91   
92   /* Activate a service */
93   call = dbus_gproxy_begin_call (driver, "ActivateService",
94                                  DBUS_TYPE_STRING,
95                                  "org.freedesktop.DBus.TestSuiteEchoService",
96                                  DBUS_TYPE_UINT32,
97                                  0,
98                                  DBUS_TYPE_INVALID);
99
100   error = NULL;
101   if (!dbus_gproxy_end_call (driver, call, &error,
102                              DBUS_TYPE_UINT32, &result,
103                              DBUS_TYPE_INVALID))
104     {
105       g_printerr ("Failed to complete Activate call: %s\n",
106                   error->message);
107       g_error_free (error);
108       exit (1);
109     }
110
111   g_print ("Activation of echo service = 0x%x\n", result);
112
113   /* Activate a service again */
114   call = dbus_gproxy_begin_call (driver, "ActivateService",
115                                  DBUS_TYPE_STRING,
116                                  "org.freedesktop.DBus.TestSuiteEchoService",
117                                  DBUS_TYPE_UINT32,
118                                  0,
119                                  DBUS_TYPE_INVALID);
120
121   error = NULL;
122   if (!dbus_gproxy_end_call (driver, call, &error,
123                              DBUS_TYPE_UINT32, &result,
124                              DBUS_TYPE_INVALID))
125     {
126       g_printerr ("Failed to complete Activate call: %s\n",
127                   error->message);
128       g_error_free (error);
129       exit (1);
130     }
131
132   g_print ("Duplicate activation of echo service = 0x%x\n", result);
133
134   /* Talk to the new service */
135   
136   proxy = dbus_gproxy_new_for_service (connection,
137                                        "org.freedesktop.DBus.TestSuiteEchoService",
138                                        "/fixme/the/test/service/ignores/this", /* FIXME */
139                                        "org.freedesktop.TestSuite");
140   
141   call = dbus_gproxy_begin_call (proxy, "Echo",
142                                  DBUS_TYPE_STRING,
143                                  "my string hello",
144                                  DBUS_TYPE_INVALID);
145
146   error = NULL;
147   if (!dbus_gproxy_end_call (proxy, call, &error,
148                              DBUS_TYPE_STRING, &str,
149                              DBUS_TYPE_INVALID))
150     {
151       g_printerr ("Failed to complete Echo call: %s\n",
152                   error->message);
153       g_error_free (error);
154       exit (1);
155     }
156
157   g_print ("String echoed = \"%s\"\n", str);
158   dbus_free (str);
159   
160   g_object_unref (G_OBJECT (driver));
161   g_object_unref (G_OBJECT (proxy));
162   
163   g_print ("Successfully completed %s\n", argv[0]);
164   
165   return 0;
166 }