libproxy: fix handling of SOCKS in async API, add tests
[platform/upstream/glib-networking.git] / proxy / tests / gnome.c
1 /* GProxyResolverGnome tests
2  *
3  * Copyright 2011 Red Hat, Inc.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General
16  * Public License along with this library; if not, see
17  * <http://www.gnu.org/licenses/>.
18  */
19
20 #include <gio/gio.h>
21 #include <gdesktop-enums.h>
22
23 #include "common.c"
24
25 #define GNOME_PROXY_SETTINGS_SCHEMA       "org.gnome.system.proxy"
26 #define GNOME_PROXY_MODE_KEY              "mode"
27 #define GNOME_PROXY_AUTOCONFIG_URL_KEY    "autoconfig-url"
28 #define GNOME_PROXY_IGNORE_HOSTS_KEY      "ignore-hosts"
29 #define GNOME_PROXY_USE_SAME_PROXY_KEY    "use-same-proxy"
30
31 #define GNOME_PROXY_HTTP_CHILD_SCHEMA     "http"
32 #define GNOME_PROXY_HTTP_HOST_KEY         "host"
33 #define GNOME_PROXY_HTTP_PORT_KEY         "port"
34 #define GNOME_PROXY_HTTP_USE_AUTH_KEY     "use-authentication"
35 #define GNOME_PROXY_HTTP_USER_KEY         "authentication-user"
36 #define GNOME_PROXY_HTTP_PASSWORD_KEY     "authentication-password"
37
38 #define GNOME_PROXY_HTTPS_CHILD_SCHEMA    "https"
39 #define GNOME_PROXY_HTTPS_HOST_KEY        "host"
40 #define GNOME_PROXY_HTTPS_PORT_KEY        "port"
41
42 #define GNOME_PROXY_FTP_CHILD_SCHEMA      "ftp"
43 #define GNOME_PROXY_FTP_HOST_KEY          "host"
44 #define GNOME_PROXY_FTP_PORT_KEY          "port"
45
46 #define GNOME_PROXY_SOCKS_CHILD_SCHEMA    "socks"
47 #define GNOME_PROXY_SOCKS_HOST_KEY        "host"
48 #define GNOME_PROXY_SOCKS_PORT_KEY        "port"
49
50 static void
51 reset_proxy_settings (gpointer      fixture,
52                       gconstpointer user_data)
53 {
54   GSettings *settings, *child;
55
56   settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA);
57   g_settings_reset (settings, GNOME_PROXY_MODE_KEY);
58   g_settings_reset (settings, GNOME_PROXY_USE_SAME_PROXY_KEY);
59
60   child = g_settings_get_child (settings, GNOME_PROXY_HTTP_CHILD_SCHEMA);
61   g_settings_reset (child, GNOME_PROXY_HTTP_HOST_KEY);
62   g_settings_reset (child, GNOME_PROXY_HTTP_PORT_KEY);
63   g_object_unref (child);
64
65   child = g_settings_get_child (settings, GNOME_PROXY_HTTPS_CHILD_SCHEMA);
66   g_settings_reset (child, GNOME_PROXY_HTTPS_HOST_KEY);
67   g_settings_reset (child, GNOME_PROXY_HTTPS_PORT_KEY);
68   g_object_unref (child);
69
70   child = g_settings_get_child (settings, GNOME_PROXY_FTP_CHILD_SCHEMA);
71   g_settings_reset (child, GNOME_PROXY_FTP_HOST_KEY);
72   g_settings_reset (child, GNOME_PROXY_FTP_PORT_KEY);
73   g_object_unref (child);
74
75   child = g_settings_get_child (settings, GNOME_PROXY_SOCKS_CHILD_SCHEMA);
76   g_settings_reset (child, GNOME_PROXY_SOCKS_HOST_KEY);
77   g_settings_reset (child, GNOME_PROXY_SOCKS_PORT_KEY);
78   g_object_unref (child);
79
80   g_object_unref (settings);
81 }
82
83 static void
84 test_proxy_uri (gpointer      fixture,
85                 gconstpointer user_data)
86 {
87   GSettings *settings, *child;
88
89   settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA);
90   g_settings_set_enum (settings, GNOME_PROXY_MODE_KEY, G_DESKTOP_PROXY_MODE_MANUAL);
91   g_settings_set_boolean (settings, GNOME_PROXY_USE_SAME_PROXY_KEY, TRUE);
92
93   child = g_settings_get_child (settings, GNOME_PROXY_HTTP_CHILD_SCHEMA);
94   g_settings_set_string (child, GNOME_PROXY_HTTP_HOST_KEY, "proxy.example.com");
95   g_settings_set_int (child, GNOME_PROXY_HTTP_PORT_KEY, 8080);
96   g_object_unref (child);
97
98   child = g_settings_get_child (settings, GNOME_PROXY_HTTPS_CHILD_SCHEMA);
99   g_settings_set_string (child, GNOME_PROXY_HTTPS_HOST_KEY, "proxy-s.example.com");
100   g_settings_set_int (child, GNOME_PROXY_HTTPS_PORT_KEY, 7070);
101   g_object_unref (child);
102
103   child = g_settings_get_child (settings, GNOME_PROXY_FTP_CHILD_SCHEMA);
104   g_settings_set_string (child, GNOME_PROXY_FTP_HOST_KEY, "proxy-f.example.com");
105   g_settings_set_int (child, GNOME_PROXY_FTP_PORT_KEY, 6060);
106   g_object_unref (child);
107
108   g_object_unref (settings);
109
110   test_proxy_uri_common ();
111 }
112
113 static void
114 test_proxy_socks (gpointer      fixture,
115                   gconstpointer user_data)
116 {
117   GSettings *settings, *child;
118   const gchar *ignore_hosts[2] = { "127.0.0.1", NULL };
119
120   settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA);
121   g_settings_set_enum (settings, GNOME_PROXY_MODE_KEY, G_DESKTOP_PROXY_MODE_MANUAL);
122   g_settings_set (settings, GNOME_PROXY_IGNORE_HOSTS_KEY,
123                   "@as", g_variant_new_strv (ignore_hosts, -1));
124
125   child = g_settings_get_child (settings, GNOME_PROXY_SOCKS_CHILD_SCHEMA);
126   g_settings_set_string (child, GNOME_PROXY_SOCKS_HOST_KEY, "proxy.example.com");
127   g_settings_set_int (child, GNOME_PROXY_SOCKS_PORT_KEY, 1234);
128   g_object_unref (child);
129   g_object_unref (settings);
130
131   test_proxy_socks_common ();
132 }
133
134 static void
135 test_proxy_ignore (gpointer      fixture,
136                    gconstpointer user_data)
137 {
138   GSettings *settings, *http;
139
140   settings = g_settings_new (GNOME_PROXY_SETTINGS_SCHEMA);
141   g_settings_set_enum (settings, GNOME_PROXY_MODE_KEY, G_DESKTOP_PROXY_MODE_MANUAL);
142   g_settings_set (settings, GNOME_PROXY_IGNORE_HOSTS_KEY,
143                   "@as", g_variant_new_strv (ignore_hosts, n_ignore_hosts));
144
145   http = g_settings_get_child (settings, GNOME_PROXY_HTTP_CHILD_SCHEMA);
146   g_settings_set_string (http, GNOME_PROXY_HTTP_HOST_KEY, "localhost");
147   g_settings_set_int (http, GNOME_PROXY_HTTP_PORT_KEY, 8080);
148
149   g_object_unref (http);
150   g_object_unref (settings);
151
152   test_proxy_ignore_common (FALSE);
153 }
154
155 int
156 main (int   argc,
157       char *argv[])
158 {
159   g_test_init (&argc, &argv, NULL);
160
161   g_setenv ("GIO_EXTRA_MODULES", TOP_BUILDDIR "/proxy/gnome/.libs", TRUE);
162   g_setenv ("GIO_USE_PROXY_RESOLVER", "gnome", TRUE);
163   g_setenv ("GSETTINGS_BACKEND", "memory", TRUE);
164   g_setenv ("DESKTOP_SESSION", "gnome", TRUE);
165
166   g_test_add_vtable ("/proxy/gnome/uri", 0, NULL,
167                      reset_proxy_settings, test_proxy_uri, NULL);
168   g_test_add_vtable ("/proxy/gnome/socks", 0, NULL,
169                      reset_proxy_settings, test_proxy_socks, NULL);
170   g_test_add_vtable ("/proxy/gnome/ignore", 0, NULL,
171                      reset_proxy_settings, test_proxy_ignore, NULL);
172
173   return g_test_run();
174 }