1    	/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2    	/* NetworkManager system settings service - keyfile plugin
3    	 *
4    	 * This program is free software; you can redistribute it and/or modify
5    	 * it under the terms of the GNU General Public License as published by
6    	 * the Free Software Foundation; either version 2 of the License, or
7    	 * (at your option) any later version.
8    	 *
9    	 * This program is distributed in the hope that it will be useful,
10   	 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11   	 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   	 * GNU General Public License for more details.
13   	 *
14   	 * You should have received a copy of the GNU General Public License along
15   	 * with this program; if not, write to the Free Software Foundation, Inc.,
16   	 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17   	 *
18   	 * Copyright (C) 2008 - 2011 Red Hat, Inc.
19   	 */
20   	
21   	#include <stdio.h>
22   	#include <stdarg.h>
23   	#include <unistd.h>
24   	#include <string.h>
25   	#include <netinet/ether.h>
26   	#include <linux/if_infiniband.h>
27   	#include <netinet/in.h>
28   	#include <arpa/inet.h>
29   	#include <sys/socket.h>
30   	#include <sys/types.h>
31   	#include <sys/stat.h>
32   	
33   	#include <nm-utils.h>
34   	#include <nm-setting-connection.h>
35   	#include <nm-setting-wired.h>
36   	#include <nm-setting-wireless.h>
37   	#include <nm-setting-wireless-security.h>
38   	#include <nm-setting-ip4-config.h>
39   	#include <nm-setting-ip6-config.h>
40   	#include <nm-setting-8021x.h>
41   	#include <nm-setting-pppoe.h>
42   	#include <nm-setting-ppp.h>
43   	#include <nm-setting-vpn.h>
44   	#include <nm-setting-gsm.h>
45   	#include <nm-setting-cdma.h>
46   	#include <nm-setting-serial.h>
47   	#include <nm-setting-vlan.h>
48   	
49   	#include "nm-test-helpers.h"
50   	#include "NetworkManagerUtils.h"
51   	
52   	#include "common.h"
53   	#include "reader.h"
54   	#include "writer.h"
55   	#include "utils.h"
56   	
57   	#if 0
58   	static void
59   	connection_diff (NMConnection *a, NMConnection *b)
60   	{
61   		GHashTable *hash;
62   		GHashTableIter iter, siter;
63   		const char *setting_name, *key;
64   		GHashTable *setting_hash = NULL;
65   	
66   		if (!nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_EXACT, &hash)) {
67   			g_hash_table_iter_init (&iter, hash);
68   			while (g_hash_table_iter_next (&iter, (gpointer) &setting_name, (gpointer) &setting_hash)) {
69   				g_hash_table_iter_init (&siter, setting_hash);
70   				while (g_hash_table_iter_next (&siter, (gpointer) &key, NULL))
71   					g_message (":: %s :: %s", setting_name,key);
72   			}
73   			g_hash_table_destroy (hash);
74   		}
75   	}
76   	#endif
77   	
78   	static gboolean
79   	verify_cert_or_key (NMSetting8021x *s_compare,
80   	                    const char *file,
81   	                    const char *privkey_password,
82   	                    const char *property)
83   	{
84   		NMSetting8021x *s_8021x;
85   		GError *error = NULL;
86   		gboolean success = FALSE;
87   		const char *expected = NULL, *setting = NULL;
88   		gboolean phase2 = FALSE;
89   		NMSetting8021xCKScheme scheme = NM_SETTING_802_1X_CK_SCHEME_UNKNOWN;
90   	
91   		if (strstr (property, "phase2"))
92   			phase2 = TRUE;
93   	
94   		s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
95   	
96   		/* Load the certificate into an empty setting */
97   		if (strstr (property, "ca-cert")) {
98   			if (phase2)
99   				success = nm_setting_802_1x_set_phase2_ca_cert (s_8021x, file, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
100  			else
101  				success = nm_setting_802_1x_set_ca_cert (s_8021x, file, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
102  		} else if (strstr (property, "client-cert")) {
103  			if (phase2)
104  				success = nm_setting_802_1x_set_phase2_client_cert (s_8021x, file, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
105  			else
106  				success = nm_setting_802_1x_set_client_cert (s_8021x, file, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
107  		} else if (strstr (property, "private-key")) {
108  			if (phase2)
109  				success = nm_setting_802_1x_set_phase2_private_key (s_8021x, file, privkey_password, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
110  			else
111  				success = nm_setting_802_1x_set_private_key (s_8021x, file, privkey_password, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
112  		}
113  		g_assert_no_error (error);
114  		g_assert_cmpint (success, ==, TRUE);
115  	
116  		/* Ensure it was loaded using the PATH scheme */
117  		if (strstr (property, "ca-cert")) {
118  			if (phase2)
119  				scheme = nm_setting_802_1x_get_phase2_ca_cert_scheme (s_8021x);
120  			else
121  				scheme = nm_setting_802_1x_get_ca_cert_scheme (s_8021x);
122  		} else if (strstr (property, "client-cert")) {
123  			if (phase2)
124  				scheme = nm_setting_802_1x_get_phase2_client_cert_scheme (s_8021x);
125  			else
126  				scheme = nm_setting_802_1x_get_client_cert_scheme (s_8021x);
127  		} else if (strstr (property, "private-key")) {
128  			if (phase2)
129  				scheme = nm_setting_802_1x_get_phase2_private_key_scheme (s_8021x);
130  			else
131  				scheme = nm_setting_802_1x_get_private_key_scheme (s_8021x);
132  		}
133  		g_assert_cmpint (scheme, ==, NM_SETTING_802_1X_CK_SCHEME_PATH);
134  	
135  		/* Grab the path back out */
136  		if (strstr (property, "ca-cert")) {
137  			if (phase2)
138  				expected = nm_setting_802_1x_get_phase2_ca_cert_path (s_8021x);
139  			else
140  				expected = nm_setting_802_1x_get_ca_cert_path (s_8021x);
141  		} else if (strstr (property, "client-cert")) {
142  			if (phase2)
143  				expected = nm_setting_802_1x_get_phase2_client_cert_path (s_8021x);
144  			else
145  				expected = nm_setting_802_1x_get_client_cert_path (s_8021x);
146  		} else if (strstr (property, "private-key")) {
147  			if (phase2)
148  				expected = nm_setting_802_1x_get_phase2_private_key_path (s_8021x);
149  			else
150  				expected = nm_setting_802_1x_get_private_key_path (s_8021x);
151  		}
152  		g_assert_cmpstr (expected, ==, file);
153  	
154  		/* Compare the path with the expected path from the real setting */
155  		if (strstr (property, "ca-cert")) {
156  			if (phase2)
157  				setting = nm_setting_802_1x_get_phase2_ca_cert_path (s_compare);
158  			else
159  				setting = nm_setting_802_1x_get_ca_cert_path (s_compare);
160  		} else if (strstr (property, "client-cert")) {
161  			if (phase2)
162  				setting = nm_setting_802_1x_get_phase2_client_cert_path (s_compare);
163  			else
164  				setting = nm_setting_802_1x_get_client_cert_path (s_compare);
165  		} else if (strstr (property, "private-key")) {
166  			if (phase2)
167  				setting = nm_setting_802_1x_get_phase2_private_key_path (s_compare);
168  			else
169  				setting = nm_setting_802_1x_get_private_key_path (s_compare);
170  		}
171  		g_assert_cmpstr (setting, ==, expected);
172  	
173  		g_object_unref (s_8021x);
174  		return TRUE;
175  	}
176  	
177  	
178  	static void
179  	test_read_basic (void)
180  	{
181  		NMConnection *connection;
182  		NMSettingConnection *s_con;
183  		NMSettingWired *s_wired;
184  		NMSettingIP4Config *s_ip4;
185  		NMSettingIP6Config *s_ip6;
186  		GError *error = NULL;
187  		const GByteArray *array;
188  		char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
189  		const char *expected_id = "System test-minimal";
190  		guint64 expected_timestamp = 0;
191  		gboolean success;
192  	
193  		connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-minimal",
194  		                                   NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
195  		g_assert_no_error (error);
196  		g_assert (connection);
197  		success = nm_connection_verify (connection, &error);
198  		g_assert_no_error (error);
199  		g_assert (success);
200  	
201  		/* ===== CONNECTION SETTING ===== */
202  		s_con = nm_connection_get_setting_connection (connection);
203  		g_assert (s_con);
204  		g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
205  		g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, expected_timestamp);
206  		g_assert (nm_setting_connection_get_autoconnect (s_con));
207  	
208  		/* UUID can't be tested if the ifcfg does not contain the UUID key, because
209  		 * the UUID is generated on the full path of the ifcfg file, which can change
210  		 * depending on where the tests are run.
211  		 */
212  	
213  		/* ===== WIRED SETTING ===== */
214  		s_wired = nm_connection_get_setting_wired (connection);
215  		g_assert (s_wired);
216  		g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0);
217  	
218  		/* MAC address */
219  		array = nm_setting_wired_get_mac_address (s_wired);
220  		g_assert (array);
221  		g_assert_cmpint (array->len, ==, ETH_ALEN);
222  		g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0);
223  	
224  		/* ===== IPv4 SETTING ===== */
225  		s_ip4 = nm_connection_get_setting_ip4_config (connection);
226  		g_assert (s_ip4);
227  		g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
228  		g_assert (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE);
229  	
230  		/* ===== IPv6 SETTING ===== */
231  		s_ip6 = nm_connection_get_setting_ip6_config (connection);
232  		g_assert (s_ip6);
233  		g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
234  		g_assert (nm_setting_ip6_config_get_never_default (s_ip6) == FALSE);
235  	
236  		g_object_unref (connection);
237  	}
238  	
239  	static void
240  	test_read_variables_corner_cases (void)
241  	{
242  		NMConnection *connection;
243  		NMSettingConnection *s_con;
244  		NMSettingWired *s_wired;
245  		NMSettingIP4Config *s_ip4;
246  		GError *error = NULL;
247  		const GByteArray *array;
248  		char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
249  		const char *expected_zone = "'";
250  		const char *expected_id = "\"";
251  		guint64 expected_timestamp = 0;
252  		gboolean success;
253  	
254  		connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-variables-corner-cases-1",
255  		                                   NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
256  		g_assert_no_error (error);
257  		g_assert (connection);
258  		success = nm_connection_verify (connection, &error);
259  		g_assert_no_error (error);
260  		g_assert (success);
261  	
262  		/* ===== CONNECTION SETTING ===== */
263  		s_con = nm_connection_get_setting_connection (connection);
264  		g_assert (s_con);
265  		g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
266  		g_assert_cmpstr (nm_setting_connection_get_zone (s_con), ==, expected_zone);
267  		g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, expected_timestamp);
268  		g_assert (nm_setting_connection_get_autoconnect (s_con));
269  	
270  		/* ===== WIRED SETTING ===== */
271  		s_wired = nm_connection_get_setting_wired (connection);
272  		g_assert (s_wired);
273  		g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0);
274  	
275  		/* MAC address */
276  		array = nm_setting_wired_get_mac_address (s_wired);
277  		g_assert (array);
278  		g_assert_cmpint (array->len, ==, ETH_ALEN);
279  		g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0);
280  	
281  		/* ===== IPv4 SETTING ===== */
282  		s_ip4 = nm_connection_get_setting_ip4_config (connection);
283  		g_assert (s_ip4);
284  		g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
285  		g_assert (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE);
286  	
287  		g_object_unref (connection);
288  	}
289  	
290  	static void
291  	test_read_unmanaged (void)
292  	{
293  		NMConnection *connection;
294  		NMSettingConnection *s_con;
295  		NMSettingWired *s_wired;
296  		NMSettingIP4Config *s_ip4;
297  		char *unmanaged = NULL;
298  		GError *error = NULL;
299  		const GByteArray *array;
300  		char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0xf8, 0x9f };
301  		const char *expected_id = "System test-nm-controlled";
302  		guint64 expected_timestamp = 0;
303  		gboolean success;
304  	
305  		connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-nm-controlled",
306  		                                   NULL, TYPE_ETHERNET, NULL,
307  		                                   &unmanaged,
308  		                                   NULL, NULL, NULL, &error, NULL);
309  		g_assert_no_error (error);
310  		g_assert (connection);
311  		success = nm_connection_verify (connection, &error);
312  		g_assert_no_error (error);
313  		g_assert (success);
314  		g_assert_cmpstr (unmanaged, ==, "mac:00:11:22:33:f8:9f");
315  	
316  		/* ===== CONNECTION SETTING ===== */
317  		s_con = nm_connection_get_setting_connection (connection);
318  		g_assert (s_con);
319  		g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
320  		g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, expected_timestamp);
321  		g_assert (nm_setting_connection_get_autoconnect (s_con));
322  	
323  		/* ===== WIRED SETTING ===== */
324  		s_wired = nm_connection_get_setting_wired (connection);
325  		g_assert (s_wired);
326  	
327  		/* MAC address */
328  		array = nm_setting_wired_get_mac_address (s_wired);
329  		g_assert (array);
330  		g_assert_cmpint (array->len, ==, ETH_ALEN);
331  		g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0);
332  	
333  		/* ===== IPv4 SETTING ===== */
334  		s_ip4 = nm_connection_get_setting_ip4_config (connection);
335  		g_assert (s_ip4 == NULL);
336  	
337  		g_free (unmanaged);
338  		g_object_unref (connection);
339  	}
340  	
341  	static void
342  	test_read_wired_static (const char *file,
343  	                        const char *expected_id,
344  	                        gboolean expect_ip6)
345  	{
346  		NMConnection *connection;
347  		NMSettingConnection *s_con;
348  		NMSettingWired *s_wired;
349  		NMSettingIP4Config *s_ip4;
350  		NMSettingIP6Config *s_ip6;
351  		char *unmanaged = NULL;
352  		GError *error = NULL;
353  		const GByteArray *array;
354  		char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0xee };
355  		const char *expected_dns1 = "4.2.2.1";
356  		const char *expected_dns2 = "4.2.2.2";
357  		guint32 addr;
358  		struct in6_addr addr6;
359  		const char *expected_address1 = "192.168.1.5";
360  		const char *expected_address1_gw = "192.168.1.1";
361  		const char *expected6_address1 = "dead:beaf::1";
362  		const char *expected6_address2 = "dead:beaf::2";
363  		const char *expected6_dns1 = "1:2:3:4::a";
364  		const char *expected6_dns2 = "1:2:3:4::b";
365  		NMIP4Address *ip4_addr;
366  		NMIP6Address *ip6_addr;
367  		gboolean success;
368  	
369  		connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL,
370  		                                   &unmanaged, NULL, NULL, NULL, &error, NULL);
371  		g_assert_no_error (error);
372  		g_assert (connection);
373  		success = nm_connection_verify (connection, &error);
374  		g_assert_no_error (error);
375  		g_assert (success);
376  		g_assert_cmpstr (unmanaged, ==, NULL);
377  	
378  		/* ===== CONNECTION SETTING ===== */
379  		s_con = nm_connection_get_setting_connection (connection);
380  		g_assert (s_con);
381  		g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
382  		g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, 0);
383  		g_assert (nm_setting_connection_get_autoconnect (s_con));
384  	
385  		/* ===== WIRED SETTING ===== */
386  		s_wired = nm_connection_get_setting_wired (connection);
387  		g_assert (s_wired);
388  		g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 1492);
389  	
390  		/* MAC address */
391  		array = nm_setting_wired_get_mac_address (s_wired);
392  		g_assert (array);
393  		g_assert_cmpint (array->len, ==, ETH_ALEN);
394  		g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0);
395  	
396  		/* ===== IPv4 SETTING ===== */
397  		s_ip4 = nm_connection_get_setting_ip4_config (connection);
398  		g_assert (s_ip4);
399  		g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
400  		g_assert (nm_setting_ip4_config_get_may_fail (s_ip4));
401  	
402  		/* DNS Addresses */
403  		g_assert_cmpint (nm_setting_ip4_config_get_num_dns (s_ip4), ==, 2);
404  		g_assert_cmpint (inet_pton (AF_INET, expected_dns1, &addr), >, 0);
405  		g_assert_cmpint (nm_setting_ip4_config_get_dns (s_ip4, 0), ==, addr);
406  		g_assert_cmpint (inet_pton (AF_INET, expected_dns2, &addr), >, 0);
407  		g_assert_cmpint (nm_setting_ip4_config_get_dns (s_ip4, 1), ==, addr);
408  	
409  		/* IP addresses */
410  		g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 1);
411  		ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
412  		g_assert (ip4_addr);
413  		g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, 24);
414  		g_assert_cmpint (inet_pton (AF_INET, expected_address1, &addr), >, 0);
415  		g_assert_cmpint (nm_ip4_address_get_address (ip4_addr), ==, addr);
416  		g_assert_cmpint (inet_pton (AF_INET, expected_address1_gw, &addr), >, 0);
417  		g_assert_cmpint (nm_ip4_address_get_gateway (ip4_addr), ==, addr);
418  	
419  		/* ===== IPv6 SETTING ===== */
420  		s_ip6 = nm_connection_get_setting_ip6_config (connection);
421  		g_assert (s_ip6);
422  		if (expect_ip6) {
423  			g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_MANUAL);
424  			g_assert (nm_setting_ip6_config_get_may_fail (s_ip6));
425  	
426  			/* DNS Addresses */
427  			g_assert_cmpint (nm_setting_ip6_config_get_num_dns (s_ip6), ==, 2);
428  			g_assert_cmpint (inet_pton (AF_INET6, expected6_dns1, &addr6), >, 0);
429  			g_assert (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr6));
430  			g_assert_cmpint (inet_pton (AF_INET6, expected6_dns2, &addr6), >, 0);
431  			g_assert (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 1), &addr6));
432  	
433  			/* IP addresses */
434  			g_assert_cmpint (nm_setting_ip6_config_get_num_addresses (s_ip6), ==, 2);
435  	
436  			ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
437  			g_assert (ip6_addr);
438  			g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 64);
439  			g_assert_cmpint (inet_pton (AF_INET6, expected6_address1, &addr6), >, 0);
440  			g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
441  	
442  			ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 1);
443  			g_assert (ip6_addr);
444  			g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 56);
445  			g_assert_cmpint (inet_pton (AF_INET6, expected6_address2, &addr6), >, 0);
446  			g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
447  		} else {
448  			g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
449  		}
450  	
451  		g_free (unmanaged);
452  		g_object_unref (connection);
453  	}
454  	
455  	static void
456  	test_read_wired_static_no_prefix (gconstpointer user_data)
457  	{
458  		guint32 expected_prefix = GPOINTER_TO_UINT (user_data);
459  		NMConnection *connection;
460  		NMSettingConnection *s_con;
461  		NMSettingIP4Config *s_ip4;
462  		GError *error = NULL;
463  		NMIP4Address *ip4_addr;
464  		char *file, *expected_id;
465  	
466  		file = g_strdup_printf (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-wired-static-no-prefix-%u", expected_prefix);
467  		expected_id = g_strdup_printf ("System test-wired-static-no-prefix-%u", expected_prefix);
468  	
469  		connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL, NULL,
470  		                                   NULL, NULL, NULL, &error, NULL);
471  		g_assert_no_error (error);
472  		g_assert (connection);
473  		g_assert (nm_connection_verify (connection, &error));
474  	
475  		/* ===== CONNECTION SETTING ===== */
476  		s_con = nm_connection_get_setting_connection (connection);
477  		g_assert (s_con);
478  		g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
479  	
480  		/* ===== IPv4 SETTING ===== */
481  		s_ip4 = nm_connection_get_setting_ip4_config (connection);
482  		g_assert (s_ip4);
483  		g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
484  	
485  		g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 1);
486  		ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
487  		g_assert (ip4_addr);
488  		g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, expected_prefix);
489  	
490  		g_free (file);
491  		g_free (expected_id);
492  		g_object_unref (connection);
493  	}
494  	
495  	#define TEST_IFCFG_WIRED_DHCP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp"
496  	
497  	static void
498  	test_read_wired_dhcp (void)
499  	{
500  		NMConnection *connection;
501  		NMSettingConnection *s_con;
502  		NMSettingWired *s_wired;
503  		NMSettingIP4Config *s_ip4;
504  		char *unmanaged = NULL;
505  		char *keyfile = NULL;
506  		char *routefile = NULL;
507  		char *route6file = NULL;
508  		gboolean ignore_error = FALSE;
509  		GError *error = NULL;
510  		const GByteArray *array;
511  		char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0xee };
512  		const char *tmp;
513  		const char *expected_id = "System test-wired-dhcp";
514  		const char *expected_dns1 = "4.2.2.1";
515  		const char *expected_dns2 = "4.2.2.2";
516  		guint32 addr;
517  		const char *expected_dhcp_hostname = "foobar";
518  	
519  		connection = connection_from_file (TEST_IFCFG_WIRED_DHCP,
520  		                                   NULL,
521  		                                   TYPE_ETHERNET,
522  		                                   NULL,
523  		                                   &unmanaged,
524  		                                   &keyfile,
525  		                                   &routefile,
526  		                                   &route6file,
527  		                                   &error,
528  		                                   &ignore_error);
529  		ASSERT (connection != NULL,
530  		        "wired-dhcp-read", "failed to read %s: %s", TEST_IFCFG_WIRED_DHCP, error->message);
531  	
532  		ASSERT (nm_connection_verify (connection, &error),
533  		        "wired-dhcp-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_DHCP, error->message);
534  	
535  		ASSERT (unmanaged == NULL,
536  		        "wired-dhcp-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_DHCP);
537  	
538  		/* ===== CONNECTION SETTING ===== */
539  	
540  		s_con = nm_connection_get_setting_connection (connection);
541  		ASSERT (s_con != NULL,
542  		        "wired-dhcp-verify-connection", "failed to verify %s: missing %s setting",
543  		        TEST_IFCFG_WIRED_DHCP,
544  		        NM_SETTING_CONNECTION_SETTING_NAME);
545  	
546  		/* ID */
547  		tmp = nm_setting_connection_get_id (s_con);
548  		ASSERT (tmp != NULL,
549  		        "wired-dhcp-verify-connection", "failed to verify %s: missing %s / %s key",
550  		        TEST_IFCFG_WIRED_DHCP,
551  		        NM_SETTING_CONNECTION_SETTING_NAME,
552  		        NM_SETTING_CONNECTION_ID);
553  		ASSERT (strcmp (tmp, expected_id) == 0,
554  		        "wired-dhcp-verify-connection", "failed to verify %s: unexpected %s / %s key value",
555  		        TEST_IFCFG_WIRED_DHCP,
556  		        NM_SETTING_CONNECTION_SETTING_NAME,
557  		        NM_SETTING_CONNECTION_ID);
558  	
559  		/* Timestamp */
560  		ASSERT (nm_setting_connection_get_timestamp (s_con) == 0,
561  		        "wired-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value",
562  		        TEST_IFCFG_WIRED_DHCP,
563  		        NM_SETTING_CONNECTION_SETTING_NAME,
564  		        NM_SETTING_CONNECTION_TIMESTAMP);
565  	
566  		/* Autoconnect */
567  		ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
568  		        "wired-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value",
569  		        TEST_IFCFG_WIRED_DHCP,
570  		        NM_SETTING_CONNECTION_SETTING_NAME,
571  		        NM_SETTING_CONNECTION_AUTOCONNECT);
572  	
573  		/* ===== WIRED SETTING ===== */
574  	
575  		s_wired = nm_connection_get_setting_wired (connection);
576  		ASSERT (s_wired != NULL,
577  		        "wired-dhcp-verify-wired", "failed to verify %s: missing %s setting",
578  		        TEST_IFCFG_WIRED_DHCP,
579  		        NM_SETTING_WIRED_SETTING_NAME);
580  	
581  		/* MAC address */
582  		array = nm_setting_wired_get_mac_address (s_wired);
583  		ASSERT (array != NULL,
584  		        "wired-dhcp-verify-wired", "failed to verify %s: missing %s / %s key",
585  		        TEST_IFCFG_WIRED_DHCP,
586  		        NM_SETTING_WIRED_SETTING_NAME,
587  		        NM_SETTING_WIRED_MAC_ADDRESS);
588  		ASSERT (array->len == ETH_ALEN,
589  		        "wired-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
590  		        TEST_IFCFG_WIRED_DHCP,
591  		        NM_SETTING_WIRED_SETTING_NAME,
592  		        NM_SETTING_WIRED_MAC_ADDRESS);
593  		ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
594  		        "wired-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value",
595  		        TEST_IFCFG_WIRED_DHCP,
596  		        NM_SETTING_WIRED_SETTING_NAME,
597  		        NM_SETTING_WIRED_MAC_ADDRESS);
598  	
599  		/* ===== IPv4 SETTING ===== */
600  	
601  		s_ip4 = nm_connection_get_setting_ip4_config (connection);
602  		ASSERT (s_ip4 != NULL,
603  		        "wired-dhcp-verify-ip4", "failed to verify %s: missing %s setting",
604  		        TEST_IFCFG_WIRED_DHCP,
605  		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
606  	
607  		/* Method */
608  		tmp = nm_setting_ip4_config_get_method (s_ip4);
609  		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
610  		        "wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
611  		        TEST_IFCFG_WIRED_DHCP,
612  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
613  		        NM_SETTING_IP4_CONFIG_METHOD);
614  	
615  		tmp = nm_setting_ip4_config_get_dhcp_hostname (s_ip4);
616  		ASSERT (tmp != NULL,
617  		        "wired-dhcp-verify-ip4", "failed to verify %s: missing %s / %s key",
618  		        TEST_IFCFG_WIRED_DHCP,
619  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
620  		        NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME);
621  		ASSERT (strcmp (tmp, expected_dhcp_hostname) == 0,
622  		        "wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
623  		        TEST_IFCFG_WIRED_DHCP,
624  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
625  		        NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME);
626  	
627  		ASSERT (nm_setting_ip4_config_get_ignore_auto_dns (s_ip4) == TRUE,
628  		        "wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
629  		        TEST_IFCFG_WIRED_DHCP,
630  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
631  		        NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS);
632  	
633  		/* DNS Addresses */
634  		ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
635  		        "wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
636  		        TEST_IFCFG_WIRED_DHCP,
637  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
638  		        NM_SETTING_IP4_CONFIG_DNS);
639  	
640  		ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0,
641  		        "wired-dhcp-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #1",
642  		        TEST_IFCFG_WIRED_DHCP,
643  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
644  		        NM_SETTING_IP4_CONFIG_DNS);
645  		ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr,
646  		        "wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
647  		        TEST_IFCFG_WIRED_DHCP,
648  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
649  		        NM_SETTING_IP4_CONFIG_DNS);
650  	
651  		ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0,
652  		        "wired-dhcp-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #2",
653  		        TEST_IFCFG_WIRED_DHCP,
654  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
655  		        NM_SETTING_IP4_CONFIG_DNS);
656  		ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr,
657  		        "wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
658  		        TEST_IFCFG_WIRED_DHCP,
659  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
660  		        NM_SETTING_IP4_CONFIG_DNS);
661  	
662  		g_free (unmanaged);
663  		g_free (keyfile);
664  		g_free (routefile);
665  		g_free (route6file);
666  		g_object_unref (connection);
667  	}
668  	
669  	static void
670  	test_read_wired_dhcp_plus_ip (void)
671  	{
672  		NMConnection *connection;
673  		NMSettingIP4Config *s_ip4;
674  		NMSettingIP6Config *s_ip6;
675  		GError *error = NULL;
676  		guint32 addr4;
677  		struct in6_addr addr6;
678  		NMIP4Address *ip4_addr;
679  		NMIP6Address *ip6_addr;
680  		gboolean success;
681  	
682  		connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp-plus-ip",
683  		                                   NULL, TYPE_ETHERNET, NULL, NULL,
684  		                                   NULL, NULL, NULL, &error, NULL);
685  		g_assert_no_error (error);
686  		g_assert (connection);
687  		success = nm_connection_verify (connection, &error);
688  		g_assert_no_error (error);
689  		g_assert (success);
690  	
691  		/* ===== IPv4 SETTING ===== */
692  		s_ip4 = nm_connection_get_setting_ip4_config (connection);
693  		g_assert (s_ip4);
694  		g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
695  		g_assert (nm_setting_ip4_config_get_may_fail (s_ip4));
696  	
697  		/* DNS Addresses */
698  		g_assert_cmpint (nm_setting_ip4_config_get_num_dns (s_ip4), ==, 2);
699  		g_assert_cmpint (inet_pton (AF_INET, "4.2.2.1", &addr4), >, 0);
700  		g_assert_cmpint (nm_setting_ip4_config_get_dns (s_ip4, 0), ==, addr4);
701  		g_assert_cmpint (inet_pton (AF_INET, "4.2.2.2", &addr4), >, 0);
702  		g_assert_cmpint (nm_setting_ip4_config_get_dns (s_ip4, 1), ==, addr4);
703  	
704  		/* IP addresses */
705  		g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 2);
706  		ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
707  		g_assert (ip4_addr);
708  		g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, 24);
709  		g_assert_cmpint (inet_pton (AF_INET, "1.2.3.4", &addr4), >, 0);
710  		g_assert_cmpint (nm_ip4_address_get_address (ip4_addr), ==, addr4);
711  		g_assert_cmpint (inet_pton (AF_INET, "1.1.1.1", &addr4), >, 0);
712  		g_assert_cmpint (nm_ip4_address_get_gateway (ip4_addr), ==, addr4);
713  	
714  		ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 1);
715  		g_assert (ip4_addr);
716  		g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, 16);
717  		g_assert_cmpint (inet_pton (AF_INET, "9.8.7.6", &addr4), >, 0);
718  		g_assert_cmpint (nm_ip4_address_get_address (ip4_addr), ==, addr4);
719  	
720  		/* ===== IPv6 SETTING ===== */
721  		s_ip6 = nm_connection_get_setting_ip6_config (connection);
722  		g_assert (s_ip6);
723  		g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
724  		g_assert (nm_setting_ip6_config_get_may_fail (s_ip6));
725  	
726  		/* DNS Addresses */
727  		g_assert_cmpint (nm_setting_ip6_config_get_num_dns (s_ip6), ==, 2);
728  		g_assert_cmpint (inet_pton (AF_INET6, "1:2:3:4::a", &addr6), >, 0);
729  		g_assert (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr6));
730  		g_assert_cmpint (inet_pton (AF_INET6, "1:2:3:4::b", &addr6), >, 0);
731  		g_assert (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 1), &addr6));
732  	
733  		/* IP addresses */
734  		g_assert_cmpint (nm_setting_ip6_config_get_num_addresses (s_ip6), ==, 3);
735  		ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
736  		g_assert (ip6_addr);
737  		g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 56);
738  		g_assert_cmpint (inet_pton (AF_INET6, "1001:abba::1234", &addr6), >, 0);
739  		g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
740  	
741  		ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 1);
742  		g_assert (ip6_addr);
743  		g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 64);
744  		g_assert_cmpint (inet_pton (AF_INET6, "2001:abba::2234", &addr6), >, 0);
745  		g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
746  	
747  		ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 2);
748  		g_assert (ip6_addr);
749  		g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 96);
750  		g_assert_cmpint (inet_pton (AF_INET6, "3001:abba::3234", &addr6), >, 0);
751  		g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
752  	
753  		g_object_unref (connection);
754  	}
755  	
756  	#define TEST_IFCFG_WIRED_GLOBAL_GATEWAY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-global-gateway"
757  	#define TEST_NETWORK_WIRED_GLOBAL_GATEWAY TEST_IFCFG_DIR"/network-scripts/network-test-wired-global-gateway"
758  	
759  	static void
760  	test_read_wired_global_gateway (void)
761  	{
762  		NMConnection *connection;
763  		NMSettingConnection *s_con;
764  		NMSettingWired *s_wired;
765  		NMSettingIP4Config *s_ip4;
766  		char *unmanaged = NULL;
767  		char *keyfile = NULL;
768  		char *routefile = NULL;
769  		char *route6file = NULL;
770  		gboolean ignore_error = FALSE;
771  		GError *error = NULL;
772  		const char *tmp;
773  		const char *expected_id = "System test-wired-global-gateway";
774  		guint32 addr;
775  		const char *expected_address1 = "192.168.1.5";
776  		const char *expected_address1_gw = "192.168.1.2";
777  		NMIP4Address *ip4_addr;
778  	
779  		connection = connection_from_file (TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
780  		                                   TEST_NETWORK_WIRED_GLOBAL_GATEWAY,
781  		                                   TYPE_ETHERNET,
782  		                                   NULL,
783  		                                   &unmanaged,
784  		                                   &keyfile,
785  		                                   &routefile,
786  		                                   &route6file,
787  		                                   &error,
788  		                                   &ignore_error);
789  		ASSERT (connection != NULL,
790  		        "wired-global-gateway-read", "failed to read %s: %s", TEST_IFCFG_WIRED_GLOBAL_GATEWAY, error->message);
791  	
792  		ASSERT (nm_connection_verify (connection, &error),
793  		        "wired-global-gateway-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_GLOBAL_GATEWAY, error->message);
794  	
795  		ASSERT (unmanaged == NULL,
796  		        "wired-global-gateway-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_GLOBAL_GATEWAY);
797  	
798  		/* ===== CONNECTION SETTING ===== */
799  	
800  		s_con = nm_connection_get_setting_connection (connection);
801  		ASSERT (s_con != NULL,
802  		        "wired-global-gateway-verify-connection", "failed to verify %s: missing %s setting",
803  		        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
804  		        NM_SETTING_CONNECTION_SETTING_NAME);
805  	
806  		/* ID */
807  		tmp = nm_setting_connection_get_id (s_con);
808  		ASSERT (tmp != NULL,
809  		        "wired-global-gateway-verify-connection", "failed to verify %s: missing %s / %s key",
810  		        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
811  		        NM_SETTING_CONNECTION_SETTING_NAME,
812  		        NM_SETTING_CONNECTION_ID);
813  		ASSERT (strcmp (tmp, expected_id) == 0,
814  		        "wired-global-gateway-verify-connection", "failed to verify %s: unexpected %s / %s key value",
815  		        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
816  		        NM_SETTING_CONNECTION_SETTING_NAME,
817  		        NM_SETTING_CONNECTION_ID);
818  	
819  		/* ===== WIRED SETTING ===== */
820  	
821  		s_wired = nm_connection_get_setting_wired (connection);
822  		ASSERT (s_wired != NULL,
823  		        "wired-global-gateway-verify-wired", "failed to verify %s: missing %s setting",
824  		        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
825  		        NM_SETTING_WIRED_SETTING_NAME);
826  	
827  		/* ===== IPv4 SETTING ===== */
828  	
829  		s_ip4 = nm_connection_get_setting_ip4_config (connection);
830  		ASSERT (s_ip4 != NULL,
831  		        "wired-global-gateway-verify-ip4", "failed to verify %s: missing %s setting",
832  		        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
833  		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
834  	
835  		/* Method */
836  		tmp = nm_setting_ip4_config_get_method (s_ip4);
837  		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
838  		        "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
839  		        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
840  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
841  		        NM_SETTING_IP4_CONFIG_METHOD);
842  	
843  		/* Address #1 */
844  		ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
845  		ASSERT (ip4_addr,
846  		        "wired-global-gateway-verify-ip4", "failed to verify %s: missing IP4 address #1",
847  		        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
848  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
849  		        NM_SETTING_IP4_CONFIG_ADDRESSES);
850  	
851  		ASSERT (nm_ip4_address_get_prefix (ip4_addr) == 24,
852  		        "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix",
853  		        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
854  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
855  		        NM_SETTING_IP4_CONFIG_ADDRESSES);
856  	
857  		ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0,
858  		        "wired-global-gateway-verify-ip4", "failed to verify %s: couldn't convert IP address #1",
859  		        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
860  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
861  		        NM_SETTING_IP4_CONFIG_DNS);
862  		ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
863  		        "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected IP4 address #1",
864  		        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
865  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
866  		        NM_SETTING_IP4_CONFIG_ADDRESSES);
867  	
868  		ASSERT (inet_pton (AF_INET, expected_address1_gw, &addr) > 0,
869  		        "wired-global-gateway-verify-ip4", "failed to verify %s: couldn't convert IP address #1 gateway",
870  		        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
871  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
872  		        NM_SETTING_IP4_CONFIG_ADDRESSES);
873  		ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr,
874  		        "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected IP4 address #1 gateway",
875  		        TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
876  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
877  		        NM_SETTING_IP4_CONFIG_ADDRESSES);
878  	
879  		g_free (unmanaged);
880  		g_free (keyfile);
881  		g_free (routefile);
882  		g_free (route6file);
883  		g_object_unref (connection);
884  	}
885  	
886  	#define TEST_IFCFG_WIRED_NEVER_DEFAULT TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-never-default"
887  	#define TEST_NETWORK_WIRED_NEVER_DEFAULT TEST_IFCFG_DIR"/network-scripts/network-test-wired-never-default"
888  	
889  	static void
890  	test_read_wired_never_default (void)
891  	{
892  		NMConnection *connection;
893  		NMSettingConnection *s_con;
894  		NMSettingWired *s_wired;
895  		NMSettingIP4Config *s_ip4;
896  		NMSettingIP6Config *s_ip6;
897  		char *unmanaged = NULL;
898  		char *keyfile = NULL;
899  		char *routefile = NULL;
900  		char *route6file = NULL;
901  		gboolean ignore_error = FALSE;
902  		GError *error = NULL;
903  		const char *tmp;
904  		const char *expected_id = "System test-wired-never-default";
905  	
906  		connection = connection_from_file (TEST_IFCFG_WIRED_NEVER_DEFAULT,
907  		                                   TEST_NETWORK_WIRED_NEVER_DEFAULT,
908  		                                   TYPE_ETHERNET,
909  		                                   NULL,
910  		                                   &unmanaged,
911  		                                   &keyfile,
912  		                                   &routefile,
913  		                                   &route6file,
914  		                                   &error,
915  		                                   &ignore_error);
916  		ASSERT (connection != NULL,
917  		        "wired-never-default-read", "failed to read %s: %s", TEST_IFCFG_WIRED_NEVER_DEFAULT, error->message);
918  	
919  		ASSERT (nm_connection_verify (connection, &error),
920  		        "wired-never-default-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_NEVER_DEFAULT, error->message);
921  	
922  		ASSERT (unmanaged == NULL,
923  		        "wired-never-default-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_NEVER_DEFAULT);
924  	
925  		/* ===== CONNECTION SETTING ===== */
926  	
927  		s_con = nm_connection_get_setting_connection (connection);
928  		ASSERT (s_con != NULL,
929  		        "wired-never-default-verify-connection", "failed to verify %s: missing %s setting",
930  		        TEST_IFCFG_WIRED_NEVER_DEFAULT,
931  		        NM_SETTING_CONNECTION_SETTING_NAME);
932  	
933  		/* ID */
934  		tmp = nm_setting_connection_get_id (s_con);
935  		ASSERT (tmp != NULL,
936  		        "wired-never-default-verify-connection", "failed to verify %s: missing %s / %s key",
937  		        TEST_IFCFG_WIRED_NEVER_DEFAULT,
938  		        NM_SETTING_CONNECTION_SETTING_NAME,
939  		        NM_SETTING_CONNECTION_ID);
940  		ASSERT (strcmp (tmp, expected_id) == 0,
941  		        "wired-never-default-verify-connection", "failed to verify %s: unexpected %s / %s key value",
942  		        TEST_IFCFG_WIRED_NEVER_DEFAULT,
943  		        NM_SETTING_CONNECTION_SETTING_NAME,
944  		        NM_SETTING_CONNECTION_ID);
945  	
946  		/* ===== WIRED SETTING ===== */
947  	
948  		s_wired = nm_connection_get_setting_wired (connection);
949  		ASSERT (s_wired != NULL,
950  		        "wired-never-default-verify-wired", "failed to verify %s: missing %s setting",
951  		        TEST_IFCFG_WIRED_NEVER_DEFAULT,
952  		        NM_SETTING_WIRED_SETTING_NAME);
953  	
954  		/* ===== IPv4 SETTING ===== */
955  	
956  		s_ip4 = nm_connection_get_setting_ip4_config (connection);
957  		ASSERT (s_ip4 != NULL,
958  		        "wired-never-default-verify-ip4", "failed to verify %s: missing %s setting",
959  		        TEST_IFCFG_WIRED_NEVER_DEFAULT,
960  		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
961  	
962  		/* Method */
963  		tmp = nm_setting_ip4_config_get_method (s_ip4);
964  		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
965  		        "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
966  		        TEST_IFCFG_WIRED_NEVER_DEFAULT,
967  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
968  		        NM_SETTING_IP4_CONFIG_METHOD);
969  	
970  		ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == TRUE,
971  		        "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
972  		        TEST_IFCFG_WIRED_NEVER_DEFAULT,
973  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
974  		        NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
975  	
976  		/* DNS Addresses */
977  		ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 0,
978  		        "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
979  		        TEST_IFCFG_WIRED_NEVER_DEFAULT,
980  		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
981  		        NM_SETTING_IP4_CONFIG_DNS);
982  	
983  		/* ===== IPv6 SETTING ===== */
984  	
985  		s_ip6 = nm_connection_get_setting_ip6_config (connection);
986  		ASSERT (s_ip6 != NULL,
987  		        "wired-never-default-verify-ip6", "failed to verify %s: missing %s setting",
988  		        TEST_IFCFG_WIRED_NEVER_DEFAULT,
989  		        NM_SETTING_IP6_CONFIG_SETTING_NAME);
990  	
991  		/* Method */
992  		tmp = nm_setting_ip6_config_get_method (s_ip6);
993  		ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0,
994  		        "wired-never-default-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
995  		        TEST_IFCFG_WIRED_NEVER_DEFAULT,
996  		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
997  		        NM_SETTING_IP6_CONFIG_METHOD);
998  	
999  		ASSERT (nm_setting_ip6_config_get_never_default (s_ip6) == TRUE,
1000 		        "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1001 		        TEST_IFCFG_WIRED_NEVER_DEFAULT,
1002 		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
1003 		        NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
1004 	
1005 		g_free (unmanaged);
1006 		g_free (keyfile);
1007 		g_free (routefile);
1008 		g_free (route6file);
1009 		g_object_unref (connection);
1010 	}
1011 	
1012 	#define TEST_IFCFG_WIRED_DEFROUTE_NO TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-defroute-no"
1013 	
1014 	static void
1015 	test_read_wired_defroute_no (void)
1016 	{
1017 		NMConnection *connection;
1018 		NMSettingConnection *s_con;
1019 		NMSettingWired *s_wired;
1020 		NMSettingIP4Config *s_ip4;
1021 		NMSettingIP6Config *s_ip6;
1022 		char *unmanaged = NULL;
1023 		char *keyfile = NULL;
1024 		char *routefile = NULL;
1025 		char *route6file = NULL;
1026 		gboolean ignore_error = FALSE;
1027 		GError *error = NULL;
1028 		const char *tmp;
1029 		const char *expected_id = "System test-wired-defroute-no";
1030 	
1031 		connection = connection_from_file (TEST_IFCFG_WIRED_DEFROUTE_NO,
1032 		                                   NULL,
1033 		                                   TYPE_ETHERNET,
1034 		                                   NULL,
1035 		                                   &unmanaged,
1036 		                                   &keyfile,
1037 		                                   &routefile,
1038 		                                   &route6file,
1039 		                                   &error,
1040 		                                   &ignore_error);
1041 		ASSERT (connection != NULL,
1042 		        "wired-defroute-no-read", "failed to read %s: %s", TEST_IFCFG_WIRED_DEFROUTE_NO, error->message);
1043 	
1044 		ASSERT (nm_connection_verify (connection, &error),
1045 		        "wired-defroute-no-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_DEFROUTE_NO, error->message);
1046 	
1047 		ASSERT (unmanaged == NULL,
1048 		        "wired-defroute-no-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_DEFROUTE_NO);
1049 	
1050 		/* ===== CONNECTION SETTING ===== */
1051 	
1052 		s_con = nm_connection_get_setting_connection (connection);
1053 		ASSERT (s_con != NULL,
1054 		        "wired-defroute-no-verify-connection", "failed to verify %s: missing %s setting",
1055 		        TEST_IFCFG_WIRED_DEFROUTE_NO,
1056 		        NM_SETTING_CONNECTION_SETTING_NAME);
1057 	
1058 		/* ID */
1059 		tmp = nm_setting_connection_get_id (s_con);
1060 		ASSERT (tmp != NULL,
1061 		        "wired-defroute-no-verify-connection", "failed to verify %s: missing %s / %s key",
1062 		        TEST_IFCFG_WIRED_DEFROUTE_NO,
1063 		        NM_SETTING_CONNECTION_SETTING_NAME,
1064 		        NM_SETTING_CONNECTION_ID);
1065 		ASSERT (strcmp (tmp, expected_id) == 0,
1066 		        "wired-defroute-no-verify-connection", "failed to verify %s: unexpected %s / %s key value",
1067 		        TEST_IFCFG_WIRED_DEFROUTE_NO,
1068 		        NM_SETTING_CONNECTION_SETTING_NAME,
1069 		        NM_SETTING_CONNECTION_ID);
1070 	
1071 		/* ===== WIRED SETTING ===== */
1072 	
1073 		s_wired = nm_connection_get_setting_wired (connection);
1074 		ASSERT (s_wired != NULL,
1075 		        "wired-defroute-no-verify-wired", "failed to verify %s: missing %s setting",
1076 		        TEST_IFCFG_WIRED_DEFROUTE_NO,
1077 		        NM_SETTING_WIRED_SETTING_NAME);
1078 	
1079 		/* ===== IPv4 SETTING ===== */
1080 	
1081 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
1082 		ASSERT (s_ip4 != NULL,
1083 		        "wired-defroute-no-verify-ip4", "failed to verify %s: missing %s setting",
1084 		        TEST_IFCFG_WIRED_DEFROUTE_NO,
1085 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
1086 	
1087 		/* Method */
1088 		tmp = nm_setting_ip4_config_get_method (s_ip4);
1089 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
1090 		        "wired-defroute-no-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1091 		        TEST_IFCFG_WIRED_DEFROUTE_NO,
1092 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1093 		        NM_SETTING_IP4_CONFIG_METHOD);
1094 	
1095 		ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == TRUE,
1096 		        "wired-defroute-no-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1097 		        TEST_IFCFG_WIRED_DEFROUTE_NO,
1098 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1099 		        NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
1100 	
1101 		/* ===== IPv6 SETTING ===== */
1102 	
1103 		s_ip6 = nm_connection_get_setting_ip6_config (connection);
1104 		ASSERT (s_ip6 != NULL,
1105 		        "wired-defroute-no-verify-ip6", "failed to verify %s: missing %s setting",
1106 		        TEST_IFCFG_WIRED_DEFROUTE_NO,
1107 		        NM_SETTING_IP6_CONFIG_SETTING_NAME);
1108 	
1109 		/* Method */
1110 		tmp = nm_setting_ip6_config_get_method (s_ip6);
1111 		ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0,
1112 		        "wired-defroute-no-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
1113 		        TEST_IFCFG_WIRED_DEFROUTE_NO,
1114 		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
1115 		        NM_SETTING_IP6_CONFIG_METHOD);
1116 	
1117 		ASSERT (nm_setting_ip6_config_get_never_default (s_ip6) == TRUE,
1118 		        "wired-defroute-no-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
1119 		        TEST_IFCFG_WIRED_DEFROUTE_NO,
1120 		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
1121 		        NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
1122 	
1123 		g_free (unmanaged);
1124 		g_free (keyfile);
1125 		g_free (routefile);
1126 		g_free (route6file);
1127 		g_object_unref (connection);
1128 	}
1129 	
1130 	#define TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-defroute-no-gatewaydev-yes"
1131 	#define TEST_NETWORK_WIRED_DEFROUTE_NO_GATEWAYDEV_YES TEST_IFCFG_DIR"/network-scripts/network-test-wired-defroute-no-gatewaydev-yes"
1132 	
1133 	static void
1134 	test_read_wired_defroute_no_gatewaydev_yes (void)
1135 	{
1136 		NMConnection *connection;
1137 		NMSettingConnection *s_con;
1138 		NMSettingWired *s_wired;
1139 		NMSettingIP4Config *s_ip4;
1140 		NMSettingIP6Config *s_ip6;
1141 		char *unmanaged = NULL;
1142 		char *keyfile = NULL;
1143 		char *routefile = NULL;
1144 		char *route6file = NULL;
1145 		gboolean ignore_error = FALSE;
1146 		GError *error = NULL;
1147 		const char *tmp;
1148 		const char *expected_id = "System test-wired-defroute-no-gatewaydev-yes";
1149 	
1150 		connection = connection_from_file (TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1151 		                                   TEST_NETWORK_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1152 		                                   TYPE_ETHERNET,
1153 		                                   NULL,
1154 		                                   &unmanaged,
1155 		                                   &keyfile,
1156 		                                   &routefile,
1157 		                                   &route6file,
1158 		                                   &error,
1159 		                                   &ignore_error);
1160 		ASSERT (connection != NULL,
1161 		        "wired-defroute-no-gatewaydev-yes-read",
1162 		        "failed to read %s: %s",
1163 		        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1164 		        error->message);
1165 	
1166 		ASSERT (nm_connection_verify (connection, &error),
1167 		        "wired-defroute-no-gatewaydev-yes-verify",
1168 		        "failed to verify %s: %s",
1169 		        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1170 		        error->message);
1171 	
1172 		ASSERT (unmanaged == NULL,
1173 		        "wired-defroute-no-gatewaydev-yes-verify",
1174 		        "failed to verify %s: unexpected unmanaged value",
1175 		        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES);
1176 	
1177 		/* ===== CONNECTION SETTING ===== */
1178 	
1179 		s_con = nm_connection_get_setting_connection (connection);
1180 		ASSERT (s_con != NULL,
1181 		        "wired-defroute-no-gatewaydev-yes-verify-connection", "failed to verify %s: missing %s setting",
1182 		        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1183 		        NM_SETTING_CONNECTION_SETTING_NAME);
1184 	
1185 		/* ID */
1186 		tmp = nm_setting_connection_get_id (s_con);
1187 		ASSERT (tmp != NULL,
1188 		        "wired-defroute-no-gatewaydev-yes-verify-connection", "failed to verify %s: missing %s / %s key",
1189 		        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1190 		        NM_SETTING_CONNECTION_SETTING_NAME,
1191 		        NM_SETTING_CONNECTION_ID);
1192 		ASSERT (strcmp (tmp, expected_id) == 0,
1193 		        "wired-defroute-no-gatewaydev-yes-verify-connection", "failed to verify %s: unexpected %s / %s key value",
1194 		        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1195 		        NM_SETTING_CONNECTION_SETTING_NAME,
1196 		        NM_SETTING_CONNECTION_ID);
1197 	
1198 		/* ===== WIRED SETTING ===== */
1199 	
1200 		s_wired = nm_connection_get_setting_wired (connection);
1201 		ASSERT (s_wired != NULL,
1202 		        "wired-defroute-no-gatewaydev-yes-verify-wired", "failed to verify %s: missing %s setting",
1203 		        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1204 		        NM_SETTING_WIRED_SETTING_NAME);
1205 	
1206 		/* ===== IPv4 SETTING ===== */
1207 	
1208 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
1209 		ASSERT (s_ip4 != NULL,
1210 		        "wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: missing %s setting",
1211 		        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1212 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
1213 	
1214 		/* Method */
1215 		tmp = nm_setting_ip4_config_get_method (s_ip4);
1216 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
1217 		        "wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1218 		        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1219 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1220 		        NM_SETTING_IP4_CONFIG_METHOD);
1221 	
1222 		ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE,
1223 		        "wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1224 		        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1225 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1226 		        NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
1227 	
1228 		/* ===== IPv6 SETTING ===== */
1229 	
1230 		s_ip6 = nm_connection_get_setting_ip6_config (connection);
1231 		ASSERT (s_ip6 != NULL,
1232 		        "wired-defroute-no-gatewaydev-yes-verify-ip6", "failed to verify %s: missing %s setting",
1233 		        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1234 		        NM_SETTING_IP6_CONFIG_SETTING_NAME);
1235 	
1236 		/* Method */
1237 		tmp = nm_setting_ip6_config_get_method (s_ip6);
1238 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
1239 		        "wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1240 		        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1241 		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
1242 		        NM_SETTING_IP6_CONFIG_METHOD);
1243 	
1244 		ASSERT (nm_setting_ip6_config_get_never_default (s_ip6) == FALSE,
1245 		        "wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1246 		        TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1247 		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
1248 		        NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
1249 	
1250 		g_free (unmanaged);
1251 		g_free (keyfile);
1252 		g_free (routefile);
1253 		g_free (route6file);
1254 		g_object_unref (connection);
1255 	}
1256 	
1257 	#define TEST_IFCFG_WIRED_STATIC_ROUTES TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static-routes"
1258 	
1259 	static void
1260 	test_read_wired_static_routes (void)
1261 	{
1262 		NMConnection *connection;
1263 		NMSettingConnection *s_con;
1264 		NMSettingWired *s_wired;
1265 		NMSettingIP4Config *s_ip4;
1266 		char *unmanaged = NULL;
1267 		char *keyfile = NULL;
1268 		char *routefile = NULL;
1269 		char *route6file = NULL;
1270 		gboolean ignore_error = FALSE;
1271 		GError *error = NULL;
1272 		const char *tmp;
1273 		NMIP4Route *ip4_route;
1274 		guint32 addr;
1275 		const char *expected_id = "System test-wired-static-routes";
1276 		const char *expected_dst1 = "11.22.33.0";
1277 		const char *expected_dst2 = "44.55.66.77";
1278 		const char *expected_gw1 = "192.168.1.5";
1279 		const char *expected_gw2 = "192.168.1.7";
1280 	
1281 		connection = connection_from_file (TEST_IFCFG_WIRED_STATIC_ROUTES,
1282 		                                   NULL,
1283 		                                   TYPE_ETHERNET,
1284 		                                   NULL,
1285 		                                   &unmanaged,
1286 		                                   &keyfile,
1287 		                                   &routefile,
1288 		                                   &route6file,
1289 		                                   &error,
1290 		                                   &ignore_error);
1291 	
1292 		ASSERT (connection != NULL,
1293 		        "wired-static-routes-read",
1294 		        "failed to read %s: %s",
1295 		        TEST_IFCFG_WIRED_STATIC_ROUTES, error->message);
1296 	
1297 		ASSERT (nm_connection_verify (connection, &error),
1298 		        "wired-static-routes-verify", "failed to verify %s: %s",
1299 		        TEST_IFCFG_WIRED_STATIC_ROUTES, error->message);
1300 	
1301 		ASSERT (unmanaged == NULL,
1302 		        "wired-static-routes-verify",
1303 		        "failed to verify %s: unexpected unmanaged value",
1304 		        TEST_IFCFG_WIRED_STATIC_ROUTES);
1305 	
1306 		/* ===== CONNECTION SETTING ===== */
1307 	
1308 		s_con = nm_connection_get_setting_connection (connection);
1309 		ASSERT (s_con != NULL,
1310 		        "wired-static-routes-verify-connection", "failed to verify %s: missing %s setting",
1311 		        TEST_IFCFG_WIRED_STATIC_ROUTES,
1312 		        NM_SETTING_CONNECTION_SETTING_NAME);
1313 	
1314 		/* ID */
1315 		tmp = nm_setting_connection_get_id (s_con);
1316 		ASSERT (tmp != NULL,
1317 		        "wired-static-routes-verify-connection", "failed to verify %s: missing %s / %s key",
1318 		        TEST_IFCFG_WIRED_STATIC_ROUTES,
1319 		        NM_SETTING_CONNECTION_SETTING_NAME,
1320 		        NM_SETTING_CONNECTION_ID);
1321 		ASSERT (strcmp (tmp, expected_id) == 0,
1322 		        "wired-static-routes-verify-connection", "failed to verify %s: unexpected %s / %s key value",
1323 		        TEST_IFCFG_WIRED_STATIC_ROUTES,
1324 		        NM_SETTING_CONNECTION_SETTING_NAME,
1325 		        NM_SETTING_CONNECTION_ID);
1326 	
1327 		/* ===== WIRED SETTING ===== */
1328 	
1329 		s_wired = nm_connection_get_setting_wired (connection);
1330 		ASSERT (s_wired != NULL,
1331 		        "wired-static-routes-verify-wired", "failed to verify %s: missing %s setting",
1332 		        TEST_IFCFG_WIRED_STATIC_ROUTES,
1333 		        NM_SETTING_WIRED_SETTING_NAME);
1334 	
1335 		/* ===== IPv4 SETTING ===== */
1336 	
1337 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
1338 		ASSERT (s_ip4 != NULL,
1339 		        "wired-static-routes-verify-ip4", "failed to verify %s: missing %s setting",
1340 		        TEST_IFCFG_WIRED_STATIC_ROUTES,
1341 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
1342 	
1343 		/* Method */
1344 		tmp = nm_setting_ip4_config_get_method (s_ip4);
1345 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
1346 		        "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1347 		        TEST_IFCFG_WIRED_STATIC_ROUTES,
1348 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1349 		        NM_SETTING_IP4_CONFIG_METHOD);
1350 	
1351 		/* Routes */
1352 		ASSERT (nm_setting_ip4_config_get_num_routes (s_ip4) == 2,
1353 		        "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1354 		        TEST_IFCFG_WIRED_STATIC_ROUTES,
1355 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1356 		        NM_SETTING_IP4_CONFIG_ROUTES);
1357 	
1358 		ip4_route = nm_setting_ip4_config_get_route (s_ip4, 0);
1359 		ASSERT (ip4_route,
1360 		        "wired-static-routes-verify-ip4", "failed to verify %s: missing IP4 route #1",
1361 		        TEST_IFCFG_WIRED_STATIC_ROUTES);
1362 	
1363 		ASSERT (inet_pton (AF_INET, expected_dst1, &addr) > 0,
1364 		        "wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert destination IP address #1",
1365 		        TEST_IFCFG_WIRED_STATIC_ROUTES);
1366 		ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
1367 		        "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
1368 		        TEST_IFCFG_WIRED_STATIC_ROUTES,
1369 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1370 		        NM_SETTING_IP4_CONFIG_ROUTES);
1371 	
1372 		ASSERT (nm_ip4_route_get_prefix (ip4_route) == 24,
1373 		        "wired-static-routes-verify-ip4", "failed to verify %s: unexpected destination route #1 prefix",
1374 		        TEST_IFCFG_WIRED_STATIC_ROUTES);
1375 	
1376 		ASSERT (inet_pton (AF_INET, expected_gw1, &addr) > 0,
1377 		        "wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #1",
1378 		        TEST_IFCFG_WIRED_STATIC_ROUTES);
1379 		ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
1380 		        "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
1381 		        TEST_IFCFG_WIRED_STATIC_ROUTES,
1382 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1383 		        NM_SETTING_IP4_CONFIG_ROUTES);
1384 	
1385 		ip4_route = nm_setting_ip4_config_get_route (s_ip4, 1);
1386 		ASSERT (ip4_route,
1387 		        "wired-static-routes-verify-ip4", "failed to verify %s: missing IP4 route #2",
1388 		        TEST_IFCFG_WIRED_STATIC_ROUTES);
1389 	
1390 		ASSERT (inet_pton (AF_INET, expected_dst2, &addr) > 0,
1391 		        "wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert destination IP address #2",
1392 		        TEST_IFCFG_WIRED_STATIC_ROUTES);
1393 		ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
1394 		        "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
1395 		        TEST_IFCFG_WIRED_STATIC_ROUTES,
1396 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1397 		        NM_SETTING_IP4_CONFIG_ROUTES);
1398 	
1399 		ASSERT (nm_ip4_route_get_prefix (ip4_route) == 32,
1400 		        "wired-static-routes-verify-ip4", "failed to verify %s: unexpected destination route #2 prefix",
1401 		        TEST_IFCFG_WIRED_STATIC_ROUTES);
1402 	
1403 		ASSERT (inet_pton (AF_INET, expected_gw2, &addr) > 0,
1404 		        "wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #2",
1405 		        TEST_IFCFG_WIRED_STATIC_ROUTES);
1406 		ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
1407 		        "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
1408 		        TEST_IFCFG_WIRED_STATIC_ROUTES,
1409 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1410 		        NM_SETTING_IP4_CONFIG_ROUTES);
1411 		ASSERT (nm_ip4_route_get_metric (ip4_route) == 3,
1412 		        "wired-static-routes-verify-ip4", "failed to verify %s: unexpected route metric #2",
1413 		        TEST_IFCFG_WIRED_STATIC_ROUTES);
1414 	
1415 		g_free (unmanaged);
1416 		g_free (keyfile);
1417 		g_free (routefile);
1418 		g_free (route6file);
1419 		g_object_unref (connection);
1420 	}
1421 	
1422 	#define TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static-routes-legacy"
1423 	
1424 	static void
1425 	test_read_wired_static_routes_legacy (void)
1426 	{
1427 		NMConnection *connection;
1428 		NMSettingConnection *s_con;
1429 		NMSettingWired *s_wired;
1430 		NMSettingIP4Config *s_ip4;
1431 		char *unmanaged = NULL;
1432 		char *keyfile = NULL;
1433 		char *routefile = NULL;
1434 		char *route6file = NULL;
1435 		gboolean ignore_error = FALSE;
1436 		GError *error = NULL;
1437 		const char *tmp;
1438 		NMIP4Route *ip4_route;
1439 		guint32 addr;
1440 		const char *expected_id = "System test-wired-static-routes-legacy";
1441 		const char *expected_dst1 = "21.31.41.0";
1442 		const char *expected_dst2 = "32.42.52.62";
1443 		const char *expected_dst3 = "43.53.0.0";
1444 		const char *expected_gw1 = "9.9.9.9";
1445 		const char *expected_gw2 = "8.8.8.8";
1446 		const char *expected_gw3 = "7.7.7.7";
1447 	
1448 		connection = connection_from_file (TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1449 		                                   NULL,
1450 		                                   TYPE_ETHERNET,
1451 		                                   NULL,
1452 		                                   &unmanaged,
1453 		                                   &keyfile,
1454 		                                   &routefile,
1455 		                                   &route6file,
1456 		                                   &error,
1457 		                                   &ignore_error);
1458 	
1459 		ASSERT (connection != NULL,
1460 		        "wired-static-routes-legacy-read",
1461 		        "failed to read %s: %s",
1462 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY, error->message);
1463 	
1464 		ASSERT (nm_connection_verify (connection, &error),
1465 		        "wired-static-routes-legacy-verify", "failed to verify %s: %s",
1466 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY, error->message);
1467 	
1468 		ASSERT (unmanaged == NULL,
1469 		        "wired-static-routes-legacy-verify",
1470 		        "failed to verify %s: unexpected unmanaged value",
1471 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1472 	
1473 		/* ===== CONNECTION SETTING ===== */
1474 	
1475 		s_con = nm_connection_get_setting_connection (connection);
1476 		ASSERT (s_con != NULL,
1477 		        "wired-static-routes-legacy-verify-connection", "failed to verify %s: missing %s setting",
1478 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1479 		        NM_SETTING_CONNECTION_SETTING_NAME);
1480 	
1481 		/* ID */
1482 		tmp = nm_setting_connection_get_id (s_con);
1483 		ASSERT (tmp != NULL,
1484 		        "wired-static-routes-legacy-verify-connection", "failed to verify %s: missing %s / %s key",
1485 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1486 		        NM_SETTING_CONNECTION_SETTING_NAME,
1487 		        NM_SETTING_CONNECTION_ID);
1488 		ASSERT (strcmp (tmp, expected_id) == 0,
1489 		        "wired-static-routes-legacy-verify-connection", "failed to verify %s: unexpected %s / %s key value",
1490 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1491 		        NM_SETTING_CONNECTION_SETTING_NAME,
1492 		        NM_SETTING_CONNECTION_ID);
1493 	
1494 		/* ===== WIRED SETTING ===== */
1495 	
1496 		s_wired = nm_connection_get_setting_wired (connection);
1497 		ASSERT (s_wired != NULL,
1498 		        "wired-static-routes-legacy-verify-wired", "failed to verify %s: missing %s setting",
1499 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1500 		        NM_SETTING_WIRED_SETTING_NAME);
1501 	
1502 		/* ===== IPv4 SETTING ===== */
1503 	
1504 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
1505 		ASSERT (s_ip4 != NULL,
1506 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: missing %s setting",
1507 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1508 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
1509 	
1510 		/* Method */
1511 		tmp = nm_setting_ip4_config_get_method (s_ip4);
1512 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
1513 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1514 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1515 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1516 		        NM_SETTING_IP4_CONFIG_METHOD);
1517 	
1518 		/* Routes */
1519 		ASSERT (nm_setting_ip4_config_get_num_routes (s_ip4) == 3,
1520 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1521 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1522 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1523 		        NM_SETTING_IP4_CONFIG_ROUTES);
1524 	
1525 		/* Route #1 */
1526 		ip4_route = nm_setting_ip4_config_get_route (s_ip4, 0);
1527 		ASSERT (ip4_route,
1528 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: missing IP4 route #1",
1529 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1530 	
1531 		ASSERT (inet_pton (AF_INET, expected_dst1, &addr) > 0,
1532 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert destination IP address #1",
1533 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1534 		ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
1535 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
1536 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1537 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1538 		        NM_SETTING_IP4_CONFIG_ROUTES);
1539 	
1540 		ASSERT (nm_ip4_route_get_prefix (ip4_route) == 24,
1541 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #1 prefix",
1542 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1543 	
1544 		ASSERT (inet_pton (AF_INET, expected_gw1, &addr) > 0,
1545 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #1",
1546 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1547 		ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
1548 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
1549 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1550 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1551 		        NM_SETTING_IP4_CONFIG_ROUTES);
1552 	
1553 		ASSERT (nm_ip4_route_get_metric (ip4_route) == 1,
1554 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #1 metric",
1555 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1556 	
1557 		/* Route #2 */
1558 		ip4_route = nm_setting_ip4_config_get_route (s_ip4, 1);
1559 		ASSERT (ip4_route,
1560 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: missing IP4 route #2",
1561 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1562 	
1563 		ASSERT (inet_pton (AF_INET, expected_dst2, &addr) > 0,
1564 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert destination IP address #2",
1565 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1566 		ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
1567 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
1568 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1569 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1570 		        NM_SETTING_IP4_CONFIG_ROUTES);
1571 	
1572 		ASSERT (nm_ip4_route_get_prefix (ip4_route) == 32,
1573 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #2 prefix",
1574 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1575 	
1576 		ASSERT (inet_pton (AF_INET, expected_gw2, &addr) > 0,
1577 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #2",
1578 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1579 		ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
1580 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
1581 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1582 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1583 		        NM_SETTING_IP4_CONFIG_ROUTES);
1584 	
1585 		ASSERT (nm_ip4_route_get_metric (ip4_route) == 0,
1586 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #2 metric",
1587 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1588 	
1589 		/* Route #3 */
1590 		ip4_route = nm_setting_ip4_config_get_route (s_ip4, 2);
1591 		ASSERT (ip4_route,
1592 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: missing IP4 route #3",
1593 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1594 	
1595 		ASSERT (inet_pton (AF_INET, expected_dst3, &addr) > 0,
1596 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert destination IP address #3",
1597 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1598 		ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
1599 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #3",
1600 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1601 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1602 		        NM_SETTING_IP4_CONFIG_ROUTES);
1603 	
1604 		ASSERT (nm_ip4_route_get_prefix (ip4_route) == 16,
1605 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #3 prefix",
1606 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1607 	
1608 		ASSERT (inet_pton (AF_INET, expected_gw3, &addr) > 0,
1609 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #3",
1610 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1611 		ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
1612 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #3",
1613 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1614 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1615 		        NM_SETTING_IP4_CONFIG_ROUTES);
1616 	
1617 		ASSERT (nm_ip4_route_get_metric (ip4_route) == 3,
1618 		        "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #3 metric",
1619 		        TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1620 	
1621 		g_free (unmanaged);
1622 		g_free (keyfile);
1623 		g_free (routefile);
1624 		g_free (route6file);
1625 		g_object_unref (connection);
1626 	}
1627 	
1628 	static void
1629 	test_read_wired_ipv4_manual (const char *file, const char *expected_id)
1630 	{
1631 		NMConnection *connection;
1632 		NMSettingConnection *s_con;
1633 		NMSettingWired *s_wired;
1634 		NMSettingIP4Config *s_ip4;
1635 		char *unmanaged = NULL;
1636 		char *keyfile = NULL;
1637 		char *routefile = NULL;
1638 		char *route6file = NULL;
1639 		gboolean ignore_error = FALSE;
1640 		GError *error = NULL;
1641 		const char *tmp;
1642 		const char *expected_address1 = "1.2.3.4";
1643 		const char *expected_address2 = "9.8.7.6";
1644 		const char *expected_address3 = "3.3.3.3";
1645 		guint32 expected_prefix1 = 24;
1646 		guint32 expected_prefix2 = 16;
1647 		guint32 expected_prefix3 = 8;
1648 		NMIP4Address *ip4_addr;
1649 		guint32 addr;
1650 	
1651 		connection = connection_from_file (file,
1652 		                                   NULL,
1653 		                                   TYPE_ETHERNET,
1654 		                                   NULL,
1655 		                                   &unmanaged,
1656 		                                   &keyfile,
1657 		                                   &routefile,
1658 		                                   &route6file,
1659 		                                   &error,
1660 		                                   &ignore_error);
1661 		ASSERT (connection != NULL,
1662 		        "wired-ipv4-manual-read", "failed to read %s: %s", file, error->message);
1663 	
1664 		ASSERT (nm_connection_verify (connection, &error),
1665 		        "wired-ipv4-manual-verify", "failed to verify %s: %s", file, error->message);
1666 	
1667 		ASSERT (unmanaged == NULL,
1668 		        "wired-ipv4-manual-verify", "failed to verify %s: unexpected unmanaged value", file);
1669 	
1670 		/* ===== CONNECTION SETTING ===== */
1671 	
1672 		s_con = nm_connection_get_setting_connection (connection);
1673 		ASSERT (s_con != NULL,
1674 		        "wired-ipv4-manual-verify-connection", "failed to verify %s: missing %s setting",
1675 		        file,
1676 		        NM_SETTING_CONNECTION_SETTING_NAME);
1677 	
1678 		/* ID */
1679 		tmp = nm_setting_connection_get_id (s_con);
1680 		ASSERT (tmp != NULL,
1681 		        "wired-ipv4-manual-verify-connection", "failed to verify %s: missing %s / %s key",
1682 		        file,
1683 		        NM_SETTING_CONNECTION_SETTING_NAME,
1684 		        NM_SETTING_CONNECTION_ID);
1685 		ASSERT (strcmp (tmp, expected_id) == 0,
1686 		        "wired-ipv4-manual-verify-connection", "failed to verify %s: unexpected %s / %s key value",
1687 		        file,
1688 		        NM_SETTING_CONNECTION_SETTING_NAME,
1689 		        NM_SETTING_CONNECTION_ID);
1690 	
1691 		/* ===== WIRED SETTING ===== */
1692 	
1693 		s_wired = nm_connection_get_setting_wired (connection);
1694 		ASSERT (s_wired != NULL,
1695 		        "wired-ipv4-manual-verify-wired", "failed to verify %s: missing %s setting",
1696 		        file,
1697 		        NM_SETTING_WIRED_SETTING_NAME);
1698 	
1699 		/* ===== IPv4 SETTING ===== */
1700 	
1701 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
1702 		ASSERT (s_ip4 != NULL,
1703 		        "wired-ipv4-manual-verify-ip4", "failed to verify %s: missing %s setting",
1704 		        file,
1705 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
1706 	
1707 		/* Method */
1708 		tmp = nm_setting_ip4_config_get_method (s_ip4);
1709 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
1710 		        "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1711 		        file,
1712 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1713 		        NM_SETTING_IP4_CONFIG_METHOD);
1714 	
1715 		/* IP addresses */
1716 		ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 3,
1717 			"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1718 			file,
1719 			NM_SETTING_IP4_CONFIG_SETTING_NAME,
1720 			NM_SETTING_IP4_CONFIG_ADDRESSES);
1721 	
1722 		/* Address #1 */
1723 		ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
1724 		ASSERT (ip4_addr,
1725 			"wired-ipv4-manual-verify-ip4", "failed to verify %s: missing IP4 address #1",
1726 			file);
1727 	
1728 		ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix1,
1729 			"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix",
1730 			file);
1731 	
1732 		ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0,
1733 			"wired-ipv4-manual-verify-ip4", "failed to verify %s: couldn't convert IP address #1",
1734 			file);
1735 		ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
1736 			"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #1",
1737 			file);
1738 	
1739 		/* Address #2 */
1740 		ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 1);
1741 		ASSERT (ip4_addr,
1742 			"wired-ipv4-manual-verify-ip4", "failed to verify %s: missing IP4 address #2",
1743 			file);
1744 	
1745 		ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix2,
1746 			"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #2 prefix",
1747 			file);
1748 	
1749 		ASSERT (inet_pton (AF_INET, expected_address2, &addr) > 0,
1750 			"wired-ipv4-manual-verify-ip4", "failed to verify %s: couldn't convert IP address #2",
1751 			file);
1752 		ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
1753 			"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #2",
1754 			file);
1755 	
1756 		/* Address #3 */
1757 		ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 2);
1758 		ASSERT (ip4_addr,
1759 			"wired-ipv4-manual-verify-ip4", "failed to verify %s: missing IP4 address #3",
1760 			file);
1761 	
1762 		ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix3,
1763 			"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #3 prefix",
1764 			file);
1765 	
1766 		ASSERT (inet_pton (AF_INET, expected_address3, &addr) > 0,
1767 			"wired-ipv4-manual-verify-ip4", "failed to verify %s: couldn't convert IP address #3",
1768 			file);
1769 		ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
1770 			"wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #3",
1771 			file);
1772 	
1773 		g_free (unmanaged);
1774 		g_free (keyfile);
1775 		g_free (routefile);
1776 		g_free (route6file);
1777 		g_object_unref (connection);
1778 	}
1779 	
1780 	#define TEST_IFCFG_WIRED_IPV6_MANUAL TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv6-manual"
1781 	
1782 	static void
1783 	test_read_wired_ipv6_manual (void)
1784 	{
1785 		NMConnection *connection;
1786 		NMSettingConnection *s_con;
1787 		NMSettingWired *s_wired;
1788 		NMSettingIP4Config *s_ip4;
1789 		NMSettingIP6Config *s_ip6;
1790 		char *unmanaged = NULL;
1791 		char *keyfile = NULL;
1792 		char *routefile = NULL;
1793 		char *route6file = NULL;
1794 		gboolean ignore_error = FALSE;
1795 		GError *error = NULL;
1796 		const char *tmp;
1797 		const char *expected_id = "System test-wired-ipv6-manual";
1798 		const char *expected_address1 = "1001:abba::1234";
1799 		const char *expected_address2 = "2001:abba::2234";
1800 		const char *expected_address3 = "3001:abba::3234";
1801 		guint32 expected_prefix1 = 56;
1802 		guint32 expected_prefix2 = 64;
1803 		guint32 expected_prefix3 = 96;
1804 		const char *expected_route1_dest = "9876::1234";
1805 		guint32 expected_route1_prefix = 96;
1806 		const char *expected_route1_nexthop = "9876::7777";
1807 		guint32 expected_route1_metric = 2;
1808 		const char *expected_dns1 = "1:2:3:4::a";
1809 		const char *expected_dns2 = "1:2:3:4::b";
1810 		NMIP6Address *ip6_addr;
1811 		NMIP6Route *ip6_route;
1812 		struct in6_addr addr;
1813 	
1814 		connection = connection_from_file (TEST_IFCFG_WIRED_IPV6_MANUAL,
1815 		                                   NULL,
1816 		                                   TYPE_ETHERNET,
1817 		                                   NULL,
1818 		                                   &unmanaged,
1819 		                                   &keyfile,
1820 		                                   &routefile,
1821 		                                   &route6file,
1822 		                                   &error,
1823 		                                   &ignore_error);
1824 		ASSERT (connection != NULL,
1825 		        "wired-ipv6-manual-read", "failed to read %s: %s", TEST_IFCFG_WIRED_IPV6_MANUAL, error->message);
1826 	
1827 		ASSERT (nm_connection_verify (connection, &error),
1828 		        "wired-ipv6-manual-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_IPV6_MANUAL, error->message);
1829 	
1830 		ASSERT (unmanaged == NULL,
1831 		        "wired-ipv6-manual-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_IPV6_MANUAL);
1832 	
1833 		/* ===== CONNECTION SETTING ===== */
1834 	
1835 		s_con = nm_connection_get_setting_connection (connection);
1836 		ASSERT (s_con != NULL,
1837 		        "wired-ipv6-manual-verify-connection", "failed to verify %s: missing %s setting",
1838 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1839 		        NM_SETTING_CONNECTION_SETTING_NAME);
1840 	
1841 		/* ID */
1842 		tmp = nm_setting_connection_get_id (s_con);
1843 		ASSERT (tmp != NULL,
1844 		        "wired-ipv6-manual-verify-connection", "failed to verify %s: missing %s / %s key",
1845 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1846 		        NM_SETTING_CONNECTION_SETTING_NAME,
1847 		        NM_SETTING_CONNECTION_ID);
1848 		ASSERT (strcmp (tmp, expected_id) == 0,
1849 		        "wired-ipv6-manual-verify-connection", "failed to verify %s: unexpected %s / %s key value",
1850 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1851 		        NM_SETTING_CONNECTION_SETTING_NAME,
1852 		        NM_SETTING_CONNECTION_ID);
1853 	
1854 		/* ===== WIRED SETTING ===== */
1855 	
1856 		s_wired = nm_connection_get_setting_wired (connection);
1857 		ASSERT (s_wired != NULL,
1858 		        "wired-ipv6-manual-verify-wired", "failed to verify %s: missing %s setting",
1859 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1860 		        NM_SETTING_WIRED_SETTING_NAME);
1861 	
1862 		/* ===== IPv4 SETTING ===== */
1863 	
1864 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
1865 		ASSERT (s_ip4 != NULL,
1866 		        "wired-ipv6-manual-verify-ip4", "failed to verify %s: missing %s setting",
1867 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1868 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
1869 	
1870 		/* DNS Addresses */
1871 		ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
1872 		        "wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1873 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1874 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1875 		        NM_SETTING_IP4_CONFIG_DNS);
1876 	
1877 		/* DNS search domains */
1878 		ASSERT (nm_setting_ip4_config_get_num_dns_searches (s_ip4) == 3,
1879 		        "wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1880 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1881 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1882 		        NM_SETTING_IP4_CONFIG_DNS);
1883 	
1884 		tmp = nm_setting_ip4_config_get_dns_search (s_ip4, 0);
1885 		ASSERT (tmp != NULL,
1886 		        "wired-ipv6-manual-verify-ip4", "failed to verify %s: missing %s / %s key",
1887 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1888 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1889 		        NM_SETTING_IP4_CONFIG_DNS_SEARCH);
1890 		ASSERT (strcmp (tmp, "lorem.com") == 0,
1891 		        "wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1892 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1893 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1894 		        NM_SETTING_IP4_CONFIG_DNS_SEARCH);
1895 	
1896 		tmp = nm_setting_ip4_config_get_dns_search (s_ip4, 1);
1897 		ASSERT (tmp != NULL,
1898 		        "wired-ipv6-manual-verify-ip4", "failed to verify %s: missing %s / %s key",
1899 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1900 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1901 		        NM_SETTING_IP4_CONFIG_DNS_SEARCH);
1902 		ASSERT (strcmp (tmp, "ipsum.org") == 0,
1903 		        "wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1904 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1905 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1906 		        NM_SETTING_IP4_CONFIG_DNS_SEARCH);
1907 	
1908 		tmp = nm_setting_ip4_config_get_dns_search (s_ip4, 2);
1909 		ASSERT (tmp != NULL,
1910 		        "wired-ipv6-manual-verify-ip4", "failed to verify %s: missing %s / %s key",
1911 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1912 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1913 		        NM_SETTING_IP4_CONFIG_DNS_SEARCH);
1914 		ASSERT (strcmp (tmp, "dolor.edu") == 0,
1915 		        "wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1916 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1917 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
1918 		        NM_SETTING_IP4_CONFIG_DNS_SEARCH);
1919 	
1920 		/* ===== IPv6 SETTING ===== */
1921 	
1922 		s_ip6 = nm_connection_get_setting_ip6_config (connection);
1923 		ASSERT (s_ip6 != NULL,
1924 		        "wired-ipv6-manual-verify-ip6", "failed to verify %s: missing %s setting",
1925 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1926 		        NM_SETTING_IP6_CONFIG_SETTING_NAME);
1927 	
1928 		/* Method */
1929 		tmp = nm_setting_ip6_config_get_method (s_ip6);
1930 		ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0,
1931 		        "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
1932 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1933 		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
1934 		        NM_SETTING_IP6_CONFIG_METHOD);
1935 	
1936 		ASSERT (nm_setting_ip6_config_get_never_default (s_ip6) == FALSE,
1937 		        "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
1938 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1939 		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
1940 		        NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
1941 	
1942 		ASSERT (nm_setting_ip6_config_get_may_fail (s_ip6) == TRUE,
1943 		        "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
1944 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
1945 		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
1946 		        NM_SETTING_IP6_CONFIG_MAY_FAIL);
1947 	
1948 		/* IP addresses */
1949 		ASSERT (nm_setting_ip6_config_get_num_addresses (s_ip6) == 3,
1950 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
1951 			TEST_IFCFG_WIRED_IPV6_MANUAL,
1952 			NM_SETTING_IP6_CONFIG_SETTING_NAME,
1953 			NM_SETTING_IP6_CONFIG_ADDRESSES);
1954 	
1955 		/* Address #1 */
1956 		ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
1957 		ASSERT (ip6_addr,
1958 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: missing IP6 address #1",
1959 			TEST_IFCFG_WIRED_IPV6_MANUAL);
1960 	
1961 		ASSERT (nm_ip6_address_get_prefix (ip6_addr) == expected_prefix1,
1962 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #1 prefix",
1963 			TEST_IFCFG_WIRED_IPV6_MANUAL);
1964 	
1965 		ASSERT (inet_pton (AF_INET6, expected_address1, &addr) > 0,
1966 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP address #1",
1967 			TEST_IFCFG_WIRED_IPV6_MANUAL);
1968 		ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr),
1969 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #1",
1970 			TEST_IFCFG_WIRED_IPV6_MANUAL);
1971 	
1972 		/* Address #2 */
1973 		ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 1);
1974 		ASSERT (ip6_addr,
1975 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: missing IP6 address #2",
1976 			TEST_IFCFG_WIRED_IPV6_MANUAL);
1977 	
1978 		ASSERT (nm_ip6_address_get_prefix (ip6_addr) == expected_prefix2,
1979 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #2 prefix",
1980 			TEST_IFCFG_WIRED_IPV6_MANUAL);
1981 	
1982 		ASSERT (inet_pton (AF_INET6, expected_address2, &addr) > 0,
1983 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP address #2",
1984 			TEST_IFCFG_WIRED_IPV6_MANUAL);
1985 		ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr),
1986 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #2",
1987 			TEST_IFCFG_WIRED_IPV6_MANUAL);
1988 	
1989 		/* Address #3 */
1990 		ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 2);
1991 		ASSERT (ip6_addr,
1992 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: missing IP6 address #3",
1993 			TEST_IFCFG_WIRED_IPV6_MANUAL);
1994 	
1995 		ASSERT (nm_ip6_address_get_prefix (ip6_addr) == expected_prefix3,
1996 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #3 prefix",
1997 			TEST_IFCFG_WIRED_IPV6_MANUAL);
1998 	
1999 		ASSERT (inet_pton (AF_INET6, expected_address3, &addr) > 0,
2000 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP address #3",
2001 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2002 		ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr),
2003 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #3",
2004 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2005 	
2006 		/* Routes */
2007 		ASSERT (nm_setting_ip6_config_get_num_routes (s_ip6) == 1,
2008 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2009 			TEST_IFCFG_WIRED_IPV6_MANUAL,
2010 			NM_SETTING_IP6_CONFIG_SETTING_NAME,
2011 			NM_SETTING_IP6_CONFIG_ROUTES);
2012 	
2013 		/* Route #1 */
2014 		ip6_route = nm_setting_ip6_config_get_route (s_ip6, 0);
2015 		ASSERT (ip6_route,
2016 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: missing IP6 route #1",
2017 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2018 	
2019 		ASSERT (inet_pton (AF_INET6, expected_route1_dest, &addr) > 0,
2020 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP route dest #1",
2021 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2022 		ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_route_get_dest (ip6_route), &addr),
2023 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 route dest #1",
2024 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2025 	
2026 		ASSERT (nm_ip6_route_get_prefix (ip6_route) == expected_route1_prefix,
2027 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 route #1 prefix",
2028 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2029 	
2030 		ASSERT (inet_pton (AF_INET6, expected_route1_nexthop, &addr) > 0,
2031 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP route next_hop #1",
2032 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2033 		ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_route_get_next_hop (ip6_route), &addr),
2034 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 route next hop #1",
2035 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2036 	
2037 		ASSERT (nm_ip6_route_get_metric (ip6_route) == expected_route1_metric,
2038 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 route #1 metric",
2039 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2040 	
2041 		/* DNS Addresses */
2042 		ASSERT (nm_setting_ip6_config_get_num_dns (s_ip6) == 2,
2043 		        "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2044 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
2045 		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
2046 		        NM_SETTING_IP6_CONFIG_DNS);
2047 	
2048 		ASSERT (inet_pton (AF_INET6, expected_dns1, &addr) > 0,
2049 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert DNS IP address #1",
2050 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2051 		ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr),
2052 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value #1",
2053 			TEST_IFCFG_WIRED_IPV6_MANUAL,
2054 			NM_SETTING_IP6_CONFIG_SETTING_NAME,
2055 			NM_SETTING_IP6_CONFIG_DNS);
2056 	
2057 		ASSERT (inet_pton (AF_INET6, expected_dns2, &addr) > 0,
2058 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert DNS IP address #2",
2059 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2060 		ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 1), &addr),
2061 			"wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value #2",
2062 			TEST_IFCFG_WIRED_IPV6_MANUAL,
2063 			NM_SETTING_IP6_CONFIG_SETTING_NAME,
2064 			NM_SETTING_IP6_CONFIG_DNS);
2065 	
2066 		/* DNS domains - none as domains are stuffed to 'ipv4' setting */
2067 		ASSERT (nm_setting_ip6_config_get_num_dns_searches (s_ip6) == 0,
2068 		        "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2069 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
2070 		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
2071 		        NM_SETTING_IP6_CONFIG_DNS_SEARCH);
2072 	
2073 		g_free (unmanaged);
2074 		g_free (keyfile);
2075 		g_free (routefile);
2076 		g_free (route6file);
2077 		g_object_unref (connection);
2078 	}
2079 	
2080 	#define TEST_IFCFG_WIRED_IPV6_ONLY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv6-only"
2081 	
2082 	static void
2083 	test_read_wired_ipv6_only (void)
2084 	{
2085 		NMConnection *connection;
2086 		NMSettingConnection *s_con;
2087 		NMSettingWired *s_wired;
2088 		NMSettingIP4Config *s_ip4;
2089 		NMSettingIP6Config *s_ip6;
2090 		char *unmanaged = NULL;
2091 		char *keyfile = NULL;
2092 		char *routefile = NULL;
2093 		char *route6file = NULL;
2094 		gboolean ignore_error = FALSE;
2095 		GError *error = NULL;
2096 		const char *tmp;
2097 		const char *expected_id = "System test-wired-ipv6-only";
2098 		const char *expected_address1 = "1001:abba::1234";
2099 		guint32 expected_prefix1 = 56;
2100 		const char *expected_dns1 = "1:2:3:4::a";
2101 		NMIP6Address *ip6_addr;
2102 		struct in6_addr addr;
2103 		const char *method;
2104 	
2105 		connection = connection_from_file (TEST_IFCFG_WIRED_IPV6_ONLY,
2106 		                                   NULL,
2107 		                                   TYPE_ETHERNET,
2108 		                                   NULL,
2109 		                                   &unmanaged,
2110 		                                   &keyfile,
2111 		                                   &routefile,
2112 		                                   &route6file,
2113 		                                   &error,
2114 		                                   &ignore_error);
2115 		ASSERT (connection != NULL,
2116 		        "wired-ipv6-only-read", "failed to read %s: %s", TEST_IFCFG_WIRED_IPV6_ONLY, error->message);
2117 	
2118 		ASSERT (nm_connection_verify (connection, &error),
2119 		        "wired-ipv6-only-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_IPV6_ONLY, error->message);
2120 	
2121 		ASSERT (unmanaged == NULL,
2122 		        "wired-ipv6-only-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_IPV6_MANUAL);
2123 	
2124 		/* ===== CONNECTION SETTING ===== */
2125 	
2126 		s_con = nm_connection_get_setting_connection (connection);
2127 		ASSERT (s_con != NULL,
2128 		        "wired-ipv6-only-verify-connection", "failed to verify %s: missing %s setting",
2129 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
2130 		        NM_SETTING_CONNECTION_SETTING_NAME);
2131 	
2132 		/* ID */
2133 		tmp = nm_setting_connection_get_id (s_con);
2134 		ASSERT (tmp != NULL,
2135 		        "wired-ipv6-only-verify-connection", "failed to verify %s: missing %s / %s key",
2136 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
2137 		        NM_SETTING_CONNECTION_SETTING_NAME,
2138 		        NM_SETTING_CONNECTION_ID);
2139 		ASSERT (strcmp (tmp, expected_id) == 0,
2140 		        "wired-ipv6-only-verify-connection", "failed to verify %s: unexpected %s / %s key value",
2141 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
2142 		        NM_SETTING_CONNECTION_SETTING_NAME,
2143 		        NM_SETTING_CONNECTION_ID);
2144 	
2145 		/* ===== WIRED SETTING ===== */
2146 	
2147 		s_wired = nm_connection_get_setting_wired (connection);
2148 		ASSERT (s_wired != NULL,
2149 		        "wired-ipv6-only-verify-wired", "failed to verify %s: missing %s setting",
2150 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
2151 		        NM_SETTING_WIRED_SETTING_NAME);
2152 	
2153 		/* ===== IPv4 SETTING ===== */
2154 	
2155 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
2156 		ASSERT (s_ip4 != NULL,
2157 		        "wired-ipv6-only-verify-ip4", "failed to verify %s: missing %s setting",
2158 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
2159 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
2160 	
2161 		method = nm_setting_ip4_config_get_method (s_ip4);
2162 		ASSERT (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0,
2163 		        "wired-ipv6-only-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
2164 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
2165 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
2166 		        NM_SETTING_IP4_CONFIG_METHOD);
2167 	
2168 		/* ===== IPv6 SETTING ===== */
2169 	
2170 		s_ip6 = nm_connection_get_setting_ip6_config (connection);
2171 		ASSERT (s_ip6 != NULL,
2172 		        "wired-ipv6-only-verify-ip6", "failed to verify %s: missing %s setting",
2173 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
2174 		        NM_SETTING_IP6_CONFIG_SETTING_NAME);
2175 	
2176 		/* Method */
2177 		tmp = nm_setting_ip6_config_get_method (s_ip6);
2178 		ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0,
2179 		        "wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2180 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
2181 		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
2182 		        NM_SETTING_IP6_CONFIG_METHOD);
2183 	
2184 		/* IP addresses */
2185 		ASSERT (nm_setting_ip6_config_get_num_addresses (s_ip6) == 1,
2186 			"wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2187 			TEST_IFCFG_WIRED_IPV6_MANUAL,
2188 			NM_SETTING_IP6_CONFIG_SETTING_NAME,
2189 			NM_SETTING_IP6_CONFIG_ADDRESSES);
2190 	
2191 		/* Address #1 */
2192 		ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
2193 		ASSERT (ip6_addr,
2194 			"wired-ipv6-only-verify-ip6", "failed to verify %s: missing IP6 address #1",
2195 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2196 	
2197 		ASSERT (nm_ip6_address_get_prefix (ip6_addr) == expected_prefix1,
2198 			"wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected IP6 address #1 prefix",
2199 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2200 	
2201 		ASSERT (inet_pton (AF_INET6, expected_address1, &addr) > 0,
2202 			"wired-ipv6-only-verify-ip6", "failed to verify %s: couldn't convert IP address #1",
2203 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2204 		ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr),
2205 			"wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected IP6 address #1",
2206 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2207 	
2208 		/* DNS Addresses */
2209 		ASSERT (nm_setting_ip6_config_get_num_dns (s_ip6) == 1,
2210 		        "wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2211 		        TEST_IFCFG_WIRED_IPV6_MANUAL,
2212 		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
2213 		        NM_SETTING_IP6_CONFIG_DNS);
2214 	
2215 		ASSERT (inet_pton (AF_INET6, expected_dns1, &addr) > 0,
2216 			"wired-ipv6-only-verify-ip6", "failed to verify %s: couldn't convert DNS IP address #1",
2217 			TEST_IFCFG_WIRED_IPV6_MANUAL);
2218 		ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr),
2219 			"wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value #1",
2220 			TEST_IFCFG_WIRED_IPV6_MANUAL,
2221 			NM_SETTING_IP6_CONFIG_SETTING_NAME,
2222 			NM_SETTING_IP6_CONFIG_DNS);
2223 	
2224 		/* DNS domains should be in IPv6, because IPv4 is disabled */
2225 		g_assert_cmpint (nm_setting_ip6_config_get_num_dns_searches (s_ip6), ==, 3);
2226 		g_assert_cmpstr (nm_setting_ip6_config_get_dns_search (s_ip6, 0), ==, "lorem.com");
2227 		g_assert_cmpstr (nm_setting_ip6_config_get_dns_search (s_ip6, 1), ==, "ipsum.org");
2228 		g_assert_cmpstr (nm_setting_ip6_config_get_dns_search (s_ip6, 2), ==, "dolor.edu");
2229 	
2230 		g_free (unmanaged);
2231 		g_free (keyfile);
2232 		g_free (routefile);
2233 		g_free (route6file);
2234 		g_object_unref (connection);
2235 	}
2236 	
2237 	#define TEST_IFCFG_WIRED_DHCP6_ONLY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp6-only"
2238 	
2239 	static void
2240 	test_read_wired_dhcp6_only (void)
2241 	{
2242 		NMConnection *connection;
2243 		NMSettingConnection *s_con;
2244 		NMSettingWired *s_wired;
2245 		NMSettingIP4Config *s_ip4;
2246 		NMSettingIP6Config *s_ip6;
2247 		char *unmanaged = NULL;
2248 		char *keyfile = NULL;
2249 		char *routefile = NULL;
2250 		char *route6file = NULL;
2251 		gboolean ignore_error = FALSE;
2252 		GError *error = NULL;
2253 		const char *tmp;
2254 		const char *expected_id = "System test-wired-dhcp6-only";
2255 		const char *method;
2256 	
2257 		connection = connection_from_file (TEST_IFCFG_WIRED_DHCP6_ONLY,
2258 		                                   NULL,
2259 		                                   TYPE_ETHERNET,
2260 		                                   NULL,
2261 		                                   &unmanaged,
2262 		                                   &keyfile,
2263 		                                   &routefile,
2264 		                                   &route6file,
2265 		                                   &error,
2266 		                                   &ignore_error);
2267 		ASSERT (connection != NULL,
2268 		        "wired-dhcp6-only-read", "failed to read %s: %s", TEST_IFCFG_WIRED_DHCP6_ONLY, error->message);
2269 	
2270 		ASSERT (nm_connection_verify (connection, &error),
2271 		        "wired-dhcp6-only-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_DHCP6_ONLY, error->message);
2272 	
2273 		ASSERT (unmanaged == NULL,
2274 		        "wired-dhcp6-only-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_DHCP6_ONLY);
2275 	
2276 		/* ===== CONNECTION SETTING ===== */
2277 	
2278 		s_con = nm_connection_get_setting_connection (connection);
2279 		ASSERT (s_con != NULL,
2280 		        "wired-dhcp6-only-verify-connection", "failed to verify %s: missing %s setting",
2281 		        TEST_IFCFG_WIRED_DHCP6_ONLY,
2282 		        NM_SETTING_CONNECTION_SETTING_NAME);
2283 	
2284 		/* ID */
2285 		tmp = nm_setting_connection_get_id (s_con);
2286 		ASSERT (tmp != NULL,
2287 		        "wired-dhcp6-only-verify-connection", "failed to verify %s: missing %s / %s key",
2288 		        TEST_IFCFG_WIRED_DHCP6_ONLY,
2289 		        NM_SETTING_CONNECTION_SETTING_NAME,
2290 		        NM_SETTING_CONNECTION_ID);
2291 		ASSERT (strcmp (tmp, expected_id) == 0,
2292 		        "wired-dhcp6-only-verify-connection", "failed to verify %s: unexpected %s / %s key value",
2293 		        TEST_IFCFG_WIRED_DHCP6_ONLY,
2294 		        NM_SETTING_CONNECTION_SETTING_NAME,
2295 		        NM_SETTING_CONNECTION_ID);
2296 	
2297 		/* ===== WIRED SETTING ===== */
2298 	
2299 		s_wired = nm_connection_get_setting_wired (connection);
2300 		ASSERT (s_wired != NULL,
2301 		        "wired-dhcp6-only-verify-wired", "failed to verify %s: missing %s setting",
2302 		        TEST_IFCFG_WIRED_DHCP6_ONLY,
2303 		        NM_SETTING_WIRED_SETTING_NAME);
2304 	
2305 		/* ===== IPv4 SETTING ===== */
2306 	
2307 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
2308 		ASSERT (s_ip4 != NULL,
2309 		        "wired-dhcp6-only-verify-ip4", "failed to verify %s: missing %s setting",
2310 		        TEST_IFCFG_WIRED_DHCP6_ONLY,
2311 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
2312 	
2313 		method = nm_setting_ip4_config_get_method (s_ip4);
2314 		ASSERT (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0,
2315 		        "wired-dhcp6-only-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
2316 		        TEST_IFCFG_WIRED_DHCP6_ONLY,
2317 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
2318 		        NM_SETTING_IP4_CONFIG_METHOD);
2319 	
2320 		/* ===== IPv6 SETTING ===== */
2321 	
2322 		s_ip6 = nm_connection_get_setting_ip6_config (connection);
2323 		ASSERT (s_ip6 != NULL,
2324 		        "wired-dhcp6-only-verify-ip6", "failed to verify %s: missing %s setting",
2325 		        TEST_IFCFG_WIRED_DHCP6_ONLY,
2326 		        NM_SETTING_IP6_CONFIG_SETTING_NAME);
2327 	
2328 		/* Method */
2329 		tmp = nm_setting_ip6_config_get_method (s_ip6);
2330 		ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_DHCP) == 0,
2331 		        "wired-dhcp6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2332 		        TEST_IFCFG_WIRED_DHCP6_ONLY,
2333 		        NM_SETTING_IP6_CONFIG_SETTING_NAME,
2334 		        NM_SETTING_IP6_CONFIG_METHOD);
2335 	
2336 		g_free (unmanaged);
2337 		g_free (keyfile);
2338 		g_free (routefile);
2339 		g_free (route6file);
2340 		g_object_unref (connection);
2341 	}
2342 	
2343 	#define TEST_IFCFG_ONBOOT_NO TEST_IFCFG_DIR"/network-scripts/ifcfg-test-onboot-no"
2344 	
2345 	static void
2346 	test_read_onboot_no (void)
2347 	{
2348 		NMConnection *connection;
2349 		NMSettingConnection *s_con;
2350 		char *unmanaged = NULL;
2351 		char *keyfile = NULL;
2352 		char *routefile = NULL;
2353 		char *route6file = NULL;
2354 		gboolean ignore_error = FALSE;
2355 		GError *error = NULL;
2356 	
2357 		connection = connection_from_file (TEST_IFCFG_ONBOOT_NO,
2358 		                                   NULL,
2359 		                                   TYPE_ETHERNET,
2360 		                                   NULL,
2361 		                                   &unmanaged,
2362 		                                   &keyfile,
2363 		                                   &routefile,
2364 		                                   &route6file,
2365 		                                   &error,
2366 		                                   &ignore_error);
2367 		ASSERT (connection != NULL,
2368 		        "onboot-no-read", "failed to read %s: %s", TEST_IFCFG_ONBOOT_NO, error->message);
2369 	
2370 		ASSERT (nm_connection_verify (connection, &error),
2371 		        "onboot-no-verify", "failed to verify %s: %s", TEST_IFCFG_ONBOOT_NO, error->message);
2372 	
2373 		ASSERT (unmanaged == NULL,
2374 		        "onboot-no-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_ONBOOT_NO);
2375 	
2376 		/* ===== CONNECTION SETTING ===== */
2377 	
2378 		s_con = nm_connection_get_setting_connection (connection);
2379 		ASSERT (s_con != NULL,
2380 		        "onboot-no-verify-connection", "failed to verify %s: missing %s setting",
2381 		        TEST_IFCFG_ONBOOT_NO,
2382 		        NM_SETTING_CONNECTION_SETTING_NAME);
2383 	
2384 		/* Autoconnect */
2385 		ASSERT (nm_setting_connection_get_autoconnect (s_con) == FALSE,
2386 		        "onboot-no-verify-connection", "failed to verify %s: unexpected %s /%s key value",
2387 		        TEST_IFCFG_ONBOOT_NO,
2388 		        NM_SETTING_CONNECTION_SETTING_NAME,
2389 		        NM_SETTING_CONNECTION_AUTOCONNECT);
2390 	
2391 		g_free (unmanaged);
2392 		g_free (keyfile);
2393 		g_free (routefile);
2394 		g_free (route6file);
2395 		g_object_unref (connection);
2396 	}
2397 	
2398 	#define TEST_IFCFG_NOIP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-noip"
2399 	
2400 	static void
2401 	test_read_noip (void)
2402 	{
2403 		NMConnection *connection;
2404 		NMSettingIP4Config *s_ip4;
2405 		NMSettingIP6Config *s_ip6;
2406 		char *unmanaged = NULL;
2407 		char *keyfile = NULL;
2408 		char *routefile = NULL;
2409 		char *route6file = NULL;
2410 		gboolean ignore_error = FALSE;
2411 		GError *error = NULL;
2412 	
2413 		connection = connection_from_file (TEST_IFCFG_NOIP,
2414 		                                   NULL,
2415 		                                   TYPE_ETHERNET,
2416 		                                   NULL,
2417 		                                   &unmanaged,
2418 		                                   &keyfile,
2419 		                                   &routefile,
2420 		                                   &route6file,
2421 		                                   &error,
2422 		                                   &ignore_error);
2423 		g_assert (connection);
2424 		g_assert (nm_connection_verify (connection, &error));
2425 		g_assert_no_error (error);
2426 	
2427 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
2428 		g_assert (s_ip4);
2429 		g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
2430 		g_assert (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE);
2431 	
2432 		s_ip6 = nm_connection_get_setting_ip6_config (connection);
2433 		g_assert (s_ip6);
2434 		g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
2435 		g_assert (nm_setting_ip6_config_get_never_default (s_ip6) == FALSE);
2436 	
2437 		g_free (unmanaged);
2438 		g_free (keyfile);
2439 		g_free (routefile);
2440 		g_free (route6file);
2441 		g_object_unref (connection);
2442 	}
2443 	
2444 	#define TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-8021x-peap-mschapv2"
2445 	#define TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2_CA_CERT TEST_IFCFG_DIR"/network-scripts/test_ca_cert.pem"
2446 	
2447 	static void
2448 	test_read_wired_8021x_peap_mschapv2 (void)
2449 	{
2450 		NMConnection *connection;
2451 		NMSettingWired *s_wired;
2452 		NMSettingIP4Config *s_ip4;
2453 		NMSetting8021x *s_8021x;
2454 		NMSetting8021x *tmp_8021x;
2455 		char *unmanaged = NULL;
2456 		char *keyfile = NULL;
2457 		char *routefile = NULL;
2458 		char *route6file = NULL;
2459 		gboolean ignore_error = FALSE;
2460 		GError *error = NULL;
2461 		const char *tmp;
2462 		const char *expected_identity = "David Smith";
2463 		const char *expected_anon_identity = "somebody";
2464 		const char *expected_password = "foobar baz";
2465 		gboolean success = FALSE;
2466 		const char *expected_ca_cert_path;
2467 		const char *read_ca_cert_path;
2468 	
2469 		connection = connection_from_file (TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2470 		                                   NULL,
2471 		                                   TYPE_ETHERNET,
2472 		                                   NULL,
2473 		                                   &unmanaged,
2474 		                                   &keyfile,
2475 		                                   &routefile,
2476 		                                   &route6file,
2477 		                                   &error,
2478 		                                   &ignore_error);
2479 		ASSERT (connection != NULL,
2480 		        "wired-8021x-peap-mschapv2-read", "failed to read %s: %s", TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2, error->message);
2481 	
2482 		ASSERT (nm_connection_verify (connection, &error),
2483 		        "wired-8021x-peap-mschapv2-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2, error->message);
2484 	
2485 		ASSERT (unmanaged == NULL,
2486 		        "wired-8021x-peap-mschapv2-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2);
2487 	
2488 		/* ===== WIRED SETTING ===== */
2489 	
2490 		s_wired = nm_connection_get_setting_wired (connection);
2491 		ASSERT (s_wired != NULL,
2492 		        "wired-8021x-peap-mschapv2-verify-wired", "failed to verify %s: missing %s setting",
2493 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2494 		        NM_SETTING_WIRED_SETTING_NAME);
2495 	
2496 		/* ===== IPv4 SETTING ===== */
2497 	
2498 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
2499 		ASSERT (s_ip4 != NULL,
2500 		        "wired-8021x-peap-mschapv2-verify-ip4", "failed to verify %s: missing %s setting",
2501 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2502 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
2503 	
2504 		/* Method */
2505 		tmp = nm_setting_ip4_config_get_method (s_ip4);
2506 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
2507 		        "wired-8021x-peap-mschapv2-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
2508 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2509 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
2510 		        NM_SETTING_IP4_CONFIG_METHOD);
2511 	
2512 		/* ===== 802.1x SETTING ===== */
2513 		s_8021x = nm_connection_get_setting_802_1x (connection);
2514 		ASSERT (s_8021x != NULL,
2515 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s setting",
2516 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2517 		        NM_SETTING_802_1X_SETTING_NAME);
2518 	
2519 		/* EAP methods */
2520 		ASSERT (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1,
2521 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2522 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2523 		        NM_SETTING_802_1X_SETTING_NAME,
2524 		        NM_SETTING_802_1X_EAP);
2525 		tmp = nm_setting_802_1x_get_eap_method (s_8021x, 0);
2526 		ASSERT (tmp != NULL,
2527 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s eap method",
2528 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2529 		        NM_SETTING_802_1X_SETTING_NAME,
2530 		        NM_SETTING_802_1X_EAP);
2531 		ASSERT (strcmp (tmp, "peap") == 0,
2532 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2533 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2534 		        NM_SETTING_802_1X_SETTING_NAME,
2535 		        NM_SETTING_802_1X_EAP);
2536 	
2537 		/* Identity */
2538 		tmp = nm_setting_802_1x_get_identity (s_8021x);
2539 		ASSERT (tmp != NULL,
2540 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s key",
2541 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2542 		        NM_SETTING_802_1X_SETTING_NAME,
2543 		        NM_SETTING_802_1X_IDENTITY);
2544 		ASSERT (strcmp (tmp, expected_identity) == 0,
2545 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2546 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2547 		        NM_SETTING_802_1X_SETTING_NAME,
2548 		        NM_SETTING_802_1X_IDENTITY);
2549 	
2550 		/* Anonymous Identity */
2551 		tmp = nm_setting_802_1x_get_anonymous_identity (s_8021x);
2552 		ASSERT (tmp != NULL,
2553 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s key",
2554 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2555 		        NM_SETTING_802_1X_SETTING_NAME,
2556 		        NM_SETTING_802_1X_ANONYMOUS_IDENTITY);
2557 		ASSERT (strcmp (tmp, expected_anon_identity) == 0,
2558 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2559 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2560 		        NM_SETTING_802_1X_SETTING_NAME,
2561 		        NM_SETTING_802_1X_ANONYMOUS_IDENTITY);
2562 	
2563 		/* Password */
2564 		tmp = nm_setting_802_1x_get_password (s_8021x);
2565 		ASSERT (tmp != NULL,
2566 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s key",
2567 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2568 		        NM_SETTING_802_1X_SETTING_NAME,
2569 		        NM_SETTING_802_1X_PASSWORD);
2570 		ASSERT (strcmp (tmp, expected_password) == 0,
2571 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2572 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2573 		        NM_SETTING_802_1X_SETTING_NAME,
2574 		        NM_SETTING_802_1X_PASSWORD);
2575 	
2576 		/* PEAP version */
2577 		tmp = nm_setting_802_1x_get_phase1_peapver (s_8021x);
2578 		ASSERT (tmp != NULL,
2579 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s key",
2580 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2581 		        NM_SETTING_802_1X_SETTING_NAME,
2582 		        NM_SETTING_802_1X_PHASE1_PEAPVER);
2583 		ASSERT (strcmp (tmp, "1") == 0,
2584 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2585 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2586 		        NM_SETTING_802_1X_SETTING_NAME,
2587 		        NM_SETTING_802_1X_PHASE1_PEAPVER);
2588 	
2589 		/* PEAP Label */
2590 		tmp = nm_setting_802_1x_get_phase1_peaplabel (s_8021x);
2591 		ASSERT (tmp != NULL,
2592 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s key",
2593 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2594 		        NM_SETTING_802_1X_SETTING_NAME,
2595 		        NM_SETTING_802_1X_PHASE1_PEAPLABEL);
2596 		ASSERT (strcmp (tmp, "1") == 0,
2597 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2598 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2599 		        NM_SETTING_802_1X_SETTING_NAME,
2600 		        NM_SETTING_802_1X_PHASE1_PEAPLABEL);
2601 	
2602 		/* CA Cert */
2603 		tmp_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
2604 	
2605 		success = nm_setting_802_1x_set_ca_cert (tmp_8021x,
2606 		                                         TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2_CA_CERT,
2607 		                                         NM_SETTING_802_1X_CK_SCHEME_PATH,
2608 		                                         NULL,
2609 		                                         &error);
2610 		ASSERT (success == TRUE,
2611 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: could not load CA certificate",
2612 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2613 		        NM_SETTING_802_1X_SETTING_NAME,
2614 		        NM_SETTING_802_1X_CA_CERT);
2615 		expected_ca_cert_path = nm_setting_802_1x_get_ca_cert_path (tmp_8021x);
2616 		ASSERT (expected_ca_cert_path != NULL,
2617 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: failed to get CA certificate",
2618 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2619 		        NM_SETTING_802_1X_SETTING_NAME,
2620 		        NM_SETTING_802_1X_CA_CERT);
2621 	
2622 		read_ca_cert_path = nm_setting_802_1x_get_ca_cert_path (s_8021x);
2623 		ASSERT (read_ca_cert_path != NULL,
2624 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s key",
2625 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2626 		        NM_SETTING_802_1X_SETTING_NAME,
2627 		        NM_SETTING_802_1X_CA_CERT);
2628 	
2629 		ASSERT (strcmp (read_ca_cert_path, expected_ca_cert_path) == 0,
2630 		        "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s certificate path",
2631 		        TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2632 		        NM_SETTING_802_1X_SETTING_NAME,
2633 		        NM_SETTING_802_1X_CA_CERT);
2634 	
2635 		g_object_unref (tmp_8021x);
2636 	
2637 		g_free (unmanaged);
2638 		g_free (keyfile);
2639 		g_free (routefile);
2640 		g_free (route6file);
2641 		g_object_unref (connection);
2642 	}
2643 	
2644 	#define TEST_IFCFG_WIRED_8021X_TLS_AGENT TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-8021x-tls-agent"
2645 	#define TEST_IFCFG_WIRED_8021X_TLS_ALWAYS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-8021x-tls-always"
2646 	
2647 	static void
2648 	test_read_wired_8021x_tls_secret_flags (const char *ifcfg, NMSettingSecretFlags expected_flags)
2649 	{
2650 		NMConnection *connection;
2651 		NMSettingWired *s_wired;
2652 		NMSetting8021x *s_8021x;
2653 		char *unmanaged = NULL;
2654 		char *keyfile = NULL;
2655 		char *routefile = NULL;
2656 		char *route6file = NULL;
2657 		gboolean ignore_error = FALSE;
2658 		GError *error = NULL;
2659 		const char *expected_identity = "David Smith";
2660 		gboolean success = FALSE;
2661 		char *dirname, *tmp;
2662 	
2663 		connection = connection_from_file (ifcfg,
2664 		                                   NULL,
2665 		                                   TYPE_ETHERNET,
2666 		                                   NULL,
2667 		                                   &unmanaged,
2668 		                                   &keyfile,
2669 		                                   &routefile,
2670 		                                   &route6file,
2671 		                                   &error,
2672 		                                   &ignore_error);
2673 		g_assert_no_error (error);
2674 		g_assert (connection);
2675 	
2676 		success = nm_connection_verify (connection, &error);
2677 		g_assert_no_error (error);
2678 		g_assert (success);
2679 	
2680 		/* ===== WIRED SETTING ===== */
2681 		s_wired = nm_connection_get_setting_wired (connection);
2682 		g_assert (s_wired);
2683 	
2684 		/* ===== 802.1x SETTING ===== */
2685 		s_8021x = nm_connection_get_setting_802_1x (connection);
2686 		g_assert (s_8021x);
2687 		g_assert_cmpint (nm_setting_802_1x_get_num_eap_methods (s_8021x), ==, 1);
2688 		g_assert_cmpstr (nm_setting_802_1x_get_eap_method (s_8021x, 0), ==, "tls");
2689 		g_assert_cmpstr (nm_setting_802_1x_get_identity (s_8021x), ==, expected_identity);
2690 		g_assert_cmpint (nm_setting_802_1x_get_private_key_password_flags (s_8021x), ==, expected_flags);
2691 	
2692 		dirname = g_path_get_dirname (ifcfg);
2693 		tmp = g_build_path ("/", dirname, "test_ca_cert.pem", NULL);
2694 		g_assert_cmpstr (nm_setting_802_1x_get_ca_cert_path (s_8021x), ==, tmp);
2695 		g_free (tmp);
2696 	
2697 		tmp = g_build_path ("/", dirname, "test1_key_and_cert.pem", NULL);
2698 		g_assert_cmpstr (nm_setting_802_1x_get_client_cert_path (s_8021x), ==, tmp);
2699 		g_assert_cmpstr (nm_setting_802_1x_get_private_key_path (s_8021x), ==, tmp);
2700 		g_free (tmp);
2701 	
2702 		g_free (dirname);
2703 	
2704 		g_free (unmanaged);
2705 		g_free (keyfile);
2706 		g_free (routefile);
2707 		g_free (route6file);
2708 		g_object_unref (connection);
2709 	}
2710 	
2711 	#define TEST_IFCFG_WIFI_OPEN TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open"
2712 	
2713 	static void
2714 	test_read_wifi_open (void)
2715 	{
2716 		NMConnection *connection;
2717 		NMSettingConnection *s_con;
2718 		NMSettingWireless *s_wireless;
2719 		NMSettingWirelessSecurity *s_wsec;
2720 		NMSettingIP4Config *s_ip4;
2721 		char *unmanaged = NULL;
2722 		char *keyfile = NULL;
2723 		char *routefile = NULL;
2724 		char *route6file = NULL;
2725 		gboolean ignore_error = FALSE;
2726 		GError *error = NULL;
2727 		const char *tmp;
2728 		const GByteArray *array;
2729 		char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
2730 		const char *expected_id = "System blahblah (test-wifi-open)";
2731 		guint64 expected_timestamp = 0;
2732 		const char *expected_ssid = "blahblah";
2733 		const char *expected_mode = "infrastructure";
2734 		const guint32 expected_channel = 1;
2735 	
2736 		connection = connection_from_file (TEST_IFCFG_WIFI_OPEN,
2737 		                                   NULL,
2738 		                                   TYPE_WIRELESS,
2739 		                                   NULL,
2740 		                                   &unmanaged,
2741 		                                   &keyfile,
2742 		                                   &routefile,
2743 		                                   &route6file,
2744 		                                   &error,
2745 		                                   &ignore_error);
2746 		ASSERT (connection != NULL,
2747 		        "wifi-open-read", "failed to read %s: %s", TEST_IFCFG_WIFI_OPEN, error->message);
2748 	
2749 		ASSERT (nm_connection_verify (connection, &error),
2750 		        "wifi-open-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_OPEN, error->message);
2751 	
2752 		/* ===== CONNECTION SETTING ===== */
2753 	
2754 		s_con = nm_connection_get_setting_connection (connection);
2755 		ASSERT (s_con != NULL,
2756 		        "wifi-open-verify-connection", "failed to verify %s: missing %s setting",
2757 		        TEST_IFCFG_WIFI_OPEN,
2758 		        NM_SETTING_CONNECTION_SETTING_NAME);
2759 	
2760 		/* ID */
2761 		tmp = nm_setting_connection_get_id (s_con);
2762 		ASSERT (tmp != NULL,
2763 		        "wifi-open-verify-connection", "failed to verify %s: missing %s / %s key",
2764 		        TEST_IFCFG_WIFI_OPEN,
2765 		        NM_SETTING_CONNECTION_SETTING_NAME,
2766 		        NM_SETTING_CONNECTION_ID);
2767 		ASSERT (strcmp (tmp, expected_id) == 0,
2768 		        "wifi-open-verify-connection", "failed to verify %s: unexpected %s / %s key value",
2769 		        TEST_IFCFG_WIFI_OPEN,
2770 		        NM_SETTING_CONNECTION_SETTING_NAME,
2771 		        NM_SETTING_CONNECTION_ID);
2772 	
2773 		/* UUID can't be tested if the ifcfg does not contain the UUID key, because
2774 		 * the UUID is generated on the full path of the ifcfg file, which can change
2775 		 * depending on where the tests are run.
2776 		 */
2777 	
2778 		/* Timestamp */
2779 		ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp,
2780 		        "wifi-open-verify-connection", "failed to verify %s: unexpected %s /%s key value",
2781 		        TEST_IFCFG_WIFI_OPEN,
2782 		        NM_SETTING_CONNECTION_SETTING_NAME,
2783 		        NM_SETTING_CONNECTION_TIMESTAMP);
2784 	
2785 		/* Autoconnect */
2786 		ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
2787 		        "wifi-open-verify-connection", "failed to verify %s: unexpected %s /%s key value",
2788 		        TEST_IFCFG_WIFI_OPEN,
2789 		        NM_SETTING_CONNECTION_SETTING_NAME,
2790 		        NM_SETTING_CONNECTION_AUTOCONNECT);
2791 	
2792 		/* ===== WIRELESS SETTING ===== */
2793 	
2794 		s_wireless = nm_connection_get_setting_wireless (connection);
2795 		ASSERT (s_wireless != NULL,
2796 		        "wifi-open-verify-wireless", "failed to verify %s: missing %s setting",
2797 		        TEST_IFCFG_WIFI_OPEN,
2798 		        NM_SETTING_WIRELESS_SETTING_NAME);
2799 	
2800 		/* MAC address */
2801 		array = nm_setting_wireless_get_mac_address (s_wireless);
2802 		ASSERT (array != NULL,
2803 		        "wifi-open-verify-wireless", "failed to verify %s: missing %s / %s key",
2804 		        TEST_IFCFG_WIFI_OPEN,
2805 		        NM_SETTING_WIRELESS_SETTING_NAME,
2806 		        NM_SETTING_WIRELESS_MAC_ADDRESS);
2807 		ASSERT (array->len == ETH_ALEN,
2808 		        "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
2809 		        TEST_IFCFG_WIFI_OPEN,
2810 		        NM_SETTING_WIRELESS_SETTING_NAME,
2811 		        NM_SETTING_WIRELESS_MAC_ADDRESS);
2812 		ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
2813 		        "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
2814 		        TEST_IFCFG_WIFI_OPEN,
2815 		        NM_SETTING_WIRELESS_SETTING_NAME,
2816 		        NM_SETTING_WIRELESS_MAC_ADDRESS);
2817 	
2818 		ASSERT (nm_setting_wireless_get_mtu (s_wireless) == 0,
2819 		        "wifi-open-verify-wired", "failed to verify %s: unexpected %s / %s key value",
2820 		        TEST_IFCFG_WIFI_OPEN,
2821 		        NM_SETTING_WIRELESS_SETTING_NAME,
2822 		        NM_SETTING_WIRELESS_MTU);
2823 	
2824 		array = nm_setting_wireless_get_ssid (s_wireless);
2825 		ASSERT (array != NULL,
2826 		        "wifi-open-verify-wireless", "failed to verify %s: missing %s / %s key",
2827 		        TEST_IFCFG_WIFI_OPEN,
2828 		        NM_SETTING_WIRELESS_SETTING_NAME,
2829 		        NM_SETTING_WIRELESS_SSID);
2830 		ASSERT (array->len == strlen (expected_ssid),
2831 		        "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
2832 		        TEST_IFCFG_WIFI_OPEN,
2833 		        NM_SETTING_WIRELESS_SETTING_NAME,
2834 		        NM_SETTING_WIRELESS_SSID);
2835 		ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
2836 		        "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
2837 		        TEST_IFCFG_WIFI_OPEN,
2838 		        NM_SETTING_WIRELESS_SETTING_NAME,
2839 		        NM_SETTING_WIRELESS_SSID);
2840 		
2841 		ASSERT (nm_setting_wireless_get_bssid (s_wireless) == NULL,
2842 		        "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
2843 		        TEST_IFCFG_WIFI_OPEN,
2844 		        NM_SETTING_WIRELESS_SETTING_NAME,
2845 		        NM_SETTING_WIRELESS_BSSID);
2846 	
2847 		tmp = nm_setting_wireless_get_mode (s_wireless);
2848 		ASSERT (tmp != NULL,
2849 		        "wifi-open-verify-wireless", "failed to verify %s: missing %s / %s key",
2850 		        TEST_IFCFG_WIFI_OPEN,
2851 		        NM_SETTING_WIRELESS_SETTING_NAME,
2852 		        NM_SETTING_WIRELESS_MODE);
2853 		ASSERT (strcmp (tmp, expected_mode) == 0,
2854 		        "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
2855 		        TEST_IFCFG_WIFI_OPEN,
2856 		        NM_SETTING_WIRELESS_SETTING_NAME,
2857 		        NM_SETTING_WIRELESS_MODE);
2858 	
2859 		ASSERT (nm_setting_wireless_get_channel (s_wireless) == expected_channel,
2860 		        "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
2861 		        TEST_IFCFG_WIFI_OPEN,
2862 		        NM_SETTING_WIRELESS_SETTING_NAME,
2863 		        NM_SETTING_WIRELESS_CHANNEL);
2864 	
2865 		/* ===== WiFi SECURITY SETTING ===== */
2866 		s_wsec = nm_connection_get_setting_wireless_security (connection);
2867 		g_assert (s_wsec == NULL);
2868 	
2869 		/* ===== IPv4 SETTING ===== */
2870 	
2871 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
2872 		ASSERT (s_ip4 != NULL,
2873 		        "wifi-open-verify-ip4", "failed to verify %s: missing %s setting",
2874 		        TEST_IFCFG_WIFI_OPEN,
2875 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
2876 	
2877 		/* Method */
2878 		tmp = nm_setting_ip4_config_get_method (s_ip4);
2879 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
2880 		        "wifi-open-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
2881 		        TEST_IFCFG_WIFI_OPEN,
2882 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
2883 		        NM_SETTING_IP4_CONFIG_METHOD);
2884 	
2885 		g_free (unmanaged);
2886 		g_free (keyfile);
2887 		g_free (routefile);
2888 		g_free (route6file);
2889 		g_object_unref (connection);
2890 	}
2891 	
2892 	#define TEST_IFCFG_WIFI_OPEN_AUTO TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-auto"
2893 	
2894 	static void
2895 	test_read_wifi_open_auto (void)
2896 	{
2897 		NMConnection *connection;
2898 		NMSettingConnection *s_con;
2899 		NMSettingWireless *s_wireless;
2900 		char *unmanaged = NULL;
2901 		char *keyfile = NULL;
2902 		char *routefile = NULL;
2903 		char *route6file = NULL;
2904 		gboolean ignore_error = FALSE;
2905 		GError *error = NULL;
2906 		const char *tmp;
2907 		const char *expected_id = "System blahblah (test-wifi-open-auto)";
2908 		const char *expected_mode = "infrastructure";
2909 	
2910 		connection = connection_from_file (TEST_IFCFG_WIFI_OPEN_AUTO,
2911 		                                   NULL,
2912 		                                   TYPE_WIRELESS,
2913 		                                   NULL,
2914 		                                   &unmanaged,
2915 		                                   &keyfile,
2916 		                                   &routefile,
2917 		                                   &route6file,
2918 		                                   &error,
2919 		                                   &ignore_error);
2920 		ASSERT (connection != NULL,
2921 		        "wifi-open-auto-read", "failed to read %s: %s", TEST_IFCFG_WIFI_OPEN_AUTO, error->message);
2922 	
2923 		ASSERT (nm_connection_verify (connection, &error),
2924 		        "wifi-open-auto-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_OPEN_AUTO, error->message);
2925 	
2926 		/* ===== CONNECTION SETTING ===== */
2927 	
2928 		s_con = nm_connection_get_setting_connection (connection);
2929 		ASSERT (s_con != NULL,
2930 		        "wifi-open-auto-verify-connection", "failed to verify %s: missing %s setting",
2931 		        TEST_IFCFG_WIFI_OPEN_AUTO,
2932 		        NM_SETTING_CONNECTION_SETTING_NAME);
2933 	
2934 		/* ID */
2935 		tmp = nm_setting_connection_get_id (s_con);
2936 		ASSERT (tmp != NULL,
2937 		        "wifi-open-auto-verify-connection", "failed to verify %s: missing %s / %s key",
2938 		        TEST_IFCFG_WIFI_OPEN_AUTO,
2939 		        NM_SETTING_CONNECTION_SETTING_NAME,
2940 		        NM_SETTING_CONNECTION_ID);
2941 		ASSERT (strcmp (tmp, expected_id) == 0,
2942 		        "wifi-open-auto-verify-connection", "failed to verify %s: unexpected %s / %s key value",
2943 		        TEST_IFCFG_WIFI_OPEN_AUTO,
2944 		        NM_SETTING_CONNECTION_SETTING_NAME,
2945 		        NM_SETTING_CONNECTION_ID);
2946 	
2947 		/* ===== WIRELESS SETTING ===== */
2948 	
2949 		s_wireless = nm_connection_get_setting_wireless (connection);
2950 		ASSERT (s_wireless != NULL,
2951 		        "wifi-open-auto-verify-wireless", "failed to verify %s: missing %s setting",
2952 		        TEST_IFCFG_WIFI_OPEN_AUTO,
2953 		        NM_SETTING_WIRELESS_SETTING_NAME);
2954 	
2955 		tmp = nm_setting_wireless_get_mode (s_wireless);
2956 		ASSERT (tmp != NULL,
2957 		        "wifi-open-auto-verify-wireless", "failed to verify %s: missing %s / %s key",
2958 		        TEST_IFCFG_WIFI_OPEN_AUTO,
2959 		        NM_SETTING_WIRELESS_SETTING_NAME,
2960 		        NM_SETTING_WIRELESS_MODE);
2961 		ASSERT (strcmp (tmp, expected_mode) == 0,
2962 		        "wifi-open-auto-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
2963 		        TEST_IFCFG_WIFI_OPEN_AUTO,
2964 		        NM_SETTING_WIRELESS_SETTING_NAME,
2965 		        NM_SETTING_WIRELESS_MODE);
2966 	
2967 		g_free (unmanaged);
2968 		g_free (keyfile);
2969 		g_free (routefile);
2970 		g_free (route6file);
2971 		g_object_unref (connection);
2972 	}
2973 	
2974 	#define TEST_IFCFG_WIFI_OPEN_SSID_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-hex"
2975 	
2976 	static void
2977 	test_read_wifi_open_ssid_hex (void)
2978 	{
2979 		NMConnection *connection;
2980 		NMSettingConnection *s_con;
2981 		NMSettingWireless *s_wireless;
2982 		char *unmanaged = NULL;
2983 		char *keyfile = NULL;
2984 		char *routefile = NULL;
2985 		char *route6file = NULL;
2986 		gboolean ignore_error = FALSE;
2987 		GError *error = NULL;
2988 		const char *tmp;
2989 		const GByteArray *array;
2990 		const char *expected_id = "System blahblah (test-wifi-open-ssid-hex)";
2991 		const char *expected_ssid = "blahblah";
2992 	
2993 		connection = connection_from_file (TEST_IFCFG_WIFI_OPEN_SSID_HEX,
2994 		                                   NULL,
2995 		                                   TYPE_WIRELESS,
2996 		                                   NULL,
2997 		                                   &unmanaged,
2998 		                                   &keyfile,
2999 		                                   &routefile,
3000 		                                   &route6file,
3001 		                                   &error,
3002 		                                   &ignore_error);
3003 		ASSERT (connection != NULL,
3004 		        "wifi-open-ssid-hex-read", "failed to read %s: %s", TEST_IFCFG_WIFI_OPEN_SSID_HEX, error->message);
3005 	
3006 		ASSERT (nm_connection_verify (connection, &error),
3007 		        "wifi-open-ssid-hex-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_OPEN_SSID_HEX, error->message);
3008 	
3009 		/* ===== CONNECTION SETTING ===== */
3010 	
3011 		s_con = nm_connection_get_setting_connection (connection);
3012 		ASSERT (s_con != NULL,
3013 		        "wifi-open-ssid-hex-verify-connection", "failed to verify %s: missing %s setting",
3014 		        TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3015 		        NM_SETTING_CONNECTION_SETTING_NAME);
3016 	
3017 		/* ID */
3018 		tmp = nm_setting_connection_get_id (s_con);
3019 		ASSERT (tmp != NULL,
3020 		        "wifi-open-ssid-hex-verify-connection", "failed to verify %s: missing %s / %s key",
3021 		        TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3022 		        NM_SETTING_CONNECTION_SETTING_NAME,
3023 		        NM_SETTING_CONNECTION_ID);
3024 		ASSERT (strcmp (tmp, expected_id) == 0,
3025 		        "wifi-open-ssid-hex-verify-connection", "failed to verify %s: unexpected %s / %s key value",
3026 		        TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3027 		        NM_SETTING_CONNECTION_SETTING_NAME,
3028 		        NM_SETTING_CONNECTION_ID);
3029 	
3030 		/* ===== WIRELESS SETTING ===== */
3031 	
3032 		s_wireless = nm_connection_get_setting_wireless (connection);
3033 		ASSERT (s_wireless != NULL,
3034 		        "wifi-open-ssid-hex-verify-wireless", "failed to verify %s: missing %s setting",
3035 		        TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3036 		        NM_SETTING_WIRELESS_SETTING_NAME);
3037 	
3038 		/* SSID */
3039 		array = nm_setting_wireless_get_ssid (s_wireless);
3040 		ASSERT (array != NULL,
3041 		        "wifi-open-ssid-hex-verify-wireless", "failed to verify %s: missing %s / %s key",
3042 		        TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3043 		        NM_SETTING_WIRELESS_SETTING_NAME,
3044 		        NM_SETTING_WIRELESS_SSID);
3045 		ASSERT (array->len == strlen (expected_ssid),
3046 		        "wifi-open-ssid-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
3047 		        TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3048 		        NM_SETTING_WIRELESS_SETTING_NAME,
3049 		        NM_SETTING_WIRELESS_SSID);
3050 		ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
3051 		        "wifi-open-ssid-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3052 		        TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3053 		        NM_SETTING_WIRELESS_SETTING_NAME,
3054 		        NM_SETTING_WIRELESS_SSID);
3055 	
3056 		g_free (unmanaged);
3057 		g_free (keyfile);
3058 		g_free (routefile);
3059 		g_free (route6file);
3060 		g_object_unref (connection);
3061 	}
3062 	
3063 	static void
3064 	test_read_wifi_open_ssid_bad (const char *file, const char *test)
3065 	{
3066 		NMConnection *connection;
3067 		char *unmanaged = NULL;
3068 		char *keyfile = NULL;
3069 		char *routefile = NULL;
3070 		char *route6file = NULL;
3071 		gboolean ignore_error = FALSE;
3072 		GError *error = NULL;
3073 	
3074 		connection = connection_from_file (file,
3075 		                                   NULL,
3076 		                                   TYPE_WIRELESS,
3077 		                                   NULL,
3078 		                                   &unmanaged,
3079 		                                   &keyfile,
3080 		                                   &routefile,
3081 		                                   &route6file,
3082 		                                   &error,
3083 		                                   &ignore_error);
3084 		ASSERT (connection == NULL, test, "unexpected success reading %s", file);
3085 		g_clear_error (&error);
3086 	
3087 		g_free (unmanaged);
3088 		g_free (keyfile);
3089 		g_free (routefile);
3090 		g_free (route6file);
3091 	}
3092 	
3093 	#define TEST_IFCFG_WIFI_OPEN_SSID_QUOTED TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-quoted"
3094 	
3095 	static void
3096 	test_read_wifi_open_ssid_quoted (void)
3097 	{
3098 		NMConnection *connection;
3099 		NMSettingConnection *s_con;
3100 		NMSettingWireless *s_wireless;
3101 		char *unmanaged = NULL;
3102 		char *keyfile = NULL;
3103 		char *routefile = NULL;
3104 		char *route6file = NULL;
3105 		gboolean ignore_error = FALSE;
3106 		GError *error = NULL;
3107 		const char *tmp;
3108 		const GByteArray *array;
3109 		const char *expected_id = "System foo\"bar\\ (test-wifi-open-ssid-quoted)";
3110 		const char *expected_ssid = "foo\"bar\\";
3111 	
3112 		connection = connection_from_file (TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3113 		                                   NULL,
3114 		                                   TYPE_WIRELESS,
3115 		                                   NULL,
3116 		                                   &unmanaged,
3117 		                                   &keyfile,
3118 		                                   &routefile,
3119 		                                   &route6file,
3120 		                                   &error,
3121 		                                   &ignore_error);
3122 		ASSERT (connection != NULL,
3123 		        "wifi-open-ssid-quoted-read", "failed to read %s: %s", TEST_IFCFG_WIFI_OPEN_SSID_QUOTED, error->message);
3124 	
3125 		ASSERT (nm_connection_verify (connection, &error),
3126 		        "wifi-open-ssid-quoted-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_OPEN_SSID_QUOTED, error->message);
3127 	
3128 		/* ===== CONNECTION SETTING ===== */
3129 	
3130 		s_con = nm_connection_get_setting_connection (connection);
3131 		ASSERT (s_con != NULL,
3132 		        "wifi-open-ssid-quoted-verify-connection", "failed to verify %s: missing %s setting",
3133 		        TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3134 		        NM_SETTING_CONNECTION_SETTING_NAME);
3135 	
3136 		/* ID */
3137 		tmp = nm_setting_connection_get_id (s_con);
3138 		ASSERT (tmp != NULL,
3139 		        "wifi-open-ssid-quoted-verify-connection", "failed to verify %s: missing %s / %s key",
3140 		        TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3141 		        NM_SETTING_CONNECTION_SETTING_NAME,
3142 		        NM_SETTING_CONNECTION_ID);
3143 		ASSERT (strcmp (tmp, expected_id) == 0,
3144 		        "wifi-open-ssid-quoted-verify-connection", "failed to verify %s: unexpected %s / %s key value",
3145 		        TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3146 		        NM_SETTING_CONNECTION_SETTING_NAME,
3147 		        NM_SETTING_CONNECTION_ID);
3148 	
3149 		/* ===== WIRELESS SETTING ===== */
3150 	
3151 		s_wireless = nm_connection_get_setting_wireless (connection);
3152 		ASSERT (s_wireless != NULL,
3153 		        "wifi-open-ssid-quoted-verify-wireless", "failed to verify %s: missing %s setting",
3154 		        TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3155 		        NM_SETTING_WIRELESS_SETTING_NAME);
3156 	
3157 		/* SSID */
3158 		array = nm_setting_wireless_get_ssid (s_wireless);
3159 		ASSERT (array != NULL,
3160 		        "wifi-open-ssid-quoted-verify-wireless", "failed to verify %s: missing %s / %s key",
3161 		        TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3162 		        NM_SETTING_WIRELESS_SETTING_NAME,
3163 		        NM_SETTING_WIRELESS_SSID);
3164 		ASSERT (array->len == strlen (expected_ssid),
3165 		        "wifi-open-ssid-quoted-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
3166 		        TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3167 		        NM_SETTING_WIRELESS_SETTING_NAME,
3168 		        NM_SETTING_WIRELESS_SSID);
3169 		ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
3170 		        "wifi-open-ssid-quoted-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3171 		        TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3172 		        NM_SETTING_WIRELESS_SETTING_NAME,
3173 		        NM_SETTING_WIRELESS_SSID);
3174 	
3175 		g_free (unmanaged);
3176 		g_free (keyfile);
3177 		g_free (routefile);
3178 		g_free (route6file);
3179 		g_object_unref (connection);
3180 	}
3181 	
3182 	#define TEST_IFCFG_WIFI_WEP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep"
3183 	
3184 	static void
3185 	test_read_wifi_wep (void)
3186 	{
3187 		NMConnection *connection;
3188 		NMSettingConnection *s_con;
3189 		NMSettingWireless *s_wireless;
3190 		NMSettingWirelessSecurity *s_wsec;
3191 		NMSettingIP4Config *s_ip4;
3192 		char *unmanaged = NULL;
3193 		char *keyfile = NULL;
3194 		char *routefile = NULL;
3195 		char *route6file = NULL;
3196 		gboolean ignore_error = FALSE;
3197 		GError *error = NULL;
3198 		const char *tmp;
3199 		const GByteArray *array;
3200 		char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
3201 		const char *expected_id = "System blahblah (test-wifi-wep)";
3202 		guint64 expected_timestamp = 0;
3203 		const char *expected_ssid = "blahblah";
3204 		const char *expected_mode = "infrastructure";
3205 		const guint32 expected_channel = 1;
3206 		const char *expected_wep_key0 = "0123456789abcdef0123456789";
3207 		NMWepKeyType key_type;
3208 	
3209 		connection = connection_from_file (TEST_IFCFG_WIFI_WEP,
3210 		                                   NULL,
3211 		                                   TYPE_WIRELESS,
3212 		                                   NULL,
3213 		                                   &unmanaged,
3214 		                                   &keyfile,
3215 		                                   &routefile,
3216 		                                   &route6file,
3217 		                                   &error,
3218 		                                   &ignore_error);
3219 		ASSERT (connection != NULL,
3220 		        "wifi-wep-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP, error->message);
3221 	
3222 		ASSERT (nm_connection_verify (connection, &error),
3223 		        "wifi-wep-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP, error->message);
3224 	
3225 		/* ===== CONNECTION SETTING ===== */
3226 	
3227 		s_con = nm_connection_get_setting_connection (connection);
3228 		ASSERT (s_con != NULL,
3229 		        "wifi-wep-verify-connection", "failed to verify %s: missing %s setting",
3230 		        TEST_IFCFG_WIFI_WEP,
3231 		        NM_SETTING_CONNECTION_SETTING_NAME);
3232 	
3233 		/* ID */
3234 		tmp = nm_setting_connection_get_id (s_con);
3235 		ASSERT (tmp != NULL,
3236 		        "wifi-wep-verify-connection", "failed to verify %s: missing %s / %s key",
3237 		        TEST_IFCFG_WIFI_WEP,
3238 		        NM_SETTING_CONNECTION_SETTING_NAME,
3239 		        NM_SETTING_CONNECTION_ID);
3240 		ASSERT (strcmp (tmp, expected_id) == 0,
3241 		        "wifi-wep-verify-connection", "failed to verify %s: unexpected %s / %s key value",
3242 		        TEST_IFCFG_WIFI_WEP,
3243 		        NM_SETTING_CONNECTION_SETTING_NAME,
3244 		        NM_SETTING_CONNECTION_ID);
3245 	
3246 		/* UUID can't be tested if the ifcfg does not contain the UUID key, because
3247 		 * the UUID is generated on the full path of the ifcfg file, which can change
3248 		 * depending on where the tests are run.
3249 		 */
3250 	
3251 		/* Timestamp */
3252 		ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp,
3253 		        "wifi-wep-verify-connection", "failed to verify %s: unexpected %s /%s key value",
3254 		        TEST_IFCFG_WIFI_WEP,
3255 		        NM_SETTING_CONNECTION_SETTING_NAME,
3256 		        NM_SETTING_CONNECTION_TIMESTAMP);
3257 	
3258 		/* Autoconnect */
3259 		ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
3260 		        "wifi-wep-verify-connection", "failed to verify %s: unexpected %s /%s key value",
3261 		        TEST_IFCFG_WIFI_WEP,
3262 		        NM_SETTING_CONNECTION_SETTING_NAME,
3263 		        NM_SETTING_CONNECTION_AUTOCONNECT);
3264 	
3265 		/* ===== WIRELESS SETTING ===== */
3266 	
3267 		s_wireless = nm_connection_get_setting_wireless (connection);
3268 		ASSERT (s_wireless != NULL,
3269 		        "wifi-wep-verify-wireless", "failed to verify %s: missing %s setting",
3270 		        TEST_IFCFG_WIFI_WEP,
3271 		        NM_SETTING_WIRELESS_SETTING_NAME);
3272 	
3273 		/* MAC address */
3274 		array = nm_setting_wireless_get_mac_address (s_wireless);
3275 		ASSERT (array != NULL,
3276 		        "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3277 		        TEST_IFCFG_WIFI_WEP,
3278 		        NM_SETTING_WIRELESS_SETTING_NAME,
3279 		        NM_SETTING_WIRELESS_MAC_ADDRESS);
3280 		ASSERT (array->len == ETH_ALEN,
3281 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
3282 		        TEST_IFCFG_WIFI_WEP,
3283 		        NM_SETTING_WIRELESS_SETTING_NAME,
3284 		        NM_SETTING_WIRELESS_MAC_ADDRESS);
3285 		ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
3286 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3287 		        TEST_IFCFG_WIFI_WEP,
3288 		        NM_SETTING_WIRELESS_SETTING_NAME,
3289 		        NM_SETTING_WIRELESS_MAC_ADDRESS);
3290 	
3291 		/* MTU */
3292 		ASSERT (nm_setting_wireless_get_mtu (s_wireless) == 0,
3293 		        "wifi-wep-verify-wired", "failed to verify %s: unexpected %s / %s key value",
3294 		        TEST_IFCFG_WIFI_WEP,
3295 		        NM_SETTING_WIRELESS_SETTING_NAME,
3296 		        NM_SETTING_WIRELESS_MTU);
3297 	
3298 		/* SSID */
3299 		array = nm_setting_wireless_get_ssid (s_wireless);
3300 		ASSERT (array != NULL,
3301 		        "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3302 		        TEST_IFCFG_WIFI_WEP,
3303 		        NM_SETTING_WIRELESS_SETTING_NAME,
3304 		        NM_SETTING_WIRELESS_SSID);
3305 		ASSERT (array->len == strlen (expected_ssid),
3306 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
3307 		        TEST_IFCFG_WIFI_WEP,
3308 		        NM_SETTING_WIRELESS_SETTING_NAME,
3309 		        NM_SETTING_WIRELESS_SSID);
3310 		ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
3311 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3312 		        TEST_IFCFG_WIFI_WEP,
3313 		        NM_SETTING_WIRELESS_SETTING_NAME,
3314 		        NM_SETTING_WIRELESS_SSID);
3315 	
3316 		/* BSSID */
3317 		ASSERT (nm_setting_wireless_get_bssid (s_wireless) == NULL,
3318 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3319 		        TEST_IFCFG_WIFI_WEP,
3320 		        NM_SETTING_WIRELESS_SETTING_NAME,
3321 		        NM_SETTING_WIRELESS_BSSID);
3322 	
3323 		/* Mode */
3324 		tmp = nm_setting_wireless_get_mode (s_wireless);
3325 		ASSERT (tmp != NULL,
3326 		        "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3327 		        TEST_IFCFG_WIFI_WEP,
3328 		        NM_SETTING_WIRELESS_SETTING_NAME,
3329 		        NM_SETTING_WIRELESS_MODE);
3330 		ASSERT (strcmp (tmp, expected_mode) == 0,
3331 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3332 		        TEST_IFCFG_WIFI_WEP,
3333 		        NM_SETTING_WIRELESS_SETTING_NAME,
3334 		        NM_SETTING_WIRELESS_MODE);
3335 	
3336 		/* Channel */
3337 		ASSERT (nm_setting_wireless_get_channel (s_wireless) == expected_channel,
3338 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3339 		        TEST_IFCFG_WIFI_WEP,
3340 		        NM_SETTING_WIRELESS_SETTING_NAME,
3341 		        NM_SETTING_WIRELESS_CHANNEL);
3342 	
3343 		/* ===== WIRELESS SECURITY SETTING ===== */
3344 	
3345 		s_wsec = nm_connection_get_setting_wireless_security (connection);
3346 		ASSERT (s_wsec != NULL,
3347 		        "wifi-wep-verify-wireless", "failed to verify %s: missing %s setting",
3348 		        TEST_IFCFG_WIFI_WEP,
3349 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
3350 	
3351 		/* Key management */
3352 		ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
3353 		        "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3354 		        TEST_IFCFG_WIFI_WEP,
3355 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3356 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
3357 	
3358 		/* WEP key index */
3359 		ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
3360 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3361 		        TEST_IFCFG_WIFI_WEP,
3362 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3363 		        NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
3364 	
3365 		/* WEP key type */
3366 		key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
3367 		ASSERT (key_type == NM_WEP_KEY_TYPE_UNKNOWN || key_type == NM_WEP_KEY_TYPE_KEY,
3368 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected WEP key type %d",
3369 		        TEST_IFCFG_WIFI_WEP,
3370 		        key_type);
3371 	
3372 		/* WEP key index 0 */
3373 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
3374 		ASSERT (tmp != NULL,
3375 		        "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3376 		        TEST_IFCFG_WIFI_WEP,
3377 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3378 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3379 		ASSERT (strcmp (tmp, expected_wep_key0) == 0,
3380 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3381 		        TEST_IFCFG_WIFI_WEP,
3382 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3383 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3384 	
3385 		/* WEP key index 1 */
3386 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 1);
3387 		ASSERT (tmp == NULL,
3388 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3389 		        TEST_IFCFG_WIFI_WEP,
3390 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3391 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
3392 	
3393 		/* WEP key index 2 */
3394 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 2);
3395 		ASSERT (tmp == NULL,
3396 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3397 		        TEST_IFCFG_WIFI_WEP,
3398 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3399 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
3400 	
3401 		/* WEP key index 3 */
3402 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 3);
3403 		ASSERT (tmp == NULL,
3404 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3405 		        TEST_IFCFG_WIFI_WEP,
3406 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3407 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
3408 	
3409 		/* WEP Authentication mode */
3410 		tmp = nm_setting_wireless_security_get_auth_alg (s_wsec);
3411 		ASSERT (tmp != NULL,
3412 		        "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3413 		        TEST_IFCFG_WIFI_WEP,
3414 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3415 		        NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
3416 		ASSERT (strcmp (tmp, "shared") == 0,
3417 		        "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3418 		        TEST_IFCFG_WIFI_WEP,
3419 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3420 		        NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
3421 	
3422 		/* ===== IPv4 SETTING ===== */
3423 	
3424 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
3425 		ASSERT (s_ip4 != NULL,
3426 		        "wifi-wep-verify-ip4", "failed to verify %s: missing %s setting",
3427 		        TEST_IFCFG_WIFI_WEP,
3428 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
3429 	
3430 		/* Method */
3431 		tmp = nm_setting_ip4_config_get_method (s_ip4);
3432 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
3433 		        "wifi-wep-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
3434 		        TEST_IFCFG_WIFI_WEP,
3435 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
3436 		        NM_SETTING_IP4_CONFIG_METHOD);
3437 	
3438 		g_free (unmanaged);
3439 		g_free (keyfile);
3440 		g_free (routefile);
3441 		g_free (route6file);
3442 		g_object_unref (connection);
3443 	}
3444 	
3445 	#define TEST_IFCFG_WIFI_WEP_ADHOC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-adhoc"
3446 	
3447 	static void
3448 	test_read_wifi_wep_adhoc (void)
3449 	{
3450 		NMConnection *connection;
3451 		NMSettingConnection *s_con;
3452 		NMSettingWireless *s_wireless;
3453 		NMSettingWirelessSecurity *s_wsec;
3454 		NMSettingIP4Config *s_ip4;
3455 		char *unmanaged = NULL;
3456 		char *keyfile = NULL;
3457 		char *routefile = NULL;
3458 		char *route6file = NULL;
3459 		gboolean ignore_error = FALSE;
3460 		GError *error = NULL;
3461 		const char *tmp;
3462 		const GByteArray *array;
3463 		const char *expected_id = "System blahblah (test-wifi-wep-adhoc)";
3464 		const char *expected_ssid = "blahblah";
3465 		const char *expected_mode = "adhoc";
3466 		const char *expected_wep_key0 = "0123456789abcdef0123456789";
3467 		guint32 addr;
3468 		const char *expected_dns1 = "4.2.2.1";
3469 		const char *expected_dns2 = "4.2.2.2";
3470 	
3471 		connection = connection_from_file (TEST_IFCFG_WIFI_WEP_ADHOC,
3472 		                                   NULL,
3473 		                                   TYPE_WIRELESS,
3474 		                                   NULL,
3475 		                                   &unmanaged,
3476 		                                   &keyfile,
3477 		                                   &routefile,
3478 		                                   &route6file,
3479 		                                   &error,
3480 		                                   &ignore_error);
3481 		ASSERT (connection != NULL,
3482 		        "wifi-wep-adhoc-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP_ADHOC, error->message);
3483 	
3484 		ASSERT (nm_connection_verify (connection, &error),
3485 		        "wifi-wep-adhoc-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP_ADHOC, error->message);
3486 	
3487 		/* ===== CONNECTION SETTING ===== */
3488 	
3489 		s_con = nm_connection_get_setting_connection (connection);
3490 		ASSERT (s_con != NULL,
3491 		        "wifi-wep-adhoc-verify-connection", "failed to verify %s: missing %s setting",
3492 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3493 		        NM_SETTING_CONNECTION_SETTING_NAME);
3494 	
3495 		/* ID */
3496 		tmp = nm_setting_connection_get_id (s_con);
3497 		ASSERT (tmp != NULL,
3498 		        "wifi-wep-adhoc-verify-connection", "failed to verify %s: missing %s / %s key",
3499 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3500 		        NM_SETTING_CONNECTION_SETTING_NAME,
3501 		        NM_SETTING_CONNECTION_ID);
3502 		ASSERT (strcmp (tmp, expected_id) == 0,
3503 		        "wifi-wep-adhoc-verify-connection", "failed to verify %s: unexpected %s / %s key value",
3504 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3505 		        NM_SETTING_CONNECTION_SETTING_NAME,
3506 		        NM_SETTING_CONNECTION_ID);
3507 	
3508 		/* UUID can't be tested if the ifcfg does not contain the UUID key, because
3509 		 * the UUID is generated on the full path of the ifcfg file, which can change
3510 		 * depending on where the tests are run.
3511 		 */
3512 	
3513 		/* Autoconnect */
3514 		ASSERT (nm_setting_connection_get_autoconnect (s_con) == FALSE,
3515 		        "wifi-wep-adhoc-verify-connection", "failed to verify %s: unexpected %s /%s key value",
3516 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3517 		        NM_SETTING_CONNECTION_SETTING_NAME,
3518 		        NM_SETTING_CONNECTION_AUTOCONNECT);
3519 	
3520 		/* ===== WIRELESS SETTING ===== */
3521 	
3522 		s_wireless = nm_connection_get_setting_wireless (connection);
3523 		ASSERT (s_wireless != NULL,
3524 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s setting",
3525 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3526 		        NM_SETTING_WIRELESS_SETTING_NAME);
3527 	
3528 		/* SSID */
3529 		array = nm_setting_wireless_get_ssid (s_wireless);
3530 		ASSERT (array != NULL,
3531 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
3532 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3533 		        NM_SETTING_WIRELESS_SETTING_NAME,
3534 		        NM_SETTING_WIRELESS_SSID);
3535 		ASSERT (array->len == strlen (expected_ssid),
3536 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
3537 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3538 		        NM_SETTING_WIRELESS_SETTING_NAME,
3539 		        NM_SETTING_WIRELESS_SSID);
3540 		ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
3541 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3542 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3543 		        NM_SETTING_WIRELESS_SETTING_NAME,
3544 		        NM_SETTING_WIRELESS_SSID);
3545 	
3546 		/* BSSID */
3547 		ASSERT (nm_setting_wireless_get_bssid (s_wireless) == NULL,
3548 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3549 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3550 		        NM_SETTING_WIRELESS_SETTING_NAME,
3551 		        NM_SETTING_WIRELESS_BSSID);
3552 	
3553 		/* Mode */
3554 		tmp = nm_setting_wireless_get_mode (s_wireless);
3555 		ASSERT (tmp != NULL,
3556 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
3557 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3558 		        NM_SETTING_WIRELESS_SETTING_NAME,
3559 		        NM_SETTING_WIRELESS_MODE);
3560 		ASSERT (strcmp (tmp, expected_mode) == 0,
3561 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3562 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3563 		        NM_SETTING_WIRELESS_SETTING_NAME,
3564 		        NM_SETTING_WIRELESS_MODE);
3565 	
3566 		/* Channel */
3567 		ASSERT (nm_setting_wireless_get_channel (s_wireless) == 11,
3568 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3569 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3570 		        NM_SETTING_WIRELESS_SETTING_NAME,
3571 		        NM_SETTING_WIRELESS_CHANNEL);
3572 	
3573 		/* ===== WIRELESS SECURITY SETTING ===== */
3574 	
3575 		s_wsec = nm_connection_get_setting_wireless_security (connection);
3576 		ASSERT (s_wsec != NULL,
3577 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s setting",
3578 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3579 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
3580 	
3581 		/* Key management */
3582 		ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
3583 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
3584 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3585 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3586 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
3587 	
3588 		/* WEP key index */
3589 		ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
3590 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3591 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3592 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3593 		        NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
3594 	
3595 		/* WEP key index 0 */
3596 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
3597 		ASSERT (tmp != NULL,
3598 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
3599 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3600 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3601 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3602 		ASSERT (strcmp (tmp, expected_wep_key0) == 0,
3603 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3604 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3605 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3606 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3607 	
3608 		/* WEP key index 1 */
3609 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 1);
3610 		ASSERT (tmp == NULL,
3611 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3612 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3613 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3614 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
3615 	
3616 		/* WEP key index 2 */
3617 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 2);
3618 		ASSERT (tmp == NULL,
3619 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3620 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3621 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3622 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
3623 	
3624 		/* WEP key index 3 */
3625 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 3);
3626 		ASSERT (tmp == NULL,
3627 		        "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3628 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3629 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3630 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
3631 	
3632 		/* WEP Authentication mode */
3633 		tmp = nm_setting_wireless_security_get_auth_alg (s_wsec);
3634 		ASSERT (tmp == NULL,
3635 		        "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3636 		        TEST_IFCFG_WIFI_WEP,
3637 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3638 		        NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
3639 	
3640 		/* ===== IPv4 SETTING ===== */
3641 	
3642 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
3643 		ASSERT (s_ip4 != NULL,
3644 		        "wifi-wep-adhoc-verify-ip4", "failed to verify %s: missing %s setting",
3645 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3646 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
3647 	
3648 		/* Method */
3649 		tmp = nm_setting_ip4_config_get_method (s_ip4);
3650 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
3651 		        "wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
3652 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3653 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
3654 		        NM_SETTING_IP4_CONFIG_METHOD);
3655 	
3656 		/* Ignore auto DNS */
3657 		ASSERT (nm_setting_ip4_config_get_ignore_auto_dns (s_ip4) == TRUE,
3658 		        "wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
3659 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3660 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
3661 		        NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS);
3662 	
3663 		/* DNS Addresses */
3664 		ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
3665 		        "wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
3666 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3667 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
3668 		        NM_SETTING_IP4_CONFIG_DNS);
3669 	
3670 		ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0,
3671 		        "wifi-wep-adhoc-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #1",
3672 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3673 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
3674 		        NM_SETTING_IP4_CONFIG_DNS);
3675 		ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr,
3676 		        "wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
3677 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3678 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
3679 		        NM_SETTING_IP4_CONFIG_DNS);
3680 	
3681 		ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0,
3682 		        "wifi-wep-adhoc-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #2",
3683 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3684 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
3685 		        NM_SETTING_IP4_CONFIG_DNS);
3686 		ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr,
3687 		        "wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
3688 		        TEST_IFCFG_WIFI_WEP_ADHOC,
3689 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
3690 		        NM_SETTING_IP4_CONFIG_DNS);
3691 	
3692 		g_free (unmanaged);
3693 		g_free (keyfile);
3694 		g_free (routefile);
3695 		g_free (route6file);
3696 		g_object_unref (connection);
3697 	}
3698 	
3699 	#define TEST_IFCFG_WIFI_WEP_PASSPHRASE TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-passphrase"
3700 	
3701 	static void
3702 	test_read_wifi_wep_passphrase (void)
3703 	{
3704 		NMConnection *connection;
3705 		NMSettingConnection *s_con;
3706 		NMSettingWireless *s_wireless;
3707 		NMSettingWirelessSecurity *s_wsec;
3708 		char *unmanaged = NULL;
3709 		char *keyfile = NULL;
3710 		char *routefile = NULL;
3711 		char *route6file = NULL;
3712 		gboolean ignore_error = FALSE;
3713 		GError *error = NULL;
3714 		const char *tmp;
3715 		const char *expected_wep_key0 = "foobar222blahblah";
3716 		NMWepKeyType key_type;
3717 	
3718 		connection = connection_from_file (TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3719 		                                   NULL,
3720 		                                   TYPE_WIRELESS,
3721 		                                   NULL,
3722 		                                   &unmanaged,
3723 		                                   &keyfile,
3724 		                                   &routefile,
3725 		                                   &route6file,
3726 		                                   &error,
3727 		                                   &ignore_error);
3728 		ASSERT (connection != NULL,
3729 		        "wifi-wep-passphrase-read", "failed to read %s: %s",
3730 		        TEST_IFCFG_WIFI_WEP_PASSPHRASE, error->message);
3731 	
3732 		ASSERT (nm_connection_verify (connection, &error),
3733 		        "wifi-wep-passphrase-verify", "failed to verify %s: %s",
3734 		        TEST_IFCFG_WIFI_WEP_PASSPHRASE, error->message);
3735 	
3736 		/* ===== CONNECTION SETTING ===== */
3737 	
3738 		s_con = nm_connection_get_setting_connection (connection);
3739 		ASSERT (s_con != NULL,
3740 		        "wifi-wep-passphrase-verify-connection", "failed to verify %s: missing %s setting",
3741 		        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3742 		        NM_SETTING_CONNECTION_SETTING_NAME);
3743 	
3744 		/* ===== WIRELESS SETTING ===== */
3745 	
3746 		s_wireless = nm_connection_get_setting_wireless (connection);
3747 		ASSERT (s_wireless != NULL,
3748 		        "wifi-wep-passphrase-verify-wireless", "failed to verify %s: missing %s setting",
3749 		        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3750 		        NM_SETTING_WIRELESS_SETTING_NAME);
3751 	
3752 		/* ===== WIRELESS SECURITY SETTING ===== */
3753 	
3754 		s_wsec = nm_connection_get_setting_wireless_security (connection);
3755 		ASSERT (s_wsec != NULL,
3756 		        "wifi-wep-passphrase-verify-wireless", "failed to verify %s: missing %s setting",
3757 		        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3758 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
3759 	
3760 		/* Key management */
3761 		ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
3762 		        "wifi-wep-passphrase-verify-wireless", "failed to verify %s: missing %s / %s key",
3763 		        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3764 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3765 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
3766 	
3767 		/* WEP key index */
3768 		ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
3769 		        "wifi-wep-passphrase-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3770 		        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3771 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3772 		        NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
3773 	
3774 		/* WEP key type */
3775 		key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
3776 		ASSERT (key_type == NM_WEP_KEY_TYPE_PASSPHRASE,
3777 		        "wifi-wep-passphrase-verify-wireless", "failed to verify %s: unexpected WEP key type %d",
3778 		        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3779 		        key_type);
3780 	
3781 		/* WEP key index 0 */
3782 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
3783 		ASSERT (tmp != NULL,
3784 		        "wifi-wep-passphrase-verify-wireless", "failed to verify %s: missing %s / %s key",
3785 		        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3786 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3787 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3788 		ASSERT (strcmp (tmp, expected_wep_key0) == 0,
3789 		        "wifi-wep-passphrase-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3790 		        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3791 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3792 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3793 	
3794 		/* WEP key index 1 */
3795 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 1);
3796 		ASSERT (tmp == NULL,
3797 		        "wifi-wep-passphrase-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3798 		        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3799 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3800 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
3801 	
3802 		/* WEP key index 2 */
3803 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 2);
3804 		ASSERT (tmp == NULL,
3805 		        "wifi-wep-passphrase-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3806 		        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3807 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3808 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
3809 	
3810 		/* WEP key index 3 */
3811 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 3);
3812 		ASSERT (tmp == NULL,
3813 		        "wifi-wep-passphrase-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3814 		        TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3815 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3816 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
3817 	
3818 		g_free (unmanaged);
3819 		g_free (keyfile);
3820 		g_free (routefile);
3821 		g_free (route6file);
3822 		g_object_unref (connection);
3823 	}
3824 	
3825 	#define TEST_IFCFG_WIFI_WEP_40_ASCII TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-40-ascii"
3826 	
3827 	static void
3828 	test_read_wifi_wep_40_ascii (void)
3829 	{
3830 		NMConnection *connection;
3831 		NMSettingConnection *s_con;
3832 		NMSettingWireless *s_wireless;
3833 		NMSettingWirelessSecurity *s_wsec;
3834 		char *unmanaged = NULL;
3835 		char *keyfile = NULL;
3836 		char *routefile = NULL;
3837 		char *route6file = NULL;
3838 		gboolean ignore_error = FALSE;
3839 		GError *error = NULL;
3840 		const char *tmp;
3841 		const char *expected_wep_key0 = "Lorem";
3842 		NMWepKeyType key_type;
3843 	
3844 		connection = connection_from_file (TEST_IFCFG_WIFI_WEP_40_ASCII,
3845 		                                   NULL,
3846 		                                   TYPE_WIRELESS,
3847 		                                   NULL,
3848 		                                   &unmanaged,
3849 		                                   &keyfile,
3850 		                                   &routefile,
3851 		                                   &route6file,
3852 		                                   &error,
3853 		                                   &ignore_error);
3854 		ASSERT (connection != NULL,
3855 		        "wifi-wep-40-ascii-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP_40_ASCII, error->message);
3856 	
3857 		ASSERT (nm_connection_verify (connection, &error),
3858 		        "wifi-wep-40-ascii-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP_40_ASCII, error->message);
3859 	
3860 		/* ===== CONNECTION SETTING ===== */
3861 	
3862 		s_con = nm_connection_get_setting_connection (connection);
3863 		ASSERT (s_con != NULL,
3864 		        "wifi-wep-40-ascii-verify-connection", "failed to verify %s: missing %s setting",
3865 		        TEST_IFCFG_WIFI_WEP_40_ASCII,
3866 		        NM_SETTING_CONNECTION_SETTING_NAME);
3867 	
3868 		/* ===== WIRELESS SETTING ===== */
3869 	
3870 		s_wireless = nm_connection_get_setting_wireless (connection);
3871 		ASSERT (s_wireless != NULL,
3872 		        "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s setting",
3873 		        TEST_IFCFG_WIFI_WEP_40_ASCII,
3874 		        NM_SETTING_WIRELESS_SETTING_NAME);
3875 	
3876 		/* ===== WIRELESS SECURITY SETTING ===== */
3877 	
3878 		s_wsec = nm_connection_get_setting_wireless_security (connection);
3879 		ASSERT (s_wsec != NULL,
3880 		        "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s setting",
3881 		        TEST_IFCFG_WIFI_WEP_40_ASCII,
3882 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
3883 	
3884 		/* Key management */
3885 		ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
3886 		        "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
3887 		        TEST_IFCFG_WIFI_WEP_40_ASCII,
3888 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3889 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
3890 	
3891 		/* WEP key index */
3892 		ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
3893 		        "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3894 		        TEST_IFCFG_WIFI_WEP_40_ASCII,
3895 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3896 		        NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
3897 	
3898 		/* WEP key type */
3899 		key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
3900 		ASSERT (key_type == NM_WEP_KEY_TYPE_UNKNOWN || key_type == NM_WEP_KEY_TYPE_KEY,
3901 		        "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected WEP key type %d",
3902 		        TEST_IFCFG_WIFI_WEP_40_ASCII,
3903 		        key_type);
3904 	
3905 		/* WEP key index 0 */
3906 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
3907 		ASSERT (tmp != NULL,
3908 		        "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
3909 		        TEST_IFCFG_WIFI_WEP_40_ASCII,
3910 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3911 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3912 		ASSERT (strcmp (tmp, expected_wep_key0) == 0,
3913 		        "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3914 		        TEST_IFCFG_WIFI_WEP_40_ASCII,
3915 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3916 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3917 	
3918 		/* WEP key index 1 */
3919 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 1);
3920 		ASSERT (tmp == NULL,
3921 		        "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3922 		        TEST_IFCFG_WIFI_WEP_40_ASCII,
3923 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3924 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
3925 	
3926 		/* WEP key index 2 */
3927 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 2);
3928 		ASSERT (tmp == NULL,
3929 		        "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3930 		        TEST_IFCFG_WIFI_WEP_40_ASCII,
3931 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3932 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
3933 	
3934 		/* WEP key index 3 */
3935 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 3);
3936 		ASSERT (tmp == NULL,
3937 		        "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3938 		        TEST_IFCFG_WIFI_WEP_40_ASCII,
3939 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3940 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
3941 	
3942 		g_free (unmanaged);
3943 		g_free (keyfile);
3944 		g_free (routefile);
3945 		g_free (route6file);
3946 		g_object_unref (connection);
3947 	}
3948 	
3949 	#define TEST_IFCFG_WIFI_WEP_104_ASCII TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-104-ascii"
3950 	
3951 	static void
3952 	test_read_wifi_wep_104_ascii (void)
3953 	{
3954 		NMConnection *connection;
3955 		NMSettingConnection *s_con;
3956 		NMSettingWireless *s_wireless;
3957 		NMSettingWirelessSecurity *s_wsec;
3958 		char *unmanaged = NULL;
3959 		char *keyfile = NULL;
3960 		char *routefile = NULL;
3961 		char *route6file = NULL;
3962 		gboolean ignore_error = FALSE;
3963 		GError *error = NULL;
3964 		const char *tmp;
3965 		const char *expected_wep_key0 = "LoremIpsumSit";
3966 		NMWepKeyType key_type;
3967 	
3968 		connection = connection_from_file (TEST_IFCFG_WIFI_WEP_104_ASCII,
3969 		                                   NULL,
3970 		                                   TYPE_WIRELESS,
3971 		                                   NULL,
3972 		                                   &unmanaged,
3973 		                                   &keyfile,
3974 		                                   &routefile,
3975 		                                   &route6file,
3976 		                                   &error,
3977 		                                   &ignore_error);
3978 		ASSERT (connection != NULL,
3979 		        "wifi-wep-104-ascii-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP_104_ASCII, error->message);
3980 	
3981 		ASSERT (nm_connection_verify (connection, &error),
3982 		        "wifi-wep-104-ascii-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP_104_ASCII, error->message);
3983 	
3984 		/* ===== CONNECTION SETTING ===== */
3985 	
3986 		s_con = nm_connection_get_setting_connection (connection);
3987 		ASSERT (s_con != NULL,
3988 		        "wifi-wep-104-ascii-verify-connection", "failed to verify %s: missing %s setting",
3989 		        TEST_IFCFG_WIFI_WEP_104_ASCII,
3990 		        NM_SETTING_CONNECTION_SETTING_NAME);
3991 	
3992 		/* ===== WIRELESS SETTING ===== */
3993 	
3994 		s_wireless = nm_connection_get_setting_wireless (connection);
3995 		ASSERT (s_wireless != NULL,
3996 		        "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s setting",
3997 		        TEST_IFCFG_WIFI_WEP_104_ASCII,
3998 		        NM_SETTING_WIRELESS_SETTING_NAME);
3999 	
4000 		/* ===== WIRELESS SECURITY SETTING ===== */
4001 	
4002 		s_wsec = nm_connection_get_setting_wireless_security (connection);
4003 		ASSERT (s_wsec != NULL,
4004 		        "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s setting",
4005 		        TEST_IFCFG_WIFI_WEP_104_ASCII,
4006 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
4007 	
4008 		/* Key management */
4009 		ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
4010 		        "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
4011 		        TEST_IFCFG_WIFI_WEP_104_ASCII,
4012 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4013 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
4014 	
4015 		/* WEP key index */
4016 		ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
4017 		        "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4018 		        TEST_IFCFG_WIFI_WEP_104_ASCII,
4019 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4020 		        NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
4021 	
4022 		/* WEP key type */
4023 		key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
4024 		ASSERT (key_type == NM_WEP_KEY_TYPE_UNKNOWN || key_type == NM_WEP_KEY_TYPE_KEY,
4025 		        "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected WEP key type %d",
4026 		        TEST_IFCFG_WIFI_WEP_104_ASCII,
4027 		        key_type);
4028 	
4029 		/* WEP key index 0 */
4030 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
4031 		ASSERT (tmp != NULL,
4032 		        "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
4033 		        TEST_IFCFG_WIFI_WEP_104_ASCII,
4034 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4035 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
4036 		ASSERT (strcmp (tmp, expected_wep_key0) == 0,
4037 		        "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4038 		        TEST_IFCFG_WIFI_WEP_104_ASCII,
4039 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4040 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
4041 	
4042 		/* WEP key index 1 */
4043 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 1);
4044 		ASSERT (tmp == NULL,
4045 		        "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
4046 		        TEST_IFCFG_WIFI_WEP_104_ASCII,
4047 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4048 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
4049 	
4050 		/* WEP key index 2 */
4051 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 2);
4052 		ASSERT (tmp == NULL,
4053 		        "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
4054 		        TEST_IFCFG_WIFI_WEP_104_ASCII,
4055 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4056 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
4057 	
4058 		/* WEP key index 3 */
4059 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 3);
4060 		ASSERT (tmp == NULL,
4061 		        "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
4062 		        TEST_IFCFG_WIFI_WEP_104_ASCII,
4063 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4064 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
4065 	
4066 		g_free (unmanaged);
4067 		g_free (keyfile);
4068 		g_free (routefile);
4069 		g_free (route6file);
4070 		g_object_unref (connection);
4071 	}
4072 	
4073 	#define TEST_IFCFG_WIFI_LEAP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-leap"
4074 	
4075 	static void
4076 	test_read_wifi_leap (void)
4077 	{
4078 		NMConnection *connection;
4079 		NMSettingConnection *s_con;
4080 		NMSettingWireless *s_wireless;
4081 		NMSettingWirelessSecurity *s_wsec;
4082 		char *unmanaged = NULL;
4083 		char *keyfile = NULL;
4084 		char *routefile = NULL;
4085 		char *route6file = NULL;
4086 		gboolean ignore_error = FALSE;
4087 		GError *error = NULL;
4088 		const char *tmp;
4089 		const char *expected_id = "System blahblah (test-wifi-leap)";
4090 		const char *expected_identity = "Bill Smith";
4091 		const char *expected_password = "foobarblah";
4092 	
4093 		connection = connection_from_file (TEST_IFCFG_WIFI_LEAP,
4094 		                                   NULL,
4095 		                                   TYPE_WIRELESS,
4096 		                                   NULL,
4097 		                                   &unmanaged,
4098 		                                   &keyfile,
4099 		                                   &routefile,
4100 		                                   &route6file,
4101 		                                   &error,
4102 		                                   &ignore_error);
4103 		ASSERT (connection != NULL,
4104 		        "wifi-leap-read", "failed to read %s: %s", TEST_IFCFG_WIFI_LEAP, error->message);
4105 	
4106 		ASSERT (nm_connection_verify (connection, &error),
4107 		        "wifi-leap-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_LEAP, error->message);
4108 	
4109 		/* ===== CONNECTION SETTING ===== */
4110 	
4111 		s_con = nm_connection_get_setting_connection (connection);
4112 		ASSERT (s_con != NULL,
4113 		        "wifi-leap-verify-connection", "failed to verify %s: missing %s setting",
4114 		        TEST_IFCFG_WIFI_LEAP,
4115 		        NM_SETTING_CONNECTION_SETTING_NAME);
4116 	
4117 		/* ID */
4118 		tmp = nm_setting_connection_get_id (s_con);
4119 		ASSERT (tmp != NULL,
4120 		        "wifi-leap-verify-connection", "failed to verify %s: missing %s / %s key",
4121 		        TEST_IFCFG_WIFI_LEAP,
4122 		        NM_SETTING_CONNECTION_SETTING_NAME,
4123 		        NM_SETTING_CONNECTION_ID);
4124 		ASSERT (strcmp (tmp, expected_id) == 0,
4125 		        "wifi-leap-verify-connection", "failed to verify %s: unexpected %s / %s key value",
4126 		        TEST_IFCFG_WIFI_LEAP,
4127 		        NM_SETTING_CONNECTION_SETTING_NAME,
4128 		        NM_SETTING_CONNECTION_ID);
4129 	
4130 		/* ===== WIRELESS SETTING ===== */
4131 	
4132 		s_wireless = nm_connection_get_setting_wireless (connection);
4133 		ASSERT (s_wireless != NULL,
4134 		        "wifi-leap-verify-wireless", "failed to verify %s: missing %s setting",
4135 		        TEST_IFCFG_WIFI_LEAP,
4136 		        NM_SETTING_WIRELESS_SETTING_NAME);
4137 	
4138 		/* ===== WIRELESS SECURITY SETTING ===== */
4139 	
4140 		s_wsec = nm_connection_get_setting_wireless_security (connection);
4141 		ASSERT (s_wsec != NULL,
4142 		        "wifi-leap-verify-wireless", "failed to verify %s: missing %s setting",
4143 		        TEST_IFCFG_WIFI_LEAP,
4144 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
4145 	
4146 		/* Key management */
4147 		ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "ieee8021x") == 0,
4148 		        "wifi-leap-verify-wireless", "failed to verify %s: missing %s / %s key",
4149 		        TEST_IFCFG_WIFI_LEAP,
4150 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4151 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
4152 	
4153 		/* WEP Authentication mode */
4154 		tmp = nm_setting_wireless_security_get_auth_alg (s_wsec);
4155 		ASSERT (tmp != NULL,
4156 		        "wifi-leap-verify-wireless", "failed to verify %s: missing %s / %s key",
4157 		        TEST_IFCFG_WIFI_LEAP,
4158 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4159 		        NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
4160 		ASSERT (strcmp (tmp, "leap") == 0,
4161 		        "wifi-leap-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4162 		        TEST_IFCFG_WIFI_LEAP,
4163 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4164 		        NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
4165 	
4166 		/* LEAP Username */
4167 		tmp = nm_setting_wireless_security_get_leap_username (s_wsec);
4168 		ASSERT (tmp != NULL,
4169 		        "wifi-leap-verify-wireless", "failed to verify %s: missing %s / %s key",
4170 		        TEST_IFCFG_WIFI_LEAP,
4171 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4172 		        NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME);
4173 		ASSERT (strcmp (tmp, expected_identity) == 0,
4174 		        "wifi-leap-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4175 		        TEST_IFCFG_WIFI_LEAP,
4176 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4177 		        NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME);
4178 	
4179 		/* LEAP Password */
4180 		tmp = nm_setting_wireless_security_get_leap_password (s_wsec);
4181 		ASSERT (tmp != NULL,
4182 		        "wifi-leap-verify-wireless", "failed to verify %s: missing %s / %s key",
4183 		        TEST_IFCFG_WIFI_LEAP,
4184 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4185 		        NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD);
4186 		ASSERT (strcmp (tmp, expected_password) == 0,
4187 		        "wifi-leap-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4188 		        TEST_IFCFG_WIFI_LEAP,
4189 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4190 		        NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD);
4191 	
4192 		g_free (unmanaged);
4193 		g_free (keyfile);
4194 		g_free (routefile);
4195 		g_free (route6file);
4196 		g_object_unref (connection);
4197 	}
4198 	
4199 	#define TEST_IFCFG_WIFI_LEAP_AGENT TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-leap-agent"
4200 	#define TEST_IFCFG_WIFI_LEAP_ALWAYS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-leap-always-ask"
4201 	
4202 	static void
4203 	test_read_wifi_leap_secret_flags (const char *file, NMSettingSecretFlags expected_flags)
4204 	{
4205 		NMConnection *connection;
4206 		NMSettingWireless *s_wifi;
4207 		NMSettingWirelessSecurity *s_wsec;
4208 		char *unmanaged = NULL;
4209 		char *keyfile = NULL;
4210 		char *routefile = NULL;
4211 		char *route6file = NULL;
4212 		gboolean ignore_error = FALSE;
4213 		GError *error = NULL;
4214 		const char *expected_identity = "Bill Smith";
4215 		gboolean success;
4216 	
4217 		connection = connection_from_file (file,
4218 		                                   NULL,
4219 		                                   TYPE_WIRELESS,
4220 		                                   NULL,
4221 		                                   &unmanaged,
4222 		                                   &keyfile,
4223 		                                   &routefile,
4224 		                                   &route6file,
4225 		                                   &error,
4226 		                                   &ignore_error);
4227 		g_assert_no_error (error);
4228 		g_assert (connection);
4229 	
4230 		success = nm_connection_verify (connection, &error);
4231 		g_assert_no_error (error);
4232 		g_assert (success);
4233 	
4234 		/* ===== WIRELESS SETTING ===== */
4235 		s_wifi = nm_connection_get_setting_wireless (connection);
4236 		g_assert (s_wifi);
4237 	
4238 		/* ===== WIRELESS SECURITY SETTING ===== */
4239 		s_wsec = nm_connection_get_setting_wireless_security (connection);
4240 		g_assert (s_wsec);
4241 	
4242 		g_assert (g_strcmp0 (nm_setting_wireless_security_get_key_mgmt (s_wsec), "ieee8021x") == 0);
4243 		g_assert (g_strcmp0 (nm_setting_wireless_security_get_auth_alg (s_wsec), "leap") == 0);
4244 		g_assert (g_strcmp0 (nm_setting_wireless_security_get_leap_username (s_wsec), expected_identity) == 0);
4245 		/* password blank as it's not system-owned */
4246 		g_assert (nm_setting_wireless_security_get_leap_password_flags (s_wsec) == expected_flags);
4247 		g_assert (nm_setting_wireless_security_get_leap_password (s_wsec) == NULL);
4248 	
4249 		g_free (unmanaged);
4250 		g_free (keyfile);
4251 		g_free (routefile);
4252 		g_free (route6file);
4253 		g_object_unref (connection);
4254 	}
4255 	
4256 	#define TEST_IFCFG_WIFI_WPA_PSK TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-psk"
4257 	
4258 	static void
4259 	test_read_wifi_wpa_psk (void)
4260 	{
4261 		NMConnection *connection;
4262 		NMSettingConnection *s_con;
4263 		NMSettingWireless *s_wireless;
4264 		NMSettingWirelessSecurity *s_wsec;
4265 		NMSettingIP4Config *s_ip4;
4266 		char *unmanaged = NULL;
4267 		char *keyfile = NULL;
4268 		char *routefile = NULL;
4269 		char *route6file = NULL;
4270 		gboolean ignore_error = FALSE;
4271 		GError *error = NULL;
4272 		const char *tmp;
4273 		const GByteArray *array;
4274 		char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
4275 		const char *expected_id = "System blahblah (test-wifi-wpa-psk)";
4276 		guint64 expected_timestamp = 0;
4277 		const char *expected_ssid = "blahblah";
4278 		const char *expected_mode = "infrastructure";
4279 		const guint32 expected_channel = 1;
4280 		const char *expected_key_mgmt = "wpa-psk";
4281 		const char *expected_psk = "I wonder what the king is doing tonight?";
4282 		guint32 n, i;
4283 		gboolean found_pair_tkip = FALSE;
4284 		gboolean found_pair_ccmp = FALSE;
4285 		gboolean found_group_tkip = FALSE;
4286 		gboolean found_group_ccmp = FALSE;
4287 		gboolean found_group_wep40 = FALSE;
4288 		gboolean found_group_wep104 = FALSE;
4289 		gboolean found_proto_wpa = FALSE;
4290 		gboolean found_proto_rsn = FALSE;
4291 	
4292 		connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK,
4293 		                                   NULL,
4294 		                                   TYPE_WIRELESS,
4295 		                                   NULL,
4296 		                                   &unmanaged,
4297 		                                   &keyfile,
4298 		                                   &routefile,
4299 		                                   &route6file,
4300 		                                   &error,
4301 		                                   &ignore_error);
4302 		ASSERT (connection != NULL,
4303 		        "wifi-wpa-psk-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_PSK, error->message);
4304 	
4305 		ASSERT (nm_connection_verify (connection, &error),
4306 		        "wifi-wpa-psk-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_PSK, error->message);
4307 	
4308 		/* ===== CONNECTION SETTING ===== */
4309 	
4310 		s_con = nm_connection_get_setting_connection (connection);
4311 		ASSERT (s_con != NULL,
4312 		        "wifi-wpa-psk-verify-connection", "failed to verify %s: missing %s setting",
4313 		        TEST_IFCFG_WIFI_WPA_PSK,
4314 		        NM_SETTING_CONNECTION_SETTING_NAME);
4315 	
4316 		/* ID */
4317 		tmp = nm_setting_connection_get_id (s_con);
4318 		ASSERT (tmp != NULL,
4319 		        "wifi-wpa-psk-verify-connection", "failed to verify %s: missing %s / %s key",
4320 		        TEST_IFCFG_WIFI_WPA_PSK,
4321 		        NM_SETTING_CONNECTION_SETTING_NAME,
4322 		        NM_SETTING_CONNECTION_ID);
4323 		ASSERT (strcmp (tmp, expected_id) == 0,
4324 		        "wifi-wpa-psk-verify-connection", "failed to verify %s: unexpected %s / %s key value",
4325 		        TEST_IFCFG_WIFI_WPA_PSK,
4326 		        NM_SETTING_CONNECTION_SETTING_NAME,
4327 		        NM_SETTING_CONNECTION_ID);
4328 	
4329 		/* UUID can't be tested if the ifcfg does not contain the UUID key, because
4330 		 * the UUID is generated on the full path of the ifcfg file, which can change
4331 		 * depending on where the tests are run.
4332 		 */
4333 	
4334 		/* Timestamp */
4335 		ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp,
4336 		        "wifi-wpa-psk-verify-connection", "failed to verify %s: unexpected %s /%s key value",
4337 		        TEST_IFCFG_WIFI_WPA_PSK,
4338 		        NM_SETTING_CONNECTION_SETTING_NAME,
4339 		        NM_SETTING_CONNECTION_TIMESTAMP);
4340 	
4341 		/* Autoconnect */
4342 		ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
4343 		        "wifi-wpa-psk-verify-connection", "failed to verify %s: unexpected %s /%s key value",
4344 		        TEST_IFCFG_WIFI_WPA_PSK,
4345 		        NM_SETTING_CONNECTION_SETTING_NAME,
4346 		        NM_SETTING_CONNECTION_AUTOCONNECT);
4347 	
4348 		/* ===== WIRELESS SETTING ===== */
4349 	
4350 		s_wireless = nm_connection_get_setting_wireless (connection);
4351 		ASSERT (s_wireless != NULL,
4352 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s setting",
4353 		        TEST_IFCFG_WIFI_WPA_PSK,
4354 		        NM_SETTING_WIRELESS_SETTING_NAME);
4355 	
4356 		/* MAC address */
4357 		array = nm_setting_wireless_get_mac_address (s_wireless);
4358 		ASSERT (array != NULL,
4359 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s / %s key",
4360 		        TEST_IFCFG_WIFI_WPA_PSK,
4361 		        NM_SETTING_WIRELESS_SETTING_NAME,
4362 		        NM_SETTING_WIRELESS_MAC_ADDRESS);
4363 		ASSERT (array->len == ETH_ALEN,
4364 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
4365 		        TEST_IFCFG_WIFI_WPA_PSK,
4366 		        NM_SETTING_WIRELESS_SETTING_NAME,
4367 		        NM_SETTING_WIRELESS_MAC_ADDRESS);
4368 		ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
4369 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4370 		        TEST_IFCFG_WIFI_WPA_PSK,
4371 		        NM_SETTING_WIRELESS_SETTING_NAME,
4372 		        NM_SETTING_WIRELESS_MAC_ADDRESS);
4373 	
4374 		/* MTU */
4375 		ASSERT (nm_setting_wireless_get_mtu (s_wireless) == 0,
4376 		        "wifi-wpa-psk-verify-wired", "failed to verify %s: unexpected %s / %s key value",
4377 		        TEST_IFCFG_WIFI_WPA_PSK,
4378 		        NM_SETTING_WIRELESS_SETTING_NAME,
4379 		        NM_SETTING_WIRELESS_MTU);
4380 	
4381 		/* SSID */
4382 		array = nm_setting_wireless_get_ssid (s_wireless);
4383 		ASSERT (array != NULL,
4384 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s / %s key",
4385 		        TEST_IFCFG_WIFI_WPA_PSK,
4386 		        NM_SETTING_WIRELESS_SETTING_NAME,
4387 		        NM_SETTING_WIRELESS_SSID);
4388 		ASSERT (array->len == strlen (expected_ssid),
4389 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
4390 		        TEST_IFCFG_WIFI_WPA_PSK,
4391 		        NM_SETTING_WIRELESS_SETTING_NAME,
4392 		        NM_SETTING_WIRELESS_SSID);
4393 		ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
4394 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4395 		        TEST_IFCFG_WIFI_WPA_PSK,
4396 		        NM_SETTING_WIRELESS_SETTING_NAME,
4397 		        NM_SETTING_WIRELESS_SSID);
4398 	
4399 		/* BSSID */
4400 		ASSERT (nm_setting_wireless_get_bssid (s_wireless) == NULL,
4401 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4402 		        TEST_IFCFG_WIFI_WPA_PSK,
4403 		        NM_SETTING_WIRELESS_SETTING_NAME,
4404 		        NM_SETTING_WIRELESS_BSSID);
4405 	
4406 		/* Mode */
4407 		tmp = nm_setting_wireless_get_mode (s_wireless);
4408 		ASSERT (tmp != NULL,
4409 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s / %s key",
4410 		        TEST_IFCFG_WIFI_WPA_PSK,
4411 		        NM_SETTING_WIRELESS_SETTING_NAME,
4412 		        NM_SETTING_WIRELESS_MODE);
4413 		ASSERT (strcmp (tmp, expected_mode) == 0,
4414 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4415 		        TEST_IFCFG_WIFI_WPA_PSK,
4416 		        NM_SETTING_WIRELESS_SETTING_NAME,
4417 		        NM_SETTING_WIRELESS_MODE);
4418 	
4419 		/* Channel */
4420 		ASSERT (nm_setting_wireless_get_channel (s_wireless) == expected_channel,
4421 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4422 		        TEST_IFCFG_WIFI_WPA_PSK,
4423 		        NM_SETTING_WIRELESS_SETTING_NAME,
4424 		        NM_SETTING_WIRELESS_CHANNEL);
4425 	
4426 		/* ===== WIRELESS SECURITY SETTING ===== */
4427 	
4428 		s_wsec = nm_connection_get_setting_wireless_security (connection);
4429 		ASSERT (s_wsec != NULL,
4430 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s setting",
4431 		        TEST_IFCFG_WIFI_WPA_PSK,
4432 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
4433 	
4434 		/* Key management */
4435 		tmp = nm_setting_wireless_security_get_key_mgmt (s_wsec);
4436 		ASSERT (tmp != NULL,
4437 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s / %s key",
4438 		        TEST_IFCFG_WIFI_WPA_PSK,
4439 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4440 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
4441 		ASSERT (strcmp (tmp, expected_key_mgmt) == 0,
4442 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4443 		        TEST_IFCFG_WIFI_WPA_PSK,
4444 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4445 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
4446 	
4447 		/* PSK */
4448 		tmp = nm_setting_wireless_security_get_psk (s_wsec);
4449 		ASSERT (tmp != NULL,
4450 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s / %s key",
4451 		        TEST_IFCFG_WIFI_WPA_PSK,
4452 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4453 		        NM_SETTING_WIRELESS_SECURITY_PSK);
4454 		ASSERT (strcmp (tmp, expected_psk) == 0,
4455 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4456 		        TEST_IFCFG_WIFI_WPA_PSK,
4457 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4458 		        NM_SETTING_WIRELESS_SECURITY_PSK);
4459 	
4460 		/* WEP Authentication mode */
4461 		tmp = nm_setting_wireless_security_get_auth_alg (s_wsec);
4462 		ASSERT (tmp == NULL,
4463 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key",
4464 		        TEST_IFCFG_WIFI_WPA_PSK,
4465 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4466 		        NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
4467 	
4468 		/* Pairwise ciphers */
4469 		n = nm_setting_wireless_security_get_num_pairwise (s_wsec);
4470 		ASSERT (n == 2,
4471 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4472 		        TEST_IFCFG_WIFI_WPA_PSK,
4473 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4474 		        NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
4475 		for (i = 0; i < n; i++) {
4476 			tmp = nm_setting_wireless_security_get_pairwise (s_wsec, i);
4477 			ASSERT (tmp, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing pairwise cipher",
4478 			        TEST_IFCFG_WIFI_WPA_PSK);
4479 			if (strcmp (tmp, "tkip") == 0)
4480 				found_pair_tkip = TRUE;
4481 			else if (strcmp (tmp, "ccmp") == 0)
4482 				found_pair_ccmp = TRUE;
4483 		}
4484 		ASSERT (found_pair_tkip, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing pairwise TKIP cipher",
4485 		        TEST_IFCFG_WIFI_WPA_PSK);
4486 		ASSERT (found_pair_ccmp, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing pairwise CCMP cipher",
4487 		        TEST_IFCFG_WIFI_WPA_PSK);
4488 	
4489 		/* Group ciphers */
4490 		n = nm_setting_wireless_security_get_num_groups (s_wsec);
4491 		ASSERT (n == 4,
4492 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4493 		        TEST_IFCFG_WIFI_WPA_PSK,
4494 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4495 		        NM_SETTING_WIRELESS_SECURITY_GROUP);
4496 		for (i = 0; i < n; i++) {
4497 			tmp = nm_setting_wireless_security_get_group (s_wsec, i);
4498 			ASSERT (tmp, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing group cipher",
4499 			        TEST_IFCFG_WIFI_WPA_PSK);
4500 			if (strcmp (tmp, "tkip") == 0)
4501 				found_group_tkip = TRUE;
4502 			else if (strcmp (tmp, "ccmp") == 0)
4503 				found_group_ccmp = TRUE;
4504 			else if (strcmp (tmp, "wep40") == 0)
4505 				found_group_wep40 = TRUE;
4506 			else if (strcmp (tmp, "wep104") == 0)
4507 				found_group_wep104 = TRUE;
4508 		}
4509 		ASSERT (found_group_tkip, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing group TKIP cipher",
4510 		        TEST_IFCFG_WIFI_WPA_PSK);
4511 		ASSERT (found_group_ccmp, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing group CCMP cipher",
4512 		        TEST_IFCFG_WIFI_WPA_PSK);
4513 		ASSERT (found_group_wep40, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing group WEP-40 cipher",
4514 		        TEST_IFCFG_WIFI_WPA_PSK);
4515 		ASSERT (found_group_wep104, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing group WEP-104 cipher",
4516 		        TEST_IFCFG_WIFI_WPA_PSK);
4517 	
4518 		/* Protocols */
4519 		n = nm_setting_wireless_security_get_num_protos (s_wsec);
4520 		ASSERT (n == 2,
4521 		        "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4522 		        TEST_IFCFG_WIFI_WPA_PSK,
4523 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4524 		        NM_SETTING_WIRELESS_SECURITY_PROTO);
4525 		for (i = 0; i < n; i++) {
4526 			tmp = nm_setting_wireless_security_get_proto (s_wsec, i);
4527 			ASSERT (tmp, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing protocol",
4528 			        TEST_IFCFG_WIFI_WPA_PSK);
4529 			if (strcmp (tmp, "wpa") == 0)
4530 				found_proto_wpa = TRUE;
4531 			else if (strcmp (tmp, "rsn") == 0)
4532 				found_proto_rsn = TRUE;
4533 		}
4534 		ASSERT (found_proto_wpa, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing protoocl WPA",
4535 		        TEST_IFCFG_WIFI_WPA_PSK);
4536 		ASSERT (found_proto_rsn, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing protocol RSN",
4537 		        TEST_IFCFG_WIFI_WPA_PSK);
4538 	
4539 		/* ===== IPv4 SETTING ===== */
4540 	
4541 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
4542 		ASSERT (s_ip4 != NULL,
4543 		        "wifi-wpa-psk-verify-ip4", "failed to verify %s: missing %s setting",
4544 		        TEST_IFCFG_WIFI_WPA_PSK,
4545 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
4546 	
4547 		/* Method */
4548 		tmp = nm_setting_ip4_config_get_method (s_ip4);
4549 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
4550 		        "wifi-wpa-psk-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
4551 		        TEST_IFCFG_WIFI_WPA_PSK,
4552 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
4553 		        NM_SETTING_IP4_CONFIG_METHOD);
4554 	
4555 		g_free (unmanaged);
4556 		g_free (keyfile);
4557 		g_free (routefile);
4558 		g_free (route6file);
4559 		g_object_unref (connection);
4560 	}
4561 	
4562 	#define TEST_IFCFG_WIFI_WPA_PSK_2 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-psk-2"
4563 	
4564 	static void
4565 	test_read_wifi_wpa_psk_2 (void)
4566 	{
4567 		NMConnection *connection;
4568 		NMSettingConnection *s_con;
4569 		NMSettingWireless *s_wireless;
4570 		NMSettingWirelessSecurity *s_wsec;
4571 		char *unmanaged = NULL;
4572 		char *keyfile = NULL;
4573 		char *routefile = NULL;
4574 		char *route6file = NULL;
4575 		gboolean ignore_error = FALSE;
4576 		GError *error = NULL;
4577 		const char *tmp;
4578 		const char *expected_id = "System ipsum (test-wifi-wpa-psk-2)";
4579 		const char *expected_psk = "They're really saying I love you. >>`<< \\";
4580 	
4581 		connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_2,
4582 	                                     NULL,
4583 	                                     TYPE_WIRELESS,
4584 	                                     NULL,
4585 	                                     &unmanaged,
4586 	                                     &keyfile,
4587 	                                     &routefile,
4588 	                                     &route6file,
4589 	                                     &error,
4590 	                                     &ignore_error);
4591 		ASSERT (connection != NULL,
4592 		        "wifi-wpa-psk-2-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_PSK_2, error->message);
4593 	
4594 		ASSERT (nm_connection_verify (connection, &error),
4595 		        "wifi-wpa-psk-2-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_PSK_2, error->message);
4596 	
4597 		/* ===== CONNECTION SETTING ===== */
4598 	
4599 		s_con = nm_connection_get_setting_connection (connection);
4600 		ASSERT (s_con != NULL,
4601 		        "wifi-wpa-psk-2-verify-connection", "failed to verify %s: missing %s setting",
4602 		        TEST_IFCFG_WIFI_WPA_PSK_2,
4603 		        NM_SETTING_CONNECTION_SETTING_NAME);
4604 	
4605 		/* ID */
4606 		tmp = nm_setting_connection_get_id (s_con);
4607 		ASSERT (tmp != NULL,
4608 		        "wifi-wpa-psk-2-verify-connection", "failed to verify %s: missing %s / %s key",
4609 		        TEST_IFCFG_WIFI_WPA_PSK_2,
4610 		        NM_SETTING_CONNECTION_SETTING_NAME,
4611 		        NM_SETTING_CONNECTION_ID);
4612 		ASSERT (strcmp (tmp, expected_id) == 0,
4613 		        "wifi-wpa-psk-2-verify-connection", "failed to verify %s: unexpected %s / %s key value",
4614 		        TEST_IFCFG_WIFI_WPA_PSK_2,
4615 		        NM_SETTING_CONNECTION_SETTING_NAME,
4616 		        NM_SETTING_CONNECTION_ID);
4617 	
4618 		/* ===== WIRELESS SETTING ===== */
4619 	
4620 		s_wireless = nm_connection_get_setting_wireless (connection);
4621 		ASSERT (s_wireless != NULL,
4622 		        "wifi-wpa-psk-2-verify-wireless", "failed to verify %s: missing %s setting",
4623 		        TEST_IFCFG_WIFI_WPA_PSK_2,
4624 		        NM_SETTING_WIRELESS_SETTING_NAME);
4625 	
4626 		/* ===== WIRELESS SECURITY SETTING ===== */
4627 	
4628 		s_wsec = nm_connection_get_setting_wireless_security (connection);
4629 		ASSERT (s_wsec != NULL,
4630 		        "wifi-wpa-psk-2-verify-wireless", "failed to verify %s: missing %s setting",
4631 		        TEST_IFCFG_WIFI_WPA_PSK_2,
4632 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
4633 	
4634 		/* PSK */
4635 		tmp = nm_setting_wireless_security_get_psk (s_wsec);
4636 		ASSERT (tmp != NULL,
4637 		        "wifi-wpa-psk-2-verify-wireless", "failed to verify %s: missing %s / %s key",
4638 		        TEST_IFCFG_WIFI_WPA_PSK_2,
4639 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4640 		        NM_SETTING_WIRELESS_SECURITY_PSK);
4641 		ASSERT (strcmp (tmp, expected_psk) == 0,
4642 		        "wifi-wpa-psk-2-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4643 		        TEST_IFCFG_WIFI_WPA_PSK_2,
4644 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4645 		        NM_SETTING_WIRELESS_SECURITY_PSK);
4646 	
4647 		g_free (unmanaged);
4648 		g_free (keyfile);
4649 		g_free (routefile);
4650 		g_free (route6file);
4651 		g_object_unref (connection);
4652 	}
4653 	
4654 	#define TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-psk-unquoted"
4655 	
4656 	static void
4657 	test_read_wifi_wpa_psk_unquoted (void)
4658 	{
4659 		NMConnection *connection;
4660 		NMSettingConnection *s_con;
4661 		NMSettingWireless *s_wireless;
4662 		NMSettingWirelessSecurity *s_wsec;
4663 		char *unmanaged = NULL;
4664 		char *keyfile = NULL;
4665 		char *routefile = NULL;
4666 		char *route6file = NULL;
4667 		gboolean ignore_error = FALSE;
4668 		GError *error = NULL;
4669 		const char *tmp;
4670 		const char *expected_id = "System blahblah (test-wifi-wpa-psk-unquoted)";
4671 		const char *expected_psk = "54336845e2f3f321c4c7";
4672 	
4673 		connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4674 		                                   NULL,
4675 		                                   TYPE_WIRELESS,
4676 		                                   NULL,
4677 		                                   &unmanaged,
4678 		                                   &keyfile,
4679 		                                   &routefile,
4680 		                                   &route6file,
4681 		                                   &error,
4682 		                                   &ignore_error);
4683 		ASSERT (connection != NULL,
4684 		        "wifi-wpa-psk-unquoted-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED, error->message);
4685 	
4686 		ASSERT (nm_connection_verify (connection, &error),
4687 		        "wifi-wpa-psk-unquoted-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED, error->message);
4688 	
4689 		/* ===== CONNECTION SETTING ===== */
4690 	
4691 		s_con = nm_connection_get_setting_connection (connection);
4692 		ASSERT (s_con != NULL,
4693 		        "wifi-wpa-psk-unquoted-verify-connection", "failed to verify %s: missing %s setting",
4694 		        TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4695 		        NM_SETTING_CONNECTION_SETTING_NAME);
4696 	
4697 		/* ID */
4698 		tmp = nm_setting_connection_get_id (s_con);
4699 		ASSERT (tmp != NULL,
4700 		        "wifi-wpa-psk-unquoted-verify-connection", "failed to verify %s: missing %s / %s key",
4701 		        TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4702 		        NM_SETTING_CONNECTION_SETTING_NAME,
4703 		        NM_SETTING_CONNECTION_ID);
4704 		ASSERT (strcmp (tmp, expected_id) == 0,
4705 		        "wifi-wpa-psk-unquoted-verify-connection", "failed to verify %s: unexpected %s / %s key value",
4706 		        TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4707 		        NM_SETTING_CONNECTION_SETTING_NAME,
4708 		        NM_SETTING_CONNECTION_ID);
4709 	
4710 		/* ===== WIRELESS SETTING ===== */
4711 	
4712 		s_wireless = nm_connection_get_setting_wireless (connection);
4713 		ASSERT (s_wireless != NULL,
4714 		        "wifi-wpa-psk-unquoted-verify-wireless", "failed to verify %s: missing %s setting",
4715 		        TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4716 		        NM_SETTING_WIRELESS_SETTING_NAME);
4717 	
4718 		/* ===== WIRELESS SECURITY SETTING ===== */
4719 	
4720 		s_wsec = nm_connection_get_setting_wireless_security (connection);
4721 		ASSERT (s_wsec != NULL,
4722 		        "wifi-wpa-psk-unquoted-verify-wireless", "failed to verify %s: missing %s setting",
4723 		        TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4724 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
4725 	
4726 		/* PSK */
4727 		tmp = nm_setting_wireless_security_get_psk (s_wsec);
4728 		ASSERT (tmp != NULL,
4729 		        "wifi-wpa-psk-unquoted-verify-wireless", "failed to verify %s: missing %s / %s key",
4730 		        TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4731 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4732 		        NM_SETTING_WIRELESS_SECURITY_PSK);
4733 		ASSERT (strcmp (tmp, expected_psk) == 0,
4734 		        "wifi-wpa-psk-unquoted-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4735 		        TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4736 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4737 		        NM_SETTING_WIRELESS_SECURITY_PSK);
4738 	
4739 		g_free (unmanaged);
4740 		g_free (keyfile);
4741 		g_free (routefile);
4742 		g_free (route6file);
4743 		g_object_unref (connection);
4744 	}
4745 	
4746 	#define TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED2 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-psk-unquoted2"
4747 	
4748 	static void
4749 	test_read_wifi_wpa_psk_unquoted2 (void)
4750 	{
4751 		NMConnection *connection;
4752 		char *unmanaged = NULL;
4753 		char *keyfile = NULL;
4754 		char *routefile = NULL;
4755 		char *route6file = NULL;
4756 		gboolean ignore_error = FALSE;
4757 		GError *error = NULL;
4758 	
4759 		/* Ensure a quoted 64-character WPA passphrase will fail since passphrases
4760 		 * must be between 8 and 63 ASCII characters inclusive per the WPA spec.
4761 		 */
4762 	
4763 		connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED2,
4764 		                                   NULL,
4765 		                                   TYPE_WIRELESS,
4766 		                                   NULL,
4767 		                                   &unmanaged,
4768 		                                   &keyfile,
4769 		                                   &routefile,
4770 		                                   &route6file,
4771 		                                   &error,
4772 		                                   &ignore_error);
4773 		ASSERT (connection == NULL,
4774 		        "wifi-wpa-psk-unquoted-read", "unexpected success reading %s", TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED2);
4775 		g_clear_error (&error);
4776 	
4777 		g_free (unmanaged);
4778 		g_free (keyfile);
4779 		g_free (routefile);
4780 		g_free (route6file);
4781 	}
4782 	
4783 	#define TEST_IFCFG_WIFI_WPA_PSK_ADHOC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-psk-adhoc"
4784 	
4785 	static void
4786 	test_read_wifi_wpa_psk_adhoc (void)
4787 	{
4788 		NMConnection *connection;
4789 		NMSettingConnection *s_con;
4790 		NMSettingWireless *s_wireless;
4791 		NMSettingWirelessSecurity *s_wsec;
4792 		NMSettingIP4Config *s_ip4;
4793 		char *unmanaged = NULL;
4794 		char *keyfile = NULL;
4795 		char *routefile = NULL;
4796 		char *route6file = NULL;
4797 		gboolean ignore_error = FALSE;
4798 		GError *error = NULL;
4799 		const char *tmp;
4800 		const char *expected_id = "System blahblah (test-wifi-wpa-psk-adhoc)";
4801 		const char *expected_mode = "adhoc";
4802 		const char *expected_key_mgmt = "wpa-none";
4803 		const char *expected_psk = "I wonder what the king is doing tonight?";
4804 		const char *expected_group = "ccmp";
4805 		const char *expected_proto = "wpa";
4806 	
4807 		connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4808 		                                   NULL,
4809 		                                   TYPE_WIRELESS,
4810 		                                   NULL,
4811 		                                   &unmanaged,
4812 		                                   &keyfile,
4813 		                                   &routefile,
4814 		                                   &route6file,
4815 		                                   &error,
4816 		                                   &ignore_error);
4817 		ASSERT (connection != NULL,
4818 		        "wifi-wpa-psk-adhoc-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_PSK_ADHOC, error->message);
4819 	
4820 		ASSERT (nm_connection_verify (connection, &error),
4821 		        "wifi-wpa-psk-adhoc-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_PSK_ADHOC, error->message);
4822 	
4823 		/* ===== CONNECTION SETTING ===== */
4824 	
4825 		s_con = nm_connection_get_setting_connection (connection);
4826 		ASSERT (s_con != NULL,
4827 		        "wifi-wpa-psk-adhoc-verify-connection", "failed to verify %s: missing %s setting",
4828 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4829 		        NM_SETTING_CONNECTION_SETTING_NAME);
4830 	
4831 		/* ID */
4832 		tmp = nm_setting_connection_get_id (s_con);
4833 		ASSERT (tmp != NULL,
4834 		        "wifi-wpa-psk-adhoc-verify-connection", "failed to verify %s: missing %s / %s key",
4835 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4836 		        NM_SETTING_CONNECTION_SETTING_NAME,
4837 		        NM_SETTING_CONNECTION_ID);
4838 		ASSERT (strcmp (tmp, expected_id) == 0,
4839 		        "wifi-wpa-psk-adhoc-verify-connection", "failed to verify %s: unexpected %s / %s key value",
4840 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4841 		        NM_SETTING_CONNECTION_SETTING_NAME,
4842 		        NM_SETTING_CONNECTION_ID);
4843 	
4844 		/* ===== WIRELESS SETTING ===== */
4845 	
4846 		s_wireless = nm_connection_get_setting_wireless (connection);
4847 		ASSERT (s_wireless != NULL,
4848 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing %s setting",
4849 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4850 		        NM_SETTING_WIRELESS_SETTING_NAME);
4851 	
4852 		/* Mode */
4853 		tmp = nm_setting_wireless_get_mode (s_wireless);
4854 		ASSERT (tmp != NULL,
4855 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
4856 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4857 		        NM_SETTING_WIRELESS_SETTING_NAME,
4858 		        NM_SETTING_WIRELESS_MODE);
4859 		ASSERT (strcmp (tmp, expected_mode) == 0,
4860 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4861 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4862 		        NM_SETTING_WIRELESS_SETTING_NAME,
4863 		        NM_SETTING_WIRELESS_MODE);
4864 	
4865 		/* ===== WIRELESS SECURITY SETTING ===== */
4866 	
4867 		s_wsec = nm_connection_get_setting_wireless_security (connection);
4868 		ASSERT (s_wsec != NULL,
4869 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing %s setting",
4870 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4871 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
4872 	
4873 		/* Key management */
4874 		tmp = nm_setting_wireless_security_get_key_mgmt (s_wsec);
4875 		ASSERT (tmp != NULL,
4876 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
4877 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4878 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4879 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
4880 		ASSERT (strcmp (tmp, expected_key_mgmt) == 0,
4881 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4882 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4883 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4884 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
4885 	
4886 		/* PSK */
4887 		tmp = nm_setting_wireless_security_get_psk (s_wsec);
4888 		ASSERT (tmp != NULL,
4889 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
4890 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4891 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4892 		        NM_SETTING_WIRELESS_SECURITY_PSK);
4893 		ASSERT (strcmp (tmp, expected_psk) == 0,
4894 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4895 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4896 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4897 		        NM_SETTING_WIRELESS_SECURITY_PSK);
4898 	
4899 		/* Pairwise cipher: unused in adhoc mode */
4900 		ASSERT (nm_setting_wireless_security_get_num_pairwise (s_wsec) == 0,
4901 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4902 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4903 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4904 		        NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
4905 	
4906 		/* Group cipher */
4907 		ASSERT (nm_setting_wireless_security_get_num_groups (s_wsec) == 1,
4908 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4909 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4910 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4911 		        NM_SETTING_WIRELESS_SECURITY_GROUP);
4912 	
4913 		tmp = nm_setting_wireless_security_get_group (s_wsec, 0);
4914 		ASSERT (tmp != NULL,
4915 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing group cipher",
4916 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC);
4917 		ASSERT (strcmp (tmp, expected_group) == 0,
4918 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4919 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4920 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4921 		        NM_SETTING_WIRELESS_SECURITY_GROUP);
4922 	
4923 		/* Protocols */
4924 		ASSERT (nm_setting_wireless_security_get_num_protos (s_wsec) == 1,
4925 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4926 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4927 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4928 		        NM_SETTING_WIRELESS_SECURITY_PROTO);
4929 		tmp = nm_setting_wireless_security_get_proto (s_wsec, 0);
4930 		ASSERT (tmp != NULL,
4931 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing proto",
4932 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC);
4933 		ASSERT (strcmp (tmp, expected_proto) == 0,
4934 		        "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4935 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4936 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4937 		        NM_SETTING_WIRELESS_SECURITY_PROTO);
4938 	
4939 		/* ===== IPv4 SETTING ===== */
4940 	
4941 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
4942 		ASSERT (s_ip4 != NULL,
4943 		        "wifi-wpa-psk-adhoc-verify-ip4", "failed to verify %s: missing %s setting",
4944 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4945 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
4946 	
4947 		/* Method */
4948 		tmp = nm_setting_ip4_config_get_method (s_ip4);
4949 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
4950 		        "wifi-wpa-psk-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
4951 		        TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4952 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
4953 		        NM_SETTING_IP4_CONFIG_METHOD);
4954 	
4955 		g_free (unmanaged);
4956 		g_free (keyfile);
4957 		g_free (routefile);
4958 		g_free (route6file);
4959 		g_object_unref (connection);
4960 	}
4961 	
4962 	#define TEST_IFCFG_WIFI_WPA_PSK_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-psk-hex"
4963 	
4964 	static void
4965 	test_read_wifi_wpa_psk_hex (void)
4966 	{
4967 		NMConnection *connection;
4968 		NMSettingConnection *s_con;
4969 		NMSettingWireless *s_wireless;
4970 		NMSettingWirelessSecurity *s_wsec;
4971 		NMSettingIP4Config *s_ip4;
4972 		char *unmanaged = NULL;
4973 		char *keyfile = NULL;
4974 		char *routefile = NULL;
4975 		char *route6file = NULL;
4976 		gboolean ignore_error = FALSE;
4977 		GError *error = NULL;
4978 		const char *tmp;
4979 		const GByteArray *array;
4980 		const char *expected_id = "System blahblah (test-wifi-wpa-psk-hex)";
4981 		const char *expected_ssid = "blahblah";
4982 		const char *expected_key_mgmt = "wpa-psk";
4983 		const char *expected_psk = "1da190379817bc360dda52e85c388c439a21ea5c7bf819c64e9da051807deae6";
4984 	
4985 		connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_HEX,
4986 		                                   NULL,
4987 		                                   TYPE_WIRELESS,
4988 		                                   NULL,
4989 		                                   &unmanaged,
4990 		                                   &keyfile,
4991 		                                   &routefile,
4992 		                                   &route6file,
4993 		                                   &error,
4994 		                                   &ignore_error);
4995 		ASSERT (connection != NULL,
4996 		        "wifi-wpa-psk-hex-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_PSK_HEX, error->message);
4997 	
4998 		ASSERT (nm_connection_verify (connection, &error),
4999 		        "wifi-wpa-psk-hex-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_PSK_HEX, error->message);
5000 	
5001 		/* ===== CONNECTION SETTING ===== */
5002 	
5003 		s_con = nm_connection_get_setting_connection (connection);
5004 		ASSERT (s_con != NULL,
5005 		        "wifi-wpa-psk-hex-verify-connection", "failed to verify %s: missing %s setting",
5006 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5007 		        NM_SETTING_CONNECTION_SETTING_NAME);
5008 	
5009 		/* ID */
5010 		tmp = nm_setting_connection_get_id (s_con);
5011 		ASSERT (tmp != NULL,
5012 		        "wifi-wpa-psk-hex-verify-connection", "failed to verify %s: missing %s / %s key",
5013 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5014 		        NM_SETTING_CONNECTION_SETTING_NAME,
5015 		        NM_SETTING_CONNECTION_ID);
5016 		ASSERT (strcmp (tmp, expected_id) == 0,
5017 		        "wifi-wpa-psk-hex-verify-connection", "failed to verify %s: unexpected %s / %s key value",
5018 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5019 		        NM_SETTING_CONNECTION_SETTING_NAME,
5020 		        NM_SETTING_CONNECTION_ID);
5021 	
5022 		/* ===== WIRELESS SETTING ===== */
5023 	
5024 		s_wireless = nm_connection_get_setting_wireless (connection);
5025 		ASSERT (s_wireless != NULL,
5026 		        "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: missing %s setting",
5027 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5028 		        NM_SETTING_WIRELESS_SETTING_NAME);
5029 	
5030 		/* SSID */
5031 		array = nm_setting_wireless_get_ssid (s_wireless);
5032 		ASSERT (array != NULL,
5033 		        "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: missing %s / %s key",
5034 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5035 		        NM_SETTING_WIRELESS_SETTING_NAME,
5036 		        NM_SETTING_WIRELESS_SSID);
5037 		ASSERT (array->len == strlen (expected_ssid),
5038 		        "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
5039 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5040 		        NM_SETTING_WIRELESS_SETTING_NAME,
5041 		        NM_SETTING_WIRELESS_SSID);
5042 		ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
5043 		        "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
5044 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5045 		        NM_SETTING_WIRELESS_SETTING_NAME,
5046 		        NM_SETTING_WIRELESS_SSID);
5047 	
5048 		/* ===== WIRELESS SECURITY SETTING ===== */
5049 	
5050 		s_wsec = nm_connection_get_setting_wireless_security (connection);
5051 		ASSERT (s_wsec != NULL,
5052 		        "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: missing %s setting",
5053 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5054 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
5055 	
5056 		/* Key management */
5057 		tmp = nm_setting_wireless_security_get_key_mgmt (s_wsec);
5058 		ASSERT (tmp != NULL,
5059 		        "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: missing %s / %s key",
5060 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5061 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5062 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
5063 		ASSERT (strcmp (tmp, expected_key_mgmt) == 0,
5064 		        "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
5065 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5066 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5067 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
5068 	
5069 		/* PSK */
5070 		tmp = nm_setting_wireless_security_get_psk (s_wsec);
5071 		ASSERT (tmp != NULL,
5072 		        "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: missing %s / %s key",
5073 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5074 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5075 		        NM_SETTING_WIRELESS_SECURITY_PSK);
5076 		ASSERT (strcmp (tmp, expected_psk) == 0,
5077 		        "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
5078 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5079 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5080 		        NM_SETTING_WIRELESS_SECURITY_PSK);
5081 	
5082 		/* ===== IPv4 SETTING ===== */
5083 	
5084 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
5085 		ASSERT (s_ip4 != NULL,
5086 		        "wifi-wpa-psk-hex-verify-ip4", "failed to verify %s: missing %s setting",
5087 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5088 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
5089 	
5090 		/* Method */
5091 		tmp = nm_setting_ip4_config_get_method (s_ip4);
5092 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
5093 		        "wifi-wpa-psk-hex-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
5094 		        TEST_IFCFG_WIFI_WPA_PSK_HEX,
5095 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
5096 		        NM_SETTING_IP4_CONFIG_METHOD);
5097 	
5098 		g_free (unmanaged);
5099 		g_free (keyfile);
5100 		g_free (routefile);
5101 		g_free (route6file);
5102 		g_object_unref (connection);
5103 	}
5104 	
5105 	#define TEST_IFCFG_WIFI_WPA_EAP_TLS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-eap-tls"
5106 	#define TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT TEST_IFCFG_DIR"/network-scripts/test_ca_cert.pem"
5107 	#define TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT TEST_IFCFG_DIR"/network-scripts/test1_key_and_cert.pem"
5108 	#define TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY TEST_IFCFG_DIR"/network-scripts/test1_key_and_cert.pem"
5109 	
5110 	static void
5111 	test_read_wifi_wpa_eap_tls (void)
5112 	{
5113 		NMConnection *connection;
5114 		NMSettingWireless *s_wireless;
5115 		NMSettingIP4Config *s_ip4;
5116 		NMSetting8021x *s_8021x;
5117 		char *unmanaged = NULL;
5118 		char *keyfile = NULL;
5119 		char *routefile = NULL;
5120 		char *route6file = NULL;
5121 		gboolean ignore_error = FALSE;
5122 		GError *error = NULL;
5123 		const char *tmp, *password;
5124 		const char *expected_identity = "Bill Smith";
5125 		const char *expected_privkey_password = "test1";
5126 	
5127 		connection = connection_from_file (TEST_IFCFG_WIFI_WPA_EAP_TLS,
5128 		                                   NULL,
5129 		                                   TYPE_ETHERNET,
5130 		                                   NULL,
5131 		                                   &unmanaged,
5132 		                                   &keyfile,
5133 		                                   &routefile,
5134 		                                   &route6file,
5135 		                                   &error,
5136 		                                   &ignore_error);
5137 		ASSERT (connection != NULL,
5138 		        "wifi-wpa-eap-tls-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_EAP_TLS, error->message);
5139 	
5140 		ASSERT (nm_connection_verify (connection, &error),
5141 		        "wifi-wpa-eap-tls-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_EAP_TLS, error->message);
5142 	
5143 		ASSERT (unmanaged == NULL,
5144 		        "wifi-wpa-eap-tls-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIFI_WPA_EAP_TLS);
5145 	
5146 		/* ===== WIRELESS SETTING ===== */
5147 	
5148 		s_wireless = nm_connection_get_setting_wireless (connection);
5149 		ASSERT (s_wireless != NULL,
5150 		        "wifi-wpa-eap-tls-verify-wireless", "failed to verify %s: missing %s setting",
5151 		        TEST_IFCFG_WIFI_WPA_EAP_TLS,
5152 		        NM_SETTING_WIRELESS_SETTING_NAME);
5153 	
5154 		/* ===== IPv4 SETTING ===== */
5155 	
5156 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
5157 		ASSERT (s_ip4 != NULL,
5158 		        "wifi-wpa-eap-tls-verify-ip4", "failed to verify %s: missing %s setting",
5159 		        TEST_IFCFG_WIFI_WPA_EAP_TLS,
5160 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
5161 	
5162 		/* Method */
5163 		tmp = nm_setting_ip4_config_get_method (s_ip4);
5164 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
5165 		        "wifi-wpa-eap-tls-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
5166 		        TEST_IFCFG_WIFI_WPA_EAP_TLS,
5167 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
5168 		        NM_SETTING_IP4_CONFIG_METHOD);
5169 	
5170 		/* ===== 802.1x SETTING ===== */
5171 		s_8021x = nm_connection_get_setting_802_1x (connection);
5172 		ASSERT (s_8021x != NULL,
5173 		        "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: missing %s setting",
5174 		        TEST_IFCFG_WIFI_WPA_EAP_TLS,
5175 		        NM_SETTING_802_1X_SETTING_NAME);
5176 	
5177 		/* EAP methods */
5178 		ASSERT (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1,
5179 		        "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5180 		        TEST_IFCFG_WIFI_WPA_EAP_TLS,
5181 		        NM_SETTING_802_1X_SETTING_NAME,
5182 		        NM_SETTING_802_1X_EAP);
5183 		tmp = nm_setting_802_1x_get_eap_method (s_8021x, 0);
5184 		ASSERT (tmp != NULL,
5185 		        "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: missing %s / %s eap method",
5186 		        TEST_IFCFG_WIFI_WPA_EAP_TLS,
5187 		        NM_SETTING_802_1X_SETTING_NAME,
5188 		        NM_SETTING_802_1X_EAP);
5189 		ASSERT (strcmp (tmp, "tls") == 0,
5190 		        "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5191 		        TEST_IFCFG_WIFI_WPA_EAP_TLS,
5192 		        NM_SETTING_802_1X_SETTING_NAME,
5193 		        NM_SETTING_802_1X_EAP);
5194 	
5195 		/* Identity */
5196 		tmp = nm_setting_802_1x_get_identity (s_8021x);
5197 		ASSERT (tmp != NULL,
5198 		        "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: missing %s / %s key",
5199 		        TEST_IFCFG_WIFI_WPA_EAP_TLS,
5200 		        NM_SETTING_802_1X_SETTING_NAME,
5201 		        NM_SETTING_802_1X_IDENTITY);
5202 		ASSERT (strcmp (tmp, expected_identity) == 0,
5203 		        "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5204 		        TEST_IFCFG_WIFI_WPA_EAP_TLS,
5205 		        NM_SETTING_802_1X_SETTING_NAME,
5206 		        NM_SETTING_802_1X_IDENTITY);
5207 	
5208 		/* CA Cert */
5209 		verify_cert_or_key (s_8021x,
5210 		                    TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
5211 		                    NULL,
5212 		                    NM_SETTING_802_1X_CA_CERT);
5213 	
5214 		/* Client Cert */
5215 		verify_cert_or_key (s_8021x,
5216 		                    TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT,
5217 		                    NULL,
5218 		                    NM_SETTING_802_1X_CLIENT_CERT);
5219 	
5220 		/* Private Key Password */
5221 		password = nm_setting_802_1x_get_private_key_password (s_8021x);
5222 		ASSERT (password != NULL,
5223 		        "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: missing %s / %s key",
5224 		        TEST_IFCFG_WIFI_WPA_EAP_TLS,
5225 		        NM_SETTING_802_1X_SETTING_NAME,
5226 		        NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
5227 	
5228 		ASSERT (strcmp (password, expected_privkey_password) == 0,
5229 		        "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key",
5230 		        TEST_IFCFG_WIFI_WPA_EAP_TLS,
5231 		        NM_SETTING_802_1X_SETTING_NAME,
5232 		        NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
5233 	
5234 		/* Private key */
5235 		verify_cert_or_key (s_8021x,
5236 		                    TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY,
5237 		                    expected_privkey_password,
5238 		                    NM_SETTING_802_1X_PRIVATE_KEY);
5239 	
5240 		g_free (unmanaged);
5241 		g_free (keyfile);
5242 		g_free (routefile);
5243 		g_free (route6file);
5244 		g_object_unref (connection);
5245 	}
5246 	
5247 	#define TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-eap-ttls-tls"
5248 	#define TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS_CA_CERT TEST_IFCFG_DIR"/network-scripts/test_ca_cert.pem"
5249 	/* Also use TLS defines from the previous test */
5250 	
5251 	static void
5252 	test_read_wifi_wpa_eap_ttls_tls (void)
5253 	{
5254 		NMConnection *connection;
5255 		NMSettingWireless *s_wireless;
5256 		NMSettingIP4Config *s_ip4;
5257 		NMSetting8021x *s_8021x;
5258 		char *unmanaged = NULL;
5259 		char *keyfile = NULL;
5260 		char *routefile = NULL;
5261 		char *route6file = NULL;
5262 		gboolean ignore_error = FALSE;
5263 		GError *error = NULL;
5264 		const char *tmp, *password;
5265 		const char *expected_identity = "Chuck Shumer";
5266 		const char *expected_privkey_password = "test1";
5267 	
5268 		connection = connection_from_file (TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5269 		                                   NULL,
5270 		                                   TYPE_WIRELESS,
5271 		                                   NULL,
5272 		                                   &unmanaged,
5273 		                                   &keyfile,
5274 		                                   &routefile,
5275 		                                   &route6file,
5276 		                                   &error,
5277 		                                   &ignore_error);
5278 		ASSERT (connection != NULL,
5279 		        "wifi-wpa-eap-ttls-tls-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS, error->message);
5280 	
5281 		ASSERT (nm_connection_verify (connection, &error),
5282 		        "wifi-wpa-eap-ttls-tls-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS, error->message);
5283 	
5284 		ASSERT (unmanaged == NULL,
5285 		        "wifi-wpa-eap-ttls-tls-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS);
5286 	
5287 		/* ===== WIRELESS SETTING ===== */
5288 	
5289 		s_wireless = nm_connection_get_setting_wireless (connection);
5290 		ASSERT (s_wireless != NULL,
5291 		        "wifi-wpa-eap-ttls-tls-verify-wireless", "failed to verify %s: missing %s setting",
5292 		        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5293 		        NM_SETTING_WIRELESS_SETTING_NAME);
5294 	
5295 		/* ===== IPv4 SETTING ===== */
5296 	
5297 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
5298 		ASSERT (s_ip4 != NULL,
5299 		        "wifi-wpa-eap-ttls-tls-verify-ip4", "failed to verify %s: missing %s setting",
5300 		        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5301 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
5302 	
5303 		/* Method */
5304 		tmp = nm_setting_ip4_config_get_method (s_ip4);
5305 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
5306 		        "wifi-wpa-eap-ttls-tls-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
5307 		        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5308 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
5309 		        NM_SETTING_IP4_CONFIG_METHOD);
5310 	
5311 		/* ===== 802.1x SETTING ===== */
5312 		s_8021x = nm_connection_get_setting_802_1x (connection);
5313 		ASSERT (s_8021x != NULL,
5314 		        "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: missing %s setting",
5315 		        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5316 		        NM_SETTING_802_1X_SETTING_NAME);
5317 	
5318 		/* EAP methods */
5319 		ASSERT (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1,
5320 		        "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5321 		        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5322 		        NM_SETTING_802_1X_SETTING_NAME,
5323 		        NM_SETTING_802_1X_EAP);
5324 		tmp = nm_setting_802_1x_get_eap_method (s_8021x, 0);
5325 		ASSERT (tmp != NULL,
5326 		        "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: missing %s / %s eap method",
5327 		        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5328 		        NM_SETTING_802_1X_SETTING_NAME,
5329 		        NM_SETTING_802_1X_EAP);
5330 		ASSERT (strcmp (tmp, "ttls") == 0,
5331 		        "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5332 		        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5333 		        NM_SETTING_802_1X_SETTING_NAME,
5334 		        NM_SETTING_802_1X_EAP);
5335 	
5336 		/* CA Cert */
5337 		verify_cert_or_key (s_8021x,
5338 		                    TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS_CA_CERT,
5339 		                    NULL,
5340 		                    NM_SETTING_802_1X_CA_CERT);
5341 	
5342 		/* Inner auth method */
5343 		tmp = nm_setting_802_1x_get_phase2_autheap (s_8021x);
5344 		ASSERT (tmp != NULL,
5345 		        "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: missing %s / %s eap method",
5346 		        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5347 		        NM_SETTING_802_1X_SETTING_NAME,
5348 		        NM_SETTING_802_1X_PHASE2_AUTHEAP);
5349 		ASSERT (strcmp (tmp, "tls") == 0,
5350 		        "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5351 		        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5352 		        NM_SETTING_802_1X_SETTING_NAME,
5353 		        NM_SETTING_802_1X_PHASE2_AUTHEAP);
5354 	
5355 		/* Inner CA Cert */
5356 		verify_cert_or_key (s_8021x,
5357 		                    TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
5358 		                    NULL,
5359 		                    NM_SETTING_802_1X_PHASE2_CA_CERT);
5360 	
5361 		/* Inner Client Cert */
5362 		verify_cert_or_key (s_8021x,
5363 		                    TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT,
5364 		                    NULL,
5365 		                    NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
5366 	
5367 		/* Inner Private Key Password */
5368 		password = nm_setting_802_1x_get_phase2_private_key_password (s_8021x);
5369 		ASSERT (password != NULL,
5370 		        "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: missing %s / %s key",
5371 		        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5372 		        NM_SETTING_802_1X_SETTING_NAME,
5373 		        NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
5374 	
5375 		ASSERT (strcmp (password, expected_privkey_password) == 0,
5376 		        "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key",
5377 		        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5378 		        NM_SETTING_802_1X_SETTING_NAME,
5379 		        NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
5380 	
5381 		/* Inner private key */
5382 		verify_cert_or_key (s_8021x,
5383 		                    TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY,
5384 		                    expected_privkey_password,
5385 		                    NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
5386 	
5387 		/* Identity */
5388 		tmp = nm_setting_802_1x_get_identity (s_8021x);
5389 		ASSERT (tmp != NULL,
5390 		        "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: missing %s / %s key",
5391 		        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5392 		        NM_SETTING_802_1X_SETTING_NAME,
5393 		        NM_SETTING_802_1X_IDENTITY);
5394 		ASSERT (strcmp (tmp, expected_identity) == 0,
5395 		        "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5396 		        TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5397 		        NM_SETTING_802_1X_SETTING_NAME,
5398 		        NM_SETTING_802_1X_IDENTITY);
5399 	
5400 		g_free (unmanaged);
5401 		g_free (keyfile);
5402 		g_free (routefile);
5403 		g_free (route6file);
5404 		g_object_unref (connection);
5405 	}
5406 	
5407 	#define TEST_IFCFG_WIFI_DYNAMIC_WEP_LEAP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-dynamic-wep-leap"
5408 	
5409 	static void
5410 	test_read_wifi_dynamic_wep_leap (void)
5411 	{
5412 		NMConnection *connection;
5413 		NMSettingWireless *s_wifi;
5414 		NMSettingWirelessSecurity *s_wsec;
5415 		NMSetting8021x *s_8021x;
5416 		char *unmanaged = NULL;
5417 		char *keyfile = NULL;
5418 		char *routefile = NULL;
5419 		char *route6file = NULL;
5420 		gboolean ignore_error = FALSE, success;
5421 		GError *error = NULL;
5422 	
5423 		connection = connection_from_file (TEST_IFCFG_WIFI_DYNAMIC_WEP_LEAP,
5424 		                                   NULL,
5425 		                                   TYPE_WIRELESS,
5426 		                                   NULL,
5427 		                                   &unmanaged,
5428 		                                   &keyfile,
5429 		                                   &routefile,
5430 		                                   &route6file,
5431 		                                   &error,
5432 		                                   &ignore_error);
5433 		g_assert_no_error (error);
5434 		g_assert (connection);
5435 	
5436 		success = nm_connection_verify (connection, &error);
5437 		g_assert_no_error (error);
5438 		g_assert (success);
5439 	
5440 		/* ===== WIRELESS SETTING ===== */
5441 	
5442 		s_wifi = nm_connection_get_setting_wireless (connection);
5443 		g_assert (s_wifi);
5444 	
5445 		/* ===== WiFi SECURITY SETTING ===== */
5446 		s_wsec = nm_connection_get_setting_wireless_security (connection);
5447 		g_assert (s_wsec);
5448 	
5449 		/* Key management */
5450 		g_assert_cmpstr (nm_setting_wireless_security_get_key_mgmt (s_wsec), ==, "ieee8021x");
5451 	
5452 		/* Auth alg should be NULL (open) for dynamic WEP with LEAP as the EAP method;
5453 		 * only "old-school" LEAP uses 'leap' for the auth alg.
5454 		 */
5455 		g_assert_cmpstr (nm_setting_wireless_security_get_auth_alg (s_wsec), ==, NULL);
5456 	
5457 		/* Expect no old-school LEAP username/password, that'll be in the 802.1x setting */
5458 		g_assert_cmpstr (nm_setting_wireless_security_get_leap_username (s_wsec), ==, NULL);
5459 		g_assert_cmpstr (nm_setting_wireless_security_get_leap_password (s_wsec), ==, NULL);
5460 	
5461 		/* ===== 802.1x SETTING ===== */
5462 		s_8021x = nm_connection_get_setting_802_1x (connection);
5463 		g_assert (s_8021x);
5464 	
5465 		/* EAP method should be "leap" */
5466 		g_assert_cmpint (nm_setting_802_1x_get_num_eap_methods (s_8021x), ==, 1);
5467 		g_assert_cmpstr (nm_setting_802_1x_get_eap_method (s_8021x, 0), ==, "leap");
5468 	
5469 		/* username & password */
5470 		g_assert_cmpstr (nm_setting_802_1x_get_identity (s_8021x), ==, "bill smith");
5471 		g_assert_cmpstr (nm_setting_802_1x_get_password (s_8021x), ==, "foobar baz");
5472 	
5473 		g_free (unmanaged);
5474 		g_free (keyfile);
5475 		g_free (routefile);
5476 		g_free (route6file);
5477 		g_object_unref (connection);
5478 	}
5479 	
5480 	#define TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-eap-ttls-chap"
5481 	#define TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP_CA_CERT TEST_IFCFG_DIR"/network-scripts/test_ca_cert.pem"
5482 	
5483 	static void
5484 	test_read_wifi_wep_eap_ttls_chap (void)
5485 	{
5486 		NMConnection *connection;
5487 		NMSettingWireless *s_wireless;
5488 		NMSettingWirelessSecurity *s_wsec;
5489 		NMSettingIP4Config *s_ip4;
5490 		NMSetting8021x *s_8021x;
5491 		char *unmanaged = NULL;
5492 		char *keyfile = NULL;
5493 		char *routefile = NULL;
5494 		char *route6file = NULL;
5495 		gboolean ignore_error = FALSE;
5496 		GError *error = NULL;
5497 		const char *tmp;
5498 		const char *expected_password = "foobar baz";
5499 		const char *expected_identity = "David Smith";
5500 		const char *expected_key_mgmt = "ieee8021x";
5501 	
5502 		connection = connection_from_file (TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5503 		                                   NULL,
5504 		                                   TYPE_WIRELESS,
5505 		                                   NULL,
5506 		                                   &unmanaged,
5507 		                                   &keyfile,
5508 		                                   &routefile,
5509 		                                   &route6file,
5510 		                                   &error,
5511 		                                   &ignore_error);
5512 		ASSERT (connection != NULL,
5513 		        "wifi-wep-eap-ttls-chap-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP, error->message);
5514 	
5515 		ASSERT (nm_connection_verify (connection, &error),
5516 		        "wifi-wep-eap-ttls-chap-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP, error->message);
5517 	
5518 		ASSERT (unmanaged == NULL,
5519 		        "wifi-wep-eap-ttls-chap-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP);
5520 	
5521 		/* ===== WIRELESS SETTING ===== */
5522 	
5523 		s_wireless = nm_connection_get_setting_wireless (connection);
5524 		ASSERT (s_wireless != NULL,
5525 		        "wifi-wep-eap-ttls-chap-verify-wireless", "failed to verify %s: missing %s setting",
5526 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5527 		        NM_SETTING_WIRELESS_SETTING_NAME);
5528 	
5529 		/* ===== IPv4 SETTING ===== */
5530 	
5531 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
5532 		ASSERT (s_ip4 != NULL,
5533 		        "wifi-wep-eap-ttls-chap-verify-ip4", "failed to verify %s: missing %s setting",
5534 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5535 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
5536 	
5537 		/* Method */
5538 		tmp = nm_setting_ip4_config_get_method (s_ip4);
5539 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
5540 		        "wifi-wep-eap-ttls-chap-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
5541 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5542 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
5543 		        NM_SETTING_IP4_CONFIG_METHOD);
5544 	
5545 		/* ===== 802.1x SETTING ===== */
5546 		s_wsec = nm_connection_get_setting_wireless_security (connection);
5547 		ASSERT (s_wsec != NULL,
5548 		        "wifi-wep-eap-ttls-chap-verify-wireless-security", "failed to verify %s: missing %s setting",
5549 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5550 		        NM_SETTING_802_1X_SETTING_NAME);
5551 	
5552 		/* Key management */
5553 		tmp = nm_setting_wireless_security_get_key_mgmt (s_wsec);
5554 		ASSERT (tmp != NULL,
5555 		        "wifi-wep-eap-ttls-chap-verify-wireless-security", "failed to verify %s: missing %s / %s key",
5556 		        TEST_IFCFG_WIFI_WPA_PSK,
5557 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5558 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
5559 		ASSERT (strcmp (tmp, expected_key_mgmt) == 0,
5560 		        "wifi-wep-eap-ttls-chap-verify-wireless-security", "failed to verify %s: unexpected %s / %s key value",
5561 		        TEST_IFCFG_WIFI_WPA_PSK,
5562 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5563 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
5564 	
5565 		/* ===== 802.1x SETTING ===== */
5566 		s_8021x = nm_connection_get_setting_802_1x (connection);
5567 		ASSERT (s_8021x != NULL,
5568 		        "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: missing %s setting",
5569 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5570 		        NM_SETTING_802_1X_SETTING_NAME);
5571 	
5572 		/* EAP methods */
5573 		ASSERT (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1,
5574 		        "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5575 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5576 		        NM_SETTING_802_1X_SETTING_NAME,
5577 		        NM_SETTING_802_1X_EAP);
5578 		tmp = nm_setting_802_1x_get_eap_method (s_8021x, 0);
5579 		ASSERT (tmp != NULL,
5580 		        "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: missing %s / %s eap method",
5581 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5582 		        NM_SETTING_802_1X_SETTING_NAME,
5583 		        NM_SETTING_802_1X_EAP);
5584 		ASSERT (strcmp (tmp, "ttls") == 0,
5585 		        "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5586 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5587 		        NM_SETTING_802_1X_SETTING_NAME,
5588 		        NM_SETTING_802_1X_EAP);
5589 	
5590 		/* CA Cert */
5591 		verify_cert_or_key (s_8021x,
5592 		                    TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP_CA_CERT,
5593 		                    NULL,
5594 		                    NM_SETTING_802_1X_CA_CERT);
5595 	
5596 		/* Inner auth method */
5597 		tmp = nm_setting_802_1x_get_phase2_auth (s_8021x);
5598 		ASSERT (tmp != NULL,
5599 		        "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: missing %s / %s eap method",
5600 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5601 		        NM_SETTING_802_1X_SETTING_NAME,
5602 		        NM_SETTING_802_1X_PHASE2_AUTH);
5603 		ASSERT (strcmp (tmp, "chap") == 0,
5604 		        "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5605 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5606 		        NM_SETTING_802_1X_SETTING_NAME,
5607 		        NM_SETTING_802_1X_PHASE2_AUTH);
5608 	
5609 		/* Password */
5610 		tmp = nm_setting_802_1x_get_identity (s_8021x);
5611 		ASSERT (tmp != NULL,
5612 		        "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: missing %s / %s key",
5613 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5614 		        NM_SETTING_802_1X_SETTING_NAME,
5615 		        NM_SETTING_802_1X_IDENTITY);
5616 		ASSERT (strcmp (tmp, expected_identity) == 0,
5617 		        "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5618 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5619 		        NM_SETTING_802_1X_SETTING_NAME,
5620 		        NM_SETTING_802_1X_IDENTITY);
5621 	
5622 		/* Password */
5623 		tmp = nm_setting_802_1x_get_password (s_8021x);
5624 		ASSERT (tmp != NULL,
5625 		        "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: missing %s / %s key",
5626 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5627 		        NM_SETTING_802_1X_SETTING_NAME,
5628 		        NM_SETTING_802_1X_PASSWORD);
5629 		ASSERT (strcmp (tmp, expected_password) == 0,
5630 		        "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5631 		        TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5632 		        NM_SETTING_802_1X_SETTING_NAME,
5633 		        NM_SETTING_802_1X_PASSWORD);
5634 	
5635 		g_free (unmanaged);
5636 		g_free (keyfile);
5637 		g_free (routefile);
5638 		g_free (route6file);
5639 		g_object_unref (connection);
5640 	}
5641 	
5642 	#define TEST_IFCFG_WIRED_QETH_STATIC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-qeth-static"
5643 	
5644 	static void
5645 	test_read_wired_qeth_static (void)
5646 	{
5647 		NMConnection *connection;
5648 		NMSettingConnection *s_con;
5649 		NMSettingWired *s_wired;
5650 		NMSettingIP4Config *s_ip4;
5651 		char *unmanaged = NULL;
5652 		char *keyfile = NULL;
5653 		char *routefile = NULL;
5654 		char *route6file = NULL;
5655 		gboolean ignore_error = FALSE;
5656 		GError *error = NULL;
5657 		const char *tmp;
5658 		const char *expected_id = "System test-wired-qeth-static";
5659 		const GByteArray *array;
5660 		const char *expected_channel0 = "0.0.0600";
5661 		const char *expected_channel1 = "0.0.0601";
5662 		const char *expected_channel2 = "0.0.0602";
5663 		const GPtrArray *subchannels;
5664 	
5665 		connection = connection_from_file (TEST_IFCFG_WIRED_QETH_STATIC,
5666 		                                   NULL,
5667 		                                   TYPE_ETHERNET,
5668 		                                   NULL,
5669 		                                   &unmanaged,
5670 		                                   &keyfile,
5671 		                                   &routefile,
5672 		                                   &route6file,
5673 		                                   &error,
5674 		                                   &ignore_error);
5675 		ASSERT (connection != NULL,
5676 		        "wired-qeth-static-read", "failed to read %s: %s", TEST_IFCFG_WIRED_QETH_STATIC, error->message);
5677 	
5678 		ASSERT (nm_connection_verify (connection, &error),
5679 		        "wired-qeth-static-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_QETH_STATIC, error->message);
5680 	
5681 		ASSERT (unmanaged == NULL,
5682 		        "wired-qeth-static-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_QETH_STATIC);
5683 	
5684 		/* ===== CONNECTION SETTING ===== */
5685 	
5686 		s_con = nm_connection_get_setting_connection (connection);
5687 		ASSERT (s_con != NULL,
5688 		        "wired-qeth-static-verify-connection", "failed to verify %s: missing %s setting",
5689 		        TEST_IFCFG_WIRED_QETH_STATIC,
5690 		        NM_SETTING_CONNECTION_SETTING_NAME);
5691 	
5692 		/* ID */
5693 		tmp = nm_setting_connection_get_id (s_con);
5694 		ASSERT (tmp != NULL,
5695 		        "wired-qeth-static-verify-connection", "failed to verify %s: missing %s / %s key",
5696 		        TEST_IFCFG_WIRED_QETH_STATIC,
5697 		        NM_SETTING_CONNECTION_SETTING_NAME,
5698 		        NM_SETTING_CONNECTION_ID);
5699 		ASSERT (strcmp (tmp, expected_id) == 0,
5700 		        "wired-qeth-static-verify-connection", "failed to verify %s: unexpected %s / %s key value",
5701 		        TEST_IFCFG_WIRED_QETH_STATIC,
5702 		        NM_SETTING_CONNECTION_SETTING_NAME,
5703 		        NM_SETTING_CONNECTION_ID);
5704 	
5705 		/* ===== WIRED SETTING ===== */
5706 	
5707 		s_wired = nm_connection_get_setting_wired (connection);
5708 		ASSERT (s_wired != NULL,
5709 		        "wired-qeth-static-verify-wired", "failed to verify %s: missing %s setting",
5710 		        TEST_IFCFG_WIRED_QETH_STATIC,
5711 		        NM_SETTING_WIRED_SETTING_NAME);
5712 	
5713 		/* MAC address */
5714 		array = nm_setting_wired_get_mac_address (s_wired);
5715 		ASSERT (array == NULL,
5716 		        "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s / %s key",
5717 		        TEST_IFCFG_WIRED_QETH_STATIC,
5718 		        NM_SETTING_WIRED_SETTING_NAME,
5719 		        NM_SETTING_WIRED_MAC_ADDRESS);
5720 	
5721 		/* Subchannels */
5722 		subchannels = nm_setting_wired_get_s390_subchannels (s_wired);
5723 		ASSERT (subchannels != NULL,
5724 		        "wired-qeth-static-verify-wired", "failed to verify %s: missing %s / %s key",
5725 		        TEST_IFCFG_WIRED_QETH_STATIC,
5726 		        NM_SETTING_WIRED_SETTING_NAME,
5727 		        NM_SETTING_WIRED_S390_SUBCHANNELS);
5728 		ASSERT (subchannels->len == 3,
5729 		        "wired-qeth-static-verify-wired", "failed to verify %s: invalid %s / %s key (not 3 elements)",
5730 		        TEST_IFCFG_WIRED_QETH_STATIC,
5731 		        NM_SETTING_WIRED_SETTING_NAME,
5732 		        NM_SETTING_WIRED_S390_SUBCHANNELS);
5733 	
5734 		tmp = (const char *) g_ptr_array_index (subchannels, 0);
5735 		ASSERT (strcmp (tmp, expected_channel0) == 0,
5736 		        "wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #0",
5737 		        TEST_IFCFG_WIRED_QETH_STATIC);
5738 	
5739 		tmp = (const char *) g_ptr_array_index (subchannels, 1);
5740 		ASSERT (strcmp (tmp, expected_channel1) == 0,
5741 		        "wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #1",
5742 		        TEST_IFCFG_WIRED_QETH_STATIC);
5743 	
5744 		tmp = (const char *) g_ptr_array_index (subchannels, 2);
5745 		ASSERT (strcmp (tmp, expected_channel2) == 0,
5746 		        "wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #2",
5747 		        TEST_IFCFG_WIRED_QETH_STATIC);
5748 	
5749 		/* Nettype */
5750 		tmp = nm_setting_wired_get_s390_nettype (s_wired);
5751 		ASSERT (tmp != NULL,
5752 		        "wired-qeth-static-verify-wired", "failed to verify %s: missing %s / %s key",
5753 		        TEST_IFCFG_WIRED_QETH_STATIC,
5754 		        NM_SETTING_WIRED_SETTING_NAME,
5755 		        NM_SETTING_WIRED_S390_NETTYPE);
5756 		ASSERT (strcmp (tmp, "qeth") == 0,
5757 		        "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s / %s key value",
5758 		        TEST_IFCFG_WIRED_QETH_STATIC,
5759 		        NM_SETTING_WIRED_SETTING_NAME,
5760 		        NM_SETTING_WIRED_S390_NETTYPE);
5761 	
5762 		/* port name */
5763 		tmp = nm_setting_wired_get_s390_option_by_key (s_wired, "portname");
5764 		ASSERT (tmp != NULL,
5765 		        "wired-qeth-static-verify-wired", "failed to verify %s: missing %s s390 option 'portname'",
5766 		        TEST_IFCFG_WIRED_QETH_STATIC,
5767 		        NM_SETTING_WIRED_SETTING_NAME);
5768 		ASSERT (strcmp (tmp, "OSAPORT") == 0,
5769 		        "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s s390 option 'portname' value",
5770 		        TEST_IFCFG_WIRED_QETH_STATIC,
5771 		        NM_SETTING_WIRED_SETTING_NAME);
5772 	
5773 		/* port number */
5774 		tmp = nm_setting_wired_get_s390_option_by_key (s_wired, "portno");
5775 		ASSERT (tmp != NULL,
5776 		        "wired-qeth-static-verify-wired", "failed to verify %s: missing %s s390 option 'portno'",
5777 		        TEST_IFCFG_WIRED_QETH_STATIC,
5778 		        NM_SETTING_WIRED_SETTING_NAME);
5779 		ASSERT (strcmp (tmp, "0") == 0,
5780 		        "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s s390 option 'portno' value",
5781 		        TEST_IFCFG_WIRED_QETH_STATIC,
5782 		        NM_SETTING_WIRED_SETTING_NAME);
5783 	
5784 		/* layer */
5785 		tmp = nm_setting_wired_get_s390_option_by_key (s_wired, "layer2");
5786 		ASSERT (tmp != NULL,
5787 		        "wired-qeth-static-verify-wired", "failed to verify %s: missing %s s390 option 'layer2'",
5788 		        TEST_IFCFG_WIRED_QETH_STATIC,
5789 		        NM_SETTING_WIRED_SETTING_NAME);
5790 		ASSERT (strcmp (tmp, "1") == 0,
5791 		        "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s s390 option 'layer2' value",
5792 		        TEST_IFCFG_WIRED_QETH_STATIC,
5793 		        NM_SETTING_WIRED_SETTING_NAME);
5794 	
5795 		/* ===== IPv4 SETTING ===== */
5796 	
5797 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
5798 		ASSERT (s_ip4 != NULL,
5799 		        "wired-qeth-static-verify-ip4", "failed to verify %s: missing %s setting",
5800 		        TEST_IFCFG_WIRED_QETH_STATIC,
5801 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
5802 	
5803 		/* Method */
5804 		tmp = nm_setting_ip4_config_get_method (s_ip4);
5805 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
5806 		        "wired-qeth-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
5807 		        TEST_IFCFG_WIRED_QETH_STATIC,
5808 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
5809 		        NM_SETTING_IP4_CONFIG_METHOD);
5810 	
5811 		g_free (unmanaged);
5812 		g_free (keyfile);
5813 		g_free (routefile);
5814 		g_free (route6file);
5815 		g_object_unref (connection);
5816 	}
5817 	
5818 	#define TEST_IFCFG_WIRED_CTC_STATIC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ctc-static"
5819 	
5820 	static void
5821 	test_read_wired_ctc_static (void)
5822 	{
5823 		NMConnection *connection;
5824 		NMSettingConnection *s_con;
5825 		NMSettingWired *s_wired;
5826 		char *unmanaged = NULL;
5827 		char *keyfile = NULL;
5828 		char *routefile = NULL;
5829 		char *route6file = NULL;
5830 		gboolean ignore_error = FALSE;
5831 		GError *error = NULL;
5832 		const char *tmp;
5833 		const char *expected_id = "System test-wired-ctc-static";
5834 		const char *expected_channel0 = "0.0.1b00";
5835 		const char *expected_channel1 = "0.0.1b01";
5836 		const GPtrArray *subchannels;
5837 		gboolean success;
5838 	
5839 		connection = connection_from_file (TEST_IFCFG_WIRED_CTC_STATIC,
5840 		                                   NULL,
5841 		                                   TYPE_ETHERNET,
5842 		                                   NULL,
5843 		                                   &unmanaged,
5844 		                                   &keyfile,
5845 		                                   &routefile,
5846 		                                   &route6file,
5847 		                                   &error,
5848 		                                   &ignore_error);
5849 		g_assert_no_error (error);
5850 		g_assert (connection);
5851 		
5852 		success = nm_connection_verify (connection, &error);
5853 		g_assert_no_error (error);
5854 		g_assert (success);
5855 		g_assert (unmanaged == NULL);
5856 	
5857 		/* ===== CONNECTION SETTING ===== */
5858 		s_con = nm_connection_get_setting_connection (connection);
5859 		g_assert (s_con != NULL);
5860 		g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
5861 	
5862 		/* ===== WIRED SETTING ===== */
5863 		s_wired = nm_connection_get_setting_wired (connection);
5864 		g_assert (s_wired != NULL);
5865 	
5866 		g_assert (nm_setting_wired_get_mac_address (s_wired) == NULL);
5867 	
5868 		/* Subchannels */
5869 		subchannels = nm_setting_wired_get_s390_subchannels (s_wired);
5870 		g_assert (subchannels != NULL);
5871 		g_assert_cmpint (subchannels->len, ==, 2);
5872 	
5873 		g_assert_cmpstr (g_ptr_array_index (subchannels, 0), ==, expected_channel0);
5874 		g_assert_cmpstr (g_ptr_array_index (subchannels, 1), ==, expected_channel1);
5875 	
5876 		/* Nettype */
5877 		g_assert_cmpstr (nm_setting_wired_get_s390_nettype (s_wired), ==, "ctc");
5878 	
5879 		/* port name */
5880 		tmp = nm_setting_wired_get_s390_option_by_key (s_wired, "ctcprot");
5881 		g_assert (tmp != NULL);
5882 		g_assert_cmpstr (tmp, ==, "0");
5883 	
5884 		g_free (unmanaged);
5885 		g_free (keyfile);
5886 		g_free (routefile);
5887 		g_free (route6file);
5888 		g_object_unref (connection);
5889 	}
5890 	
5891 	#define TEST_IFCFG_WIFI_WEP_NO_KEYS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-no-keys"
5892 	
5893 	static void
5894 	test_read_wifi_wep_no_keys (void)
5895 	{
5896 		NMConnection *connection;
5897 		NMSettingConnection *s_con;
5898 		NMSettingWireless *s_wireless;
5899 		NMSettingWirelessSecurity *s_wsec;
5900 		char *unmanaged = NULL;
5901 		char *keyfile = NULL;
5902 		char *routefile = NULL;
5903 		char *route6file = NULL;
5904 		gboolean ignore_error = FALSE;
5905 		GError *error = NULL;
5906 		const char *tmp;
5907 		const char *expected_id = "System foobar (test-wifi-wep-no-keys)";
5908 		NMWepKeyType key_type;
5909 	
5910 		connection = connection_from_file (TEST_IFCFG_WIFI_WEP_NO_KEYS,
5911 		                                   NULL,
5912 		                                   TYPE_WIRELESS,
5913 		                                   NULL,
5914 		                                   &unmanaged,
5915 		                                   &keyfile,
5916 		                                   &routefile,
5917 		                                   &route6file,
5918 		                                   &error,
5919 		                                   &ignore_error);
5920 		ASSERT (connection != NULL,
5921 		        "wifi-wep-no-keys-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP_NO_KEYS, error->message);
5922 	
5923 		ASSERT (nm_connection_verify (connection, &error),
5924 		        "wifi-wep-no-keys-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP_NO_KEYS, error->message);
5925 	
5926 		/* ===== CONNECTION SETTING ===== */
5927 	
5928 		s_con = nm_connection_get_setting_connection (connection);
5929 		ASSERT (s_con != NULL,
5930 		        "wifi-wep-no-keys-verify-connection", "failed to verify %s: missing %s setting",
5931 		        TEST_IFCFG_WIFI_WEP_NO_KEYS,
5932 		        NM_SETTING_CONNECTION_SETTING_NAME);
5933 	
5934 		/* ID */
5935 		tmp = nm_setting_connection_get_id (s_con);
5936 		ASSERT (tmp != NULL,
5937 		        "wifi-wep-no-keys-verify-connection", "failed to verify %s: missing %s / %s key",
5938 		        TEST_IFCFG_WIFI_WEP_NO_KEYS,
5939 		        NM_SETTING_CONNECTION_SETTING_NAME,
5940 		        NM_SETTING_CONNECTION_ID);
5941 		ASSERT (strcmp (tmp, expected_id) == 0,
5942 		        "wifi-wep-no-keys-verify-connection", "failed to verify %s: unexpected %s / %s key value",
5943 		        TEST_IFCFG_WIFI_WEP_NO_KEYS,
5944 		        NM_SETTING_CONNECTION_SETTING_NAME,
5945 		        NM_SETTING_CONNECTION_ID);
5946 	
5947 		/* UUID can't be tested if the ifcfg does not contain the UUID key, because
5948 		 * the UUID is generated on the full path of the ifcfg file, which can change
5949 		 * depending on where the tests are run.
5950 		 */
5951 	
5952 		/* ===== WIRELESS SETTING ===== */
5953 	
5954 		s_wireless = nm_connection_get_setting_wireless (connection);
5955 		ASSERT (s_wireless != NULL,
5956 		        "wifi-wep-no-keys-verify-wireless", "failed to verify %s: missing %s setting",
5957 		        TEST_IFCFG_WIFI_WEP_NO_KEYS,
5958 		        NM_SETTING_WIRELESS_SETTING_NAME);
5959 	
5960 		/* ===== WIRELESS SECURITY SETTING ===== */
5961 	
5962 		s_wsec = nm_connection_get_setting_wireless_security (connection);
5963 		ASSERT (s_wsec != NULL,
5964 		        "wifi-wep-no-keys-verify-wireless", "failed to verify %s: missing %s setting",
5965 		        TEST_IFCFG_WIFI_WEP_NO_KEYS,
5966 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
5967 	
5968 		/* Key management */
5969 		ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
5970 		        "wifi-wep-no-keys-verify-wireless", "failed to verify %s: missing %s / %s key",
5971 		        TEST_IFCFG_WIFI_WEP_NO_KEYS,
5972 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5973 		        NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
5974 	
5975 		/* WEP key index */
5976 		ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
5977 		        "wifi-wep-no-keys-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
5978 		        TEST_IFCFG_WIFI_WEP_NO_KEYS,
5979 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5980 		        NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
5981 	
5982 		/* WEP key type */
5983 		key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
5984 		ASSERT (key_type == NM_WEP_KEY_TYPE_UNKNOWN || key_type == NM_WEP_KEY_TYPE_KEY,
5985 		        "wifi-wep-no-keys-verify-wireless", "failed to verify %s: unexpected WEP key type %d",
5986 		        TEST_IFCFG_WIFI_WEP_NO_KEYS,
5987 		        key_type);
5988 	
5989 		/* WEP key index 0; we don't expect it to be filled */
5990 		tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
5991 		ASSERT (tmp == NULL,
5992 		        "wifi-wep-no-keys-verify-wireless", "failed to verify %s: missing %s / %s key",
5993 		        TEST_IFCFG_WIFI_WEP_NO_KEYS,
5994 		        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5995 		        NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
5996 	
5997 		g_free (unmanaged);
5998 		g_free (keyfile);
5999 		g_free (routefile);
6000 		g_free (route6file);
6001 		g_object_unref (connection);
6002 	}
6003 	
6004 	#define TEST_IFCFG_PERMISSIONS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-permissions"
6005 	
6006 	static void
6007 	test_read_permissions (void)
6008 	{
6009 		NMConnection *connection;
6010 		NMSettingConnection *s_con;
6011 		char *unmanaged = NULL;
6012 		char *keyfile = NULL;
6013 		char *routefile = NULL;
6014 		char *route6file = NULL;
6015 		gboolean ignore_error = FALSE, success;
6016 		GError *error = NULL;
6017 		guint32 num;
6018 		const char *tmp;
6019 	
6020 		connection = connection_from_file (TEST_IFCFG_PERMISSIONS,
6021 		                                   NULL,
6022 		                                   TYPE_ETHERNET,
6023 		                                   NULL,
6024 		                                   &unmanaged,
6025 		                                   &keyfile,
6026 		                                   &routefile,
6027 		                                   &route6file,
6028 		                                   &error,
6029 		                                   &ignore_error);
6030 		ASSERT (connection != NULL,
6031 		        "permissions-read", "failed to read %s: %s", TEST_IFCFG_PERMISSIONS, error->message);
6032 	
6033 		ASSERT (nm_connection_verify (connection, &error),
6034 		        "permissions-verify", "failed to verify %s: %s", TEST_IFCFG_PERMISSIONS, error->message);
6035 	
6036 		/* ===== CONNECTION SETTING ===== */
6037 	
6038 		s_con = nm_connection_get_setting_connection (connection);
6039 		ASSERT (s_con != NULL,
6040 		        "permissions-verify-connection", "failed to verify %s: missing %s setting",
6041 		        TEST_IFCFG_PERMISSIONS,
6042 		        NM_SETTING_CONNECTION_SETTING_NAME);
6043 	
6044 		num = nm_setting_connection_get_num_permissions (s_con);
6045 		ASSERT (num == 3,
6046 		        "permissions-verify-permissions", "unexpected number of permissions (%d, expected 3)",
6047 		        num);
6048 	
6049 		/* verify each permission */
6050 		tmp = NULL;
(6) Event example_assign: Example3: Assigning: "success" = return value from "nm_setting_connection_get_permission(s_con, 0U, NULL, &tmp, NULL)".
Also see events: [check_return][example_assign][example_checked][example_checked][example_checked][example_assign][example_checked][example_checked][unchecked_value]
6051 		success = nm_setting_connection_get_permission (s_con, 0, NULL, &tmp, NULL);
(7) Event example_checked: Example3 (cont.): "success" has its value checked in "success == 1".
Also see events: [check_return][example_assign][example_checked][example_checked][example_assign][example_assign][example_checked][example_checked][unchecked_value]
6052 		ASSERT (success == TRUE,
6053 		        "permissions-verify-permissions", "unexpected failure getting permission #1");
6054 		ASSERT (strcmp (tmp, "dcbw") == 0,
6055 		        "permissions-verify-permissions", "unexpected permission #1");
6056 	
6057 		tmp = NULL;
6058 		success = nm_setting_connection_get_permission (s_con, 1, NULL, &tmp, NULL);
6059 		ASSERT (success == TRUE,
6060 		        "permissions-verify-permissions", "unexpected failure getting permission #2");
6061 		ASSERT (strcmp (tmp, "ssmith") == 0,
6062 		        "permissions-verify-permissions", "unexpected permission #2");
6063 	
6064 		tmp = NULL;
(8) Event example_assign: Example4: Assigning: "success" = return value from "nm_setting_connection_get_permission(s_con, 2U, NULL, &tmp, NULL)".
Also see events: [check_return][example_assign][example_checked][example_checked][example_assign][example_checked][example_checked][example_checked][unchecked_value]
6065 		success = nm_setting_connection_get_permission (s_con, 2, NULL, &tmp, NULL);
(9) Event example_checked: Example4 (cont.): "success" has its value checked in "success == 1".
Also see events: [check_return][example_assign][example_checked][example_checked][example_assign][example_checked][example_assign][example_checked][unchecked_value]
6066 		ASSERT (success == TRUE,
6067 		        "permissions-verify-permissions", "unexpected failure getting permission #3");
6068 		ASSERT (strcmp (tmp, "johnny5") == 0,
6069 		        "permissions-verify-permissions", "unexpected permission #3");
6070 	
6071 		g_free (unmanaged);
6072 		g_free (keyfile);
6073 		g_free (routefile);
6074 		g_free (route6file);
6075 		g_object_unref (connection);
6076 	}
6077 	
6078 	#define TEST_IFCFG_WIFI_WEP_AGENT_KEYS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-agent-keys"
6079 	
6080 	static void
6081 	test_read_wifi_wep_agent_keys (void)
6082 	{
6083 		NMConnection *connection;
6084 		NMSettingWireless *s_wifi;
6085 		NMSettingWirelessSecurity *s_wsec;
6086 		char *unmanaged = NULL;
6087 		char *keyfile = NULL;
6088 		char *routefile = NULL;
6089 		char *route6file = NULL;
6090 		gboolean ignore_error = FALSE;
6091 		GError *error = NULL;
6092 		NMWepKeyType key_type;
6093 		gboolean success;
6094 		NMSettingSecretFlags flags;
6095 	
6096 		connection = connection_from_file (TEST_IFCFG_WIFI_WEP_AGENT_KEYS,
6097 		                                   NULL,
6098 		                                   TYPE_WIRELESS,
6099 		                                   NULL,
6100 		                                   &unmanaged,
6101 		                                   &keyfile,
6102 		                                   &routefile,
6103 		                                   &route6file,
6104 		                                   &error,
6105 		                                   &ignore_error);
6106 		g_assert (connection != NULL);
6107 	
6108 		success = nm_connection_verify (connection, &error);
6109 		g_assert_no_error (error);
6110 		g_assert (success);
6111 	
6112 		/* Ensure the connection is still marked for wifi security even though
6113 		 * we don't have any WEP keys because they are agent owned.
6114 		 */
6115 	
6116 		/* ===== WIRELESS SETTING ===== */
6117 		s_wifi = nm_connection_get_setting_wireless (connection);
6118 		g_assert (s_wifi);
6119 	
6120 		/* ===== WIRELESS SECURITY SETTING ===== */
6121 		s_wsec = nm_connection_get_setting_wireless_security (connection);
6122 		g_assert (s_wsec);
6123 	
6124 		g_assert (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0);
6125 		g_assert (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0);
6126 	
6127 		key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
6128 		g_assert (key_type == NM_WEP_KEY_TYPE_UNKNOWN || key_type == NM_WEP_KEY_TYPE_KEY);
6129 	
6130 		/* We don't expect WEP key0 to be filled */
6131 		g_assert (nm_setting_wireless_security_get_wep_key (s_wsec, 0) == NULL);
6132 	
6133 		flags = nm_setting_wireless_security_get_wep_key_flags (s_wsec);
6134 		g_assert (flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED);
6135 	
6136 		g_free (unmanaged);
6137 		g_free (keyfile);
6138 		g_free (routefile);
6139 		g_free (route6file);
6140 		g_object_unref (connection);
6141 	}
6142 	
6143 	static void
6144 	test_write_wired_static (void)
6145 	{
6146 		NMConnection *connection;
6147 		NMConnection *reread;
6148 		NMSettingConnection *s_con;
6149 		NMSettingWired *s_wired;
6150 		NMSettingIP4Config *s_ip4, *reread_s_ip4;
6151 		NMSettingIP6Config *s_ip6, *reread_s_ip6;
6152 		static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
6153 		GByteArray *mac;
6154 		guint32 mtu = 1492;
6155 		char *uuid;
6156 		const guint32 ip1 = htonl (0x01010103);
6157 		const guint32 ip2 = htonl (0x01010105);
6158 		const guint32 gw = htonl (0x01010101);
6159 		const guint32 dns1 = htonl (0x04020201);
6160 		const guint32 dns2 = htonl (0x04020202);
6161 		const guint32 prefix = 24;
6162 		const char *dns_search1 = "foobar.com";
6163 		const char *dns_search2 = "lab.foobar.com";
6164 		const char *dns_search3 = "foobar6.com";
6165 		const char *dns_search4 = "lab6.foobar.com";
6166 		struct in6_addr ip6, ip6_1, ip6_2;
6167 		struct in6_addr route1_dest, route2_dest, route1_nexthop, route2_nexthop;
6168 		struct in6_addr dns6_1, dns6_2;
6169 		const guint32 route1_prefix = 64, route2_prefix = 128;
6170 		const guint32 route1_metric = 99, route2_metric = 1;
6171 		NMIP4Address *addr;
6172 		NMIP6Address *addr6;
6173 		NMIP6Route *route6;
6174 		gboolean success;
6175 		GError *error = NULL;
6176 		char *testfile = NULL;
6177 		char *unmanaged = NULL;
6178 		char *keyfile = NULL;
6179 		char *routefile = NULL;
6180 		char *route6file = NULL;
6181 		gboolean ignore_error = FALSE;
6182 	
6183 		inet_pton (AF_INET6, "1003:1234:abcd::1", &ip6);
6184 		inet_pton (AF_INET6, "2003:1234:abcd::2", &ip6_1);
6185 		inet_pton (AF_INET6, "3003:1234:abcd::3", &ip6_2);
6186 		inet_pton (AF_INET6, "2222:aaaa:bbbb:cccc::", &route1_dest);
6187 		inet_pton (AF_INET6, "2222:aaaa:bbbb:cccc:dddd:eeee:5555:6666", &route1_nexthop);
6188 		inet_pton (AF_INET6, "::", &route2_dest);
6189 		inet_pton (AF_INET6, "2222:aaaa::9999", &route2_nexthop);
6190 		inet_pton (AF_INET6, "fade:0102:0103::face", &dns6_1);
6191 		inet_pton (AF_INET6, "cafe:ffff:eeee:dddd:cccc:bbbb:aaaa:feed", &dns6_2);
6192 	
6193 		connection = nm_connection_new ();
6194 	
6195 		/* Connection setting */
6196 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
6197 		nm_connection_add_setting (connection, NM_SETTING (s_con));
6198 	
6199 		uuid = nm_utils_uuid_generate ();
6200 		g_object_set (s_con,
6201 		              NM_SETTING_CONNECTION_ID, "Test Write Wired Static",
6202 		              NM_SETTING_CONNECTION_UUID, uuid,
6203 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
6204 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
6205 		              NULL);
6206 		g_free (uuid);
6207 	
6208 		/* Wired setting */
6209 		s_wired = (NMSettingWired *) nm_setting_wired_new ();
6210 		nm_connection_add_setting (connection, NM_SETTING (s_wired));
6211 	
6212 		mac = g_byte_array_sized_new (sizeof (tmpmac));
6213 		g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
6214 	
6215 		g_object_set (s_wired,
6216 		              NM_SETTING_WIRED_MAC_ADDRESS, mac,
6217 		              NM_SETTING_WIRED_MTU, mtu,
6218 		              NULL);
6219 		g_byte_array_free (mac, TRUE);
6220 	
6221 		/* IP4 setting */
6222 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
6223 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
6224 	
6225 		g_object_set (s_ip4,
6226 		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
6227 		              NM_SETTING_IP4_CONFIG_MAY_FAIL, TRUE,
6228 		              NULL);
6229 	
6230 		addr = nm_ip4_address_new ();
6231 		nm_ip4_address_set_address (addr, ip1);
6232 		nm_ip4_address_set_prefix (addr, prefix);
6233 		nm_ip4_address_set_gateway (addr, gw);
6234 		nm_setting_ip4_config_add_address (s_ip4, addr);
6235 		nm_ip4_address_unref (addr);
6236 	
6237 		addr = nm_ip4_address_new ();
6238 		nm_ip4_address_set_address (addr, ip2);
6239 		nm_ip4_address_set_prefix (addr, prefix);
6240 		nm_ip4_address_set_gateway (addr, gw);
6241 		nm_setting_ip4_config_add_address (s_ip4, addr);
6242 		nm_ip4_address_unref (addr);
6243 	
6244 		nm_setting_ip4_config_add_dns (s_ip4, dns1);
6245 		nm_setting_ip4_config_add_dns (s_ip4, dns2);
6246 	
6247 		nm_setting_ip4_config_add_dns_search (s_ip4, dns_search1);
6248 		nm_setting_ip4_config_add_dns_search (s_ip4, dns_search2);
6249 	
6250 		/* IP6 setting */
6251 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
6252 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
6253 	
6254 		g_object_set (s_ip6,
6255 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
6256 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
6257 		              NULL);
6258 	
6259 		/* Add addresses */
6260 		addr6 = nm_ip6_address_new ();
6261 		nm_ip6_address_set_address (addr6, &ip6);
6262 		nm_ip6_address_set_prefix (addr6, 11);
6263 		nm_setting_ip6_config_add_address (s_ip6, addr6);
6264 		nm_ip6_address_unref (addr6);
6265 	
6266 		addr6 = nm_ip6_address_new ();
6267 		nm_ip6_address_set_address (addr6, &ip6_1);
6268 		nm_ip6_address_set_prefix (addr6, 22);
6269 		nm_setting_ip6_config_add_address (s_ip6, addr6);
6270 		nm_ip6_address_unref (addr6);
6271 	
6272 		addr6 = nm_ip6_address_new ();
6273 		nm_ip6_address_set_address (addr6, &ip6_2);
6274 		nm_ip6_address_set_prefix (addr6, 33);
6275 		nm_setting_ip6_config_add_address (s_ip6, addr6);
6276 		nm_ip6_address_unref (addr6);
6277 	
6278 		/* Add routes */
6279 		route6 = nm_ip6_route_new ();
6280 		nm_ip6_route_set_dest (route6, &route1_dest);
6281 		nm_ip6_route_set_prefix (route6, route1_prefix);
6282 		nm_ip6_route_set_next_hop (route6, &route1_nexthop);
6283 		nm_ip6_route_set_metric (route6, route1_metric);
6284 		nm_setting_ip6_config_add_route (s_ip6, route6);
6285 		nm_ip6_route_unref (route6);
6286 	
6287 		route6 = nm_ip6_route_new ();
6288 		nm_ip6_route_set_dest (route6, &route2_dest);
6289 		nm_ip6_route_set_prefix (route6, route2_prefix);
6290 		nm_ip6_route_set_next_hop (route6, &route2_nexthop);
6291 		nm_ip6_route_set_metric (route6, route2_metric);
6292 		nm_setting_ip6_config_add_route (s_ip6, route6);
6293 		nm_ip6_route_unref (route6);
6294 	
6295 		/* DNS servers */
6296 		nm_setting_ip6_config_add_dns (s_ip6, &dns6_1);
6297 		nm_setting_ip6_config_add_dns (s_ip6, &dns6_2);
6298 	
6299 		/* DNS domains */
6300 		nm_setting_ip6_config_add_dns_search (s_ip6, dns_search3);
6301 		nm_setting_ip6_config_add_dns_search (s_ip6, dns_search4);
6302 	
6303 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
6304 		        "wired-static-write", "failed to verify connection: %s",
6305 		        (error && error->message) ? error->message : "(unknown)");
6306 	
6307 		/* Save the ifcfg */
6308 		success = writer_new_connection (connection,
6309 		                                 TEST_SCRATCH_DIR "/network-scripts/",
6310 		                                 &testfile,
6311 		                                 &error);
6312 		ASSERT (success == TRUE,
6313 		        "wired-static-write", "failed to write connection to disk: %s",
6314 		        (error && error->message) ? error->message : "(unknown)");
6315 	
6316 		ASSERT (testfile != NULL,
6317 		        "wired-static-write", "didn't get ifcfg file path back after writing connection");
6318 	
6319 		/* reread will be normalized, so we must normalize connection too. */
6320 		nm_utils_normalize_connection (connection, TRUE);
6321 	
6322 		/* re-read the connection for comparison */
6323 		reread = connection_from_file (testfile,
6324 		                               NULL,
6325 		                               TYPE_ETHERNET,
6326 		                               NULL,
6327 		                               &unmanaged,
6328 		                               &keyfile,
6329 		                               &routefile,
6330 		                               &route6file,
6331 		                               &error,
6332 		                               &ignore_error);
6333 		unlink (testfile);
6334 	
6335 		ASSERT (reread != NULL,
6336 		        "wired-static-write-reread", "failed to read %s: %s", testfile, error->message);
6337 	
6338 		ASSERT (nm_connection_verify (reread, &error),
6339 		        "wired-static-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
6340 	
6341 		/* FIXME: currently DNS domains from IPv6 setting are stored in 'DOMAIN' key in ifcfg-file 
6342 		 * However after re-reading they are dropped into IPv4 setting.
6343 		 * So, in order to comparison succeeded, move DNS domains back to IPv6 setting.
6344 		 */
6345 		reread_s_ip4 = nm_connection_get_setting_ip4_config (reread);
6346 		reread_s_ip6 = nm_connection_get_setting_ip6_config (reread);
6347 		nm_setting_ip6_config_add_dns_search (reread_s_ip6, nm_setting_ip4_config_get_dns_search (reread_s_ip4, 2));
6348 		nm_setting_ip6_config_add_dns_search (reread_s_ip6, nm_setting_ip4_config_get_dns_search (reread_s_ip4, 3));
6349 		nm_setting_ip4_config_remove_dns_search (reread_s_ip4, 3);
6350 		nm_setting_ip4_config_remove_dns_search (reread_s_ip4, 2);
6351 	
6352 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
6353 		        "wired-static-write", "written and re-read connection weren't the same.");
6354 	
6355 		if (route6file)
6356 			unlink (route6file);
6357 	
6358 		g_free (testfile);
6359 		g_free (unmanaged);
6360 		g_free (keyfile);
6361 		g_free (routefile);
6362 		g_free (route6file);
6363 		g_object_unref (connection);
6364 		g_object_unref (reread);
6365 	}
6366 	
6367 	static void
6368 	test_write_wired_dhcp (void)
6369 	{
6370 		NMConnection *connection;
6371 		NMConnection *reread;
6372 		NMSettingConnection *s_con;
6373 		NMSettingWired *s_wired;
6374 		NMSettingIP4Config *s_ip4;
6375 		NMSettingIP6Config *s_ip6;
6376 		char *uuid;
6377 		gboolean success;
6378 		GError *error = NULL;
6379 		char *testfile = NULL;
6380 		char *unmanaged = NULL;
6381 		char *keyfile = NULL;
6382 		char *routefile = NULL;
6383 		char *route6file = NULL;
6384 		gboolean ignore_error = FALSE;
6385 	
6386 		connection = nm_connection_new ();
6387 	
6388 		/* Connection setting */
6389 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
6390 		nm_connection_add_setting (connection, NM_SETTING (s_con));
6391 	
6392 		uuid = nm_utils_uuid_generate ();
6393 		g_object_set (s_con,
6394 		              NM_SETTING_CONNECTION_ID, "Test Write Wired DHCP",
6395 		              NM_SETTING_CONNECTION_UUID, uuid,
6396 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
6397 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
6398 		              NULL);
6399 		g_free (uuid);
6400 	
6401 		/* Wired setting */
6402 		s_wired = (NMSettingWired *) nm_setting_wired_new ();
6403 		nm_connection_add_setting (connection, NM_SETTING (s_wired));
6404 	
6405 		/* IP4 setting */
6406 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
6407 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
6408 	
6409 		g_object_set (s_ip4,
6410 		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
6411 		              NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, "random-client-id-00:22:33",
6412 		              NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, "awesome-hostname",
6413 		              NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, TRUE,
6414 		              NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, TRUE,
6415 		              NULL);
6416 	
6417 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
6418 		        "wired-dhcp-write", "failed to verify connection: %s",
6419 		        (error && error->message) ? error->message : "(unknown)");
6420 	
6421 		/* IP6 setting */
6422 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
6423 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
6424 	
6425 		g_object_set (s_ip6,
6426 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
6427 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
6428 		              NULL);
6429 	
6430 		/* Save the ifcfg */
6431 		success = writer_new_connection (connection,
6432 		                                 TEST_SCRATCH_DIR "/network-scripts/",
6433 		                                 &testfile,
6434 		                                 &error);
6435 		ASSERT (success == TRUE,
6436 		        "wired-dhcp-write", "failed to write connection to disk: %s",
6437 		        (error && error->message) ? error->message : "(unknown)");
6438 	
6439 		ASSERT (testfile != NULL,
6440 		        "wired-dhcp-write", "didn't get ifcfg file path back after writing connection");
6441 	
6442 		/* reread will be normalized, so we must normalize connection too. */
6443 		nm_utils_normalize_connection (connection, TRUE);
6444 	
6445 		/* re-read the connection for comparison */
6446 		reread = connection_from_file (testfile,
6447 		                               NULL,
6448 		                               TYPE_ETHERNET,
6449 		                               NULL,
6450 		                               &unmanaged,
6451 		                               &keyfile,
6452 		                               &routefile,
6453 		                               &route6file,
6454 		                               &error,
6455 		                               &ignore_error);
6456 		unlink (testfile);
6457 	
6458 		ASSERT (reread != NULL,
6459 		        "wired-dhcp-write-reread", "failed to read %s: %s", testfile, error->message);
6460 	
6461 		ASSERT (nm_connection_verify (reread, &error),
6462 		        "wired-dhcp-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
6463 	
6464 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
6465 		        "wired-dhcp-write", "written and re-read connection weren't the same.");
6466 	
6467 		g_free (testfile);
6468 		g_free (unmanaged);
6469 		g_free (keyfile);
6470 		g_free (routefile);
6471 		g_free (route6file);
6472 		g_object_unref (connection);
6473 		g_object_unref (reread);
6474 	}
6475 	
6476 	static void
6477 	test_write_wired_dhcp_plus_ip (void)
6478 	{
6479 		NMConnection *connection, *reread;
6480 		char *written = NULL;
6481 		GError *error = NULL;
6482 		gboolean success = FALSE;
6483 	
6484 		connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp-plus-ip",
6485 		                                   NULL, TYPE_ETHERNET, NULL, NULL,
6486 		                                   NULL, NULL, NULL, &error, NULL);
6487 		g_assert_no_error (error);
6488 		g_assert (connection != NULL);
6489 	
6490 		success = writer_new_connection (connection,
6491 		                                 TEST_SCRATCH_DIR "/network-scripts/",
6492 		                                 &written,
6493 		                                 &error);
6494 		g_assert (success);
6495 	
6496 		/* reread will be normalized, so we must normalize connection too. */
6497 		nm_utils_normalize_connection (connection, TRUE);
6498 	
6499 		/* re-read the connection for comparison */
6500 		reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL, NULL,
6501 		                               NULL, NULL, NULL, &error, NULL);
6502 		unlink (written);
6503 		g_free (written);
6504 	
6505 		g_assert_no_error (error);
6506 		g_assert (reread != NULL);
6507 	
6508 		success = nm_connection_verify (reread, &error);
6509 		g_assert_no_error (error);
6510 		g_assert (success);
6511 	
6512 		success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
6513 		g_assert (success);
6514 	
6515 		g_object_unref (connection);
6516 		g_object_unref (reread);
6517 	}
6518 	
6519 	static void
6520 	test_write_wired_static_ip6_only (void)
6521 	{
6522 		NMConnection *connection;
6523 		NMConnection *reread;
6524 		NMSettingConnection *s_con;
6525 		NMSettingWired *s_wired;
6526 		NMSettingIP4Config *s_ip4;
6527 		NMSettingIP6Config *s_ip6;
6528 		static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
6529 		GByteArray *mac;
6530 		char *uuid;
6531 		struct in6_addr ip6;
6532 		struct in6_addr dns6;
6533 		NMIP6Address *addr6;
6534 		gboolean success;
6535 		GError *error = NULL;
6536 		char *testfile = NULL;
6537 		char *unmanaged = NULL;
6538 		char *keyfile = NULL;
6539 		char *routefile = NULL;
6540 		char *route6file = NULL;
6541 		gboolean ignore_error = FALSE;
6542 	
6543 		inet_pton (AF_INET6, "1003:1234:abcd::1", &ip6);
6544 		inet_pton (AF_INET6, "fade:0102:0103::face", &dns6);
6545 	
6546 		connection = nm_connection_new ();
6547 	
6548 		/* Connection setting */
6549 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
6550 		nm_connection_add_setting (connection, NM_SETTING (s_con));
6551 	
6552 		uuid = nm_utils_uuid_generate ();
6553 		g_object_set (s_con,
6554 		              NM_SETTING_CONNECTION_ID, "Test Write Wired Static IP6 Only",
6555 		              NM_SETTING_CONNECTION_UUID, uuid,
6556 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
6557 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
6558 		              NULL);
6559 		g_free (uuid);
6560 	
6561 		/* Wired setting */
6562 		s_wired = (NMSettingWired *) nm_setting_wired_new ();
6563 		nm_connection_add_setting (connection, NM_SETTING (s_wired));
6564 	
6565 		mac = g_byte_array_sized_new (sizeof (tmpmac));
6566 		g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
6567 		g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
6568 		g_byte_array_free (mac, TRUE);
6569 	
6570 		/* IP4 setting */
6571 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
6572 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
6573 	
6574 		g_object_set (s_ip4,
6575 		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
6576 		              NULL);
6577 	
6578 		/* IP6 setting */
6579 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
6580 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
6581 	
6582 		g_object_set (s_ip6,
6583 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
6584 		              NULL);
6585 	
6586 		/* Add addresses */
6587 		addr6 = nm_ip6_address_new ();
6588 		nm_ip6_address_set_address (addr6, &ip6);
6589 		nm_ip6_address_set_prefix (addr6, 11);
6590 		nm_setting_ip6_config_add_address (s_ip6, addr6);
6591 		nm_ip6_address_unref (addr6);
6592 	
6593 		/* DNS server */
6594 		nm_setting_ip6_config_add_dns (s_ip6, &dns6);
6595 	
6596 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
6597 		        "wired-static-ip6-only-write", "failed to verify connection: %s",
6598 		        (error && error->message) ? error->message : "(unknown)");
6599 	
6600 		/* Save the ifcfg */
6601 		success = writer_new_connection (connection,
6602 		                                 TEST_SCRATCH_DIR "/network-scripts/",
6603 		                                 &testfile,
6604 		                                 &error);
6605 		ASSERT (success == TRUE,
6606 		        "wired-static-ip6-only-write", "failed to write connection to disk: %s",
6607 		        (error && error->message) ? error->message : "(unknown)");
6608 	
6609 		ASSERT (testfile != NULL,
6610 		        "wired-static-ip6-only-write", "didn't get ifcfg file path back after writing connection");
6611 	
6612 		/* reread will be normalized, so we must normalize connection too. */
6613 		nm_utils_normalize_connection (connection, TRUE);
6614 	
6615 		/* re-read the connection for comparison */
6616 		reread = connection_from_file (testfile,
6617 		                               NULL,
6618 		                               TYPE_ETHERNET,
6619 		                               NULL,
6620 		                               &unmanaged,
6621 		                               &keyfile,
6622 		                               &routefile,
6623 		                               &route6file,
6624 		                               &error,
6625 		                               &ignore_error);
6626 		unlink (testfile);
6627 	
6628 		ASSERT (reread != NULL,
6629 		        "wired-static-ip6-only-write-reread", "failed to read %s: %s", testfile, error->message);
6630 	
6631 		ASSERT (nm_connection_verify (reread, &error),
6632 		        "wired-static-ip6-only-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
6633 	
6634 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
6635 		        "wired-static-ip6-only-write", "written and re-read connection weren't the same.");
6636 	
6637 		if (route6file)
6638 			unlink (route6file);
6639 	
6640 		g_free (testfile);
6641 		g_free (unmanaged);
6642 		g_free (keyfile);
6643 		g_free (routefile);
6644 		g_free (route6file);
6645 		g_object_unref (connection);
6646 		g_object_unref (reread);
6647 	}
6648 	
6649 	/* Test writing an IPv6 config with varying gateway address.
6650 	 * For missing gateway (::), we expect no IPV6_DEFAULTGW to be written
6651 	 * to ifcfg-rh.
6652 	 *
6653 	 * As user_data pass the IPv6 address of the gateway as string. NULL means
6654 	 * not to explicitly set the gateway in the configuration before writing it.
6655 	 * That way, the gateway actually defaults to "::".
6656 	 */
6657 	static void
6658 	test_write_wired_static_ip6_only_gw (gconstpointer user_data)
6659 	{
6660 		NMConnection *connection;
6661 		NMConnection *reread;
6662 		NMSettingConnection *s_con;
6663 		NMSettingWired *s_wired;
6664 		NMSettingIP4Config *s_ip4;
6665 		NMSettingIP6Config *s_ip6;
6666 		static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
6667 		GByteArray *mac;
6668 		char *uuid;
6669 		struct in6_addr ip6;
6670 		struct in6_addr dns6;
6671 		NMIP6Address *addr6;
6672 		gboolean success;
6673 		GError *error = NULL;
6674 		char *testfile = NULL;
6675 		char *id = NULL;
6676 		gboolean ignore_error = FALSE;
6677 		char *written_ifcfg_gateway;
6678 		char s_gateway6[INET6_ADDRSTRLEN] = { 0 };
6679 		struct in6_addr gateway6_autovar;
6680 		const struct in6_addr *gateway6 = NULL;
6681 	
6682 		/* parsing the input argument and set the struct in6_addr "gateway6" to
6683 		 * the gateway address. NULL means "do not set the gateway explicitly". */
6684 		if (user_data) {
6685 			g_assert_cmpint (inet_pton (AF_INET6, user_data, &gateway6_autovar), ==, 1);
6686 			gateway6 = &gateway6_autovar;
6687 		}
6688 	
6689 		inet_pton (AF_INET6, "1003:1234:abcd::1", &ip6);
6690 		inet_pton (AF_INET6, "fade:0102:0103::face", &dns6);
6691 		if (gateway6)
6692 			inet_ntop (AF_INET6, gateway6, s_gateway6, sizeof (s_gateway6));
6693 	
6694 		connection = nm_connection_new ();
6695 	
6696 		/* Connection setting */
6697 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
6698 		nm_connection_add_setting (connection, NM_SETTING (s_con));
6699 	
6700 		uuid = nm_utils_uuid_generate ();
6701 		id = g_strdup_printf ("Test Write Wired Static IP6 Only With Gateway %s", gateway6 ? s_gateway6 : "NULL");
6702 		g_object_set (s_con,
6703 		              NM_SETTING_CONNECTION_ID, id,
6704 		              NM_SETTING_CONNECTION_UUID, uuid,
6705 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
6706 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
6707 		              NULL);
6708 		g_free (uuid);
6709 		g_free (id);
6710 	
6711 		/* Wired setting */
6712 		s_wired = (NMSettingWired *) nm_setting_wired_new ();
6713 		nm_connection_add_setting (connection, NM_SETTING (s_wired));
6714 	
6715 		mac = g_byte_array_sized_new (sizeof (tmpmac));
6716 		g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
6717 		g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
6718 		g_byte_array_free (mac, TRUE);
6719 	
6720 		/* IP4 setting */
6721 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
6722 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
6723 	
6724 		g_object_set (s_ip4,
6725 		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
6726 		              NULL);
6727 	
6728 		/* IP6 setting */
6729 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
6730 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
6731 	
6732 		g_object_set (s_ip6,
6733 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
6734 		              NULL);
6735 	
6736 		/* Add addresses */
6737 		addr6 = nm_ip6_address_new ();
6738 		nm_ip6_address_set_address (addr6, &ip6);
6739 		nm_ip6_address_set_prefix (addr6, 11);
6740 		if (gateway6)
6741 			nm_ip6_address_set_gateway (addr6, gateway6);
6742 		nm_setting_ip6_config_add_address (s_ip6, addr6);
6743 		nm_ip6_address_unref (addr6);
6744 	
6745 		/* DNS server */
6746 		nm_setting_ip6_config_add_dns (s_ip6, &dns6);
6747 	
6748 		g_assert (nm_connection_verify (connection, &error));
6749 	
6750 		/* Save the ifcfg */
6751 		success = writer_new_connection (connection,
6752 		                                 TEST_SCRATCH_DIR "/network-scripts/",
6753 		                                 &testfile,
6754 		                                 &error);
6755 		g_assert_no_error (error);
6756 		g_assert (success);
6757 		g_assert (testfile);
6758 	
6759 		/* reread will be normalized, so we must normalize connection too. */
6760 		nm_utils_normalize_connection (connection, TRUE);
6761 	
6762 		/* re-read the connection for comparison */
6763 		reread = connection_from_file (testfile,
6764 		                               NULL,
6765 		                               TYPE_ETHERNET,
6766 		                               NULL, NULL, NULL,
6767 		                               NULL, NULL,
6768 		                               &error,
6769 		                               &ignore_error);
6770 	
6771 		{
6772 			/* re-read the file to check that what key was written. */
6773 			shvarFile *ifcfg = svNewFile (testfile);
6774 	
6775 			g_assert (ifcfg);
6776 			written_ifcfg_gateway = svGetValue (ifcfg, "IPV6_DEFAULTGW", FALSE);
6777 			svCloseFile (ifcfg);
6778 		}
6779 	
6780 		unlink (testfile);
6781 	
6782 		g_assert_no_error (error);
6783 		g_assert (reread);
6784 		g_assert (nm_connection_verify (reread, &error));
6785 		g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
6786 	
6787 		/* access the gateway from the loaded connection. */
6788 		s_ip6 = nm_connection_get_setting_ip6_config (reread);
6789 		g_assert (s_ip6 && nm_setting_ip6_config_get_num_addresses (s_ip6)==1);
6790 		addr6 = nm_setting_ip6_config_get_address (s_ip6, 0);
6791 		g_assert (addr6);
6792 	
6793 		/* assert that the gateway was written and reloaded as expected */
6794 		if (!gateway6 || IN6_IS_ADDR_UNSPECIFIED (gateway6)) {
6795 			g_assert (IN6_IS_ADDR_UNSPECIFIED (nm_ip6_address_get_gateway (addr6)));
6796 			g_assert (written_ifcfg_gateway==NULL);
6797 		} else {
6798 			g_assert (!IN6_IS_ADDR_UNSPECIFIED (nm_ip6_address_get_gateway (addr6)));
6799 			g_assert_cmpint (memcmp (nm_ip6_address_get_gateway (addr6), gateway6, sizeof (struct in6_addr)), ==, 0);
6800 			g_assert_cmpstr (written_ifcfg_gateway, ==, s_gateway6);
6801 		}
6802 	
6803 		g_free (testfile);
6804 		g_free (written_ifcfg_gateway);
6805 		g_object_unref (connection);
6806 		g_object_unref (reread);
6807 	}
6808 	
6809 	#define TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-static-routes-legacy"
6810 	
6811 	static void
6812 	test_read_write_static_routes_legacy (void)
6813 	{
6814 		NMConnection *connection, *reread;
6815 		NMSettingConnection *s_con;
6816 		NMSettingWired *s_wired;
6817 		NMSettingIP4Config *s_ip4;
6818 		char *unmanaged = NULL;
6819 		char *testfile = NULL;
6820 		char *keyfile = NULL;
6821 		char *keyfile2 = NULL;
6822 		char *routefile = NULL;
6823 		char *routefile2 = NULL;
6824 		char *route6file = NULL;
6825 		char *route6file2 = NULL;
6826 		gboolean ignore_error = FALSE;
6827 		gboolean success;
6828 		GError *error = NULL;
6829 		const char *tmp;
6830 	
6831 		connection = connection_from_file (TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6832 		                                   NULL,
6833 		                                   TYPE_ETHERNET,
6834 		                                   NULL,
6835 		                                   &unmanaged,
6836 		                                   &keyfile,
6837 		                                   &routefile,
6838 		                                   &route6file,
6839 		                                   &error,
6840 		                                   &ignore_error);
6841 		ASSERT (connection != NULL,
6842 		        "read-write-static-routes-legacy-read", "failed to read %s: %s",
6843 		        TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY, error->message);
6844 	
6845 		ASSERT (nm_connection_verify (connection, &error),
6846 		        "read-write-static-routes-legacy-verify", "failed to verify %s: %s",
6847 		        TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY, error->message);
6848 	
6849 		/* ===== CONNECTION SETTING ===== */
6850 	
6851 		s_con = nm_connection_get_setting_connection (connection);
6852 		ASSERT (s_con != NULL,
6853 		        "read-write-static-routes-legacy-verify-connection", "failed to verify %s: missing %s setting",
6854 		        TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6855 		        NM_SETTING_CONNECTION_SETTING_NAME);
6856 	
6857 		/* ID */
6858 		tmp = nm_setting_connection_get_id (s_con);
6859 		ASSERT (tmp != NULL,
6860 		        "read-write-static-routes-legacy-verify-connection", "failed to verify %s: missing %s / %s key",
6861 		        TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6862 		        NM_SETTING_CONNECTION_SETTING_NAME,
6863 		        NM_SETTING_CONNECTION_ID);
6864 	
6865 		/* Autoconnect */
6866 		ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
6867 		        "read_write-static-routes-legacy-verify-connection", "failed to verify %s: unexpected %s /%s key value",
6868 		        TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6869 		        NM_SETTING_CONNECTION_SETTING_NAME,
6870 		        NM_SETTING_CONNECTION_AUTOCONNECT);
6871 	
6872 		/* ===== WIRED SETTING ===== */
6873 	
6874 		s_wired = nm_connection_get_setting_wired (connection);
6875 		ASSERT (s_wired != NULL,
6876 		        "read-write-static-routes-legacy-verify-wired", "failed to verify %s: missing %s setting",
6877 		        TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6878 		        NM_SETTING_WIRED_SETTING_NAME);
6879 	
6880 		/* ===== IPv4 SETTING ===== */
6881 	
6882 		s_ip4 = nm_connection_get_setting_ip4_config (connection);
6883 		ASSERT (s_ip4 != NULL,
6884 		        "read-write-static-routes-legacy-verify-ip4", "failed to verify %s: missing %s setting",
6885 		        TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6886 		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
6887 	
6888 		/* Method */
6889 		tmp = nm_setting_ip4_config_get_method (s_ip4);
6890 		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
6891 		        "read-write-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
6892 		        TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6893 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
6894 		        NM_SETTING_IP4_CONFIG_METHOD);
6895 	
6896 		ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE,
6897 		        "read-write-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
6898 		        TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6899 		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
6900 		        NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
6901 	
6902 		/* Save the ifcfg; use a special different scratch dir to ensure that
6903 		 * we can clean up after the written connection in both the original
6904 		 * source tree and for 'make distcheck'.
6905 		 */
6906 		success = writer_new_connection (connection,
6907 		                                 TEST_SCRATCH_DIR "/network-scripts/tmp",
6908 		                                 &testfile,
6909 		                                 &error);
6910 		ASSERT (success == TRUE,
6911 		        "read-write-static-routes-legacy-write", "failed to write connection to disk: %s",
6912 		        (error && error->message) ? error->message : "(unknown)");
6913 	
6914 		ASSERT (testfile != NULL,
6915 		        "read-write-static-routes-legacy-write", "didn't get ifcfg file path back after writing connection");
6916 	
6917 		/* reread will be normalized, so we must normalize connection too. */
6918 		nm_utils_normalize_connection (connection, TRUE);
6919 	
6920 		/* re-read the connection for comparison */
6921 		reread = connection_from_file (testfile,
6922 		                               NULL,
6923 		                               TYPE_ETHERNET,
6924 		                               NULL,
6925 		                               &unmanaged,
6926 		                               &keyfile2,
6927 		                               &routefile2,
6928 		                               &route6file2,
6929 		                               &error,
6930 		                               &ignore_error);
6931 		unlink (testfile);
6932 		unlink (routefile2);
6933 		unlink (route6file2);
6934 	
6935 		ASSERT (reread != NULL,
6936 		        "read-write-static-routes-legacy-reread", "failed to read %s: %s", testfile, error->message);
6937 	
6938 		ASSERT (routefile2 != NULL,
6939 		        "read-write-static-routes-legacy-reread", "expected routefile for '%s'", testfile);
6940 	
6941 		ASSERT (nm_connection_verify (reread, &error),
6942 		        "read-write-static-routes-legacy-reread-verify", "failed to verify %s: %s", testfile, error->message);
6943 	
6944 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
6945 		        "read-write-static-routes-legacy-write", "written and re-read connection weren't the same.");
6946 	
6947 		g_free (testfile);
6948 		g_free (unmanaged);
6949 		g_free (keyfile);
6950 		g_free (keyfile2);
6951 		g_free (routefile);
6952 		g_free (routefile2);
6953 		g_free (route6file);
6954 		g_free (route6file2);
6955 		g_object_unref (connection);
6956 		g_object_unref (reread);
6957 	}
6958 	
6959 	static void
6960 	test_write_wired_static_routes (void)
6961 	{
6962 		NMConnection *connection;
6963 		NMConnection *reread;
6964 		NMSettingConnection *s_con;
6965 		NMSettingWired *s_wired;
6966 		NMSettingIP4Config *s_ip4;
6967 		NMSettingIP6Config *s_ip6;
6968 		static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
6969 		GByteArray *mac;
6970 		guint32 mtu = 1492;
6971 		char *uuid;
6972 		const guint32 ip1 = htonl (0x01010103);
6973 		const guint32 ip2 = htonl (0x01010105);
6974 		const guint32 gw = htonl (0x01010101);
6975 		const guint32 dns1 = htonl (0x04020201);
6976 		const guint32 dns2 = htonl (0x04020202);
6977 		const guint32 route_dst1 = htonl (0x01020300);
6978 		const guint32 route_dst2= htonl (0x03020100);
6979 		const guint32 route_gw1 = htonl (0xdeadbeef);
6980 		const guint32 route_gw2 = htonl (0xcafeabbe);
6981 		const guint32 prefix = 24;
6982 		const char *dns_search1 = "foobar.com";
6983 		const char *dns_search2 = "lab.foobar.com";
6984 		NMIP4Address *addr;
6985 		NMIP4Route *route;
6986 		gboolean success;
6987 		GError *error = NULL;
6988 		char *testfile = NULL;
6989 		char *unmanaged = NULL;
6990 		char *keyfile = NULL;
6991 		char *routefile = NULL;
6992 		char *route6file = NULL;
6993 		gboolean ignore_error = FALSE;
6994 	
6995 		connection = nm_connection_new ();
6996 	
6997 		/* Connection setting */
6998 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
6999 		nm_connection_add_setting (connection, NM_SETTING (s_con));
7000 	
7001 		uuid = nm_utils_uuid_generate ();
7002 		g_object_set (s_con,
7003 		              NM_SETTING_CONNECTION_ID, "Test Write Wired Static Routes",
7004 		              NM_SETTING_CONNECTION_UUID, uuid,
7005 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7006 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
7007 		              NULL);
7008 		g_free (uuid);
7009 	
7010 		/* Wired setting */
7011 		s_wired = (NMSettingWired *) nm_setting_wired_new ();
7012 		nm_connection_add_setting (connection, NM_SETTING (s_wired));
7013 	
7014 		mac = g_byte_array_sized_new (sizeof (tmpmac));
7015 		g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
7016 	
7017 		g_object_set (s_wired,
7018 		              NM_SETTING_WIRED_MAC_ADDRESS, mac,
7019 		              NM_SETTING_WIRED_MTU, mtu,
7020 		              NULL);
7021 		g_byte_array_free (mac, TRUE);
7022 	
7023 		/* IP4 setting */
7024 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7025 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7026 	
7027 		g_object_set (s_ip4,
7028 		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
7029 		              NULL);
7030 	
7031 		addr = nm_ip4_address_new ();
7032 		nm_ip4_address_set_address (addr, ip1);
7033 		nm_ip4_address_set_prefix (addr, prefix);
7034 		nm_ip4_address_set_gateway (addr, gw);
7035 		nm_setting_ip4_config_add_address (s_ip4, addr);
7036 		nm_ip4_address_unref (addr);
7037 	
7038 		addr = nm_ip4_address_new ();
7039 		nm_ip4_address_set_address (addr, ip2);
7040 		nm_ip4_address_set_prefix (addr, prefix);
7041 		nm_ip4_address_set_gateway (addr, gw);
7042 		nm_setting_ip4_config_add_address (s_ip4, addr);
7043 		nm_ip4_address_unref (addr);
7044 	
7045 		/* Write out routes */
7046 		route = nm_ip4_route_new ();
7047 		nm_ip4_route_set_dest (route, route_dst1);
7048 		nm_ip4_route_set_prefix (route, prefix);
7049 		nm_ip4_route_set_next_hop (route, route_gw1);
7050 		nm_setting_ip4_config_add_route (s_ip4, route);
7051 		nm_ip4_route_unref (route);
7052 	
7053 		route = nm_ip4_route_new ();
7054 		nm_ip4_route_set_dest (route, route_dst2);
7055 		nm_ip4_route_set_prefix (route, prefix);
7056 		nm_ip4_route_set_next_hop (route, route_gw2);
7057 		nm_ip4_route_set_metric (route, 77);
7058 		nm_setting_ip4_config_add_route (s_ip4, route);
7059 		nm_ip4_route_unref (route);
7060 	
7061 		nm_setting_ip4_config_add_dns (s_ip4, dns1);
7062 		nm_setting_ip4_config_add_dns (s_ip4, dns2);
7063 	
7064 		nm_setting_ip4_config_add_dns_search (s_ip4, dns_search1);
7065 		nm_setting_ip4_config_add_dns_search (s_ip4, dns_search2);
7066 	
7067 		/* IP6 setting */
7068 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7069 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7070 	
7071 		g_object_set (s_ip6,
7072 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7073 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7074 		              NULL);
7075 	
7076 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
7077 		        "wired-static-routes-write", "failed to verify connection: %s",
7078 		        (error && error->message) ? error->message : "(unknown)");
7079 	
7080 		/* Save the ifcfg */
7081 		success = writer_new_connection (connection,
7082 		                                 TEST_SCRATCH_DIR "/network-scripts/",
7083 		                                 &testfile,
7084 		                                 &error);
7085 		ASSERT (success == TRUE,
7086 		        "wired-static-routes-write", "failed to write connection to disk: %s",
7087 		        (error && error->message) ? error->message : "(unknown)");
7088 	
7089 		ASSERT (testfile != NULL,
7090 		        "wired-static-routes-write", "didn't get ifcfg file path back after writing connection");
7091 	
7092 		/* reread will be normalized, so we must normalize connection too. */
7093 		nm_utils_normalize_connection (connection, TRUE);
7094 	
7095 		/* re-read the connection for comparison */
7096 		reread = connection_from_file (testfile,
7097 		                               NULL,
7098 		                               TYPE_ETHERNET,
7099 		                               NULL,
7100 		                               &unmanaged,
7101 		                               &keyfile,
7102 		                               &routefile,
7103 		                               &route6file,
7104 		                               &error,
7105 		                               &ignore_error);
7106 		unlink (testfile);
7107 	
7108 		ASSERT (reread != NULL,
7109 		        "wired-static-routes-write-reread", "failed to read %s: %s", testfile, error->message);
7110 	
7111 		ASSERT (routefile != NULL,
7112 		        "wired-static-routes-write-reread", "expected routefile for '%s'", testfile);
7113 		unlink (routefile);
7114 	
7115 		ASSERT (nm_connection_verify (reread, &error),
7116 		        "wired-static-routes-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
7117 	
7118 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
7119 		        "wired-static-routes-write", "written and re-read connection weren't the same.");
7120 	
7121 		g_free (testfile);
7122 		g_free (unmanaged);
7123 		g_free (keyfile);
7124 		g_free (routefile);
7125 		g_free (route6file);
7126 		g_object_unref (connection);
7127 		g_object_unref (reread);
7128 	}
7129 	
7130 	static void
7131 	test_write_wired_dhcp_8021x_peap_mschapv2 (void)
7132 	{
7133 		NMConnection *connection;
7134 		NMConnection *reread;
7135 		NMSettingConnection *s_con;
7136 		NMSettingWired *s_wired;
7137 		NMSettingIP4Config *s_ip4;
7138 		NMSettingIP6Config *s_ip6;
7139 		NMSetting8021x *s_8021x;
7140 		char *uuid;
7141 		gboolean success;
7142 		GError *error = NULL;
7143 		char *testfile = NULL;
7144 		char *unmanaged = NULL;
7145 		char *keyfile = NULL;
7146 		char *routefile = NULL;
7147 		char *route6file = NULL;
7148 		gboolean ignore_error = FALSE;
7149 	
7150 		connection = nm_connection_new ();
7151 	
7152 		/* Connection setting */
7153 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
7154 		nm_connection_add_setting (connection, NM_SETTING (s_con));
7155 	
7156 		uuid = nm_utils_uuid_generate ();
7157 		g_object_set (s_con,
7158 		              NM_SETTING_CONNECTION_ID, "Test Write Wired DHCP 802.1x PEAP MSCHAPv2",
7159 		              NM_SETTING_CONNECTION_UUID, uuid,
7160 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7161 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
7162 		              NULL);
7163 		g_free (uuid);
7164 	
7165 		/* Wired setting */
7166 		s_wired = (NMSettingWired *) nm_setting_wired_new ();
7167 		nm_connection_add_setting (connection, NM_SETTING (s_wired));
7168 	
7169 		/* IP4 setting */
7170 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7171 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7172 	
7173 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
7174 	
7175 		/* IP6 setting */
7176 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7177 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7178 	
7179 		g_object_set (s_ip6,
7180 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7181 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7182 		              NULL);
7183 	
7184 		/* 802.1x setting */
7185 		s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
7186 		nm_connection_add_setting (connection, NM_SETTING (s_8021x));
7187 	
7188 		g_object_set (s_8021x,
7189 		              NM_SETTING_802_1X_IDENTITY, "Bob Saget",
7190 		              NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "barney",
7191 		              NM_SETTING_802_1X_PASSWORD, "Kids, it was back in October 2008...",
7192 		              NM_SETTING_802_1X_PHASE1_PEAPVER, "1",
7193 		              NM_SETTING_802_1X_PHASE1_PEAPLABEL, "1",
7194 		              NM_SETTING_802_1X_PHASE2_AUTH, "mschapv2",
7195 		              NULL);
7196 	
7197 		nm_setting_802_1x_add_eap_method (s_8021x, "peap");
7198 	
7199 		success = nm_setting_802_1x_set_ca_cert (s_8021x, 
7200 		                                         TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2_CA_CERT,
7201 		                                         NM_SETTING_802_1X_CK_SCHEME_PATH,
7202 		                                         NULL,
7203 		                                         &error);
7204 		ASSERT (success == TRUE,
7205 		        "wired-dhcp-8021x-peap-mschapv2write", "failed to verify connection: %s",
7206 		        (error && error->message) ? error->message : "(unknown)");
7207 	
7208 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
7209 		        "wired-dhcp-8021x-peap-mschapv2write", "failed to verify connection: %s",
7210 		        (error && error->message) ? error->message : "(unknown)");
7211 	
7212 		/* Save the ifcfg */
7213 		success = writer_new_connection (connection,
7214 		                                 TEST_SCRATCH_DIR "/network-scripts/",
7215 		                                 &testfile,
7216 		                                 &error);
7217 		ASSERT (success == TRUE,
7218 		        "wired-dhcp-8021x-peap-mschapv2write", "failed to write connection to disk: %s",
7219 		        (error && error->message) ? error->message : "(unknown)");
7220 	
7221 		ASSERT (testfile != NULL,
7222 		        "wired-dhcp-8021x-peap-mschapv2write", "didn't get ifcfg file path back after writing connection");
7223 	
7224 		/* reread will be normalized, so we must normalize connection too. */
7225 		nm_utils_normalize_connection (connection, TRUE);
7226 	
7227 		/* re-read the connection for comparison */
7228 		reread = connection_from_file (testfile,
7229 		                               NULL,
7230 		                               TYPE_ETHERNET,
7231 		                               NULL,
7232 		                               &unmanaged,
7233 		                               &keyfile,
7234 		                               &routefile,
7235 		                               &route6file,
7236 		                               &error,
7237 		                               &ignore_error);
7238 		unlink (testfile);
7239 	
7240 		ASSERT (reread != NULL,
7241 		        "wired-dhcp-8021x-peap-mschapv2write-reread", "failed to read %s: %s", testfile, error->message);
7242 	
7243 		ASSERT (keyfile != NULL,
7244 		        "wired-dhcp-8021x-peap-mschapv2write-reread", "expected keyfile for '%s'", testfile);
7245 		unlink (keyfile);
7246 	
7247 		ASSERT (nm_connection_verify (reread, &error),
7248 		        "wired-dhcp-8021x-peap-mschapv2write-reread-verify", "failed to verify %s: %s", testfile, error->message);
7249 	
7250 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
7251 		        "wired-dhcp-8021x-peap-mschapv2write", "written and re-read connection weren't the same.");
7252 	
7253 		g_free (testfile);
7254 		g_free (unmanaged);
7255 		g_free (keyfile);
7256 		g_free (routefile);
7257 		g_free (route6file);
7258 		g_object_unref (connection);
7259 		g_object_unref (reread);
7260 	}
7261 	
7262 	#if 0
7263 	static GByteArray *
7264 	file_to_byte_array (const char *filename)
7265 	{
7266 		char *contents;
7267 		GByteArray *array = NULL;
7268 		gsize length = 0;
7269 	
7270 		if (g_file_get_contents (filename, &contents, &length, NULL)) {
7271 			array = g_byte_array_sized_new (length);
7272 			g_byte_array_append (array, (guint8 *) contents, length);
7273 			g_assert (array->len == length);
7274 			g_free (contents);
7275 		}
7276 		return array;
7277 	}
7278 	#endif
7279 	
7280 	#define TEST_IFCFG_WIRED_TLS_CA_CERT TEST_IFCFG_DIR"/network-scripts/test_ca_cert.pem"
7281 	#define TEST_IFCFG_WIRED_TLS_CLIENT_CERT TEST_IFCFG_DIR"/network-scripts/test1_key_and_cert.pem"
7282 	#define TEST_IFCFG_WIRED_TLS_PRIVATE_KEY TEST_IFCFG_DIR"/network-scripts/test1_key_and_cert.pem"
7283 	
7284 	static void
7285 	test_write_wired_8021x_tls (NMSetting8021xCKScheme scheme,
7286 	                            NMSettingSecretFlags flags)
7287 	{
7288 		NMConnection *connection;
7289 		NMConnection *reread;
7290 		NMSettingConnection *s_con;
7291 		NMSettingWired *s_wired;
7292 		NMSettingIP4Config *s_ip4;
7293 		NMSettingIP6Config *s_ip6;
7294 		NMSetting8021x *s_8021x;
7295 		char *uuid;
7296 		gboolean success;
7297 		GError *error = NULL;
7298 		char *testfile = NULL;
7299 		char *unmanaged = NULL;
7300 		char *keyfile = NULL;
7301 		char *routefile = NULL;
7302 		char *route6file = NULL;
7303 		gboolean ignore_error = FALSE;
7304 		NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
7305 		const char *pw;
7306 		char *tmp;
7307 	
7308 		connection = nm_connection_new ();
7309 		g_assert (connection != NULL);
7310 	
7311 		/* Connection setting */
7312 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
7313 		g_assert (s_con);
7314 		nm_connection_add_setting (connection, NM_SETTING (s_con));
7315 	
7316 		uuid = nm_utils_uuid_generate ();
7317 		g_object_set (s_con,
7318 		              NM_SETTING_CONNECTION_ID, "Test Write Wired 802.1x TLS Blobs",
7319 		              NM_SETTING_CONNECTION_UUID, uuid,
7320 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7321 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
7322 		              NULL);
7323 		g_free (uuid);
7324 	
7325 		/* Wired setting */
7326 		s_wired = (NMSettingWired *) nm_setting_wired_new ();
7327 		g_assert (s_wired);
7328 		nm_connection_add_setting (connection, NM_SETTING (s_wired));
7329 	
7330 		/* IP4 setting */
7331 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7332 		g_assert (s_ip4);
7333 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
7334 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7335 	
7336 		/* IP6 setting */
7337 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7338 		g_assert (s_ip6);
7339 		g_object_set (s_ip6,
7340 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7341 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7342 		              NULL);
7343 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7344 	
7345 		/* 802.1x setting */
7346 		s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
7347 		g_assert (s_8021x);
7348 		nm_connection_add_setting (connection, NM_SETTING (s_8021x));
7349 	
7350 		g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
7351 		nm_setting_802_1x_add_eap_method (s_8021x, "tls");
7352 	
7353 		/* CA cert */
7354 		success = nm_setting_802_1x_set_ca_cert (s_8021x,
7355 		                                         TEST_IFCFG_WIRED_TLS_CA_CERT,
7356 		                                         scheme,
7357 		                                         &format,
7358 		                                         &error);
7359 		g_assert_no_error (error);
7360 		g_assert (success);
7361 		g_assert (format == NM_SETTING_802_1X_CK_FORMAT_X509);
7362 	
7363 		/* Client cert */
7364 		format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
7365 		success = nm_setting_802_1x_set_client_cert (s_8021x,
7366 		                                             TEST_IFCFG_WIRED_TLS_CLIENT_CERT,
7367 		                                             scheme,
7368 		                                             &format,
7369 		                                             &error);
7370 		g_assert_no_error (error);
7371 		g_assert (success);
7372 		g_assert (format == NM_SETTING_802_1X_CK_FORMAT_X509);
7373 	
7374 		/* Private key */
7375 		format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
7376 		success = nm_setting_802_1x_set_private_key (s_8021x,
7377 		                                             TEST_IFCFG_WIRED_TLS_PRIVATE_KEY,
7378 		                                             "test1",
7379 		                                             scheme,
7380 		                                             &format,
7381 		                                             &error);
7382 		g_assert_no_error (error);
7383 		g_assert (success);
7384 		g_assert (format == NM_SETTING_802_1X_CK_FORMAT_RAW_KEY);
7385 	
7386 		/* Set secret flags */
7387 		g_object_set (s_8021x, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS, flags, NULL);
7388 	
7389 		/* Verify finished connection */
7390 		success = nm_connection_verify (connection, &error);
7391 		if (!success) {
7392 			g_assert (error);
7393 			g_warning ("Failed to verify connection: %s", error->message);
7394 		}
7395 		g_assert (success);
7396 	
7397 		/* Save the ifcfg */
7398 		success = writer_new_connection (connection,
7399 		                                 TEST_SCRATCH_DIR "/network-scripts/",
7400 		                                 &testfile,
7401 		                                 &error);
7402 		if (!success) {
7403 			g_assert (error);
7404 			g_warning ("Failed to write connection: %s", error->message);
7405 		}
7406 		g_assert (success);
7407 		g_assert (testfile != NULL);
7408 	
7409 		/* reread will be normalized, so we must normalize connection too. */
7410 		nm_utils_normalize_connection (connection, TRUE);
7411 	
7412 		/* re-read the connection for comparison */
7413 		reread = connection_from_file (testfile,
7414 		                               NULL,
7415 		                               TYPE_WIRELESS,
7416 		                               NULL,
7417 		                               &unmanaged,
7418 		                               &keyfile,
7419 		                               &routefile,
7420 		                               &route6file,
7421 		                               &error,
7422 		                               &ignore_error);
7423 		unlink (testfile);
7424 		g_assert (keyfile != NULL);
7425 		unlink (keyfile);
7426 	
7427 		g_assert (reread != NULL);
7428 	
7429 		success = nm_connection_verify (reread, &error);
7430 		if (!success) {
7431 			g_assert (error);
7432 			g_warning ("Failed to verify %s: %s", testfile, error->message);
7433 		}
7434 		g_assert (success);
7435 	
7436 		/* Ensure the reread connection's certificates and private key are paths; no
7437 		 * matter what scheme was used in the original connection they will be read
7438 		 * back in as paths.
7439 		 */
7440 		s_8021x = nm_connection_get_setting_802_1x (reread);
7441 		g_assert (s_8021x);
7442 		g_assert_cmpint (nm_setting_802_1x_get_ca_cert_scheme (s_8021x), ==, NM_SETTING_802_1X_CK_SCHEME_PATH);
7443 		g_assert_cmpint (nm_setting_802_1x_get_client_cert_scheme (s_8021x), ==, NM_SETTING_802_1X_CK_SCHEME_PATH);
7444 		g_assert_cmpint (nm_setting_802_1x_get_private_key_scheme (s_8021x), ==, NM_SETTING_802_1X_CK_SCHEME_PATH);
7445 	
7446 		g_assert_cmpint (nm_setting_802_1x_get_private_key_password_flags (s_8021x), ==, flags);
7447 		pw = nm_setting_802_1x_get_private_key_password (s_8021x);
7448 		if (flags == NM_SETTING_SECRET_FLAG_NONE) {
7449 			/* Ensure the private key password is still set */
7450 			g_assert (pw != NULL);
7451 			g_assert_cmpstr (pw, ==, "test1");
7452 		} else {
7453 			/* If the secret isn't owned by system settings, make sure its no longer there */
7454 			g_assert (pw == NULL);
7455 		}
7456 	
7457 		if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) {
7458 			/* Do a direct compare if using the path scheme since then the
7459 			 * certificate and key properties should be the same.  If using blob
7460 			 * scheme the original connection cert/key properties will be blobs
7461 			 * but the re-read connection is always path scheme, so we wouldn't
7462 			 * expect it to compare successfully.
7463 			 */
7464 			if (flags != NM_SETTING_SECRET_FLAG_NONE) {
7465 				/* Clear original connection's private key password because flags
7466 				 * say it's not system-owned, and therefore it should not show up
7467 				 * in the re-read connection.
7468 				 */
7469 				s_8021x = nm_connection_get_setting_802_1x (connection);
7470 				g_object_set (s_8021x, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD, NULL, NULL);
7471 			}
7472 	
7473 			g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
7474 		}
7475 	
7476 		/* Clean up created certs and keys */
7477 		tmp = utils_cert_path (testfile, "ca-cert.der");
7478 		unlink (tmp);
7479 		g_free (tmp);
7480 	
7481 		tmp = utils_cert_path (testfile, "client-cert.der");
7482 		unlink (tmp);
7483 		g_free (tmp);
7484 	
7485 		tmp = utils_cert_path (testfile, "private-key.pem");
7486 		unlink (tmp);
7487 		g_free (tmp);
7488 	
7489 		g_free (testfile);
7490 		g_free (unmanaged);
7491 		g_free (keyfile);
7492 		g_free (routefile);
7493 		g_free (route6file);
7494 		g_object_unref (connection);
7495 		g_object_unref (reread);
7496 	}
7497 	
7498 	static void
7499 	test_write_wifi_open (void)
7500 	{
7501 		NMConnection *connection;
7502 		NMConnection *reread;
7503 		NMSettingConnection *s_con;
7504 		NMSettingWireless *s_wifi;
7505 		NMSettingIP4Config *s_ip4;
7506 		NMSettingIP6Config *s_ip6;
7507 		char *uuid;
7508 		gboolean success;
7509 		GError *error = NULL;
7510 		char *testfile = NULL;
7511 		char *unmanaged = NULL;
7512 		char *keyfile = NULL;
7513 		char *routefile = NULL;
7514 		char *route6file = NULL;
7515 		gboolean ignore_error = FALSE;
7516 		GByteArray *ssid;
7517 		const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 };
7518 		GByteArray *bssid;
7519 		const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
7520 		guint32 channel = 9, mtu = 1345;
7521 		GByteArray *mac;
7522 		const unsigned char mac_data[] = { 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff };
7523 		shvarFile *ifcfg;
7524 		char *tmp;
7525 	
7526 		connection = nm_connection_new ();
7527 	
7528 		/* Connection setting */
7529 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
7530 		nm_connection_add_setting (connection, NM_SETTING (s_con));
7531 	
7532 		uuid = nm_utils_uuid_generate ();
7533 		g_object_set (s_con,
7534 		              NM_SETTING_CONNECTION_ID, "Test Write Wifi Open",
7535 		              NM_SETTING_CONNECTION_UUID, uuid,
7536 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7537 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
7538 		              NULL);
7539 		g_free (uuid);
7540 	
7541 		/* Wifi setting */
7542 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
7543 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
7544 	
7545 		ssid = g_byte_array_sized_new (sizeof (ssid_data));
7546 		g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
7547 		bssid = g_byte_array_sized_new (sizeof (bssid_data));
7548 		g_byte_array_append (bssid, bssid_data, sizeof (bssid_data));
7549 		mac = g_byte_array_sized_new (sizeof (mac_data));
7550 		g_byte_array_append (mac, mac_data, sizeof (mac_data));
7551 	
7552 		g_object_set (s_wifi,
7553 		              NM_SETTING_WIRELESS_SSID, ssid,
7554 		              NM_SETTING_WIRELESS_BSSID, bssid,
7555 		              NM_SETTING_WIRELESS_MAC_ADDRESS, mac,
7556 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
7557 		              NM_SETTING_WIRELESS_BAND, "bg",
7558 		              NM_SETTING_WIRELESS_CHANNEL, channel,
7559 		              NM_SETTING_WIRELESS_MTU, mtu,
7560 		              NULL);
7561 	
7562 		g_byte_array_free (ssid, TRUE);
7563 		g_byte_array_free (bssid, TRUE);
7564 		g_byte_array_free (mac, TRUE);
7565 	
7566 		/* IP4 setting */
7567 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7568 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7569 	
7570 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
7571 	
7572 		/* IP6 setting */
7573 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7574 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7575 	
7576 		g_object_set (s_ip6,
7577 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7578 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7579 		              NULL);
7580 	
7581 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
7582 		        "wifi-open-write", "failed to verify connection: %s",
7583 		        (error && error->message) ? error->message : "(unknown)");
7584 	
7585 		/* Save the ifcfg */
7586 		success = writer_new_connection (connection,
7587 		                                 TEST_SCRATCH_DIR "/network-scripts/",
7588 		                                 &testfile,
7589 		                                 &error);
7590 		ASSERT (success == TRUE,
7591 		        "wifi-open-write", "failed to write connection to disk: %s",
7592 		        (error && error->message) ? error->message : "(unknown)");
7593 	
7594 		ASSERT (testfile != NULL,
7595 		        "wifi-open-write", "didn't get ifcfg file path back after writing connection");
7596 	
7597 		/* reread will be normalized, so we must normalize connection too. */
7598 		nm_utils_normalize_connection (connection, TRUE);
7599 	
7600 		/* re-read the connection for comparison */
7601 		reread = connection_from_file (testfile,
7602 		                               NULL,
7603 		                               TYPE_WIRELESS,
7604 		                               NULL,
7605 		                               &unmanaged,
7606 		                               &keyfile,
7607 		                               &routefile,
7608 		                               &route6file,
7609 		                               &error,
7610 		                               &ignore_error);
7611 	
7612 		/* Now make sure that the ESSID item isn't double-quoted (rh #606518) */
7613 		ifcfg = svNewFile (testfile);
7614 		ASSERT (ifcfg != NULL,
7615 		        "wifi-open-write-reread", "failed to load %s as shvarfile", testfile);
7616 	
7617 		tmp = svGetValue (ifcfg, "ESSID", TRUE);
7618 		ASSERT (tmp != NULL,
7619 		        "wifi-open-write-reread", "failed to read ESSID key from %s", testfile);
7620 	
7621 		ASSERT (strncmp (tmp, "\"\"", 2) != 0,
7622 		        "wifi-open-write-reread", "unexpected ESSID double-quote in %s", testfile);
7623 	
7624 		g_free (tmp);
7625 		svCloseFile (ifcfg);
7626 	
7627 		unlink (testfile);
7628 	
7629 		ASSERT (reread != NULL,
7630 		        "wifi-open-write-reread", "failed to read %s: %s", testfile, error->message);
7631 	
7632 		ASSERT (nm_connection_verify (reread, &error),
7633 		        "wifi-open-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
7634 	
7635 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
7636 		        "wifi-open-write", "written and re-read connection weren't the same.");
7637 	
7638 		g_free (testfile);
7639 		g_free (unmanaged);
7640 		g_free (keyfile);
7641 		g_free (routefile);
7642 		g_free (route6file);
7643 		g_object_unref (connection);
7644 		g_object_unref (reread);
7645 	}
7646 	
7647 	static void
7648 	test_write_wifi_open_hex_ssid (void)
7649 	{
7650 		NMConnection *connection;
7651 		NMConnection *reread;
7652 		NMSettingConnection *s_con;
7653 		NMSettingWireless *s_wifi;
7654 		NMSettingIP4Config *s_ip4;
7655 		NMSettingIP6Config *s_ip6;
7656 		char *uuid;
7657 		gboolean success;
7658 		GError *error = NULL;
7659 		char *testfile = NULL;
7660 		char *unmanaged = NULL;
7661 		char *keyfile = NULL;
7662 		char *routefile = NULL;
7663 		char *route6file = NULL;
7664 		gboolean ignore_error = FALSE;
7665 		GByteArray *ssid;
7666 		const unsigned char ssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd };
7667 	
7668 		connection = nm_connection_new ();
7669 	
7670 		/* Connection setting */
7671 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
7672 		nm_connection_add_setting (connection, NM_SETTING (s_con));
7673 	
7674 		uuid = nm_utils_uuid_generate ();
7675 		g_object_set (s_con,
7676 		              NM_SETTING_CONNECTION_ID, "Test Write Wifi Open Hex SSID",
7677 		              NM_SETTING_CONNECTION_UUID, uuid,
7678 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7679 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
7680 		              NULL);
7681 		g_free (uuid);
7682 	
7683 		/* Wifi setting */
7684 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
7685 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
7686 	
7687 		ssid = g_byte_array_sized_new (sizeof (ssid_data));
7688 		g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
7689 	
7690 		g_object_set (s_wifi,
7691 		              NM_SETTING_WIRELESS_SSID, ssid,
7692 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
7693 		              NULL);
7694 	
7695 		g_byte_array_free (ssid, TRUE);
7696 	
7697 		/* IP4 setting */
7698 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7699 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7700 	
7701 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
7702 	
7703 		/* IP6 setting */
7704 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7705 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7706 	
7707 		g_object_set (s_ip6,
7708 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7709 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7710 		              NULL);
7711 	
7712 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
7713 		        "wifi-open-hex-ssid-write", "failed to verify connection: %s",
7714 		        (error && error->message) ? error->message : "(unknown)");
7715 	
7716 		/* Save the ifcfg */
7717 		success = writer_new_connection (connection,
7718 		                                 TEST_SCRATCH_DIR "/network-scripts/",
7719 		                                 &testfile,
7720 		                                 &error);
7721 		ASSERT (success == TRUE,
7722 		        "wifi-open-hex-ssid-write", "failed to write connection to disk: %s",
7723 		        (error && error->message) ? error->message : "(unknown)");
7724 	
7725 		ASSERT (testfile != NULL,
7726 		        "wifi-open-hex-ssid-write", "didn't get ifcfg file path back after writing connection");
7727 	
7728 		/* reread will be normalized, so we must normalize connection too. */
7729 		nm_utils_normalize_connection (connection, TRUE);
7730 	
7731 		/* re-read the connection for comparison */
7732 		reread = connection_from_file (testfile,
7733 		                               NULL,
7734 		                               TYPE_WIRELESS,
7735 		                               NULL,
7736 		                               &unmanaged,
7737 		                               &keyfile,
7738 		                               &routefile,
7739 		                               &route6file,
7740 		                               &error,
7741 		                               &ignore_error);
7742 		unlink (testfile);
7743 	
7744 		ASSERT (reread != NULL,
7745 		        "wifi-open-hex-ssid-write-reread", "failed to read %s: %s", testfile, error->message);
7746 	
7747 		ASSERT (nm_connection_verify (reread, &error),
7748 		        "wifi-open-hex-ssid-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
7749 	
7750 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
7751 		        "wifi-open-hex-ssid-write", "written and re-read connection weren't the same.");
7752 	
7753 		g_free (testfile);
7754 		g_free (unmanaged);
7755 		g_free (keyfile);
7756 		g_free (routefile);
7757 		g_free (route6file);
7758 		g_object_unref (connection);
7759 		g_object_unref (reread);
7760 	}
7761 	
7762 	static void
7763 	test_write_wifi_wep (void)
7764 	{
7765 		NMConnection *connection;
7766 		NMConnection *reread;
7767 		NMSettingConnection *s_con;
7768 		NMSettingWireless *s_wifi;
7769 		NMSettingWirelessSecurity *s_wsec;
7770 		NMSettingIP4Config *s_ip4;
7771 		NMSettingIP6Config *s_ip6;
7772 		char *uuid;
7773 		gboolean success;
7774 		GError *error = NULL;
7775 		char *testfile = NULL;
7776 		char *unmanaged = NULL;
7777 		char *keyfile = NULL;
7778 		char *routefile = NULL;
7779 		char *route6file = NULL;
7780 		gboolean ignore_error = FALSE;
7781 		GByteArray *ssid;
7782 		const unsigned char ssid_data[] = "blahblah";
7783 		struct stat statbuf;
7784 	
7785 		connection = nm_connection_new ();
7786 	
7787 		/* Connection setting */
7788 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
7789 		nm_connection_add_setting (connection, NM_SETTING (s_con));
7790 	
7791 		uuid = nm_utils_uuid_generate ();
7792 		g_object_set (s_con,
7793 		              NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP",
7794 		              NM_SETTING_CONNECTION_UUID, uuid,
7795 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7796 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
7797 		              NULL);
7798 		g_free (uuid);
7799 	
7800 		/* Wifi setting */
7801 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
7802 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
7803 	
7804 		ssid = g_byte_array_sized_new (sizeof (ssid_data));
7805 		g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
7806 	
7807 		g_object_set (s_wifi,
7808 		              NM_SETTING_WIRELESS_SSID, ssid,
7809 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
7810 		              NULL);
7811 	
7812 		g_byte_array_free (ssid, TRUE);
7813 	
7814 		/* Wireless security setting */
7815 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
7816 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
7817 	
7818 		g_object_set (s_wsec,
7819 		              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
7820 		              NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, 2,
7821 		              NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "shared",
7822 		              NULL);
7823 		nm_setting_wireless_security_set_wep_key (s_wsec, 0, "0123456789abcdef0123456789");
7824 		nm_setting_wireless_security_set_wep_key (s_wsec, 1, "11111111111111111111111111");
7825 		nm_setting_wireless_security_set_wep_key (s_wsec, 2, "aaaaaaaaaaaaaaaaaaaaaaaaaa");
7826 		nm_setting_wireless_security_set_wep_key (s_wsec, 3, "BBBBBBBBBBBBBBBBBBBBBBBBBB");
7827 	
7828 		/* IP4 setting */
7829 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7830 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7831 	
7832 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
7833 	
7834 		/* IP6 setting */
7835 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7836 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7837 	
7838 		g_object_set (s_ip6,
7839 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7840 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7841 		              NULL);
7842 	
7843 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
7844 		        "wifi-wep-write", "failed to verify connection: %s",
7845 		        (error && error->message) ? error->message : "(unknown)");
7846 	
7847 		/* Save the ifcfg */
7848 		success = writer_new_connection (connection,
7849 		                                 TEST_SCRATCH_DIR "/network-scripts/",
7850 		                                 &testfile,
7851 		                                 &error);
7852 		ASSERT (success == TRUE,
7853 		        "wifi-wep-write", "failed to write connection to disk: %s",
7854 		        (error && error->message) ? error->message : "(unknown)");
7855 	
7856 		ASSERT (testfile != NULL,
7857 		        "wifi-wep-write", "didn't get ifcfg file path back after writing connection");
7858 	
7859 		/* reread will be normalized, so we must normalize connection too. */
7860 		nm_utils_normalize_connection (connection, TRUE);
7861 	
7862 		/* re-read the connection for comparison */
7863 		reread = connection_from_file (testfile,
7864 		                               NULL,
7865 		                               TYPE_WIRELESS,
7866 		                               NULL,
7867 		                               &unmanaged,
7868 		                               &keyfile,
7869 		                               &routefile,
7870 		                               &route6file,
7871 		                               &error,
7872 		                               &ignore_error);
7873 		unlink (testfile);
7874 	
7875 		ASSERT (keyfile != NULL,
7876 		        "wifi-wep-write-reread", "expected keyfile for '%s'", testfile);
7877 	
7878 		ASSERT (stat (keyfile, &statbuf) == 0,
7879 		        "wifi-wep-write-reread", "couldn't stat() '%s'", keyfile);
7880 		ASSERT (S_ISREG (statbuf.st_mode),
7881 		        "wifi-wep-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
7882 		ASSERT ((statbuf.st_mode & 0077) == 0,
7883 		        "wifi-wep-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
7884 	
7885 		unlink (keyfile);
7886 	
7887 		ASSERT (reread != NULL,
7888 		        "wifi-wep-write-reread", "failed to read %s: %s", testfile, error->message);
7889 	
7890 		ASSERT (nm_connection_verify (reread, &error),
7891 		        "wifi-wep-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
7892 	
7893 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
7894 		        "wifi-wep-write", "written and re-read connection weren't the same.");
7895 	
7896 		g_free (testfile);
7897 		g_free (unmanaged);
7898 		g_free (keyfile);
7899 		g_free (routefile);
7900 		g_free (route6file);
7901 		g_object_unref (connection);
7902 		g_object_unref (reread);
7903 	}
7904 	
7905 	static void
7906 	test_write_wifi_wep_adhoc (void)
7907 	{
7908 		NMConnection *connection;
7909 		NMConnection *reread;
7910 		NMSettingConnection *s_con;
7911 		NMSettingWireless *s_wifi;
7912 		NMSettingWirelessSecurity *s_wsec;
7913 		NMSettingIP4Config *s_ip4;
7914 		NMSettingIP6Config *s_ip6;
7915 		char *uuid;
7916 		gboolean success;
7917 		GError *error = NULL;
7918 		char *testfile = NULL;
7919 		char *unmanaged = NULL;
7920 		char *keyfile = NULL;
7921 		char *routefile = NULL;
7922 		char *route6file = NULL;
7923 		gboolean ignore_error = FALSE;
7924 		GByteArray *ssid;
7925 		const unsigned char ssid_data[] = "blahblah";
7926 		struct stat statbuf;
7927 		NMIP4Address *addr;
7928 		const guint32 ip1 = htonl (0x01010103);
7929 		const guint32 gw = htonl (0x01010101);
7930 		const guint32 dns1 = htonl (0x04020201);
7931 		const guint32 prefix = 24;
7932 	
7933 		connection = nm_connection_new ();
7934 	
7935 		/* Connection setting */
7936 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
7937 		nm_connection_add_setting (connection, NM_SETTING (s_con));
7938 	
7939 		uuid = nm_utils_uuid_generate ();
7940 		g_object_set (s_con,
7941 		              NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP AdHoc",
7942 		              NM_SETTING_CONNECTION_UUID, uuid,
7943 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7944 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
7945 		              NULL);
7946 		g_free (uuid);
7947 	
7948 		/* Wifi setting */
7949 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
7950 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
7951 	
7952 		ssid = g_byte_array_sized_new (sizeof (ssid_data));
7953 		g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
7954 	
7955 		g_object_set (s_wifi,
7956 		              NM_SETTING_WIRELESS_SSID, ssid,
7957 		              NM_SETTING_WIRELESS_MODE, "adhoc",
7958 		              NULL);
7959 	
7960 		g_byte_array_free (ssid, TRUE);
7961 	
7962 		/* Wireless security setting */
7963 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
7964 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
7965 	
7966 		g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none", NULL);
7967 		nm_setting_wireless_security_set_wep_key (s_wsec, 0, "0123456789abcdef0123456789");
7968 	
7969 		/* IP4 setting */
7970 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7971 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7972 	
7973 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL);
7974 	
7975 		/* IP Address */
7976 		addr = nm_ip4_address_new ();
7977 		nm_ip4_address_set_address (addr, ip1);
7978 		nm_ip4_address_set_prefix (addr, prefix);
7979 		nm_ip4_address_set_gateway (addr, gw);
7980 		nm_setting_ip4_config_add_address (s_ip4, addr);
7981 		nm_ip4_address_unref (addr);
7982 	
7983 		nm_setting_ip4_config_add_dns (s_ip4, dns1);
7984 	
7985 		/* IP6 setting */
7986 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7987 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7988 	
7989 		g_object_set (s_ip6,
7990 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7991 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7992 		              NULL);
7993 	
7994 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
7995 		        "wifi-wep-adhoc-write", "failed to verify connection: %s",
7996 		        (error && error->message) ? error->message : "(unknown)");
7997 	
7998 		/* Save the ifcfg */
7999 		success = writer_new_connection (connection,
8000 		                                 TEST_SCRATCH_DIR "/network-scripts/",
8001 		                                 &testfile,
8002 		                                 &error);
8003 		ASSERT (success == TRUE,
8004 		        "wifi-wep-adhoc-write", "failed to write connection to disk: %s",
8005 		        (error && error->message) ? error->message : "(unknown)");
8006 	
8007 		ASSERT (testfile != NULL,
8008 		        "wifi-wep-adhoc-write", "didn't get ifcfg file path back after writing connection");
8009 	
8010 		/* reread will be normalized, so we must normalize connection too. */
8011 		nm_utils_normalize_connection (connection, TRUE);
8012 	
8013 		/* re-read the connection for comparison */
8014 		reread = connection_from_file (testfile,
8015 		                               NULL,
8016 		                               TYPE_WIRELESS,
8017 		                               NULL,
8018 		                               &unmanaged,
8019 		                               &keyfile,
8020 		                               &routefile,
8021 		                               &route6file,
8022 		                               &error,
8023 		                               &ignore_error);
8024 		unlink (testfile);
8025 	
8026 		ASSERT (keyfile != NULL,
8027 		        "wifi-wep-adhoc-write-reread", "expected keyfile for '%s'", testfile);
8028 	
8029 		ASSERT (stat (keyfile, &statbuf) == 0,
8030 		        "wifi-wep-adhoc-write-reread", "couldn't stat() '%s'", keyfile);
8031 		ASSERT (S_ISREG (statbuf.st_mode),
8032 		        "wifi-wep-adhoc-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
8033 		ASSERT ((statbuf.st_mode & 0077) == 0,
8034 		        "wifi-wep-adhoc-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
8035 	
8036 		unlink (keyfile);
8037 	
8038 		ASSERT (reread != NULL,
8039 		        "wifi-wep-adhoc-write-reread", "failed to read %s: %s", testfile, error->message);
8040 	
8041 		ASSERT (nm_connection_verify (reread, &error),
8042 		        "wifi-wep-adhoc-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
8043 	
8044 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
8045 		        "wifi-wep-adhoc-write", "written and re-read connection weren't the same.");
8046 	
8047 		g_free (testfile);
8048 		g_free (unmanaged);
8049 		g_free (keyfile);
8050 		g_free (routefile);
8051 		g_free (route6file);
8052 		g_object_unref (connection);
8053 		g_object_unref (reread);
8054 	}
8055 	
8056 	static void
8057 	test_write_wifi_wep_passphrase (void)
8058 	{
8059 		NMConnection *connection;
8060 		NMConnection *reread;
8061 		NMSettingConnection *s_con;
8062 		NMSettingWireless *s_wifi;
8063 		NMSettingWirelessSecurity *s_wsec;
8064 		NMSettingIP4Config *s_ip4;
8065 		NMSettingIP6Config *s_ip6;
8066 		char *uuid;
8067 		gboolean success;
8068 		GError *error = NULL;
8069 		char *testfile = NULL;
8070 		char *unmanaged = NULL;
8071 		char *keyfile = NULL;
8072 		char *routefile = NULL;
8073 		char *route6file = NULL;
8074 		gboolean ignore_error = FALSE;
8075 		GByteArray *ssid;
8076 		const unsigned char ssid_data[] = "blahblah";
8077 		struct stat statbuf;
8078 	
8079 		connection = nm_connection_new ();
8080 	
8081 		/* Connection setting */
8082 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
8083 		nm_connection_add_setting (connection, NM_SETTING (s_con));
8084 	
8085 		uuid = nm_utils_uuid_generate ();
8086 		g_object_set (s_con,
8087 		              NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP Passphrase",
8088 		              NM_SETTING_CONNECTION_UUID, uuid,
8089 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
8090 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8091 		              NULL);
8092 		g_free (uuid);
8093 	
8094 		/* Wifi setting */
8095 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8096 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8097 	
8098 		ssid = g_byte_array_sized_new (sizeof (ssid_data));
8099 		g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8100 	
8101 		g_object_set (s_wifi,
8102 		              NM_SETTING_WIRELESS_SSID, ssid,
8103 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
8104 		              NULL);
8105 	
8106 		g_byte_array_free (ssid, TRUE);
8107 	
8108 		/* Wireless security setting */
8109 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8110 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8111 	
8112 		g_object_set (s_wsec,
8113 		              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
8114 		              NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, 0,
8115 		              NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "shared",
8116 		              NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_PASSPHRASE,
8117 		              NULL);
8118 		nm_setting_wireless_security_set_wep_key (s_wsec, 0, "asdfdjaslfjasd;flasjdfl;aksdf");
8119 	
8120 		/* IP4 setting */
8121 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8122 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8123 	
8124 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
8125 	
8126 		/* IP6 setting */
8127 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
8128 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
8129 	
8130 		g_object_set (s_ip6,
8131 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
8132 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
8133 		              NULL);
8134 	
8135 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
8136 		        "wifi-wep-passphrase-write", "failed to verify connection: %s",
8137 		        (error && error->message) ? error->message : "(unknown)");
8138 	
8139 		/* Save the ifcfg */
8140 		success = writer_new_connection (connection,
8141 		                                 TEST_SCRATCH_DIR "/network-scripts/",
8142 		                                 &testfile,
8143 		                                 &error);
8144 		ASSERT (success == TRUE,
8145 		        "wifi-wep-passphrase-write", "failed to write connection to disk: %s",
8146 		        (error && error->message) ? error->message : "(unknown)");
8147 	
8148 		ASSERT (testfile != NULL,
8149 		        "wifi-wep-passphrase-write", "didn't get ifcfg file path back after writing connection");
8150 	
8151 		/* reread will be normalized, so we must normalize connection too. */
8152 		nm_utils_normalize_connection (connection, TRUE);
8153 	
8154 		/* re-read the connection for comparison */
8155 		reread = connection_from_file (testfile,
8156 		                               NULL,
8157 		                               TYPE_WIRELESS,
8158 		                               NULL,
8159 		                               &unmanaged,
8160 		                               &keyfile,
8161 		                               &routefile,
8162 		                               &route6file,
8163 		                               &error,
8164 		                               &ignore_error);
8165 		unlink (testfile);
8166 	
8167 		ASSERT (keyfile != NULL,
8168 		        "wifi-wep-passphrase-write-reread", "expected keyfile for '%s'", testfile);
8169 	
8170 		ASSERT (stat (keyfile, &statbuf) == 0,
8171 		        "wifi-wep-passphrase-write-reread", "couldn't stat() '%s'", keyfile);
8172 		ASSERT (S_ISREG (statbuf.st_mode),
8173 		        "wifi-wep-passphrase-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
8174 		ASSERT ((statbuf.st_mode & 0077) == 0,
8175 		        "wifi-wep-passphrase-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
8176 	
8177 		unlink (keyfile);
8178 	
8179 		ASSERT (reread != NULL,
8180 		        "wifi-wep-passphrase-write-reread", "failed to read %s: %s", testfile, error->message);
8181 	
8182 		ASSERT (nm_connection_verify (reread, &error),
8183 		        "wifi-wep-passphrase-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
8184 	
8185 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
8186 		        "wifi-wep-passphrase-write", "written and re-read connection weren't the same.");
8187 	
8188 		g_free (testfile);
8189 		g_free (unmanaged);
8190 		g_free (keyfile);
8191 		g_free (routefile);
8192 		g_free (route6file);
8193 		g_object_unref (connection);
8194 		g_object_unref (reread);
8195 	}
8196 	
8197 	static void
8198 	test_write_wifi_wep_40_ascii (void)
8199 	{
8200 		NMConnection *connection;
8201 		NMConnection *reread;
8202 		NMSettingConnection *s_con;
8203 		NMSettingWireless *s_wifi;
8204 		NMSettingWirelessSecurity *s_wsec;
8205 		NMSettingIP4Config *s_ip4;
8206 		NMSettingIP6Config *s_ip6;
8207 		char *uuid;
8208 		gboolean success;
8209 		GError *error = NULL;
8210 		char *testfile = NULL;
8211 		char *unmanaged = NULL;
8212 		char *keyfile = NULL;
8213 		char *routefile = NULL;
8214 		char *route6file = NULL;
8215 		gboolean ignore_error = FALSE;
8216 		GByteArray *ssid;
8217 		const unsigned char ssid_data[] = "blahblah40";
8218 		struct stat statbuf;
8219 	
8220 		connection = nm_connection_new ();
8221 	
8222 		/* Connection setting */
8223 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
8224 		nm_connection_add_setting (connection, NM_SETTING (s_con));
8225 	
8226 		uuid = nm_utils_uuid_generate ();
8227 		g_object_set (s_con,
8228 		              NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP 40 ASCII",
8229 		              NM_SETTING_CONNECTION_UUID, uuid,
8230 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
8231 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8232 		              NULL);
8233 		g_free (uuid);
8234 	
8235 		/* Wifi setting */
8236 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8237 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8238 	
8239 		ssid = g_byte_array_sized_new (sizeof (ssid_data));
8240 		g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8241 	
8242 		g_object_set (s_wifi,
8243 		              NM_SETTING_WIRELESS_SSID, ssid,
8244 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
8245 		              NULL);
8246 	
8247 		g_byte_array_free (ssid, TRUE);
8248 	
8249 		/* Wireless security setting */
8250 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8251 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8252 	
8253 		g_object_set (s_wsec,
8254 		              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
8255 		              NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, 2,
8256 		              NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "shared",
8257 		              NULL);
8258 		nm_setting_wireless_security_set_wep_key (s_wsec, 0, "lorem");
8259 		nm_setting_wireless_security_set_wep_key (s_wsec, 1, "ipsum");
8260 		nm_setting_wireless_security_set_wep_key (s_wsec, 2, "dolor");
8261 		nm_setting_wireless_security_set_wep_key (s_wsec, 3, "donec");
8262 	
8263 		/* IP4 setting */
8264 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8265 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8266 	
8267 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
8268 	
8269 		/* IP6 setting */
8270 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
8271 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
8272 	
8273 		g_object_set (s_ip6,
8274 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
8275 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
8276 		              NULL);
8277 	
8278 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
8279 		        "wifi-wep-40-ascii-write", "failed to verify connection: %s",
8280 		        (error && error->message) ? error->message : "(unknown)");
8281 	
8282 		/* Save the ifcfg */
8283 		success = writer_new_connection (connection,
8284 		                                 TEST_SCRATCH_DIR "/network-scripts/",
8285 		                                 &testfile,
8286 		                                 &error);
8287 		ASSERT (success == TRUE,
8288 		        "wifi-wep-40-ascii-write", "failed to write connection to disk: %s",
8289 		        (error && error->message) ? error->message : "(unknown)");
8290 	
8291 		ASSERT (testfile != NULL,
8292 		        "wifi-wep-40-ascii-write", "didn't get ifcfg file path back after writing connection");
8293 	
8294 		/* reread will be normalized, so we must normalize connection too. */
8295 		nm_utils_normalize_connection (connection, TRUE);
8296 	
8297 		/* re-read the connection for comparison */
8298 		reread = connection_from_file (testfile,
8299 		                               NULL,
8300 		                               TYPE_WIRELESS,
8301 		                               NULL,
8302 		                               &unmanaged,
8303 		                               &keyfile,
8304 		                               &routefile,
8305 		                               &route6file,
8306 		                               &error,
8307 		                               &ignore_error);
8308 		unlink (testfile);
8309 	
8310 		ASSERT (keyfile != NULL,
8311 		        "wifi-wep-40-ascii-write-reread", "expected keyfile for '%s'", testfile);
8312 	
8313 		ASSERT (stat (keyfile, &statbuf) == 0,
8314 		        "wifi-wep-40-ascii-write-reread", "couldn't stat() '%s'", keyfile);
8315 		ASSERT (S_ISREG (statbuf.st_mode),
8316 		        "wifi-wep-40-ascii-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
8317 		ASSERT ((statbuf.st_mode & 0077) == 0,
8318 		        "wifi-wep-40-ascii-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
8319 	
8320 		unlink (keyfile);
8321 	
8322 		ASSERT (reread != NULL,
8323 		        "wifi-wep-40-ascii-write-reread", "failed to read %s: %s", testfile, error->message);
8324 	
8325 		ASSERT (nm_connection_verify (reread, &error),
8326 		        "wifi-wep-40-ascii-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
8327 	
8328 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
8329 		        "wifi-wep-40-ascii-write", "written and re-read connection weren't the same.");
8330 	
8331 		g_free (testfile);
8332 		g_free (unmanaged);
8333 		g_free (keyfile);
8334 		g_free (routefile);
8335 		g_free (route6file);
8336 		g_object_unref (connection);
8337 		g_object_unref (reread);
8338 	}
8339 	
8340 	static void
8341 	test_write_wifi_wep_104_ascii (void)
8342 	{
8343 		NMConnection *connection;
8344 		NMConnection *reread;
8345 		NMSettingConnection *s_con;
8346 		NMSettingWireless *s_wifi;
8347 		NMSettingWirelessSecurity *s_wsec;
8348 		NMSettingIP4Config *s_ip4;
8349 		NMSettingIP6Config *s_ip6;
8350 		char *uuid;
8351 		gboolean success;
8352 		GError *error = NULL;
8353 		char *testfile = NULL;
8354 		char *unmanaged = NULL;
8355 		char *keyfile = NULL;
8356 		char *routefile = NULL;
8357 		char *route6file = NULL;
8358 		gboolean ignore_error = FALSE;
8359 		GByteArray *ssid;
8360 		const unsigned char ssid_data[] = "blahblah104";
8361 		struct stat statbuf;
8362 	
8363 		connection = nm_connection_new ();
8364 	
8365 		/* Connection setting */
8366 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
8367 		nm_connection_add_setting (connection, NM_SETTING (s_con));
8368 	
8369 		uuid = nm_utils_uuid_generate ();
8370 		g_object_set (s_con,
8371 		              NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP 104 ASCII",
8372 		              NM_SETTING_CONNECTION_UUID, uuid,
8373 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
8374 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8375 		              NULL);
8376 		g_free (uuid);
8377 	
8378 		/* Wifi setting */
8379 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8380 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8381 	
8382 		ssid = g_byte_array_sized_new (sizeof (ssid_data));
8383 		g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8384 	
8385 		g_object_set (s_wifi,
8386 		              NM_SETTING_WIRELESS_SSID, ssid,
8387 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
8388 		              NULL);
8389 	
8390 		g_byte_array_free (ssid, TRUE);
8391 	
8392 		/* Wireless security setting */
8393 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8394 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8395 	
8396 		g_object_set (s_wsec,
8397 		              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
8398 		              NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, 0,
8399 		              NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open",
8400 		              NULL);
8401 		nm_setting_wireless_security_set_wep_key (s_wsec, 0, "LoremIpsumSit");
8402 		nm_setting_wireless_security_set_wep_key (s_wsec, 1, "AlfaBetaGamma");
8403 		nm_setting_wireless_security_set_wep_key (s_wsec, 2, "WEP-104 ASCII");
8404 		nm_setting_wireless_security_set_wep_key (s_wsec, 3, "thisismyascii");
8405 	
8406 		/* IP4 setting */
8407 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8408 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8409 	
8410 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
8411 	
8412 		/* IP6 setting */
8413 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
8414 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
8415 	
8416 		g_object_set (s_ip6,
8417 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
8418 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
8419 		              NULL);
8420 	
8421 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
8422 		        "wifi-wep-104-ascii-write", "failed to verify connection: %s",
8423 		        (error && error->message) ? error->message : "(unknown)");
8424 	
8425 		/* Save the ifcfg */
8426 		success = writer_new_connection (connection,
8427 		                                 TEST_SCRATCH_DIR "/network-scripts/",
8428 		                                 &testfile,
8429 		                                 &error);
8430 		ASSERT (success == TRUE,
8431 		        "wifi-wep-104-ascii-write", "failed to write connection to disk: %s",
8432 		        (error && error->message) ? error->message : "(unknown)");
8433 	
8434 		ASSERT (testfile != NULL,
8435 		        "wifi-wep-104-ascii-write", "didn't get ifcfg file path back after writing connection");
8436 	
8437 		/* reread will be normalized, so we must normalize connection too. */
8438 		nm_utils_normalize_connection (connection, TRUE);
8439 	
8440 		/* re-read the connection for comparison */
8441 		reread = connection_from_file (testfile,
8442 		                               NULL,
8443 		                               TYPE_WIRELESS,
8444 		                               NULL,
8445 		                               &unmanaged,
8446 		                               &keyfile,
8447 		                               &routefile,
8448 		                               &route6file,
8449 		                               &error,
8450 		                               &ignore_error);
8451 		unlink (testfile);
8452 	
8453 		ASSERT (keyfile != NULL,
8454 		        "wifi-wep-104-ascii-write-reread", "expected keyfile for '%s'", testfile);
8455 	
8456 		ASSERT (stat (keyfile, &statbuf) == 0,
8457 		        "wifi-wep-104-ascii-write-reread", "couldn't stat() '%s'", keyfile);
8458 		ASSERT (S_ISREG (statbuf.st_mode),
8459 		        "wifi-wep-104-ascii-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
8460 		ASSERT ((statbuf.st_mode & 0077) == 0,
8461 		        "wifi-wep-104-ascii-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
8462 	
8463 		unlink (keyfile);
8464 	
8465 		ASSERT (reread != NULL,
8466 		        "wifi-wep-104-ascii-write-reread", "failed to read %s: %s", testfile, error->message);
8467 	
8468 		ASSERT (nm_connection_verify (reread, &error),
8469 		        "wifi-wep-104-ascii-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
8470 	
8471 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
8472 		        "wifi-wep-104-ascii-write", "written and re-read connection weren't the same.");
8473 	
8474 		g_free (testfile);
8475 		g_free (unmanaged);
8476 		g_free (keyfile);
8477 		g_free (routefile);
8478 		g_free (route6file);
8479 		g_object_unref (connection);
8480 		g_object_unref (reread);
8481 	}
8482 	
8483 	static void
8484 	test_write_wifi_leap (void)
8485 	{
8486 		NMConnection *connection;
8487 		NMConnection *reread;
8488 		NMSettingConnection *s_con;
8489 		NMSettingWireless *s_wifi;
8490 		NMSettingWirelessSecurity *s_wsec;
8491 		NMSettingIP4Config *s_ip4;
8492 		NMSettingIP6Config *s_ip6;
8493 		char *uuid;
8494 		gboolean success;
8495 		GError *error = NULL;
8496 		char *testfile = NULL;
8497 		char *unmanaged = NULL;
8498 		char *keyfile = NULL;
8499 		char *routefile = NULL;
8500 		char *route6file = NULL;
8501 		gboolean ignore_error = FALSE;
8502 		GByteArray *ssid;
8503 		const unsigned char ssid_data[] = "blahblah";
8504 		struct stat statbuf;
8505 	
8506 		connection = nm_connection_new ();
8507 	
8508 		/* Connection setting */
8509 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
8510 		nm_connection_add_setting (connection, NM_SETTING (s_con));
8511 	
8512 		uuid = nm_utils_uuid_generate ();
8513 		g_object_set (s_con,
8514 		              NM_SETTING_CONNECTION_ID, "Test Write Wifi LEAP",
8515 		              NM_SETTING_CONNECTION_UUID, uuid,
8516 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
8517 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8518 		              NULL);
8519 		g_free (uuid);
8520 	
8521 		/* Wifi setting */
8522 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8523 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8524 	
8525 		ssid = g_byte_array_sized_new (sizeof (ssid_data));
8526 		g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8527 	
8528 		g_object_set (s_wifi,
8529 		              NM_SETTING_WIRELESS_SSID, ssid,
8530 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
8531 		              NULL);
8532 	
8533 		g_byte_array_free (ssid, TRUE);
8534 	
8535 		/* Wireless security setting */
8536 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8537 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8538 	
8539 		g_object_set (s_wsec,
8540 		              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x",
8541 		              NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "leap",
8542 		              NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, "Bill Smith",
8543 		              NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD, "foobar22",
8544 		              NULL);
8545 	
8546 		/* IP4 setting */
8547 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8548 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8549 	
8550 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
8551 	
8552 		/* IP6 setting */
8553 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
8554 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
8555 	
8556 		g_object_set (s_ip6,
8557 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
8558 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
8559 		              NULL);
8560 	
8561 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
8562 		        "wifi-leap-write", "failed to verify connection: %s",
8563 		        (error && error->message) ? error->message : "(unknown)");
8564 	
8565 		/* Save the ifcfg */
8566 		success = writer_new_connection (connection,
8567 		                                 TEST_SCRATCH_DIR "/network-scripts/",
8568 		                                 &testfile,
8569 		                                 &error);
8570 		ASSERT (success == TRUE,
8571 		        "wifi-leap-write", "failed to write connection to disk: %s",
8572 		        (error && error->message) ? error->message : "(unknown)");
8573 	
8574 		ASSERT (testfile != NULL,
8575 		        "wifi-leap-write", "didn't get ifcfg file path back after writing connection");
8576 	
8577 		/* reread will be normalized, so we must normalize connection too. */
8578 		nm_utils_normalize_connection (connection, TRUE);
8579 	
8580 		/* re-read the connection for comparison */
8581 		reread = connection_from_file (testfile,
8582 		                               NULL,
8583 		                               TYPE_WIRELESS,
8584 		                               NULL,
8585 		                               &unmanaged,
8586 		                               &keyfile,
8587 		                               &routefile,
8588 		                               &route6file,
8589 		                               &error,
8590 		                               &ignore_error);
8591 		unlink (testfile);
8592 	
8593 		ASSERT (keyfile != NULL,
8594 		        "wifi-leap-write-reread", "expected keyfile for '%s'", testfile);
8595 	
8596 		ASSERT (stat (keyfile, &statbuf) == 0,
8597 		        "wifi-leap-write-reread", "couldn't stat() '%s'", keyfile);
8598 		ASSERT (S_ISREG (statbuf.st_mode),
8599 		        "wifi-leap-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
8600 		ASSERT ((statbuf.st_mode & 0077) == 0,
8601 		        "wifi-leap-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
8602 	
8603 		unlink (keyfile);
8604 	
8605 		ASSERT (reread != NULL,
8606 		        "wifi-leap-write-reread", "failed to read %s: %s", testfile, error->message);
8607 	
8608 		ASSERT (nm_connection_verify (reread, &error),
8609 		        "wifi-leap-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
8610 	
8611 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
8612 		        "wifi-leap-write", "written and re-read connection weren't the same.");
8613 	
8614 		g_free (testfile);
8615 		g_free (unmanaged);
8616 		g_free (keyfile);
8617 		g_free (routefile);
8618 		g_free (route6file);
8619 		g_object_unref (connection);
8620 		g_object_unref (reread);
8621 	}
8622 	
8623 	static void
8624 	test_write_wifi_leap_secret_flags (NMSettingSecretFlags flags)
8625 	{
8626 		NMConnection *connection;
8627 		NMConnection *reread;
8628 		NMSettingConnection *s_con;
8629 		NMSettingWireless *s_wifi;
8630 		NMSettingWirelessSecurity *s_wsec;
8631 		NMSettingIP4Config *s_ip4;
8632 		NMSettingIP6Config *s_ip6;
8633 		char *uuid;
8634 		gboolean success;
8635 		GError *error = NULL;
8636 		char *testfile = NULL;
8637 		char *unmanaged = NULL;
8638 		char *keyfile = NULL;
8639 		char *routefile = NULL;
8640 		char *route6file = NULL;
8641 		gboolean ignore_error = FALSE;
8642 		GByteArray *ssid;
8643 		const unsigned char ssid_data[] = "blahblah";
8644 	
8645 		connection = nm_connection_new ();
8646 		g_assert (connection);
8647 	
8648 		/* Connection setting */
8649 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
8650 		g_assert (s_con);
8651 		nm_connection_add_setting (connection, NM_SETTING (s_con));
8652 	
8653 		uuid = nm_utils_uuid_generate ();
8654 		g_object_set (s_con,
8655 		              NM_SETTING_CONNECTION_ID, "Test Write Wifi LEAP Secret Flags",
8656 		              NM_SETTING_CONNECTION_UUID, uuid,
8657 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8658 		              NULL);
8659 		g_free (uuid);
8660 	
8661 		/* Wifi setting */
8662 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8663 		g_assert (s_wifi);
8664 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8665 	
8666 		ssid = g_byte_array_sized_new (sizeof (ssid_data));
8667 		g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8668 		g_object_set (s_wifi,
8669 		              NM_SETTING_WIRELESS_SSID, ssid,
8670 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
8671 		              NULL);
8672 		g_byte_array_free (ssid, TRUE);
8673 	
8674 		/* Wireless security setting */
8675 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8676 		g_assert (s_wsec);
8677 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8678 	
8679 		g_object_set (s_wsec,
8680 		              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x",
8681 		              NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "leap",
8682 		              NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, "Bill Smith",
8683 		              NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD, "foobar22",
8684 		              NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS, flags,
8685 		              NULL);
8686 	
8687 		/* IP4 setting */
8688 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8689 		g_assert (s_ip4);
8690 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8691 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
8692 	
8693 		/* IP6 setting */
8694 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
8695 		g_assert (s_ip6);
8696 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
8697 	
8698 		g_object_set (s_ip6,
8699 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
8700 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
8701 		              NULL);
8702 	
8703 		success = nm_connection_verify (connection, &error);
8704 		g_assert_no_error (error);
8705 		g_assert (success);
8706 	
8707 		/* Save the ifcfg */
8708 		success = writer_new_connection (connection,
8709 		                                 TEST_SCRATCH_DIR "/network-scripts/",
8710 		                                 &testfile,
8711 		                                 &error);
8712 		g_assert_no_error (error);
8713 		g_assert (success);
8714 		g_assert (testfile);
8715 	
8716 		/* reread will be normalized, so we must normalize connection too. */
8717 		nm_utils_normalize_connection (connection, TRUE);
8718 	
8719 		/* re-read the connection for comparison */
8720 		reread = connection_from_file (testfile,
8721 		                               NULL,
8722 		                               TYPE_WIRELESS,
8723 		                               NULL,
8724 		                               &unmanaged,
8725 		                               &keyfile,
8726 		                               &routefile,
8727 		                               &route6file,
8728 		                               &error,
8729 		                               &ignore_error);
8730 		unlink (testfile);
8731 	
8732 		g_assert_no_error (error);
8733 	
8734 		/* No key should be written out since the secret is not system owned */
8735 		g_assert (keyfile);
8736 		g_assert (g_file_test (keyfile, G_FILE_TEST_EXISTS) == FALSE);
8737 	
8738 		g_assert (reread);
8739 	
8740 		success = nm_connection_verify (reread, &error);
8741 		g_assert_no_error (error);
8742 		g_assert (success);
8743 	
8744 		/* Remove the LEAP password from the original connection since it wont' be
8745 		 * in the reread connection, as the password is not system owned.
8746 		 */
8747 		g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD, NULL, NULL);
8748 		g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
8749 	
8750 		g_free (testfile);
8751 		g_free (unmanaged);
8752 		g_free (keyfile);
8753 		g_free (routefile);
8754 		g_free (route6file);
8755 		g_object_unref (connection);
8756 		g_object_unref (reread);
8757 	}
8758 	
8759 	static void
8760 	test_write_wifi_wpa_psk (const char *name,
8761 	                         const char *test_name,
8762 	                         gboolean wep_group,
8763 	                         gboolean wpa,
8764 	                         gboolean wpa2,
8765 	                         const char *psk)
8766 	{
8767 		NMConnection *connection;
8768 		NMConnection *reread;
8769 		NMSettingConnection *s_con;
8770 		NMSettingWireless *s_wifi;
8771 		NMSettingWirelessSecurity *s_wsec;
8772 		NMSettingIP4Config *s_ip4;
8773 		NMSettingIP6Config *s_ip6;
8774 		char *uuid, *tmp;
8775 		gboolean success;
8776 		GError *error = NULL;
8777 		char *testfile = NULL;
8778 		char *unmanaged = NULL;
8779 		char *keyfile = NULL;
8780 		char *routefile = NULL;
8781 		char *route6file = NULL;
8782 		gboolean ignore_error = FALSE;
8783 		GByteArray *ssid;
8784 		const unsigned char ssid_data[] = "blahblah";
8785 	
8786 		g_return_if_fail (psk != NULL);
8787 	
8788 		connection = nm_connection_new ();
8789 	
8790 		/* Connection setting */
8791 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
8792 		nm_connection_add_setting (connection, NM_SETTING (s_con));
8793 	
8794 		uuid = nm_utils_uuid_generate ();
8795 		g_object_set (s_con,
8796 		              NM_SETTING_CONNECTION_ID, name,
8797 		              NM_SETTING_CONNECTION_UUID, uuid,
8798 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
8799 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8800 		              NULL);
8801 		g_free (uuid);
8802 	
8803 		/* Wifi setting */
8804 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8805 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8806 	
8807 		ssid = g_byte_array_sized_new (sizeof (ssid_data));
8808 		g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8809 	
8810 		g_object_set (s_wifi,
8811 		              NM_SETTING_WIRELESS_SSID, ssid,
8812 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
8813 		              NULL);
8814 	
8815 		g_byte_array_free (ssid, TRUE);
8816 	
8817 		/* Wireless security setting */
8818 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8819 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8820 	
8821 		g_object_set (s_wsec,
8822 		              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
8823 		              NM_SETTING_WIRELESS_SECURITY_PSK, psk,
8824 		              NULL);
8825 	
8826 		if (wep_group) {
8827 			nm_setting_wireless_security_add_group (s_wsec, "wep40");
8828 			nm_setting_wireless_security_add_group (s_wsec, "wep104");
8829 		}
8830 		if (wpa) {
8831 			nm_setting_wireless_security_add_proto (s_wsec, "wpa");
8832 			nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
8833 			nm_setting_wireless_security_add_group (s_wsec, "tkip");
8834 		}
8835 		if (wpa2) {
8836 			nm_setting_wireless_security_add_proto (s_wsec, "rsn");
8837 			nm_setting_wireless_security_add_pairwise (s_wsec, "ccmp");
8838 			nm_setting_wireless_security_add_group (s_wsec, "ccmp");
8839 		}
8840 	
8841 		/* IP4 setting */
8842 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8843 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8844 	
8845 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
8846 	
8847 		/* IP6 setting */
8848 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
8849 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
8850 	
8851 		g_object_set (s_ip6,
8852 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
8853 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
8854 		              NULL);
8855 	
8856 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
8857 		        test_name, "failed to verify connection: %s",
8858 		        (error && error->message) ? error->message : "(unknown)");
8859 	
8860 		/* Save the ifcfg */
8861 		success = writer_new_connection (connection,
8862 		                                 TEST_SCRATCH_DIR "/network-scripts/",
8863 		                                 &testfile,
8864 		                                 &error);
8865 		ASSERT (success == TRUE,
8866 		        test_name, "failed to write connection to disk: %s",
8867 		        (error && error->message) ? error->message : "(unknown)");
8868 	
8869 		ASSERT (testfile != NULL,
8870 		        test_name, "didn't get ifcfg file path back after writing connection");
8871 	
8872 		/* reread will be normalized, so we must normalize connection too. */
8873 		nm_utils_normalize_connection (connection, TRUE);
8874 	
8875 		/* re-read the connection for comparison */
8876 		reread = connection_from_file (testfile,
8877 		                               NULL,
8878 		                               TYPE_WIRELESS,
8879 		                               NULL,
8880 		                               &unmanaged,
8881 		                               &keyfile,
8882 		                               &routefile,
8883 		                               &route6file,
8884 		                               &error,
8885 		                               &ignore_error);
8886 		unlink (testfile);
8887 	
8888 		tmp = g_strdup_printf ("%s-reread", test_name);
8889 		ASSERT (keyfile != NULL,
8890 		        tmp, "expected keyfile for '%s'", testfile);
8891 		unlink (keyfile);
8892 	
8893 		ASSERT (reread != NULL,
8894 		        tmp, "failed to read %s: %s", testfile, error->message);
8895 	
8896 		ASSERT (nm_connection_verify (reread, &error),
8897 		        tmp, "failed to verify %s: %s", testfile, error->message);
8898 		g_free (tmp);
8899 	
8900 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
8901 		        test_name, "written and re-read connection weren't the same.");
8902 	
8903 		g_free (testfile);
8904 		g_free (unmanaged);
8905 		g_free (keyfile);
8906 		g_free (routefile);
8907 		g_free (route6file);
8908 		g_object_unref (connection);
8909 		g_object_unref (reread);
8910 	}
8911 	
8912 	static void
8913 	test_write_wifi_wpa_psk_adhoc (void)
8914 	{
8915 		NMConnection *connection;
8916 		NMConnection *reread;
8917 		NMSettingConnection *s_con;
8918 		NMSettingWireless *s_wifi;
8919 		NMSettingWirelessSecurity *s_wsec;
8920 		NMSettingIP4Config *s_ip4;
8921 		NMSettingIP6Config *s_ip6;
8922 		char *uuid;
8923 		gboolean success;
8924 		GError *error = NULL;
8925 		char *testfile = NULL;
8926 		char *unmanaged = NULL;
8927 		char *keyfile = NULL;
8928 		char *routefile = NULL;
8929 		char *route6file = NULL;
8930 		gboolean ignore_error = FALSE;
8931 		GByteArray *ssid;
8932 		const unsigned char ssid_data[] = "blahblah";
8933 		NMIP4Address *addr;
8934 		const guint32 ip1 = htonl (0x01010103);
8935 		const guint32 gw = htonl (0x01010101);
8936 		const guint32 dns1 = htonl (0x04020201);
8937 		const guint32 prefix = 24;
8938 	
8939 		connection = nm_connection_new ();
8940 	
8941 		/* Connection setting */
8942 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
8943 		nm_connection_add_setting (connection, NM_SETTING (s_con));
8944 	
8945 		uuid = nm_utils_uuid_generate ();
8946 		g_object_set (s_con,
8947 		              NM_SETTING_CONNECTION_ID, "Test Write Wifi WPA PSK",
8948 		              NM_SETTING_CONNECTION_UUID, uuid,
8949 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
8950 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8951 		              NULL);
8952 		g_free (uuid);
8953 	
8954 		/* Wifi setting */
8955 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8956 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8957 	
8958 		ssid = g_byte_array_sized_new (sizeof (ssid_data));
8959 		g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8960 	
8961 		g_object_set (s_wifi,
8962 		              NM_SETTING_WIRELESS_SSID, ssid,
8963 		              NM_SETTING_WIRELESS_MODE, "adhoc",
8964 		              NM_SETTING_WIRELESS_CHANNEL, 11,
8965 		              NM_SETTING_WIRELESS_BAND, "bg",
8966 		              NULL);
8967 	
8968 		g_byte_array_free (ssid, TRUE);
8969 	
8970 		/* Wireless security setting */
8971 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8972 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8973 	
8974 		g_object_set (s_wsec,
8975 		              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-none",
8976 		              NM_SETTING_WIRELESS_SECURITY_PSK, "7d308b11df1b4243b0f78e5f3fc68cdbb9a264ed0edf4c188edf329ff5b467f0",
8977 		              NULL);
8978 	
8979 		nm_setting_wireless_security_add_proto (s_wsec, "wpa");
8980 		nm_setting_wireless_security_add_group (s_wsec, "tkip");
8981 	
8982 		/* IP4 setting */
8983 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8984 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8985 	
8986 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL);
8987 	
8988 		/* IP Address */
8989 		addr = nm_ip4_address_new ();
8990 		nm_ip4_address_set_address (addr, ip1);
8991 		nm_ip4_address_set_prefix (addr, prefix);
8992 		nm_ip4_address_set_gateway (addr, gw);
8993 		nm_setting_ip4_config_add_address (s_ip4, addr);
8994 		nm_ip4_address_unref (addr);
8995 	
8996 		nm_setting_ip4_config_add_dns (s_ip4, dns1);
8997 	
8998 		/* IP6 setting */
8999 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
9000 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
9001 	
9002 		g_object_set (s_ip6,
9003 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
9004 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
9005 		              NULL);
9006 	
9007 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
9008 		        "wifi-wpa-psk-adhoc-write", "failed to verify connection: %s",
9009 		        (error && error->message) ? error->message : "(unknown)");
9010 	
9011 		/* Save the ifcfg */
9012 		success = writer_new_connection (connection,
9013 		                                 TEST_SCRATCH_DIR "/network-scripts/",
9014 		                                 &testfile,
9015 		                                 &error);
9016 		ASSERT (success == TRUE,
9017 		        "wifi-wpa-psk-adhoc-write", "failed to write connection to disk: %s",
9018 		        (error && error->message) ? error->message : "(unknown)");
9019 	
9020 		ASSERT (testfile != NULL,
9021 		        "wifi-wpa-psk-adhoc-write", "didn't get ifcfg file path back after writing connection");
9022 	
9023 		/* reread will be normalized, so we must normalize connection too. */
9024 		nm_utils_normalize_connection (connection, TRUE);
9025 	
9026 		/* re-read the connection for comparison */
9027 		reread = connection_from_file (testfile,
9028 		                               NULL,
9029 		                               TYPE_WIRELESS,
9030 		                               NULL,
9031 		                               &unmanaged,
9032 		                               &keyfile,
9033 		                               &routefile,
9034 		                               &route6file,
9035 		                               &error,
9036 		                               &ignore_error);
9037 		unlink (testfile);
9038 	
9039 		ASSERT (keyfile != NULL,
9040 		        "wifi-wpa-psk-adhoc-write-reread", "expected keyfile for '%s'", testfile);
9041 		unlink (keyfile);
9042 	
9043 		ASSERT (reread != NULL,
9044 		        "wifi-wpa-psk-adhoc-write-reread", "failed to read %s: %s", testfile, error->message);
9045 	
9046 		ASSERT (nm_connection_verify (reread, &error),
9047 		        "wifi-wpa-psk-adhoc-write-reread", "failed to verify %s: %s", testfile, error->message);
9048 	
9049 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
9050 		        "wifi-wpa-psk-adhoc-write", "written and re-read connection weren't the same.");
9051 	
9052 		g_free (testfile);
9053 		g_free (unmanaged);
9054 		g_free (keyfile);
9055 		g_free (routefile);
9056 		g_free (route6file);
9057 		g_object_unref (connection);
9058 		g_object_unref (reread);
9059 	}
9060 	
9061 	static void
9062 	test_write_wifi_wpa_eap_tls (void)
9063 	{
9064 		NMConnection *connection;
9065 		NMConnection *reread;
9066 		NMSettingConnection *s_con;
9067 		NMSettingWireless *s_wifi;
9068 		NMSettingWirelessSecurity *s_wsec;
9069 		NMSetting8021x *s_8021x;
9070 		NMSettingIP4Config *s_ip4;
9071 		NMSettingIP6Config *s_ip6;
9072 		char *uuid;
9073 		gboolean success;
9074 		GError *error = NULL;
9075 		char *testfile = NULL;
9076 		char *unmanaged = NULL;
9077 		char *keyfile = NULL;
9078 		char *routefile = NULL;
9079 		char *route6file = NULL;
9080 		gboolean ignore_error = FALSE;
9081 		GByteArray *ssid;
9082 		const char *ssid_data = "blahblah";
9083 	
9084 		connection = nm_connection_new ();
9085 	
9086 		/* Connection setting */
9087 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
9088 		nm_connection_add_setting (connection, NM_SETTING (s_con));
9089 	
9090 		uuid = nm_utils_uuid_generate ();
9091 		g_object_set (s_con,
9092 		              NM_SETTING_CONNECTION_ID, "Test Write Wifi WPA EAP-TLS",
9093 		              NM_SETTING_CONNECTION_UUID, uuid,
9094 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
9095 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
9096 		              NULL);
9097 		g_free (uuid);
9098 	
9099 		/* Wifi setting */
9100 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
9101 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
9102 	
9103 		ssid = g_byte_array_sized_new (strlen (ssid_data));
9104 		g_byte_array_append (ssid, (const unsigned char *) ssid_data, strlen (ssid_data));
9105 	
9106 		g_object_set (s_wifi,
9107 		              NM_SETTING_WIRELESS_SSID, ssid,
9108 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
9109 		              NULL);
9110 	
9111 		g_byte_array_free (ssid, TRUE);
9112 	
9113 		/* Wireless security setting */
9114 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
9115 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
9116 	
9117 		g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap", NULL);
9118 		nm_setting_wireless_security_add_proto (s_wsec, "wpa");
9119 		nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
9120 		nm_setting_wireless_security_add_group (s_wsec, "tkip");
9121 	
9122 		/* Wireless security setting */
9123 		s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
9124 		nm_connection_add_setting (connection, NM_SETTING (s_8021x));
9125 	
9126 		g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
9127 	
9128 		nm_setting_802_1x_add_eap_method (s_8021x, "tls");
9129 	
9130 		success = nm_setting_802_1x_set_ca_cert (s_8021x,
9131 		                                         TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
9132 		                                         NM_SETTING_802_1X_CK_SCHEME_PATH,
9133 		                                         NULL,
9134 		                                         &error);
9135 		ASSERT (success == TRUE,
9136 		        "wifi-wpa-eap-tls-write", "failed to set CA certificate '%s': %s",
9137 		        TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT, error->message);
9138 	
9139 		success = nm_setting_802_1x_set_client_cert (s_8021x,
9140 		                                             TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT,
9141 		                                             NM_SETTING_802_1X_CK_SCHEME_PATH,
9142 		                                             NULL,
9143 		                                             &error);
9144 		ASSERT (success == TRUE,
9145 		        "wifi-wpa-eap-tls-write", "failed to set client certificate '%s': %s",
9146 		        TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT, error->message);
9147 	
9148 		success = nm_setting_802_1x_set_private_key (s_8021x,
9149 		                                             TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY,
9150 		                                             "test1",
9151 		                                             NM_SETTING_802_1X_CK_SCHEME_PATH,
9152 		                                             NULL,
9153 		                                             &error);
9154 		ASSERT (success == TRUE,
9155 		        "wifi-wpa-eap-tls-write", "failed to set private key '%s': %s",
9156 		        TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY, error->message);
9157 	
9158 		/* IP4 setting */
9159 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
9160 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
9161 	
9162 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
9163 	
9164 		/* IP6 setting */
9165 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
9166 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
9167 	
9168 		g_object_set (s_ip6,
9169 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
9170 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
9171 		              NULL);
9172 	
9173 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
9174 		        "wifi-wpa-eap-tls-write", "failed to verify connection: %s",
9175 		        (error && error->message) ? error->message : "(unknown)");
9176 	
9177 		/* Save the ifcfg */
9178 		success = writer_new_connection (connection,
9179 		                                 TEST_SCRATCH_DIR "/network-scripts/",
9180 		                                 &testfile,
9181 		                                 &error);
9182 		ASSERT (success == TRUE,
9183 		        "wifi-wpa-eap-tls-write", "failed to write connection to disk: %s",
9184 		        (error && error->message) ? error->message : "(unknown)");
9185 	
9186 		ASSERT (testfile != NULL,
9187 		        "wifi-wpa-eap-tls-write", "didn't get ifcfg file path back after writing connection");
9188 	
9189 		/* reread will be normalized, so we must normalize connection too. */
9190 		nm_utils_normalize_connection (connection, TRUE);
9191 	
9192 		/* re-read the connection for comparison */
9193 		reread = connection_from_file (testfile,
9194 		                               NULL,
9195 		                               TYPE_WIRELESS,
9196 		                               NULL,
9197 		                               &unmanaged,
9198 		                               &keyfile,
9199 		                               &routefile,
9200 		                               &route6file,
9201 		                               &error,
9202 		                               &ignore_error);
9203 		unlink (testfile);
9204 	
9205 		ASSERT (keyfile != NULL,
9206 		        "wifi-wpa-eap-tls-write-reread", "expected keyfile for '%s'", testfile);
9207 		unlink (keyfile);
9208 	
9209 		ASSERT (reread != NULL,
9210 		        "wifi-wpa-eap-tls-write-reread", "failed to read %s: %s", testfile, error->message);
9211 	
9212 		ASSERT (nm_connection_verify (reread, &error),
9213 		        "wifi-wpa-eap-tls-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
9214 	
9215 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
9216 		        "wifi-wpa-eap-tls-write", "written and re-read connection weren't the same.");
9217 	
9218 		g_free (testfile);
9219 		g_free (unmanaged);
9220 		g_free (keyfile);
9221 		g_free (routefile);
9222 		g_free (route6file);
9223 		g_object_unref (connection);
9224 		g_object_unref (reread);
9225 	}
9226 	
9227 	static void
9228 	test_write_wifi_wpa_eap_ttls_tls (void)
9229 	{
9230 		NMConnection *connection;
9231 		NMConnection *reread;
9232 		NMSettingConnection *s_con;
9233 		NMSettingWireless *s_wifi;
9234 		NMSettingWirelessSecurity *s_wsec;
9235 		NMSetting8021x *s_8021x;
9236 		NMSettingIP4Config *s_ip4;
9237 		NMSettingIP6Config *s_ip6;
9238 		char *uuid;
9239 		gboolean success;
9240 		GError *error = NULL;
9241 		char *testfile = NULL;
9242 		char *unmanaged = NULL;
9243 		char *keyfile = NULL;
9244 		char *routefile = NULL;
9245 		char *route6file = NULL;
9246 		gboolean ignore_error = FALSE;
9247 		GByteArray *ssid;
9248 		const char *ssid_data = "blahblah";
9249 	
9250 		connection = nm_connection_new ();
9251 	
9252 		/* Connection setting */
9253 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
9254 		nm_connection_add_setting (connection, NM_SETTING (s_con));
9255 	
9256 		uuid = nm_utils_uuid_generate ();
9257 		g_object_set (s_con,
9258 		              NM_SETTING_CONNECTION_ID, "Test Write Wifi WPA EAP-TTLS (TLS)",
9259 		              NM_SETTING_CONNECTION_UUID, uuid,
9260 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
9261 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
9262 		              NULL);
9263 		g_free (uuid);
9264 	
9265 		/* Wifi setting */
9266 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
9267 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
9268 	
9269 		ssid = g_byte_array_sized_new (strlen (ssid_data));
9270 		g_byte_array_append (ssid, (const unsigned char *) ssid_data, strlen (ssid_data));
9271 	
9272 		g_object_set (s_wifi,
9273 		              NM_SETTING_WIRELESS_SSID, ssid,
9274 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
9275 		              NULL);
9276 	
9277 		g_byte_array_free (ssid, TRUE);
9278 	
9279 		/* Wireless security setting */
9280 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
9281 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
9282 	
9283 		g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap", NULL);
9284 		nm_setting_wireless_security_add_proto (s_wsec, "rsn");
9285 		nm_setting_wireless_security_add_pairwise (s_wsec, "ccmp");
9286 		nm_setting_wireless_security_add_group (s_wsec, "ccmp");
9287 	
9288 		/* Wireless security setting */
9289 		s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
9290 		nm_connection_add_setting (connection, NM_SETTING (s_8021x));
9291 	
9292 		nm_setting_802_1x_add_eap_method (s_8021x, "ttls");
9293 	
9294 		g_object_set (s_8021x,
9295 		              NM_SETTING_802_1X_IDENTITY, "Bill Smith",
9296 		              NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "foobar22",
9297 		              NM_SETTING_802_1X_PHASE2_AUTHEAP, "tls",
9298 		              NULL);
9299 	
9300 		success = nm_setting_802_1x_set_ca_cert (s_8021x,
9301 		                                         TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
9302 		                                         NM_SETTING_802_1X_CK_SCHEME_PATH,
9303 		                                         NULL,
9304 		                                         &error);
9305 		ASSERT (success == TRUE,
9306 		        "wifi-wpa-eap-ttls-tls-write", "failed to set CA certificate '%s': %s",
9307 		        TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT, error->message);
9308 	
9309 		/* Phase 2 TLS stuff */
9310 	
9311 		/* phase2 CA cert */
9312 		success = nm_setting_802_1x_set_phase2_ca_cert (s_8021x,
9313 		                                                TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
9314 		                                                NM_SETTING_802_1X_CK_SCHEME_PATH,
9315 		                                                NULL,
9316 		                                                &error);
9317 		ASSERT (success == TRUE,
9318 		        "wifi-wpa-eap-ttls-tls-write", "failed to set inner CA certificate '%s': %s",
9319 		        TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT, error->message);
9320 	
9321 		/* phase2 client cert */
9322 		success = nm_setting_802_1x_set_phase2_client_cert (s_8021x,
9323 		                                                    TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT,
9324 		                                                    NM_SETTING_802_1X_CK_SCHEME_PATH,
9325 		                                                    NULL,
9326 		                                                    &error);
9327 		ASSERT (success == TRUE,
9328 		        "wifi-wpa-eap-ttls-tls-write", "failed to set inner client certificate '%s': %s",
9329 		        TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT, error->message);
9330 	
9331 		/* phase2 private key */
9332 		success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
9333 		                                                    TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY,
9334 		                                                    "test1",
9335 		                                                    NM_SETTING_802_1X_CK_SCHEME_PATH,
9336 		                                                    NULL,
9337 		                                                    &error);
9338 		ASSERT (success == TRUE,
9339 		        "wifi-wpa-eap-ttls-tls-write", "failed to set private key '%s': %s",
9340 		        TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY, error->message);
9341 	
9342 		/* IP4 setting */
9343 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
9344 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
9345 	
9346 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
9347 	
9348 		/* IP6 setting */
9349 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
9350 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
9351 	
9352 		g_object_set (s_ip6,
9353 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
9354 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
9355 		              NULL);
9356 	
9357 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
9358 		        "wifi-wpa-eap-ttls-tls-write", "failed to verify connection: %s",
9359 		        (error && error->message) ? error->message : "(unknown)");
9360 	
9361 		/* Save the ifcfg */
9362 		success = writer_new_connection (connection,
9363 		                                 TEST_SCRATCH_DIR "/network-scripts/",
9364 		                                 &testfile,
9365 		                                 &error);
9366 		ASSERT (success == TRUE,
9367 		        "wifi-wpa-eap-ttls-tls-write", "failed to write connection to disk: %s",
9368 		        (error && error->message) ? error->message : "(unknown)");
9369 	
9370 		ASSERT (testfile != NULL,
9371 		        "wifi-wpa-eap-ttls-tls-write", "didn't get ifcfg file path back after writing connection");
9372 	
9373 		/* reread will be normalized, so we must normalize connection too. */
9374 		nm_utils_normalize_connection (connection, TRUE);
9375 	
9376 		/* re-read the connection for comparison */
9377 		reread = connection_from_file (testfile,
9378 		                               NULL,
9379 		                               TYPE_WIRELESS,
9380 		                               NULL,
9381 		                               &unmanaged,
9382 		                               &keyfile,
9383 		                               &routefile,
9384 		                               &route6file,
9385 		                               &error,
9386 		                               &ignore_error);
9387 		unlink (testfile);
9388 	
9389 		ASSERT (reread != NULL,
9390 		        "wifi-wpa-eap-ttls-tls-write-reread", "failed to read %s: %s", testfile, error->message);
9391 	
9392 		ASSERT (keyfile != NULL,
9393 		        "wifi-wpa-eap-ttls-tls-write-reread", "expected keyfile for '%s'", testfile);
9394 		unlink (keyfile);
9395 	
9396 		ASSERT (nm_connection_verify (reread, &error),
9397 		        "wifi-wpa-eap-ttls-tls-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
9398 	
9399 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
9400 		        "wifi-wpa-eap-ttls-tls-write", "written and re-read connection weren't the same.");
9401 	
9402 		g_free (testfile);
9403 		g_free (unmanaged);
9404 		g_free (keyfile);
9405 		g_free (routefile);
9406 		g_free (route6file);
9407 		g_object_unref (connection);
9408 		g_object_unref (reread);
9409 	}
9410 	
9411 	static void
9412 	test_write_wifi_wpa_eap_ttls_mschapv2 (void)
9413 	{
9414 		NMConnection *connection;
9415 		NMConnection *reread;
9416 		NMSettingConnection *s_con;
9417 		NMSettingWireless *s_wifi;
9418 		NMSettingWirelessSecurity *s_wsec;
9419 		NMSetting8021x *s_8021x;
9420 		NMSettingIP4Config *s_ip4;
9421 		NMSettingIP6Config *s_ip6;
9422 		char *uuid;
9423 		gboolean success;
9424 		GError *error = NULL;
9425 		char *testfile = NULL;
9426 		char *unmanaged = NULL;
9427 		char *keyfile = NULL;
9428 		char *routefile = NULL;
9429 		char *route6file = NULL;
9430 		gboolean ignore_error = FALSE;
9431 		GByteArray *ssid;
9432 		const char *ssid_data = "blahblah";
9433 	
9434 		connection = nm_connection_new ();
9435 	
9436 		/* Connection setting */
9437 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
9438 		nm_connection_add_setting (connection, NM_SETTING (s_con));
9439 	
9440 		uuid = nm_utils_uuid_generate ();
9441 		g_object_set (s_con,
9442 		              NM_SETTING_CONNECTION_ID, "Test Write Wifi WPA EAP-TTLS (MSCHAPv2)",
9443 		              NM_SETTING_CONNECTION_UUID, uuid,
9444 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
9445 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
9446 		              NULL);
9447 		g_free (uuid);
9448 	
9449 		/* Wifi setting */
9450 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
9451 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
9452 	
9453 		ssid = g_byte_array_sized_new (strlen (ssid_data));
9454 		g_byte_array_append (ssid, (const unsigned char *) ssid_data, strlen (ssid_data));
9455 	
9456 		g_object_set (s_wifi,
9457 		              NM_SETTING_WIRELESS_SSID, ssid,
9458 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
9459 		              NULL);
9460 	
9461 		g_byte_array_free (ssid, TRUE);
9462 	
9463 		/* Wireless security setting */
9464 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
9465 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
9466 	
9467 		g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap", NULL);
9468 		nm_setting_wireless_security_add_proto (s_wsec, "wpa");
9469 		nm_setting_wireless_security_add_proto (s_wsec, "rsn");
9470 		nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
9471 		nm_setting_wireless_security_add_pairwise (s_wsec, "ccmp");
9472 		nm_setting_wireless_security_add_group (s_wsec, "tkip");
9473 		nm_setting_wireless_security_add_group (s_wsec, "ccmp");
9474 	
9475 		/* Wireless security setting */
9476 		s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
9477 		nm_connection_add_setting (connection, NM_SETTING (s_8021x));
9478 	
9479 		nm_setting_802_1x_add_eap_method (s_8021x, "ttls");
9480 	
9481 		g_object_set (s_8021x,
9482 		              NM_SETTING_802_1X_IDENTITY, "Bill Smith",
9483 		              NM_SETTING_802_1X_PASSWORD, ";alkdfja;dslkfjsad;lkfjsadf",
9484 		              NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "foobar22",
9485 		              NM_SETTING_802_1X_PHASE2_AUTHEAP, "mschapv2",
9486 		              NULL);
9487 	
9488 		success = nm_setting_802_1x_set_ca_cert (s_8021x,
9489 		                                         TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
9490 		                                         NM_SETTING_802_1X_CK_SCHEME_PATH,
9491 		                                         NULL,
9492 		                                         &error);
9493 		ASSERT (success == TRUE,
9494 		        "wifi-wpa-eap-ttls-mschapv2-write", "failed to set CA certificate '%s': %s",
9495 		        TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT, error->message);
9496 	
9497 	
9498 		/* IP4 setting */
9499 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
9500 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
9501 	
9502 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
9503 	
9504 		/* IP6 setting */
9505 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
9506 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
9507 	
9508 		g_object_set (s_ip6,
9509 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
9510 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
9511 		              NULL);
9512 	
9513 		ASSERT (nm_connection_verify (connection, &error) == TRUE,
9514 		        "wifi-wpa-eap-ttls-mschapv2-write", "failed to verify connection: %s",
9515 		        (error && error->message) ? error->message : "(unknown)");
9516 	
9517 		/* Save the ifcfg */
9518 		success = writer_new_connection (connection,
9519 		                                 TEST_SCRATCH_DIR "/network-scripts/",
9520 		                                 &testfile,
9521 		                                 &error);
9522 		ASSERT (success == TRUE,
9523 		        "wifi-wpa-eap-ttls-mschapv2-write", "failed to write connection to disk: %s",
9524 		        (error && error->message) ? error->message : "(unknown)");
9525 	
9526 		ASSERT (testfile != NULL,
9527 		        "wifi-wpa-eap-ttls-mschapv2-write", "didn't get ifcfg file path back after writing connection");
9528 	
9529 		/* reread will be normalized, so we must normalize connection too. */
9530 		nm_utils_normalize_connection (connection, TRUE);
9531 	
9532 		/* re-read the connection for comparison */
9533 		reread = connection_from_file (testfile,
9534 		                               NULL,
9535 		                               TYPE_WIRELESS,
9536 		                               NULL,
9537 		                               &unmanaged,
9538 		                               &keyfile,
9539 		                               &routefile,
9540 		                               &route6file,
9541 		                               &error,
9542 		                               &ignore_error);
9543 		unlink (testfile);
9544 	
9545 		ASSERT (reread != NULL,
9546 		        "wifi-wpa-eap-ttls-mschapv2-write-reread", "failed to read %s: %s", testfile, error->message);
9547 	
9548 		ASSERT (keyfile != NULL,
9549 		        "wifi-wpa-eap-ttls-mschapv2-write-reread", "expected keyfile for '%s'", testfile);
9550 		unlink (keyfile);
9551 	
9552 		ASSERT (nm_connection_verify (reread, &error),
9553 		        "wifi-wpa-eap-ttls-mschapv2-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
9554 	
9555 		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
9556 		        "wifi-wpa-eap-ttls-mschapv2-write", "written and re-read connection weren't the same.");
9557 	
9558 		g_free (testfile);
9559 		g_free (unmanaged);
9560 		g_free (keyfile);
9561 		g_free (routefile);
9562 		g_free (route6file);
9563 		g_object_unref (connection);
9564 		g_object_unref (reread);
9565 	}
9566 	
9567 	static void
9568 	test_write_wifi_wpa_then_open (void)
9569 	{
9570 		NMConnection *connection;
9571 		NMConnection *reread;
9572 		NMSettingConnection *s_con;
9573 		NMSettingWireless *s_wifi;
9574 		NMSettingWirelessSecurity *s_wsec;
9575 		NMSettingIP4Config *s_ip4;
9576 		NMSettingIP6Config *s_ip6;
9577 		char *uuid;
9578 		gboolean success;
9579 		GError *error = NULL;
9580 		char *testfile = NULL;
9581 		char *unmanaged = NULL;
9582 		char *keyfile = NULL;
9583 		char *routefile = NULL;
9584 		char *route6file = NULL;
9585 		gboolean ignore_error = FALSE;
9586 		GByteArray *ssid;
9587 		const unsigned char ssid_data[] = "blahblah";
9588 	
9589 		/* Test that writing out a WPA config then changing that to an open
9590 		 * config doesn't leave various WPA-related keys lying around in the ifcfg.
9591 		 */
9592 	
9593 		connection = nm_connection_new ();
9594 		g_assert (connection);
9595 	
9596 		/* Connection setting */
9597 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
9598 		g_assert (s_con);
9599 		nm_connection_add_setting (connection, NM_SETTING (s_con));
9600 	
9601 		uuid = nm_utils_uuid_generate ();
9602 		g_object_set (s_con,
9603 		              NM_SETTING_CONNECTION_ID, "random wifi connection",
9604 		              NM_SETTING_CONNECTION_UUID, uuid,
9605 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
9606 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
9607 		              NULL);
9608 		g_free (uuid);
9609 	
9610 		/* Wifi setting */
9611 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
9612 		g_assert (s_wifi);
9613 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
9614 	
9615 		ssid = g_byte_array_sized_new (sizeof (ssid_data));
9616 		g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
9617 	
9618 		g_object_set (s_wifi,
9619 		              NM_SETTING_WIRELESS_SSID, ssid,
9620 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
9621 		              NULL);
9622 	
9623 		g_byte_array_free (ssid, TRUE);
9624 	
9625 		/* Wireless security setting */
9626 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
9627 		g_assert (s_wsec);
9628 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
9629 	
9630 		g_object_set (s_wsec,
9631 		              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
9632 		              NM_SETTING_WIRELESS_SECURITY_PSK, "some cool PSK",
9633 		              NULL);
9634 	
9635 		nm_setting_wireless_security_add_proto (s_wsec, "wpa");
9636 		nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
9637 		nm_setting_wireless_security_add_group (s_wsec, "tkip");
9638 	
9639 		nm_setting_wireless_security_add_proto (s_wsec, "rsn");
9640 		nm_setting_wireless_security_add_pairwise (s_wsec, "ccmp");
9641 		nm_setting_wireless_security_add_group (s_wsec, "ccmp");
9642 	
9643 		/* IP4 setting */
9644 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
9645 		g_assert (s_ip4);
9646 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
9647 	
9648 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
9649 	
9650 		/* IP6 setting */
9651 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
9652 		g_assert (s_ip6);
9653 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
9654 	
9655 		g_object_set (s_ip6,
9656 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
9657 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
9658 		              NULL);
9659 	
9660 		success = nm_connection_verify (connection, &error);
9661 		g_assert_no_error (error);
9662 		g_assert (success);
9663 	
9664 		/* Save the ifcfg */
9665 		success = writer_new_connection (connection,
9666 		                                 TEST_SCRATCH_DIR "/network-scripts/",
9667 		                                 &testfile,
9668 		                                 &error);
9669 		g_assert_no_error (error);
9670 		g_assert (success);
9671 		g_assert (testfile);
9672 	
9673 		/* reread will be normalized, so we must normalize connection too. */
9674 		nm_utils_normalize_connection (connection, TRUE);
9675 	
9676 		/* re-read the connection for comparison */
9677 		reread = connection_from_file (testfile,
9678 		                               NULL,
9679 		                               TYPE_WIRELESS,
9680 		                               NULL,
9681 		                               &unmanaged,
9682 		                               &keyfile,
9683 		                               &routefile,
9684 		                               &route6file,
9685 		                               &error,
9686 		                               &ignore_error);
9687 		g_assert_no_error (error);
9688 		g_assert (reread);
9689 	
9690 		success = nm_connection_verify (reread, &error);
9691 		g_assert_no_error (error);
9692 	
9693 		success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
9694 		g_assert (success);
9695 	
9696 		g_free (unmanaged);
9697 		unmanaged = NULL;
9698 		g_free (routefile);
9699 		routefile = NULL;
9700 		g_free (route6file);
9701 		route6file = NULL;
9702 		g_object_unref (reread);
9703 	
9704 		/* Now change the connection to open and recheck */
9705 		nm_connection_remove_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
9706 	
9707 		/* Write it back out */
9708 		success = writer_update_connection (connection,
9709 		                                    TEST_SCRATCH_DIR "/network-scripts/",
9710 		                                    testfile,
9711 		                                    keyfile,
9712 		                                    &error);
9713 		g_assert_no_error (error);
9714 		g_assert (success);
9715 	
9716 		unlink (keyfile);
9717 		g_free (keyfile);
9718 		keyfile = NULL;
9719 	
9720 		/* reread will be normalized, so we must normalize connection too. */
9721 		nm_utils_normalize_connection (connection, TRUE);
9722 	
9723 		/* re-read it for comparison */
9724 		reread = connection_from_file (testfile,
9725 		                               NULL,
9726 		                               TYPE_WIRELESS,
9727 		                               NULL,
9728 		                               &unmanaged,
9729 		                               &keyfile,
9730 		                               &routefile,
9731 		                               &route6file,
9732 		                               &error,
9733 		                               &ignore_error);
9734 		unlink (testfile);
9735 		g_assert_no_error (error);
9736 	
9737 		g_assert (reread);
9738 	
9739 		/* No keyfile since it's an open connection this time */
9740 		g_assert (keyfile);
9741 		g_assert (g_file_test (keyfile, G_FILE_TEST_EXISTS) == FALSE);
9742 	
9743 		success = nm_connection_verify (reread, &error);
9744 		g_assert_no_error (error);
9745 	
9746 		success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
9747 		g_assert (success);
9748 	
9749 		unlink (testfile);
9750 		g_free (testfile);
9751 		g_free (unmanaged);
9752 		g_free (keyfile);
9753 		g_free (routefile);
9754 		g_free (route6file);
9755 		g_object_unref (reread);
9756 	
9757 		g_object_unref (connection);
9758 	}
9759 	
9760 	static void
9761 	test_write_wifi_wpa_then_wep_with_perms (void)
9762 	{
9763 		NMConnection *connection;
9764 		NMConnection *reread;
9765 		NMSettingConnection *s_con;
9766 		NMSettingWireless *s_wifi;
9767 		NMSettingWirelessSecurity *s_wsec;
9768 		NMSettingIP4Config *s_ip4;
9769 		NMSettingIP6Config *s_ip6;
9770 		char *uuid;
9771 		gboolean success;
9772 		GError *error = NULL;
9773 		char *testfile = NULL;
9774 		char *unmanaged = NULL;
9775 		char *keyfile = NULL;
9776 		char *routefile = NULL;
9777 		char *route6file = NULL;
9778 		gboolean ignore_error = FALSE;
9779 		GByteArray *ssid;
9780 		GSList *perm_list = NULL;
9781 		const unsigned char ssid_data[] = "SomeSSID";
9782 	
9783 		/* Test that writing out a WPA config then changing that to a WEP
9784 		 * config works and doesn't cause infinite loop or other issues.
9785 		 */
9786 	
9787 		connection = nm_connection_new ();
9788 		g_assert (connection);
9789 	
9790 		/* Connection setting */
9791 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
9792 		g_assert (s_con);
9793 		nm_connection_add_setting (connection, NM_SETTING (s_con));
9794 	
9795 		uuid = nm_utils_uuid_generate ();
9796 		perm_list = g_slist_append (perm_list, "user:superman:");
9797 		g_object_set (s_con,
9798 		              NM_SETTING_CONNECTION_ID, "random wifi connection 2",
9799 		              NM_SETTING_CONNECTION_UUID, uuid,
9800 		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
9801 		              NM_SETTING_CONNECTION_PERMISSIONS, perm_list,
9802 		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
9803 		              NULL);
9804 		g_free (uuid);
9805 		g_slist_free (perm_list);
9806 		ASSERT (nm_setting_connection_get_num_permissions (s_con) == 1,
9807 	                "test_write_wifi_wpa_then_wep_with_perms", "unexpected failure adding valid user permisson");
9808 	
9809 		/* Wifi setting */
9810 		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
9811 		g_assert (s_wifi);
9812 		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
9813 	
9814 		ssid = g_byte_array_sized_new (sizeof (ssid_data));
9815 		g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
9816 	
9817 		g_object_set (s_wifi,
9818 		              NM_SETTING_WIRELESS_SSID, ssid,
9819 		              NM_SETTING_WIRELESS_MODE, "infrastructure",
9820 		              NULL);
9821 	
9822 		g_byte_array_free (ssid, TRUE);
9823 	
9824 		/* Wireless security setting */
9825 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
9826 		g_assert (s_wsec);
9827 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
9828 	
9829 		g_object_set (s_wsec,
9830 		              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
9831 		              NM_SETTING_WIRELESS_SECURITY_PSK, "My cool PSK",
9832 		              NULL);
9833 	
9834 		nm_setting_wireless_security_add_proto (s_wsec, "wpa");
9835 		nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
9836 		nm_setting_wireless_security_add_group (s_wsec, "tkip");
9837 	
9838 		nm_setting_wireless_security_add_proto (s_wsec, "rsn");
9839 		nm_setting_wireless_security_add_pairwise (s_wsec, "ccmp");
9840 		nm_setting_wireless_security_add_group (s_wsec, "ccmp");
9841 	
9842 		/* IP4 setting */
9843 		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
9844 		g_assert (s_ip4);
9845 		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
9846 	
9847 		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
9848 	
9849 		/* IP6 setting */
9850 		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
9851 		g_assert (s_ip6);
9852 		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
9853 	
9854 		g_object_set (s_ip6,
9855 		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
9856 		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
9857 		              NULL);
9858 	
9859 		success = nm_connection_verify (connection, &error);
9860 		g_assert_no_error (error);
9861 		g_assert (success);
9862 	
9863 		/* Save the ifcfg */
9864 		success = writer_new_connection (connection,
9865 		                                 TEST_SCRATCH_DIR "/network-scripts/",
9866 		                                 &testfile,
9867 		                                 &error);
9868 		g_assert_no_error (error);
9869 		g_assert (success);
9870 		g_assert (testfile);
9871 	
9872 		/* reread will be normalized, so we must normalize connection too. */
9873 		nm_utils_normalize_connection (connection, TRUE);
9874 	
9875 		/* re-read the connection for comparison */
9876 		reread = connection_from_file (testfile,
9877 		                               NULL,
9878 		                               TYPE_WIRELESS,
9879 		                               NULL,
9880 		                               &unmanaged,
9881 		                               &keyfile,
9882 		                               &routefile,
9883 		                               &route6file,
9884 		                               &error,
9885 		                               &ignore_error);
9886 		g_assert_no_error (error);
9887 		g_assert (reread);
9888 	
9889 		success = nm_connection_verify (reread, &error);
9890 		g_assert_no_error (error);
9891 	
9892 		success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
9893 		g_assert (success);
9894 	
9895 		g_free (unmanaged);
9896 		unmanaged = NULL;
9897 		g_free (routefile);
9898 		routefile = NULL;
9899 		g_free (route6file);
9900 		route6file = NULL;
9901 		g_object_unref (reread);
9902 	
9903 		/* Now change the connection to WEP and recheck */
9904 		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
9905 		g_assert (s_wsec);
9906 		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
9907 	
9908 		g_object_set (s_wsec,
9909 		              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
9910 		              NULL);
9911 		nm_setting_wireless_security_set_wep_key (s_wsec, 0, "abraka  dabra");
9912 	
9913 		/* Write it back out */
9914 		success = writer_update_connection (connection,
9915 		                                    TEST_SCRATCH_DIR "/network-scripts/",
9916 		                                    testfile,
9917 		                                    keyfile,
9918 		                                    &error);
9919 		g_assert_no_error (error);
9920 		g_assert (success);
9921 	
9922 		g_free (keyfile);
9923 		keyfile = NULL;
9924 	
9925 		/* reread will be normalized, so we must normalize connection too. */
9926 		nm_utils_normalize_connection (connection, TRUE);
9927 	
9928 		/* re-read it for comparison */
9929 		reread = connection_from_file (testfile,
9930 		                               NULL,
9931 		                               TYPE_WIRELESS,
9932 		                               NULL,
9933 		                               &unmanaged,
9934 		                               &keyfile,
9935 		                               &routefile,
9936 		                               &route6file,
9937 		                               &error,
9938 		                               &ignore_error);
9939 		g_assert_no_error (error);
9940 	
9941 		g_assert (reread);
9942 	
9943 		success = nm_connection_verify (reread, &error);
9944 		g_assert_no_error (error);
9945 	
9946 		success = nm_connection_compare (connection, reread,
9947 		                                 NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS |
9948 		                                 NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS);
9949 	
9950 		ASSERT (success,
9951 		        "test_write_wifi_wpa_then_wep_with_perms", "failed to compare connections");
9952 	
9953 		unlink (keyfile);
9954 		unlink (testfile);
9955 	
9956 		g_free (testfile);
9957 		g_free (unmanaged);
9958 		g_free (keyfile);
9959 		g_free (routefile);
9960 		g_free (route6file);
9961 		g_object_unref (reread);
9962 	
9963 		g_object_unref (connection);
9964 	}
9965 	
9966 	static void
9967 	test_write_wifi_dynamic_wep_leap (void)
9968 	{
9969 		NMConnection *connection;
9970 		NMConnection *reread;
9971 		NMSettingConnection *s_con;
9972 		NMSettingWireless *s_wifi;
9973 		NMSettingWirelessSecurity *s_wsec;
9974 		NMSetting8021x *s_8021x;
9975 		NMSettingIP4Config *s_ip4;
9976 		NMSettingIP6Config *s_ip6;
9977 		char *uuid;
9978 		gboolean success;
9979 		GError *error = NULL;
9980 		char *testfile = NULL;
9981 		char *unmanaged = NULL;
9982 		char *keyfile = NULL;
9983 		char *routefile = NULL;
9984 		char *route6file = NULL;
9985 		gboolean ignore_error = FALSE;
9986 		GByteArray *ssid;
9987 		const char *ssid_data = "blahblah";
9988 		shvarFile *ifcfg;
9989 		char *tmp;
9990 	
9991 		connection = nm_connection_new ();
9992 		g_assert (connection);
9993 	
9994 		/* Connection setting */
9995 		s_con = (NMSettingConnection *) nm_setting_connection_new ();
9996 		g_assert (s_con);
9997 		nm_connection_add_setting (connection, NM_SETTING (s_con));
9998 	
9999 		uuid = nm_utils_uuid_generate ();
10000		g_object_set (s_con,
10001		              NM_SETTING_CONNECTION_ID, "Test Write Wifi Dynamic WEP LEAP",
10002		              NM_SETTING_CONNECTION_UUID, uuid,
10003		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
10004		              NULL);
10005		g_free (uuid);
10006	
10007		/* Wifi setting */
10008		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
10009		g_assert (s_wifi);
10010		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
10011	
10012		ssid = g_byte_array_sized_new (strlen (ssid_data));
10013		g_byte_array_append (ssid, (const unsigned char *) ssid_data, strlen (ssid_data));
10014	
10015		g_object_set (s_wifi,
10016		              NM_SETTING_WIRELESS_SSID, ssid,
10017		              NM_SETTING_WIRELESS_MODE, "infrastructure",
10018		              NULL);
10019	
10020		g_byte_array_free (ssid, TRUE);
10021	
10022		/* Wireless security setting */
10023		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
10024		g_assert (s_wsec);
10025		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
10026	
10027		g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", NULL);
10028	
10029		/* Wireless security setting */
10030		s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
10031		g_assert (s_8021x);
10032		nm_connection_add_setting (connection, NM_SETTING (s_8021x));
10033	
10034		nm_setting_802_1x_add_eap_method (s_8021x, "leap");
10035	
10036		g_object_set (s_8021x,
10037		              NM_SETTING_802_1X_IDENTITY, "Bill Smith",
10038		              NM_SETTING_802_1X_PASSWORD, ";alkdfja;dslkfjsad;lkfjsadf",
10039		              NULL);
10040	
10041		/* IP4 setting */
10042		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
10043		g_assert (s_ip4);
10044		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
10045		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
10046	
10047		/* IP6 setting */
10048		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
10049		g_assert (s_ip6);
10050		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
10051	
10052		g_object_set (s_ip6,
10053		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
10054		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
10055		              NULL);
10056	
10057		success = nm_connection_verify (connection, &error);
10058		g_assert_no_error (error);
10059		g_assert (success);
10060	
10061		/* Save the ifcfg */
10062		success = writer_new_connection (connection,
10063		                                 TEST_SCRATCH_DIR "/network-scripts/",
10064		                                 &testfile,
10065		                                 &error);
10066		g_assert_no_error (error);
10067		g_assert (success);
10068		g_assert (testfile);
10069	
10070		/* reread will be normalized, so we must normalize connection too. */
10071		nm_utils_normalize_connection (connection, TRUE);
10072	
10073		/* re-read the connection for comparison */
10074		reread = connection_from_file (testfile,
10075		                               NULL,
10076		                               TYPE_WIRELESS,
10077		                               NULL,
10078		                               &unmanaged,
10079		                               &keyfile,
10080		                               &routefile,
10081		                               &route6file,
10082		                               &error,
10083		                               &ignore_error);
10084		g_assert_no_error (error);
10085		g_assert (reread);
10086		g_assert (keyfile);
10087		unlink (keyfile);
10088	
10089		success = nm_connection_verify (reread, &error);
10090		g_assert_no_error (error);
10091		g_assert (success);
10092	
10093		success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
10094		g_assert (success);
10095	
10096		/* Check and make sure that an "old-school" LEAP (Network EAP) connection
10097		 * did not get written.  Check first that the auth alg is not set to "LEAP"
10098		 * and next that the only IEEE 802.1x EAP method is "LEAP".
10099		 */
10100		ifcfg = svNewFile (testfile);
10101		g_assert (ifcfg);
10102		tmp = svGetValue (ifcfg, "SECURITYMODE", FALSE);
10103		g_assert_cmpstr (tmp, ==, NULL);
10104		g_free (tmp);
10105	
10106		tmp = svGetValue (ifcfg, "IEEE_8021X_EAP_METHODS", FALSE);
10107		g_assert_cmpstr (tmp, ==, "LEAP");
10108		g_free (tmp);
10109	
10110		svCloseFile (ifcfg);
10111		unlink (testfile);
10112	
10113		g_free (testfile);
10114		g_free (unmanaged);
10115		g_free (keyfile);
10116		g_free (routefile);
10117		g_free (route6file);
10118		g_object_unref (connection);
10119		g_object_unref (reread);
10120	}
10121	
10122	#define TEST_IFCFG_IBFT_DHCP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-ibft-dhcp"
10123	
10124	static void
10125	test_read_ibft_dhcp (void)
10126	{
10127		NMConnection *connection;
10128		NMSettingConnection *s_con;
10129		NMSettingWired *s_wired;
10130		NMSettingIP4Config *s_ip4;
10131		char *unmanaged = NULL;
10132		char *keyfile = NULL;
10133		char *routefile = NULL;
10134		char *route6file = NULL;
10135		gboolean ignore_error = FALSE;
10136		GError *error = NULL;
10137		const char *tmp;
10138		const GByteArray *array;
10139		char expected_mac_address[ETH_ALEN] = { 0x00, 0x33, 0x21, 0x98, 0xb9, 0xf1 };
10140		const char *expected_id = "System test-ibft-dhcp";
10141		guint64 expected_timestamp = 0;
10142	
10143		connection = connection_from_file (TEST_IFCFG_IBFT_DHCP,
10144		                                   NULL,
10145		                                   TYPE_ETHERNET,
10146		                                   TEST_IFCFG_DIR "/iscsiadm-test-dhcp",
10147		                                   &unmanaged,
10148		                                   &keyfile,
10149		                                   &routefile,
10150		                                   &route6file,
10151		                                   &error,
10152		                                   &ignore_error);
10153		ASSERT (connection != NULL,
10154		        "ibft-dhcp-read", "failed to read %s: %s", TEST_IFCFG_IBFT_DHCP, error->message);
10155	
10156		ASSERT (nm_connection_verify (connection, &error),
10157		        "ibft-dhcp-verify", "failed to verify %s: %s", TEST_IFCFG_IBFT_DHCP, error->message);
10158	
10159		/* ===== CONNECTION SETTING ===== */
10160	
10161		s_con = nm_connection_get_setting_connection (connection);
10162		ASSERT (s_con != NULL,
10163		        "ibft-dhcp-verify-connection", "failed to verify %s: missing %s setting",
10164		        TEST_IFCFG_IBFT_DHCP,
10165		        NM_SETTING_CONNECTION_SETTING_NAME);
10166	
10167		/* ID */
10168		tmp = nm_setting_connection_get_id (s_con);
10169		ASSERT (tmp != NULL,
10170		        "ibft-dhcp-verify-connection", "failed to verify %s: missing %s / %s key",
10171		        TEST_IFCFG_IBFT_DHCP,
10172		        NM_SETTING_CONNECTION_SETTING_NAME,
10173		        NM_SETTING_CONNECTION_ID);
10174		ASSERT (strcmp (tmp, expected_id) == 0,
10175		        "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s / %s key value",
10176		        TEST_IFCFG_IBFT_DHCP,
10177		        NM_SETTING_CONNECTION_SETTING_NAME,
10178		        NM_SETTING_CONNECTION_ID);
10179	
10180		/* UUID can't be tested if the ifcfg does not contain the UUID key, because
10181		 * the UUID is generated on the full path of the ifcfg file, which can change
10182		 * depending on where the tests are run.
10183		 */
10184	
10185		/* Timestamp */
10186		ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp,
10187		        "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value",
10188		        TEST_IFCFG_IBFT_DHCP,
10189		        NM_SETTING_CONNECTION_SETTING_NAME,
10190		        NM_SETTING_CONNECTION_TIMESTAMP);
10191	
10192		/* Autoconnect */
10193		ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
10194		        "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value",
10195		        TEST_IFCFG_IBFT_DHCP,
10196		        NM_SETTING_CONNECTION_SETTING_NAME,
10197		        NM_SETTING_CONNECTION_AUTOCONNECT);
10198	
10199		/* Read-only */
10200		ASSERT (nm_setting_connection_get_read_only (s_con) == TRUE,
10201		        "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value",
10202		        TEST_IFCFG_IBFT_DHCP,
10203		        NM_SETTING_CONNECTION_SETTING_NAME,
10204		        NM_SETTING_CONNECTION_READ_ONLY);
10205	
10206		/* ===== WIRED SETTING ===== */
10207	
10208		s_wired = nm_connection_get_setting_wired (connection);
10209		ASSERT (s_wired != NULL,
10210		        "ibft-dhcp-verify-wired", "failed to verify %s: missing %s setting",
10211		        TEST_IFCFG_IBFT_DHCP,
10212		        NM_SETTING_WIRED_SETTING_NAME);
10213	
10214		/* MAC address */
10215		array = nm_setting_wired_get_mac_address (s_wired);
10216		ASSERT (array != NULL,
10217		        "ibft-dhcp-verify-wired", "failed to verify %s: missing %s / %s key",
10218		        TEST_IFCFG_IBFT_DHCP,
10219		        NM_SETTING_WIRED_SETTING_NAME,
10220		        NM_SETTING_WIRED_MAC_ADDRESS);
10221		ASSERT (array->len == ETH_ALEN,
10222		        "ibft-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
10223		        TEST_IFCFG_IBFT_DHCP,
10224		        NM_SETTING_WIRED_SETTING_NAME,
10225		        NM_SETTING_WIRED_MAC_ADDRESS);
10226		ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
10227		        "ibft-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value",
10228		        TEST_IFCFG_IBFT_DHCP,
10229		        NM_SETTING_WIRED_SETTING_NAME,
10230		        NM_SETTING_WIRED_MAC_ADDRESS);
10231	
10232		ASSERT (nm_setting_wired_get_mtu (s_wired) == 0,
10233		        "ibft-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value",
10234		        TEST_IFCFG_IBFT_DHCP,
10235		        NM_SETTING_WIRED_SETTING_NAME,
10236		        NM_SETTING_WIRED_MTU);
10237	
10238		/* ===== IPv4 SETTING ===== */
10239	
10240		s_ip4 = nm_connection_get_setting_ip4_config (connection);
10241		ASSERT (s_ip4 != NULL,
10242		        "ibft-dhcp-verify-ip4", "failed to verify %s: missing %s setting",
10243		        TEST_IFCFG_IBFT_DHCP,
10244		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
10245	
10246		/* Method */
10247		tmp = nm_setting_ip4_config_get_method (s_ip4);
10248		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
10249		        "ibft-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
10250		        TEST_IFCFG_IBFT_DHCP,
10251		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10252		        NM_SETTING_IP4_CONFIG_METHOD);
10253	
10254		g_free (unmanaged);
10255		g_free (keyfile);
10256		g_free (routefile);
10257		g_free (route6file);
10258		g_object_unref (connection);
10259	}
10260	
10261	#define TEST_IFCFG_IBFT_STATIC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-ibft-static"
10262	
10263	static void
10264	test_read_ibft_static (void)
10265	{
10266		NMConnection *connection;
10267		NMSettingConnection *s_con;
10268		NMSettingWired *s_wired;
10269		NMSettingIP4Config *s_ip4;
10270		char *unmanaged = NULL;
10271		char *keyfile = NULL;
10272		char *routefile = NULL;
10273		char *route6file = NULL;
10274		gboolean ignore_error = FALSE;
10275		GError *error = NULL;
10276		const char *tmp;
10277		const GByteArray *array;
10278		char expected_mac_address[ETH_ALEN] = { 0x00, 0x33, 0x21, 0x98, 0xb9, 0xf0 };
10279		const char *expected_id = "System test-ibft-static";
10280		guint64 expected_timestamp = 0;
10281		const char *expected_dns1 = "10.16.255.2";
10282		const char *expected_dns2 = "10.16.255.3";
10283		guint32 addr;
10284		const char *expected_address1 = "192.168.32.72";
10285		const char *expected_address1_gw = "192.168.35.254";
10286		NMIP4Address *ip4_addr;
10287	
10288		connection = connection_from_file (TEST_IFCFG_IBFT_STATIC,
10289		                                   NULL,
10290		                                   TYPE_ETHERNET,
10291		                                   TEST_IFCFG_DIR "/iscsiadm-test-static",
10292		                                   &unmanaged,
10293		                                   &keyfile,
10294		                                   &routefile,
10295		                                   &route6file,
10296		                                   &error,
10297		                                   &ignore_error);
10298		ASSERT (connection != NULL,
10299		        "ibft-static-read", "failed to read %s: %s", TEST_IFCFG_IBFT_STATIC, error->message);
10300	
10301		ASSERT (nm_connection_verify (connection, &error),
10302		        "ibft-static-verify", "failed to verify %s: %s", TEST_IFCFG_IBFT_STATIC, error->message);
10303	
10304		/* ===== CONNECTION SETTING ===== */
10305	
10306		s_con = nm_connection_get_setting_connection (connection);
10307		ASSERT (s_con != NULL,
10308		        "ibft-static-verify-connection", "failed to verify %s: missing %s setting",
10309		        TEST_IFCFG_IBFT_STATIC,
10310		        NM_SETTING_CONNECTION_SETTING_NAME);
10311	
10312		/* ID */
10313		tmp = nm_setting_connection_get_id (s_con);
10314		ASSERT (tmp != NULL,
10315		        "ibft-static-verify-connection", "failed to verify %s: missing %s / %s key",
10316		        TEST_IFCFG_IBFT_STATIC,
10317		        NM_SETTING_CONNECTION_SETTING_NAME,
10318		        NM_SETTING_CONNECTION_ID);
10319		ASSERT (strcmp (tmp, expected_id) == 0,
10320		        "ibft-static-verify-connection", "failed to verify %s: unexpected %s / %s key value",
10321		        TEST_IFCFG_IBFT_STATIC,
10322		        NM_SETTING_CONNECTION_SETTING_NAME,
10323		        NM_SETTING_CONNECTION_ID);
10324	
10325		/* UUID can't be tested if the ifcfg does not contain the UUID key, because
10326		 * the UUID is generated on the full path of the ifcfg file, which can change
10327		 * depending on where the tests are run.
10328		 */
10329	
10330		/* Timestamp */
10331		ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp,
10332		        "ibft-static-verify-connection", "failed to verify %s: unexpected %s /%s key value",
10333		        TEST_IFCFG_IBFT_STATIC,
10334		        NM_SETTING_CONNECTION_SETTING_NAME,
10335		        NM_SETTING_CONNECTION_TIMESTAMP);
10336	
10337		/* Autoconnect */
10338		ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
10339		        "ibft-static-verify-connection", "failed to verify %s: unexpected %s /%s key value",
10340		        TEST_IFCFG_IBFT_STATIC,
10341		        NM_SETTING_CONNECTION_SETTING_NAME,
10342		        NM_SETTING_CONNECTION_AUTOCONNECT);
10343	
10344		/* Read-only */
10345		ASSERT (nm_setting_connection_get_read_only (s_con) == TRUE,
10346		        "ibft-static-verify-connection", "failed to verify %s: unexpected %s /%s key value",
10347		        TEST_IFCFG_IBFT_STATIC,
10348		        NM_SETTING_CONNECTION_SETTING_NAME,
10349		        NM_SETTING_CONNECTION_READ_ONLY);
10350	
10351		/* ===== WIRED SETTING ===== */
10352	
10353		s_wired = nm_connection_get_setting_wired (connection);
10354		ASSERT (s_wired != NULL,
10355		        "ibft-static-verify-wired", "failed to verify %s: missing %s setting",
10356		        TEST_IFCFG_IBFT_STATIC,
10357		        NM_SETTING_WIRED_SETTING_NAME);
10358	
10359		/* MAC address */
10360		array = nm_setting_wired_get_mac_address (s_wired);
10361		ASSERT (array != NULL,
10362		        "ibft-static-verify-wired", "failed to verify %s: missing %s / %s key",
10363		        TEST_IFCFG_IBFT_STATIC,
10364		        NM_SETTING_WIRED_SETTING_NAME,
10365		        NM_SETTING_WIRED_MAC_ADDRESS);
10366		ASSERT (array->len == ETH_ALEN,
10367		        "ibft-static-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
10368		        TEST_IFCFG_IBFT_STATIC,
10369		        NM_SETTING_WIRED_SETTING_NAME,
10370		        NM_SETTING_WIRED_MAC_ADDRESS);
10371		ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
10372		        "ibft-static-verify-wired", "failed to verify %s: unexpected %s / %s key value",
10373		        TEST_IFCFG_IBFT_STATIC,
10374		        NM_SETTING_WIRED_SETTING_NAME,
10375		        NM_SETTING_WIRED_MAC_ADDRESS);
10376	
10377		ASSERT (nm_setting_wired_get_mtu (s_wired) == 0,
10378		        "ibft-static-verify-wired", "failed to verify %s: unexpected %s / %s key value",
10379		        TEST_IFCFG_IBFT_STATIC,
10380		        NM_SETTING_WIRED_SETTING_NAME,
10381		        NM_SETTING_WIRED_MTU);
10382	
10383		/* ===== IPv4 SETTING ===== */
10384	
10385		s_ip4 = nm_connection_get_setting_ip4_config (connection);
10386		ASSERT (s_ip4 != NULL,
10387		        "ibft-static-verify-ip4", "failed to verify %s: missing %s setting",
10388		        TEST_IFCFG_IBFT_STATIC,
10389		        NM_SETTING_IP4_CONFIG_SETTING_NAME);
10390	
10391		/* Method */
10392		tmp = nm_setting_ip4_config_get_method (s_ip4);
10393		ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
10394		        "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
10395		        TEST_IFCFG_IBFT_STATIC,
10396		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10397		        NM_SETTING_IP4_CONFIG_METHOD);
10398	
10399		/* DNS Addresses */
10400		ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
10401		        "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
10402		        TEST_IFCFG_IBFT_STATIC,
10403		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10404		        NM_SETTING_IP4_CONFIG_DNS);
10405	
10406		ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0,
10407		        "ibft-static-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #1",
10408		        TEST_IFCFG_IBFT_STATIC,
10409		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10410		        NM_SETTING_IP4_CONFIG_DNS);
10411		ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr,
10412		        "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
10413		        TEST_IFCFG_IBFT_STATIC,
10414		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10415		        NM_SETTING_IP4_CONFIG_DNS);
10416	
10417		ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0,
10418		        "ibft-static-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #2",
10419		        TEST_IFCFG_IBFT_STATIC,
10420		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10421		        NM_SETTING_IP4_CONFIG_DNS);
10422		ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr,
10423		        "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
10424		        TEST_IFCFG_IBFT_STATIC,
10425		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10426		        NM_SETTING_IP4_CONFIG_DNS);
10427	
10428		ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 1,
10429		        "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
10430		        TEST_IFCFG_IBFT_STATIC,
10431		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10432		        NM_SETTING_IP4_CONFIG_DNS);
10433	
10434		/* Address #1 */
10435		ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
10436		ASSERT (ip4_addr,
10437		        "ibft-static-verify-ip4", "failed to verify %s: missing IP4 address #1",
10438		        TEST_IFCFG_IBFT_STATIC,
10439		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10440		        NM_SETTING_IP4_CONFIG_ADDRESSES);
10441	
10442		ASSERT (nm_ip4_address_get_prefix (ip4_addr) == 22,
10443		        "ibft-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix",
10444		        TEST_IFCFG_IBFT_STATIC,
10445		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10446		        NM_SETTING_IP4_CONFIG_ADDRESSES);
10447	
10448		ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0,
10449		        "ibft-static-verify-ip4", "failed to verify %s: couldn't convert IP address #1",
10450		        TEST_IFCFG_IBFT_STATIC,
10451		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10452		        NM_SETTING_IP4_CONFIG_DNS);
10453		ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
10454		        "ibft-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1",
10455		        TEST_IFCFG_IBFT_STATIC,
10456		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10457		        NM_SETTING_IP4_CONFIG_ADDRESSES);
10458	
10459		ASSERT (inet_pton (AF_INET, expected_address1_gw, &addr) > 0,
10460		        "ibft-static-verify-ip4", "failed to verify %s: couldn't convert IP address #1 gateway",
10461		        TEST_IFCFG_IBFT_STATIC,
10462		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10463		        NM_SETTING_IP4_CONFIG_ADDRESSES);
10464		ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr,
10465		        "ibft-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1 gateway",
10466		        TEST_IFCFG_IBFT_STATIC,
10467		        NM_SETTING_IP4_CONFIG_SETTING_NAME,
10468		        NM_SETTING_IP4_CONFIG_ADDRESSES);
10469	
10470		g_free (unmanaged);
10471		g_free (keyfile);
10472		g_free (routefile);
10473		g_free (route6file);
10474		g_object_unref (connection);
10475	}
10476	
10477	static void
10478	test_read_ibft_malformed (const char *name, const char *iscsiadm_path)
10479	{
10480		NMConnection *connection;
10481		char *unmanaged = NULL;
10482		char *keyfile = NULL;
10483		char *routefile = NULL;
10484		char *route6file = NULL;
10485		gboolean ignore_error = FALSE;
10486		GError *error = NULL;
10487	
10488		g_assert (g_file_test (iscsiadm_path, G_FILE_TEST_EXISTS));
10489	
10490		connection = connection_from_file (TEST_IFCFG_IBFT_STATIC,
10491		                                   NULL,
10492		                                   TYPE_ETHERNET,
10493		                                   iscsiadm_path,
10494		                                   &unmanaged,
10495		                                   &keyfile,
10496		                                   &routefile,
10497		                                   &route6file,
10498		                                   &error,
10499		                                   &ignore_error);
10500		ASSERT (connection == NULL,
10501		        name, "unexpectedly able to read %s", TEST_IFCFG_IBFT_STATIC);
10502	
10503		g_free (unmanaged);
10504		g_free (keyfile);
10505		g_free (routefile);
10506		g_free (route6file);
10507	}
10508	
10509	static void
10510	test_write_wired_qeth_dhcp (void)
10511	{
10512		NMConnection *connection;
10513		NMConnection *reread;
10514		NMSettingConnection *s_con;
10515		NMSettingWired *s_wired;
10516		NMSettingIP4Config *s_ip4;
10517		NMSettingIP6Config *s_ip6;
10518		char *uuid;
10519		GPtrArray *subchans;
10520		gboolean success;
10521		GError *error = NULL;
10522		char *testfile = NULL;
10523		char *unmanaged = NULL;
10524		char *keyfile = NULL;
10525		char *routefile = NULL;
10526		char *route6file = NULL;
10527		gboolean ignore_error = FALSE;
10528	
10529		connection = nm_connection_new ();
10530	
10531		/* Connection setting */
10532		s_con = (NMSettingConnection *) nm_setting_connection_new ();
10533		nm_connection_add_setting (connection, NM_SETTING (s_con));
10534	
10535		uuid = nm_utils_uuid_generate ();
10536		g_object_set (s_con,
10537		              NM_SETTING_CONNECTION_ID, "Test Write Wired qeth Static",
10538		              NM_SETTING_CONNECTION_UUID, uuid,
10539		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
10540		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
10541		              NULL);
10542		g_free (uuid);
10543	
10544		/* Wired setting */
10545		s_wired = (NMSettingWired *) nm_setting_wired_new ();
10546		nm_connection_add_setting (connection, NM_SETTING (s_wired));
10547	
10548		subchans = g_ptr_array_sized_new (3);
10549		g_ptr_array_add (subchans, "0.0.600");
10550		g_ptr_array_add (subchans, "0.0.601");
10551		g_ptr_array_add (subchans, "0.0.602");
10552		g_object_set (s_wired,
10553		              NM_SETTING_WIRED_S390_SUBCHANNELS, subchans,
10554		              NM_SETTING_WIRED_S390_NETTYPE, "qeth",
10555		              NULL);
10556		g_ptr_array_free (subchans, TRUE);
10557	
10558		nm_setting_wired_add_s390_option (s_wired, "portname", "FOOBAR");
10559		nm_setting_wired_add_s390_option (s_wired, "portno", "1");
10560		nm_setting_wired_add_s390_option (s_wired, "layer2", "0");
10561		nm_setting_wired_add_s390_option (s_wired, "protocol", "blahbalh");
10562	
10563		/* IP4 setting */
10564		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
10565		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
10566	
10567		g_object_set (s_ip4,
10568		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
10569		              NULL);
10570	
10571		/* IP6 setting */
10572		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
10573		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
10574	
10575		g_object_set (s_ip6,
10576		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
10577		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
10578		              NULL);
10579	
10580		/* Verify */
10581		ASSERT (nm_connection_verify (connection, &error) == TRUE,
10582		        "wired-qeth-dhcp-write", "failed to verify connection: %s",
10583		        (error && error->message) ? error->message : "(unknown)");
10584	
10585		/* Save the ifcfg */
10586		success = writer_new_connection (connection,
10587		                                 TEST_SCRATCH_DIR "/network-scripts/",
10588		                                 &testfile,
10589		                                 &error);
10590		ASSERT (success == TRUE,
10591		        "wired-qeth-dhcp-write", "failed to write connection to disk: %s",
10592		        (error && error->message) ? error->message : "(unknown)");
10593	
10594		ASSERT (testfile != NULL,
10595		        "wired-qeth-dhcp-write", "didn't get ifcfg file path back after writing connection");
10596	
10597		/* reread will be normalized, so we must normalize connection too. */
10598		nm_utils_normalize_connection (connection, TRUE);
10599	
10600		/* re-read the connection for comparison */
10601		reread = connection_from_file (testfile,
10602		                               NULL,
10603		                               TYPE_ETHERNET,
10604		                               NULL,
10605		                               &unmanaged,
10606		                               &keyfile,
10607		                               &routefile,
10608		                               &route6file,
10609		                               &error,
10610		                               &ignore_error);
10611		unlink (testfile);
10612	
10613		ASSERT (reread != NULL,
10614		        "wired-qeth-dhcp-write-reread", "failed to read %s: %s", testfile, error->message);
10615	
10616		ASSERT (nm_connection_verify (reread, &error),
10617		        "wired-qeth-dhcp-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
10618	
10619		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
10620		        "wired-qeth-dhcp-write", "written and re-read connection weren't the same.");
10621	
10622		if (route6file)
10623			unlink (route6file);
10624	
10625		g_free (testfile);
10626		g_free (unmanaged);
10627		g_free (keyfile);
10628		g_free (routefile);
10629		g_free (route6file);
10630		g_object_unref (connection);
10631		g_object_unref (reread);
10632	}
10633	
10634	static void
10635	test_write_wired_ctc_dhcp (void)
10636	{
10637		NMConnection *connection;
10638		NMConnection *reread;
10639		NMSettingConnection *s_con;
10640		NMSettingWired *s_wired;
10641		NMSettingIP4Config *s_ip4;
10642		NMSettingIP6Config *s_ip6;
10643		char *uuid;
10644		GPtrArray *subchans;
10645		gboolean success;
10646		GError *error = NULL;
10647		char *testfile = NULL;
10648		char *unmanaged = NULL;
10649		char *keyfile = NULL;
10650		char *routefile = NULL;
10651		char *route6file = NULL;
10652		gboolean ignore_error = FALSE;
10653		shvarFile *ifcfg;
10654		char *tmp;
10655	
10656		connection = nm_connection_new ();
10657		g_assert (connection);
10658	
10659		/* Connection setting */
10660		s_con = (NMSettingConnection *) nm_setting_connection_new ();
10661		g_assert (s_con);
10662		nm_connection_add_setting (connection, NM_SETTING (s_con));
10663	
10664		uuid = nm_utils_uuid_generate ();
10665		g_object_set (s_con,
10666		              NM_SETTING_CONNECTION_ID, "Test Write Wired ctc Static",
10667		              NM_SETTING_CONNECTION_UUID, uuid,
10668		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
10669		              NULL);
10670		g_free (uuid);
10671	
10672		/* Wired setting */
10673		s_wired = (NMSettingWired *) nm_setting_wired_new ();
10674		g_assert (s_wired);
10675		nm_connection_add_setting (connection, NM_SETTING (s_wired));
10676	
10677		subchans = g_ptr_array_sized_new (2);
10678		g_ptr_array_add (subchans, "0.0.600");
10679		g_ptr_array_add (subchans, "0.0.601");
10680		g_object_set (s_wired,
10681		              NM_SETTING_WIRED_S390_SUBCHANNELS, subchans,
10682		              NM_SETTING_WIRED_S390_NETTYPE, "ctc",
10683		              NULL);
10684		g_ptr_array_free (subchans, TRUE);
10685		nm_setting_wired_add_s390_option (s_wired, "ctcprot", "0");
10686	
10687		/* IP4 setting */
10688		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
10689		g_assert (s_ip4);
10690		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
10691		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
10692	
10693		/* IP6 setting */
10694		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
10695		g_assert (s_ip6);
10696		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
10697	
10698		g_object_set (s_ip6,
10699		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
10700		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
10701		              NULL);
10702	
10703		/* Verify */
10704		success = nm_connection_verify (connection, &error);
10705		g_assert_no_error (error);
10706		g_assert (success);
10707	
10708		/* Save the ifcfg */
10709		success = writer_new_connection (connection,
10710		                                 TEST_SCRATCH_DIR "/network-scripts/",
10711		                                 &testfile,
10712		                                 &error);
10713		g_assert_no_error (error);
10714		g_assert (success);
10715		g_assert (testfile != NULL);
10716	
10717		/* Ensure the CTCPROT item gets written out as it's own option */
10718		ifcfg = svNewFile (testfile);
10719		g_assert (ifcfg);
10720	
10721		tmp = svGetValue (ifcfg, "CTCPROT", TRUE);
10722		g_assert (tmp);
10723		g_assert_cmpstr (tmp, ==, "0");
10724		g_free (tmp);
10725	
10726		/* And that it's not in the generic OPTIONS string */
10727		tmp = svGetValue (ifcfg, "OPTIONS", TRUE);
10728		g_assert (tmp == NULL);
10729		g_free (tmp);
10730	
10731		svCloseFile (ifcfg);
10732	
10733		/* reread will be normalized, so we must normalize connection too. */
10734		nm_utils_normalize_connection (connection, TRUE);
10735	
10736		/* re-read the connection for comparison */
10737		reread = connection_from_file (testfile,
10738		                               NULL,
10739		                               TYPE_ETHERNET,
10740		                               NULL,
10741		                               &unmanaged,
10742		                               &keyfile,
10743		                               &routefile,
10744		                               &route6file,
10745		                               &error,
10746		                               &ignore_error);
10747		unlink (testfile);
10748	
10749		g_assert (reread);
10750		success = nm_connection_verify (reread, &error);
10751		g_assert_no_error (error);
10752		g_assert (success);
10753	
10754		success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
10755		g_assert (success);
10756	
10757		if (route6file)
10758			unlink (route6file);
10759	
10760		g_free (testfile);
10761		g_free (unmanaged);
10762		g_free (keyfile);
10763		g_free (routefile);
10764		g_free (route6file);
10765		g_object_unref (connection);
10766		g_object_unref (reread);
10767	}
10768	
10769	static void
10770	test_write_permissions (void)
10771	{
10772		NMConnection *connection;
10773		NMConnection *reread;
10774		NMSettingConnection *s_con;
10775		NMSettingWired *s_wired;
10776		NMSettingIP4Config *s_ip4;
10777		NMSettingIP6Config *s_ip6;
10778		char *uuid;
10779		gboolean success;
10780		GError *error = NULL;
10781		char *testfile = NULL;
10782		char *unmanaged = NULL;
10783		char *keyfile = NULL;
10784		char *routefile = NULL;
10785		char *route6file = NULL;
10786		gboolean ignore_error = FALSE;
10787	
10788		connection = nm_connection_new ();
10789	
10790		/* Connection setting */
10791		s_con = (NMSettingConnection *) nm_setting_connection_new ();
10792		nm_connection_add_setting (connection, NM_SETTING (s_con));
10793	
10794		uuid = nm_utils_uuid_generate ();
10795		g_object_set (s_con,
10796		              NM_SETTING_CONNECTION_ID, "Test Write Permissions",
10797		              NM_SETTING_CONNECTION_UUID, uuid,
10798		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
10799		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
10800		              NULL);
10801		g_free (uuid);
10802	
10803		nm_setting_connection_add_permission (s_con, "user", "blahblah", NULL);
10804		nm_setting_connection_add_permission (s_con, "user", "foobar", NULL);
10805		nm_setting_connection_add_permission (s_con, "user", "asdfasdf", NULL);
10806	
10807		/* Wired setting */
10808		s_wired = (NMSettingWired *) nm_setting_wired_new ();
10809		nm_connection_add_setting (connection, NM_SETTING (s_wired));
10810	
10811		/* IP4 setting */
10812		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
10813		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
10814	
10815		g_object_set (s_ip4,
10816		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
10817		              NULL);
10818	
10819		/* IP6 setting */
10820		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
10821		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
10822	
10823		g_object_set (s_ip6,
10824		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
10825		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
10826		              NULL);
10827	
10828		/* Verify */
10829		ASSERT (nm_connection_verify (connection, &error) == TRUE,
10830		        "permissions-write", "failed to verify connection: %s",
10831		        (error && error->message) ? error->message : "(unknown)");
10832	
10833		/* Save the ifcfg */
10834		success = writer_new_connection (connection,
10835		                                 TEST_SCRATCH_DIR "/network-scripts/",
10836		                                 &testfile,
10837		                                 &error);
10838		ASSERT (success == TRUE,
10839		        "permissions-write", "failed to write connection to disk: %s",
10840		        (error && error->message) ? error->message : "(unknown)");
10841	
10842		ASSERT (testfile != NULL,
10843		        "permissions-write", "didn't get ifcfg file path back after writing connection");
10844	
10845		/* reread will be normalized, so we must normalize connection too. */
10846		nm_utils_normalize_connection (connection, TRUE);
10847	
10848		/* re-read the connection for comparison */
10849		reread = connection_from_file (testfile,
10850		                               NULL,
10851		                               TYPE_ETHERNET,
10852		                               NULL,
10853		                               &unmanaged,
10854		                               &keyfile,
10855		                               &routefile,
10856		                               &route6file,
10857		                               &error,
10858		                               &ignore_error);
10859		unlink (testfile);
10860	
10861		ASSERT (reread != NULL,
10862		        "permissions-write-reread", "failed to read %s: %s", testfile, error->message);
10863	
10864		ASSERT (nm_connection_verify (reread, &error),
10865		        "permissions-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
10866	
10867		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
10868		        "permissions-write", "written and re-read connection weren't the same.");
10869	
10870		if (route6file)
10871			unlink (route6file);
10872	
10873		g_free (testfile);
10874		g_free (unmanaged);
10875		g_free (keyfile);
10876		g_free (routefile);
10877		g_free (route6file);
10878		g_object_unref (connection);
10879		g_object_unref (reread);
10880	}
10881	
10882	static void
10883	test_write_wifi_wep_agent_keys (void)
10884	{
10885		NMConnection *connection;
10886		NMConnection *reread;
10887		NMSettingConnection *s_con;
10888		NMSettingWireless *s_wifi;
10889		NMSettingWirelessSecurity *s_wsec;
10890		NMSettingIP4Config *s_ip4;
10891		NMSettingIP6Config *s_ip6;
10892		char *uuid;
10893		const char *str_ssid = "foobarbaz";
10894		GByteArray *ssid;
10895		gboolean success;
10896		GError *error = NULL;
10897		char *testfile = NULL;
10898		char *unmanaged = NULL;
10899		char *keyfile = NULL;
10900		char *routefile = NULL;
10901		char *route6file = NULL;
10902		gboolean ignore_error = FALSE;
10903	
10904		connection = nm_connection_new ();
10905		g_assert (connection != NULL);
10906	
10907		/* Connection setting */
10908		s_con = (NMSettingConnection *) nm_setting_connection_new ();
10909		g_assert (s_con);
10910		nm_connection_add_setting (connection, NM_SETTING (s_con));
10911	
10912		uuid = nm_utils_uuid_generate ();
10913		g_object_set (s_con,
10914		              NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP Agent Owned",
10915		              NM_SETTING_CONNECTION_UUID, uuid,
10916		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
10917		              NULL);
10918		g_free (uuid);
10919	
10920		/* IP4 setting */
10921		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
10922		g_assert (s_ip4);
10923		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
10924		g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
10925	
10926		/* IP6 setting */
10927		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
10928		g_assert (s_ip6);
10929		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
10930	
10931		g_object_set (s_ip6,
10932		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
10933		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
10934		              NULL);
10935	
10936		/* Wifi setting */
10937		s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
10938		g_assert (s_wifi);
10939		nm_connection_add_setting (connection, NM_SETTING (s_wifi));
10940	
10941		ssid = g_byte_array_sized_new (strlen (str_ssid));
10942		g_byte_array_append (ssid, (guint8 *) str_ssid, strlen (str_ssid));
10943		g_object_set (s_wifi,
10944		              NM_SETTING_WIRELESS_SSID, ssid,
10945		              NM_SETTING_WIRELESS_MODE, "infrastructure",
10946		              NULL);
10947		g_byte_array_free (ssid, TRUE);
10948	
10949		/* Wifi security setting */
10950		s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
10951		g_assert (s_wsec);
10952		nm_connection_add_setting (connection, NM_SETTING (s_wsec));
10953	
10954		g_object_set (s_wsec,
10955		              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
10956		              NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_PASSPHRASE,
10957		              NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, NM_SETTING_SECRET_FLAG_AGENT_OWNED,
10958		              NULL);
10959		nm_setting_wireless_security_set_wep_key (s_wsec, 0, "asdfdjaslfjasd;flasjdfl;aksdf");
10960	
10961		/* Verify */
10962		success = nm_connection_verify (connection, &error);
10963		g_assert_no_error (error);
10964		g_assert (success);
10965	
10966		/* Save the ifcfg */
10967		success = writer_new_connection (connection,
10968		                                 TEST_SCRATCH_DIR "/network-scripts/",
10969		                                 &testfile,
10970		                                 &error);
10971		g_assert_no_error (error);
10972		g_assert (success);
10973		g_assert (testfile != NULL);
10974	
10975		/* reread will be normalized, so we must normalize connection too. */
10976		nm_utils_normalize_connection (connection, TRUE);
10977	
10978		/* re-read the connection for comparison */
10979		reread = connection_from_file (testfile,
10980		                               NULL,
10981		                               TYPE_WIRELESS,
10982		                               NULL,
10983		                               &unmanaged,
10984		                               &keyfile,
10985		                               &routefile,
10986		                               &route6file,
10987		                               &error,
10988		                               &ignore_error);
10989		unlink (testfile);
10990	
10991		g_assert_no_error (error);
10992		g_assert (reread);
10993	
10994		success = nm_connection_verify (reread, &error);
10995		g_assert_no_error (error);
10996		g_assert (success);
10997	
10998		/* Remove the WEP key from the original, because it should not have been
10999		 * written out to disk as it was agent-owned.  The new connection should
11000		 * not have any WEP keys set.
11001		 * Also the new connection should not have WEP key type set.
11002		 */
11003		nm_setting_wireless_security_set_wep_key (s_wsec, 0, NULL);
11004		g_object_set (s_wsec,
11005		              NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_UNKNOWN,
11006		              NULL);
11007	
11008		/* Compare original and reread */
11009		success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
11010		g_assert (success);
11011	
11012		if (route6file)
11013			unlink (route6file);
11014	
11015		g_free (testfile);
11016		g_free (unmanaged);
11017		g_free (keyfile);
11018		g_free (routefile);
11019		g_free (route6file);
11020		g_object_unref (connection);
11021		g_object_unref (reread);
11022	}
11023	
11024	static void
11025	test_write_wired_pppoe (void)
11026	{
11027		NMConnection *connection;
11028		NMSettingConnection *s_con;
11029		NMSettingWired *s_wired;
11030		NMSettingIP4Config *s_ip4;
11031		NMSettingPPPOE *s_pppoe;
11032		NMSettingPPP *s_ppp;
11033		char *uuid;
11034		gboolean success;
11035		GError *error = NULL;
11036		char *testfile = NULL;
11037	
11038		connection = nm_connection_new ();
11039	
11040		/* Connection setting */
11041		s_con = (NMSettingConnection *) nm_setting_connection_new ();
11042		nm_connection_add_setting (connection, NM_SETTING (s_con));
11043	
11044		uuid = nm_utils_uuid_generate ();
11045		g_object_set (s_con,
11046		              NM_SETTING_CONNECTION_ID, "Test Write Wired PPPoE",
11047		              NM_SETTING_CONNECTION_UUID, uuid,
11048		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
11049		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
11050		              NULL);
11051		g_free (uuid);
11052	
11053		/* Wired setting */
11054		s_wired = (NMSettingWired *) nm_setting_wired_new ();
11055		nm_connection_add_setting (connection, NM_SETTING (s_wired));
11056	
11057		/* IP4 setting */
11058		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
11059		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
11060	
11061		g_object_set (s_ip4,
11062		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
11063		              NULL);
11064	
11065		/* PPPoE setting */
11066		s_pppoe = (NMSettingPPPOE *) nm_setting_pppoe_new ();
11067		nm_connection_add_setting (connection, NM_SETTING (s_pppoe));
11068	
11069		g_object_set (G_OBJECT (s_pppoe),
11070		              NM_SETTING_PPPOE_SERVICE, "stupid-service",
11071		              NM_SETTING_PPPOE_USERNAME, "Bill Smith",
11072		              NM_SETTING_PPPOE_PASSWORD, "test1",
11073		              NULL);
11074	
11075		/* PPP setting */
11076		s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
11077		nm_connection_add_setting (connection, NM_SETTING (s_ppp));
11078	
11079		ASSERT (nm_connection_verify (connection, &error) == TRUE,
11080		        "wired-pppoe-write", "failed to verify connection: %s",
11081		        (error && error->message) ? error->message : "(unknown)");
11082	
11083		/* Save the ifcfg */
11084		success = writer_new_connection (connection,
11085		                                 TEST_SCRATCH_DIR "/network-scripts/",
11086		                                 &testfile,
11087		                                 &error);
11088		ASSERT (success == FALSE,
11089		        "wired-pppoe-write", "unexpected success writing connection to disk");
11090	
11091		g_object_unref (connection);
11092	}
11093	
11094	static void
11095	test_write_vpn (void)
11096	{
11097		NMConnection *connection;
11098		NMSettingConnection *s_con;
11099		NMSettingIP4Config *s_ip4;
11100		NMSettingVPN *s_vpn;
11101		char *uuid;
11102		gboolean success;
11103		GError *error = NULL;
11104		char *testfile = NULL;
11105	
11106		connection = nm_connection_new ();
11107	
11108		/* Connection setting */
11109		s_con = (NMSettingConnection *) nm_setting_connection_new ();
11110		nm_connection_add_setting (connection, NM_SETTING (s_con));
11111	
11112		uuid = nm_utils_uuid_generate ();
11113		g_object_set (s_con,
11114		              NM_SETTING_CONNECTION_ID, "Test Write VPN",
11115		              NM_SETTING_CONNECTION_UUID, uuid,
11116		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
11117		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_VPN_SETTING_NAME,
11118		              NULL);
11119		g_free (uuid);
11120	
11121		/* VPN setting */
11122		s_vpn = (NMSettingVPN *) nm_setting_vpn_new ();
11123		nm_connection_add_setting (connection, NM_SETTING (s_vpn));
11124	
11125		g_object_set (s_vpn,
11126		              NM_SETTING_VPN_SERVICE_TYPE, "awesomevpn",
11127		              NM_SETTING_VPN_USER_NAME, "Bill Smith",
11128		              NULL);
11129	
11130		nm_setting_vpn_add_data_item (s_vpn, "server", "vpn.somewhere.com");
11131		nm_setting_vpn_add_secret (s_vpn, "password", "sup3rs3cr3t");
11132	
11133		/* IP4 setting */
11134		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
11135		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
11136	
11137		g_object_set (s_ip4,
11138		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
11139		              NULL);
11140	
11141		ASSERT (nm_connection_verify (connection, &error) == TRUE,
11142		        "vpn-write", "failed to verify connection: %s",
11143		        (error && error->message) ? error->message : "(unknown)");
11144	
11145		/* Save the ifcfg */
11146		success = writer_new_connection (connection,
11147		                                 TEST_SCRATCH_DIR "/network-scripts/",
11148		                                 &testfile,
11149		                                 &error);
11150		ASSERT (success == FALSE,
11151		        "vpn-write", "unexpected success writing connection to disk");
11152	
11153		g_object_unref (connection);
11154	}
11155	
11156	static void
11157	test_write_mobile_broadband (gboolean gsm)
11158	{
11159		NMConnection *connection;
11160		NMSettingConnection *s_con;
11161		NMSettingIP4Config *s_ip4;
11162		NMSettingGsm *s_gsm;
11163		NMSettingCdma *s_cdma;
11164		NMSettingPPP *s_ppp;
11165		NMSettingSerial *s_serial;
11166		char *uuid;
11167		gboolean success;
11168		GError *error = NULL;
11169		char *testfile = NULL;
11170	
11171		connection = nm_connection_new ();
11172	
11173		/* Connection setting */
11174		s_con = (NMSettingConnection *) nm_setting_connection_new ();
11175		nm_connection_add_setting (connection, NM_SETTING (s_con));
11176	
11177		uuid = nm_utils_uuid_generate ();
11178		g_object_set (s_con,
11179		              NM_SETTING_CONNECTION_ID, gsm ? "Test Write GSM" : "Test Write CDMA",
11180		              NM_SETTING_CONNECTION_UUID, uuid,
11181		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
11182		              NM_SETTING_CONNECTION_TYPE, gsm ? NM_SETTING_GSM_SETTING_NAME : NM_SETTING_CDMA_SETTING_NAME,
11183		              NULL);
11184		g_free (uuid);
11185	
11186		if (gsm) {
11187			/* GSM setting */
11188			s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
11189			nm_connection_add_setting (connection, NM_SETTING (s_gsm));
11190	
11191			g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "*99#", NULL);
11192		} else {
11193			/* CDMA setting */
11194			s_cdma = (NMSettingCdma *) nm_setting_cdma_new ();
11195			nm_connection_add_setting (connection, NM_SETTING (s_cdma));
11196	
11197			g_object_set (s_cdma, NM_SETTING_CDMA_NUMBER, "#777", NULL);
11198		}
11199	
11200		/* Serial setting */
11201		s_serial = (NMSettingSerial *) nm_setting_serial_new ();
11202		nm_connection_add_setting (connection, NM_SETTING (s_serial));
11203	
11204		g_object_set (s_serial,
11205		              NM_SETTING_SERIAL_BAUD, 115200,
11206		              NM_SETTING_SERIAL_BITS, 8,
11207		              NM_SETTING_SERIAL_PARITY, 'n',
11208		              NM_SETTING_SERIAL_STOPBITS, 1,
11209		              NULL);
11210	
11211		/* IP4 setting */
11212		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
11213		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
11214	
11215		g_object_set (s_ip4,
11216		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
11217		              NULL);
11218	
11219		/* PPP setting */
11220		s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
11221		nm_connection_add_setting (connection, NM_SETTING (s_ppp));
11222	
11223		ASSERT (nm_connection_verify (connection, &error) == TRUE,
11224		        "mobile-broadband-write", "failed to verify connection: %s",
11225		        (error && error->message) ? error->message : "(unknown)");
11226	
11227		/* Save the ifcfg */
11228		success = writer_new_connection (connection,
11229		                                 TEST_SCRATCH_DIR "/network-scripts/",
11230		                                 &testfile,
11231		                                 &error);
11232		ASSERT (success == FALSE,
11233		        "mobile-broadband-write", "unexpected success writing connection to disk");
11234	
11235		g_object_unref (connection);
11236	}
11237	
11238	#define TEST_IFCFG_BRIDGE_MAIN TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bridge-main"
11239	
11240	static void
11241	test_read_bridge_main (void)
11242	{
11243		NMConnection *connection;
11244		NMSettingBridge *s_bridge;
11245		char *unmanaged = NULL;
11246		char *keyfile = NULL;
11247		char *routefile = NULL;
11248		char *route6file = NULL;
11249		gboolean ignore_error = FALSE;
11250		GError *error = NULL;
11251	
11252		connection = connection_from_file (TEST_IFCFG_BRIDGE_MAIN,
11253		                                   NULL,
11254		                                   TYPE_ETHERNET,
11255		                                   NULL,
11256		                                   &unmanaged,
11257		                                   &keyfile,
11258		                                   &routefile,
11259		                                   &route6file,
11260		                                   &error,
11261		                                   &ignore_error);
11262		g_assert (connection);
11263		g_assert (nm_connection_verify (connection, &error));
11264		g_assert_no_error (error);
11265	
11266		/* ===== Bridging SETTING ===== */
11267	
11268		s_bridge = nm_connection_get_setting_bridge (connection);
11269		g_assert (s_bridge);
11270		g_assert_cmpstr (nm_setting_bridge_get_interface_name (s_bridge), ==, "br0");
11271		g_assert_cmpuint (nm_setting_bridge_get_forward_delay (s_bridge), ==, 0);
11272		g_assert (nm_setting_bridge_get_stp (s_bridge));
11273		g_assert_cmpuint (nm_setting_bridge_get_priority (s_bridge), ==, 32744);
11274		g_assert_cmpuint (nm_setting_bridge_get_hello_time (s_bridge), ==, 7);
11275		g_assert_cmpuint (nm_setting_bridge_get_max_age (s_bridge), ==, 39);
11276		g_assert_cmpuint (nm_setting_bridge_get_ageing_time (s_bridge), ==, 235352);
11277	
11278		g_free (unmanaged);
11279		g_free (keyfile);
11280		g_free (routefile);
11281		g_free (route6file);
11282		g_object_unref (connection);
11283	}
11284	
11285	static void
11286	test_write_bridge_main (void)
11287	{
11288		NMConnection *connection;
11289		NMConnection *reread;
11290		NMSettingConnection *s_con;
11291		NMSettingBridge *s_bridge;
11292		NMSettingIP4Config *s_ip4;
11293		NMSettingIP6Config *s_ip6;
11294		char *uuid;
11295		const guint32 ip1 = htonl (0x01010103);
11296		const guint32 gw = htonl (0x01010101);
11297		const guint32 prefix = 24;
11298		NMIP4Address *addr;
11299		gboolean success;
11300		GError *error = NULL;
11301		char *testfile = NULL;
11302		char *unmanaged = NULL;
11303		char *keyfile = NULL;
11304		char *routefile = NULL;
11305		char *route6file = NULL;
11306		gboolean ignore_error = FALSE;
11307	
11308		connection = nm_connection_new ();
11309		g_assert (connection);
11310	
11311		/* Connection setting */
11312		s_con = (NMSettingConnection *) nm_setting_connection_new ();
11313		g_assert (s_con);
11314		nm_connection_add_setting (connection, NM_SETTING (s_con));
11315	
11316		uuid = nm_utils_uuid_generate ();
11317		g_object_set (s_con,
11318		              NM_SETTING_CONNECTION_ID, "Test Write Bridge Main",
11319		              NM_SETTING_CONNECTION_UUID, uuid,
11320		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
11321		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_BRIDGE_SETTING_NAME,
11322		              NULL);
11323		g_free (uuid);
11324	
11325		/* bridge setting */
11326		s_bridge = (NMSettingBridge *) nm_setting_bridge_new ();
11327		g_assert (s_bridge);
11328		nm_connection_add_setting (connection, NM_SETTING (s_bridge));
11329	
11330		g_object_set (s_bridge,
11331		              NM_SETTING_BRIDGE_INTERFACE_NAME, "br0",
11332		              NULL);
11333	
11334		/* IP4 setting */
11335		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
11336		g_assert (s_ip4);
11337		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
11338	
11339		g_object_set (s_ip4,
11340		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
11341		              NM_SETTING_IP4_CONFIG_MAY_FAIL, TRUE,
11342		              NULL);
11343	
11344		addr = nm_ip4_address_new ();
11345		nm_ip4_address_set_address (addr, ip1);
11346		nm_ip4_address_set_prefix (addr, prefix);
11347		nm_ip4_address_set_gateway (addr, gw);
11348		nm_setting_ip4_config_add_address (s_ip4, addr);
11349		nm_ip4_address_unref (addr);
11350	
11351		/* IP6 setting */
11352		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
11353		g_assert (s_ip6);
11354		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
11355	
11356		g_object_set (s_ip6,
11357		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
11358		              NULL);
11359	
11360		g_assert (nm_connection_verify (connection, &error));
11361		g_assert_no_error (error);
11362	
11363		/* Save the ifcfg */
11364		success = writer_new_connection (connection,
11365		                                 TEST_SCRATCH_DIR "/network-scripts/",
11366		                                 &testfile,
11367		                                 &error);
11368		g_assert (success);
11369		g_assert_cmpstr (testfile, !=, NULL);
11370	
11371		/* reread will be normalized, so we must normalize connection too. */
11372		nm_utils_normalize_connection (connection, TRUE);
11373	
11374		/* re-read the connection for comparison */
11375		reread = connection_from_file (testfile,
11376		                               NULL,
11377		                               TYPE_BRIDGE,
11378		                               NULL,
11379		                               &unmanaged,
11380		                               &keyfile,
11381		                               &routefile,
11382		                               &route6file,
11383		                               &error,
11384		                               &ignore_error);
11385		unlink (testfile);
11386	
11387		g_assert (reread);
11388		g_assert (nm_connection_verify (reread, &error));
11389		g_assert_no_error (error);
11390		g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
11391	
11392		g_free (testfile);
11393		g_free (unmanaged);
11394		g_free (keyfile);
11395		g_free (routefile);
11396		g_free (route6file);
11397		g_object_unref (connection);
11398		g_object_unref (reread);
11399	}
11400	
11401	#define TEST_IFCFG_BRIDGE_COMPONENT TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bridge-component"
11402	
11403	static void
11404	test_read_bridge_component (void)
11405	{
11406		NMConnection *connection;
11407		NMSettingConnection *s_con;
11408		NMSettingBridgePort *s_port;
11409		char *unmanaged = NULL;
11410		char *keyfile = NULL;
11411		char *routefile = NULL;
11412		char *route6file = NULL;
11413		gboolean ignore_error = FALSE;
11414		GError *error = NULL;
11415		gboolean success;
11416	
11417		connection = connection_from_file (TEST_IFCFG_BRIDGE_COMPONENT,
11418		                                   NULL,
11419		                                   TYPE_ETHERNET,
11420		                                   NULL,
11421		                                   &unmanaged,
11422		                                   &keyfile,
11423		                                   &routefile,
11424		                                   &route6file,
11425		                                   &error,
11426		                                   &ignore_error);
11427		g_assert (connection);
11428	
11429		success = nm_connection_verify (connection, &error);
11430		g_assert_no_error (error);
11431		g_assert (success);
11432	
11433		s_con = nm_connection_get_setting_connection (connection);
11434		g_assert (s_con);
11435		g_assert_cmpstr (nm_setting_connection_get_master (s_con), ==, "br0");
11436		g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME);
11437	
11438		s_port = nm_connection_get_setting_bridge_port (connection);
11439		g_assert (s_port);
11440		g_assert (nm_setting_bridge_port_get_hairpin_mode (s_port));
11441		g_assert_cmpuint (nm_setting_bridge_port_get_priority (s_port), ==, 28);
11442		g_assert_cmpuint (nm_setting_bridge_port_get_path_cost (s_port), ==, 100);
11443	
11444		g_free (unmanaged);
11445		g_free (keyfile);
11446		g_free (routefile);
11447		g_free (route6file);
11448		g_object_unref (connection);
11449	}
11450	
11451	static void
11452	test_write_bridge_component (void)
11453	{
11454		NMConnection *connection;
11455		NMConnection *reread;
11456		NMSettingConnection *s_con;
11457		NMSettingWired *s_wired;
11458		NMSetting *s_port;
11459		static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
11460		GByteArray *mac;
11461		guint32 mtu = 1492;
11462		char *uuid;
11463		gboolean success;
11464		GError *error = NULL;
11465		char *testfile = NULL;
11466		char *unmanaged = NULL;
11467		char *keyfile = NULL;
11468		char *routefile = NULL;
11469		char *route6file = NULL;
11470		gboolean ignore_error = FALSE;
11471	
11472		connection = nm_connection_new ();
11473		g_assert (connection);
11474	
11475		/* Connection setting */
11476		s_con = (NMSettingConnection *) nm_setting_connection_new ();
11477		g_assert (s_con);
11478		nm_connection_add_setting (connection, NM_SETTING (s_con));
11479	
11480		uuid = nm_utils_uuid_generate ();
11481		g_object_set (s_con,
11482		              NM_SETTING_CONNECTION_ID, "Test Write Bridge Component",
11483		              NM_SETTING_CONNECTION_UUID, uuid,
11484		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
11485		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
11486					  NM_SETTING_CONNECTION_MASTER, "br0",
11487					  NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BRIDGE_SETTING_NAME,
11488		              NULL);
11489		g_free (uuid);
11490	
11491		/* Wired setting */
11492		s_wired = (NMSettingWired *) nm_setting_wired_new ();
11493		g_assert (s_wired);
11494		nm_connection_add_setting (connection, NM_SETTING (s_wired));
11495	
11496		mac = g_byte_array_sized_new (sizeof (tmpmac));
11497		g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
11498	
11499		g_object_set (s_wired,
11500		              NM_SETTING_WIRED_MAC_ADDRESS, mac,
11501		              NM_SETTING_WIRED_MTU, mtu,
11502		              NULL);
11503		g_byte_array_free (mac, TRUE);
11504	
11505		/* Bridge port */
11506		s_port = nm_setting_bridge_port_new ();
11507		nm_connection_add_setting (connection, s_port);
11508		g_object_set (s_port,
11509		              NM_SETTING_BRIDGE_PORT_PRIORITY, 50,
11510		              NM_SETTING_BRIDGE_PORT_PATH_COST, 33,
11511		              NULL);
11512	
11513		success = nm_connection_verify (connection, &error);
11514		g_assert_no_error (error);
11515		g_assert (success);
11516	
11517		/* Save the ifcfg */
11518		success = writer_new_connection (connection,
11519		                                 TEST_SCRATCH_DIR "/network-scripts/",
11520		                                 &testfile,
11521		                                 &error);
11522		g_assert_no_error (error);
11523		g_assert (success);
11524		g_assert (testfile);
11525	
11526		/* reread will be normalized, so we must normalize connection too. */
11527		nm_utils_normalize_connection (connection, TRUE);
11528	
11529		/* re-read the connection for comparison */
11530		reread = connection_from_file (testfile,
11531		                               NULL,
11532		                               TYPE_ETHERNET,
11533		                               NULL,
11534		                               &unmanaged,
11535		                               &keyfile,
11536		                               &routefile,
11537		                               &route6file,
11538		                               &error,
11539		                               &ignore_error);
11540		unlink (testfile);
11541	
11542		g_assert (reread);
11543	
11544		success = nm_connection_verify (reread, &error);
11545		g_assert_no_error (error);
11546	
11547		g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
11548	
11549		if (route6file)
11550			unlink (route6file);
11551	
11552		g_free (testfile);
11553		g_free (unmanaged);
11554		g_free (keyfile);
11555		g_free (routefile);
11556		g_free (route6file);
11557		g_object_unref (connection);
11558		g_object_unref (reread);
11559	}
11560	
11561	static void
11562	test_read_bridge_missing_stp (void)
11563	{
11564		NMConnection *connection;
11565		NMSettingBridge *s_bridge;
11566		char *unmanaged = NULL;
11567		char *keyfile = NULL;
11568		char *routefile = NULL;
11569		char *route6file = NULL;
11570		gboolean ignore_error = FALSE;
11571		GError *error = NULL;
11572	
11573		connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bridge-missing-stp",
11574		                                   NULL,
11575		                                   TYPE_BRIDGE,
11576		                                   NULL,
11577		                                   &unmanaged,
11578		                                   &keyfile,
11579		                                   &routefile,
11580		                                   &route6file,
11581		                                   &error,
11582		                                   &ignore_error);
11583		g_assert (connection);
11584		g_assert (nm_connection_verify (connection, &error));
11585		g_assert_no_error (error);
11586	
11587		/* ===== Bridging SETTING ===== */
11588	
11589		s_bridge = nm_connection_get_setting_bridge (connection);
11590		g_assert (s_bridge);
11591		g_assert_cmpstr (nm_setting_bridge_get_interface_name (s_bridge), ==, "br0");
11592		g_assert (nm_setting_bridge_get_stp (s_bridge) == FALSE);
11593	
11594		g_free (unmanaged);
11595		g_free (keyfile);
11596		g_free (routefile);
11597		g_free (route6file);
11598		g_object_unref (connection);
11599	}
11600	
11601	#define TEST_IFCFG_VLAN_INTERFACE TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-interface"
11602	
11603	static void
11604	test_read_vlan_interface (void)
11605	{
11606		NMConnection *connection;
11607		char *unmanaged = NULL;
11608		char *keyfile = NULL;
11609		char *routefile = NULL;
11610		char *route6file = NULL;
11611		gboolean ignore_error = FALSE;
11612		GError *error = NULL;
11613		NMSettingVlan *s_vlan;
11614		guint32 from = 0, to = 0;
11615	
11616		connection = connection_from_file (TEST_IFCFG_VLAN_INTERFACE,
11617		                                   NULL,
11618		                                   TYPE_ETHERNET,
11619		                                   NULL,
11620		                                   &unmanaged,
11621		                                   &keyfile,
11622		                                   &routefile,
11623		                                   &route6file,
11624		                                   &error,
11625		                                   &ignore_error);
11626		g_assert_no_error (error);
11627		g_assert (connection != NULL);
11628	
11629		g_free (unmanaged);
11630		g_free (keyfile);
11631		g_free (routefile);
11632		g_free (route6file);
11633	
11634		s_vlan = nm_connection_get_setting_vlan (connection);
11635		g_assert (s_vlan);
11636	
11637		g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, "vlan43");
11638		g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth9");
11639		g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 43);
11640		g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==,
11641		                 NM_VLAN_FLAG_GVRP | NM_VLAN_FLAG_LOOSE_BINDING);
11642	
11643		/* Ingress map */
11644		g_assert_cmpint (nm_setting_vlan_get_num_priorities (s_vlan, NM_VLAN_INGRESS_MAP), ==, 2);
11645	
11646		g_assert (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_INGRESS_MAP, 0, &from, &to));
11647		g_assert_cmpint (from, ==, 0);
11648		g_assert_cmpint (to, ==, 1);
11649	
11650		g_assert (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_INGRESS_MAP, 1, &from, &to));
11651		g_assert_cmpint (from, ==, 2);
11652		g_assert_cmpint (to, ==, 5);
11653	
11654		/* Egress map */
11655		g_assert_cmpint (nm_setting_vlan_get_num_priorities (s_vlan, NM_VLAN_EGRESS_MAP), ==, 3);
11656	
11657		g_assert (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_EGRESS_MAP, 0, &from, &to));
11658		g_assert_cmpint (from, ==, 12);
11659		g_assert_cmpint (to, ==, 3);
11660	
11661		g_assert (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_EGRESS_MAP, 1, &from, &to));
11662		g_assert_cmpint (from, ==, 14);
11663		g_assert_cmpint (to, ==, 7);
11664	
11665		g_assert (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_EGRESS_MAP, 2, &from, &to));
11666		g_assert_cmpint (from, ==, 3);
11667		g_assert_cmpint (to, ==, 1);
11668	
11669		g_object_unref (connection);
11670	}
11671	
11672	#define TEST_IFCFG_VLAN_ONLY_VLANID TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-only-vlanid"
11673	
11674	static void
11675	test_read_vlan_only_vlan_id (void)
11676	{
11677		NMConnection *connection;
11678		char *unmanaged = NULL;
11679		char *keyfile = NULL;
11680		char *routefile = NULL;
11681		char *route6file = NULL;
11682		gboolean ignore_error = FALSE;
11683		GError *error = NULL;
11684		NMSettingVlan *s_vlan;
11685	
11686		connection = connection_from_file (TEST_IFCFG_VLAN_ONLY_VLANID,
11687		                                   NULL,
11688		                                   TYPE_ETHERNET,
11689		                                   NULL,
11690		                                   &unmanaged,
11691		                                   &keyfile,
11692		                                   &routefile,
11693		                                   &route6file,
11694		                                   &error,
11695		                                   &ignore_error);
11696		g_assert_no_error (error);
11697		g_assert (connection != NULL);
11698	
11699		g_free (unmanaged);
11700		g_free (keyfile);
11701		g_free (routefile);
11702		g_free (route6file);
11703	
11704		s_vlan = nm_connection_get_setting_vlan (connection);
11705		g_assert (s_vlan);
11706	
11707		g_assert (nm_setting_vlan_get_interface_name (s_vlan) == NULL);
11708		g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth9");
11709		g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 43);
11710	
11711		g_object_unref (connection);
11712	}
11713	
11714	#define TEST_IFCFG_VLAN_ONLY_DEVICE TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-only-device"
11715	
11716	static void
11717	test_read_vlan_only_device (void)
11718	{
11719		NMConnection *connection;
11720		char *unmanaged = NULL;
11721		char *keyfile = NULL;
11722		char *routefile = NULL;
11723		char *route6file = NULL;
11724		gboolean ignore_error = FALSE;
11725		GError *error = NULL;
11726		NMSettingVlan *s_vlan;
11727	
11728		connection = connection_from_file (TEST_IFCFG_VLAN_ONLY_DEVICE,
11729		                                   NULL,
11730		                                   TYPE_ETHERNET,
11731		                                   NULL,
11732		                                   &unmanaged,
11733		                                   &keyfile,
11734		                                   &routefile,
11735		                                   &route6file,
11736		                                   &error,
11737		                                   &ignore_error);
11738		g_assert_no_error (error);
11739		g_assert (connection != NULL);
11740	
11741		g_free (unmanaged);
11742		g_free (keyfile);
11743		g_free (routefile);
11744		g_free (route6file);
11745	
11746		s_vlan = nm_connection_get_setting_vlan (connection);
11747		g_assert (s_vlan);
11748	
11749		g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, "eth0.9");
11750		g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth0");
11751		g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 9);
11752	
11753		g_object_unref (connection);
11754	}
11755	
11756	static void
11757	test_read_vlan_physdev (void)
11758	{
11759		NMConnection *connection;
11760		GError *error = NULL;
11761		NMSettingVlan *s_vlan;
11762	
11763		connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-physdev",
11764		                                   NULL, TYPE_ETHERNET, NULL, NULL,
11765		                                   NULL, NULL, NULL, &error, NULL);
11766		g_assert_no_error (error);
11767		g_assert (connection);
11768		g_assert (nm_connection_verify (connection, &error));
11769	
11770		s_vlan = nm_connection_get_setting_vlan (connection);
11771		g_assert (s_vlan);
11772	
11773		g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, "vlan0.3");
11774		g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth0");
11775		g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 3);
11776	
11777		g_object_unref (connection);
11778	}
11779	
11780	static void
11781	test_write_vlan (void)
11782	{
11783		NMConnection *connection;
11784		char *unmanaged = NULL;
11785		char *keyfile = NULL;
11786		char *routefile = NULL;
11787		char *route6file = NULL;
11788		char *written = NULL;
11789		gboolean ignore_error = FALSE;
11790		GError *error = NULL;
11791		gboolean success = FALSE;
11792	
11793		connection = connection_from_file (TEST_IFCFG_VLAN_INTERFACE,
11794		                                   NULL,
11795		                                   TYPE_VLAN,
11796		                                   NULL,
11797		                                   &unmanaged,
11798		                                   &keyfile,
11799		                                   &routefile,
11800		                                   &route6file,
11801		                                   &error,
11802		                                   &ignore_error);
11803		g_assert (connection != NULL);
11804	
11805		success = writer_new_connection (connection,
11806		                                 TEST_SCRATCH_DIR "/network-scripts/",
11807		                                 &written,
11808		                                 &error);
11809		g_assert (success);
11810	
11811		unlink (written);
11812		g_free (written);
11813	
11814		g_free (unmanaged);
11815		g_free (keyfile);
11816		g_free (routefile);
11817		g_free (route6file);
11818	}
11819	
11820	static void
11821	test_write_vlan_only_vlanid (void)
11822	{
11823		NMConnection *connection, *reread;
11824		char *unmanaged = NULL;
11825		char *keyfile = NULL;
11826		char *routefile = NULL;
11827		char *route6file = NULL;
11828		char *written = NULL;
11829		gboolean ignore_error = FALSE;
11830		GError *error = NULL;
11831		gboolean success = FALSE;
11832	
11833		connection = connection_from_file (TEST_IFCFG_VLAN_ONLY_VLANID,
11834		                                   NULL,
11835		                                   TYPE_VLAN,
11836		                                   NULL,
11837		                                   &unmanaged,
11838		                                   &keyfile,
11839		                                   &routefile,
11840		                                   &route6file,
11841		                                   &error,
11842		                                   &ignore_error);
11843		g_assert_no_error (error);
11844		g_assert (connection != NULL);
11845	
11846		g_free (unmanaged);
11847		unmanaged = NULL;
11848		g_free (keyfile);
11849		keyfile = NULL;
11850		g_free (routefile);
11851		routefile = NULL;
11852		g_free (route6file);
11853		route6file = NULL;
11854	
11855		success = writer_new_connection (connection,
11856		                                 TEST_SCRATCH_DIR "/network-scripts/",
11857		                                 &written,
11858		                                 &error);
11859		g_assert (success);
11860	
11861		/* reread will be normalized, so we must normalize connection too. */
11862		nm_utils_normalize_connection (connection, TRUE);
11863	
11864		/* re-read the connection for comparison */
11865		reread = connection_from_file (written,
11866		                               NULL,
11867		                               TYPE_ETHERNET,
11868		                               NULL,
11869		                               &unmanaged,
11870		                               &keyfile,
11871		                               &routefile,
11872		                               &route6file,
11873		                               &error,
11874		                               &ignore_error);
11875		unlink (written);
11876		g_free (written);
11877		g_free (unmanaged);
11878		g_free (keyfile);
11879		g_free (routefile);
11880		g_free (route6file);
11881	
11882		g_assert_no_error (error);
11883		g_assert (reread != NULL);
11884	
11885		success = nm_connection_verify (reread, &error);
11886		g_assert_no_error (error);
11887		g_assert (success);
11888	
11889		success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
11890		g_assert (success);
11891	
11892		g_object_unref (connection);
11893		g_object_unref (reread);
11894	}
11895	
11896	static void
11897	test_write_ethernet_missing_ipv6 (void)
11898	{
11899		NMConnection *connection;
11900		NMConnection *reread;
11901		NMSettingConnection *s_con;
11902		NMSettingWired *s_wired;
11903		NMSettingIP4Config *s_ip4;
11904		NMSettingIP6Config *s_ip6;
11905		char *uuid;
11906		gboolean success;
11907		GError *error = NULL;
11908		char *testfile = NULL;
11909		char *unmanaged = NULL;
11910		char *keyfile = NULL;
11911		char *routefile = NULL;
11912		char *route6file = NULL;
11913		gboolean ignore_error = FALSE;
11914	
11915		connection = nm_connection_new ();
11916		g_assert (connection);
11917	
11918		/* Connection setting */
11919		s_con = (NMSettingConnection *) nm_setting_connection_new ();
11920		g_assert (s_con);
11921		nm_connection_add_setting (connection, NM_SETTING (s_con));
11922	
11923		uuid = nm_utils_uuid_generate ();
11924		g_object_set (s_con,
11925		              NM_SETTING_CONNECTION_ID, "Test Write Ethernet Without IPv6 Setting",
11926		              NM_SETTING_CONNECTION_UUID, uuid,
11927		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
11928		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
11929		              NULL);
11930		g_free (uuid);
11931	
11932		/* Wired setting */
11933		s_wired = (NMSettingWired *) nm_setting_wired_new ();
11934		g_assert (s_wired);
11935		nm_connection_add_setting (connection, NM_SETTING (s_wired));
11936	
11937		/* IP4 setting */
11938		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
11939		g_assert (s_ip4);
11940		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
11941		g_object_set (s_ip4,
11942		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
11943		              NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, "random-client-id-00:22:33",
11944		              NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, TRUE,
11945		              NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, TRUE,
11946		              NULL);
11947	
11948		/* IP6 setting */
11949		/*
11950		 * We intentionally don't add IPv6 setting here. ifcfg-rh plugin should regard
11951		 * missing IPv6 as IPv6 with NM_SETTING_IP6_CONFIG_METHOD_AUTO method.
11952		 */
11953	
11954		ASSERT (nm_connection_verify (connection, &error) == TRUE,
11955		        "ethernet-missing-ipv6", "failed to verify connection: %s",
11956		        (error && error->message) ? error->message : "(unknown)");
11957	
11958		/* Save the ifcfg */
11959		success = writer_new_connection (connection,
11960		                                 TEST_SCRATCH_DIR "/network-scripts/",
11961		                                 &testfile,
11962		                                 &error);
11963		ASSERT (success == TRUE,
11964		        "ethernet-missing-ipv6", "failed to write connection to disk: %s",
11965		        (error && error->message) ? error->message : "(unknown)");
11966	
11967		ASSERT (testfile != NULL,
11968		        "ethernet-missing-ipv6", "didn't get ifcfg file path back after writing connection");
11969	
11970		/* reread will be normalized, so we must normalize connection too. */
11971		nm_utils_normalize_connection (connection, TRUE);
11972	
11973		/* re-read the connection for comparison */
11974		reread = connection_from_file (testfile,
11975		                               NULL,
11976		                               TYPE_ETHERNET,
11977		                               NULL,
11978		                               &unmanaged,
11979		                               &keyfile,
11980		                               &routefile,
11981		                               &route6file,
11982		                               &error,
11983		                               &ignore_error);
11984		unlink (testfile);
11985	
11986		ASSERT (reread != NULL,
11987		        "ethernet-missing-ipv6-reread", "failed to read %s: %s", testfile, error->message);
11988	
11989		ASSERT (nm_connection_verify (reread, &error),
11990		        "ethernet-missing-ipv6-reread-verify", "failed to verify %s: %s", testfile, error->message);
11991	
11992		/*
11993		 * We need to add IPv6 setting to the original connection now so that
11994		 * the comparison can succeed. Missing IPv6 setting should have been
11995		 * written out (and re-read) as Automatic IPv6.
11996		 */
11997		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
11998		g_assert (s_ip6);
11999		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
12000		g_object_set (s_ip6,
12001		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
12002		              NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
12003		              NULL);
12004	
12005		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
12006		        "ethernet-missing-ipv6", "written and re-read connection weren't the same.");
12007	
12008		g_free (testfile);
12009		g_free (unmanaged);
12010		g_free (keyfile);
12011		g_free (routefile);
12012		g_free (route6file);
12013		g_object_unref (connection);
12014		g_object_unref (reread);
12015	}
12016	
12017	#define TEST_IFCFG_BOND_MAIN TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bond-main"
12018	
12019	static void
12020	test_read_bond_main (void)
12021	{
12022		NMConnection *connection;
12023		NMSettingBond *s_bond;
12024		char *unmanaged = NULL;
12025		char *keyfile = NULL;
12026		char *routefile = NULL;
12027		char *route6file = NULL;
12028		gboolean ignore_error = FALSE;
12029		GError *error = NULL;
12030	
12031		connection = connection_from_file (TEST_IFCFG_BOND_MAIN,
12032		                                   NULL,
12033		                                   TYPE_ETHERNET,
12034		                                   NULL,
12035		                                   &unmanaged,
12036		                                   &keyfile,
12037		                                   &routefile,
12038		                                   &route6file,
12039		                                   &error,
12040		                                   &ignore_error);
12041		ASSERT (connection != NULL,
12042		        "bond-main-read", "unexpected failure reading %s", TEST_IFCFG_BOND_MAIN);
12043	
12044		ASSERT (nm_connection_verify (connection, &error),
12045		        "bond-main-read", "failed to verify %s: %s", TEST_IFCFG_BOND_MAIN, error->message);
12046	
12047		/* ===== Bonding SETTING ===== */
12048	
12049		s_bond = nm_connection_get_setting_bond (connection);
12050		ASSERT (s_bond != NULL,
12051		        "bond-main", "failed to verify %s: missing %s setting",
12052		        TEST_IFCFG_BOND_MAIN,
12053		        NM_SETTING_BOND_SETTING_NAME);
12054	
12055		ASSERT (g_strcmp0 (nm_setting_bond_get_interface_name (s_bond), "bond0") == 0,
12056		        "bond-main", "failed to verify %s: DEVICE=%s does not match bond0",
12057		        TEST_IFCFG_BOND_MAIN, nm_setting_bond_get_interface_name (s_bond));
12058	
12059		ASSERT (g_strcmp0 (nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MIIMON), "100") == 0,
12060		        "bond-main", "failed to verify %s: miimon=%s does not match 100",
12061		        TEST_IFCFG_BOND_MAIN, nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MIIMON));
12062	
12063		g_free (unmanaged);
12064		g_free (keyfile);
12065		g_free (routefile);
12066		g_free (route6file);
12067		g_object_unref (connection);
12068	}
12069	
12070	static void
12071	test_write_bond_main (void)
12072	{
12073		NMConnection *connection;
12074		NMConnection *reread;
12075		NMSettingConnection *s_con;
12076		NMSettingBond *s_bond;
12077		NMSettingIP4Config *s_ip4;
12078		NMSettingIP6Config *s_ip6;
12079		NMSettingWired *s_wired;
12080		char *uuid;
12081		const guint32 ip1 = htonl (0x01010103);
12082		const guint32 gw = htonl (0x01010101);
12083		const guint32 prefix = 24;
12084		NMIP4Address *addr;
12085		gboolean success;
12086		GError *error = NULL;
12087		char *testfile = NULL;
12088		char *unmanaged = NULL;
12089		char *keyfile = NULL;
12090		char *routefile = NULL;
12091		char *route6file = NULL;
12092		gboolean ignore_error = FALSE;
12093	
12094		connection = nm_connection_new ();
12095	
12096		/* Connection setting */
12097		s_con = (NMSettingConnection *) nm_setting_connection_new ();
12098		nm_connection_add_setting (connection, NM_SETTING (s_con));
12099	
12100		uuid = nm_utils_uuid_generate ();
12101		g_object_set (s_con,
12102		              NM_SETTING_CONNECTION_ID, "Test Write Bond Main",
12103		              NM_SETTING_CONNECTION_UUID, uuid,
12104		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
12105		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_BOND_SETTING_NAME,
12106		              NULL);
12107		g_free (uuid);
12108	
12109		/* Wired setting */
12110		s_wired = (NMSettingWired *) nm_setting_wired_new ();
12111		nm_connection_add_setting (connection, NM_SETTING (s_wired));
12112	
12113		/* bond setting */
12114		s_bond = (NMSettingBond *) nm_setting_bond_new ();
12115		nm_connection_add_setting (connection, NM_SETTING (s_bond));
12116	
12117		g_object_set (s_bond,
12118		              NM_SETTING_BOND_INTERFACE_NAME, "bond0",
12119		              NULL);
12120	
12121		/* IP4 setting */
12122		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
12123		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
12124	
12125		g_object_set (s_ip4,
12126		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
12127		              NM_SETTING_IP4_CONFIG_MAY_FAIL, TRUE,
12128		              NULL);
12129	
12130		addr = nm_ip4_address_new ();
12131		nm_ip4_address_set_address (addr, ip1);
12132		nm_ip4_address_set_prefix (addr, prefix);
12133		nm_ip4_address_set_gateway (addr, gw);
12134		nm_setting_ip4_config_add_address (s_ip4, addr);
12135		nm_ip4_address_unref (addr);
12136	
12137		/* IP6 setting */
12138		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
12139		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
12140	
12141		g_object_set (s_ip6,
12142		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
12143		              NULL);
12144	
12145		ASSERT (nm_connection_verify (connection, &error) == TRUE,
12146		        "bond-main-write", "failed to verify connection: %s",
12147		        (error && error->message) ? error->message : "(unknown)");
12148	
12149		/* Save the ifcfg */
12150		success = writer_new_connection (connection,
12151		                                 TEST_SCRATCH_DIR "/network-scripts/",
12152		                                 &testfile,
12153		                                 &error);
12154		ASSERT (success == TRUE,
12155		        "bond-main-write", "failed to write connection to disk: %s",
12156		        (error && error->message) ? error->message : "(unknown)");
12157	
12158		ASSERT (testfile != NULL,
12159		        "bond-main-write", "didn't get ifcfg file path back after writing connection");
12160	
12161		/* reread will be normalized, so we must normalize connection too. */
12162		nm_utils_normalize_connection (connection, TRUE);
12163	
12164		/* re-read the connection for comparison */
12165		reread = connection_from_file (testfile,
12166		                               NULL,
12167		                               TYPE_BOND,
12168		                               NULL,
12169		                               &unmanaged,
12170		                               &keyfile,
12171		                               &routefile,
12172		                               &route6file,
12173		                               &error,
12174		                               &ignore_error);
12175		unlink (testfile);
12176	
12177		ASSERT (reread != NULL,
12178		        "bond-main-write-reread", "failed to read %s: %s", testfile, error->message);
12179	
12180		ASSERT (nm_connection_verify (reread, &error),
12181		        "bond-main-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
12182	
12183		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
12184		        "bond-main-write", "written and re-read connection weren't the same.");
12185	
12186		g_free (testfile);
12187		g_free (unmanaged);
12188		g_free (keyfile);
12189		g_free (routefile);
12190		g_free (route6file);
12191		g_object_unref (connection);
12192		g_object_unref (reread);
12193	}
12194	
12195	#define TEST_IFCFG_BOND_SLAVE TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bond-slave"
12196	
12197	static void
12198	test_read_bond_slave (void)
12199	{
12200		NMConnection *connection;
12201		NMSettingConnection *s_con;
12202		char *unmanaged = NULL;
12203		char *keyfile = NULL;
12204		char *routefile = NULL;
12205		char *route6file = NULL;
12206		gboolean ignore_error = FALSE;
12207		GError *error = NULL;
12208	
12209		connection = connection_from_file (TEST_IFCFG_BOND_SLAVE,
12210		                                   NULL,
12211		                                   TYPE_ETHERNET,
12212		                                   NULL,
12213		                                   &unmanaged,
12214		                                   &keyfile,
12215		                                   &routefile,
12216		                                   &route6file,
12217		                                   &error,
12218		                                   &ignore_error);
12219		ASSERT (connection != NULL,
12220		        "bond-slave-read", "unexpected failure reading %s", TEST_IFCFG_BOND_SLAVE);
12221	
12222		ASSERT (nm_connection_verify (connection, &error),
12223		        "bond-slave-read", "failed to verify %s: %s", TEST_IFCFG_BOND_SLAVE, error->message);
12224	
12225		s_con = nm_connection_get_setting_connection (connection);
12226		ASSERT (s_con != NULL,
12227		        "bond-slave-read", "failed to verify %s: missing %s setting",
12228		        TEST_IFCFG_BOND_SLAVE, NM_SETTING_CONNECTION_SETTING_NAME);
12229	
12230		ASSERT (g_strcmp0 (nm_setting_connection_get_master (s_con), "bond0") == 0,
12231		        "bond-slave-read", "failed to verify %s: master is not bond0",
12232		        TEST_IFCFG_BOND_SLAVE);
12233	
12234		ASSERT (g_strcmp0 (nm_setting_connection_get_slave_type (s_con), NM_SETTING_BOND_SETTING_NAME) == 0,
12235		        "bond-slave-read", "failed to verify %s: slave-type is not bond",
12236		        TEST_IFCFG_BOND_SLAVE);
12237	
12238		g_free (unmanaged);
12239		g_free (keyfile);
12240		g_free (routefile);
12241		g_free (route6file);
12242		g_object_unref (connection);
12243	}
12244	
12245	static void
12246	test_write_bond_slave (void)
12247	{
12248		NMConnection *connection;
12249		NMConnection *reread;
12250		NMSettingConnection *s_con;
12251		NMSettingWired *s_wired;
12252		static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
12253		GByteArray *mac;
12254		guint32 mtu = 1492;
12255		char *uuid;
12256		gboolean success;
12257		GError *error = NULL;
12258		char *testfile = NULL;
12259		char *unmanaged = NULL;
12260		char *keyfile = NULL;
12261		char *routefile = NULL;
12262		char *route6file = NULL;
12263		gboolean ignore_error = FALSE;
12264	
12265		connection = nm_connection_new ();
12266	
12267		/* Connection setting */
12268		s_con = (NMSettingConnection *) nm_setting_connection_new ();
12269		nm_connection_add_setting (connection, NM_SETTING (s_con));
12270	
12271		uuid = nm_utils_uuid_generate ();
12272		g_object_set (s_con,
12273		              NM_SETTING_CONNECTION_ID, "Test Write Bond Slave",
12274		              NM_SETTING_CONNECTION_UUID, uuid,
12275		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
12276		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
12277					  NM_SETTING_CONNECTION_MASTER, "bond0",
12278					  NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BOND_SETTING_NAME,
12279		              NULL);
12280		g_free (uuid);
12281	
12282		/* Wired setting */
12283		s_wired = (NMSettingWired *) nm_setting_wired_new ();
12284		nm_connection_add_setting (connection, NM_SETTING (s_wired));
12285	
12286		mac = g_byte_array_sized_new (sizeof (tmpmac));
12287		g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
12288	
12289		g_object_set (s_wired,
12290		              NM_SETTING_WIRED_MAC_ADDRESS, mac,
12291		              NM_SETTING_WIRED_MTU, mtu,
12292		              NULL);
12293		g_byte_array_free (mac, TRUE);
12294	
12295		ASSERT (nm_connection_verify (connection, &error) == TRUE,
12296		        "bond-slave-write", "failed to verify connection: %s",
12297		        (error && error->message) ? error->message : "(unknown)");
12298	
12299		/* Save the ifcfg */
12300		success = writer_new_connection (connection,
12301		                                 TEST_SCRATCH_DIR "/network-scripts/",
12302		                                 &testfile,
12303		                                 &error);
12304		ASSERT (success == TRUE,
12305		        "bond-slave-write", "failed to write connection to disk: %s",
12306		        (error && error->message) ? error->message : "(unknown)");
12307	
12308		ASSERT (testfile != NULL,
12309		        "bond-slave-write", "didn't get ifcfg file path back after writing connection");
12310	
12311		/* reread will be normalized, so we must normalize connection too. */
12312		nm_utils_normalize_connection (connection, TRUE);
12313	
12314		/* re-read the connection for comparison */
12315		reread = connection_from_file (testfile,
12316		                               NULL,
12317		                               TYPE_ETHERNET,
12318		                               NULL,
12319		                               &unmanaged,
12320		                               &keyfile,
12321		                               &routefile,
12322		                               &route6file,
12323		                               &error,
12324		                               &ignore_error);
12325		unlink (testfile);
12326	
12327		ASSERT (reread != NULL,
12328		        "bond-slave-write-reread", "failed to read %s: %s", testfile, error->message);
12329	
12330		ASSERT (nm_connection_verify (reread, &error),
12331		        "bond-slave-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
12332	
12333		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
12334		        "bond-slave-write", "written and re-read connection weren't the same.");
12335	
12336		if (route6file)
12337			unlink (route6file);
12338	
12339		g_free (testfile);
12340		g_free (unmanaged);
12341		g_free (keyfile);
12342		g_free (routefile);
12343		g_free (route6file);
12344		g_object_unref (connection);
12345		g_object_unref (reread);
12346	}
12347	
12348	#define TEST_IFCFG_INFINIBAND TEST_IFCFG_DIR"/network-scripts/ifcfg-test-infiniband"
12349	
12350	static void
12351	test_read_infiniband (void)
12352	{
12353		NMConnection *connection;
12354		NMSettingInfiniband *s_infiniband;
12355		char *unmanaged = NULL;
12356		char *keyfile = NULL;
12357		char *routefile = NULL;
12358		char *route6file = NULL;
12359		gboolean ignore_error = FALSE;
12360		GError *error = NULL;
12361		const GByteArray *array;
12362		char expected_mac_address[INFINIBAND_ALEN] = { 0x80, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22 };
12363		const char *transport_mode;
12364	
12365		connection = connection_from_file (TEST_IFCFG_INFINIBAND,
12366		                                   NULL,
12367		                                   TYPE_INFINIBAND,
12368		                                   NULL,
12369		                                   &unmanaged,
12370		                                   &keyfile,
12371		                                   &routefile,
12372		                                   &route6file,
12373		                                   &error,
12374		                                   &ignore_error);
12375		ASSERT (connection != NULL,
12376		        "infiniband-read", "failed to read %s: %s", TEST_IFCFG_INFINIBAND, error->message);
12377	
12378		ASSERT (nm_connection_verify (connection, &error),
12379		        "infiniband-verify", "failed to verify %s: %s", TEST_IFCFG_INFINIBAND, error->message);
12380	
12381		ASSERT (unmanaged == NULL,
12382		        "infiniband-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_INFINIBAND);
12383	
12384		/* ===== INFINIBAND SETTING ===== */
12385	
12386		s_infiniband = nm_connection_get_setting_infiniband (connection);
12387		ASSERT (s_infiniband != NULL,
12388		        "infiniband-verify-wired", "failed to verify %s: missing %s setting",
12389		        TEST_IFCFG_INFINIBAND,
12390		        NM_SETTING_INFINIBAND_SETTING_NAME);
12391	
12392		/* MAC address */
12393		array = nm_setting_infiniband_get_mac_address (s_infiniband);
12394		ASSERT (array != NULL,
12395		        "infiniband-verify-infiniband", "failed to verify %s: missing %s / %s key",
12396		        TEST_IFCFG_INFINIBAND,
12397		        NM_SETTING_INFINIBAND_SETTING_NAME,
12398		        NM_SETTING_INFINIBAND_MAC_ADDRESS);
12399		ASSERT (array->len == INFINIBAND_ALEN,
12400		        "infiniband-verify-infiniband", "failed to verify %s: unexpected %s / %s key value length",
12401		        TEST_IFCFG_INFINIBAND,
12402		        NM_SETTING_INFINIBAND_SETTING_NAME,
12403		        NM_SETTING_INFINIBAND_MAC_ADDRESS);
12404		ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
12405		        "infiniband-verify-infiniband", "failed to verify %s: unexpected %s / %s key value",
12406		        TEST_IFCFG_INFINIBAND,
12407		        NM_SETTING_INFINIBAND_SETTING_NAME,
12408		        NM_SETTING_INFINIBAND_MAC_ADDRESS);
12409	
12410		/* Transport mode */
12411		transport_mode = nm_setting_infiniband_get_transport_mode (s_infiniband);
12412		ASSERT (transport_mode != NULL,
12413		        "infiniband-verify-infiniband", "failed to verify %s: missing %s / %s key",
12414		        TEST_IFCFG_INFINIBAND,
12415		        NM_SETTING_INFINIBAND_SETTING_NAME,
12416		        NM_SETTING_INFINIBAND_TRANSPORT_MODE);
12417		ASSERT (strcmp (transport_mode, "connected") == 0,
12418		        "infiniband-verify-infiniband", "failed to verify %s: unexpected %s / %s key value",
12419		        TEST_IFCFG_INFINIBAND,
12420		        NM_SETTING_INFINIBAND_SETTING_NAME,
12421		        NM_SETTING_INFINIBAND_TRANSPORT_MODE);
12422	
12423		g_free (unmanaged);
12424		g_free (keyfile);
12425		g_free (routefile);
12426		g_free (route6file);
12427		g_object_unref (connection);
12428	}
12429	
12430	static void
12431	test_write_infiniband (void)
12432	{
12433		NMConnection *connection;
12434		NMConnection *reread;
12435		NMSettingConnection *s_con;
12436		NMSettingInfiniband *s_infiniband;
12437		NMSettingIP4Config *s_ip4;
12438		NMSettingIP6Config *s_ip6;
12439		unsigned char tmpmac[INFINIBAND_ALEN] = { 0x80, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22 };
12440		GByteArray *mac;
12441		guint32 mtu = 65520;
12442		char *uuid;
12443		const guint32 ip1 = htonl (0x01010103);
12444		const guint32 gw = htonl (0x01010101);
12445		const guint32 prefix = 24;
12446		NMIP4Address *addr;
12447		gboolean success;
12448		GError *error = NULL;
12449		char *testfile = NULL;
12450		char *unmanaged = NULL;
12451		char *keyfile = NULL;
12452		char *routefile = NULL;
12453		char *route6file = NULL;
12454		gboolean ignore_error = FALSE;
12455	
12456		connection = nm_connection_new ();
12457	
12458		/* Connection setting */
12459		s_con = (NMSettingConnection *) nm_setting_connection_new ();
12460		nm_connection_add_setting (connection, NM_SETTING (s_con));
12461	
12462		uuid = nm_utils_uuid_generate ();
12463		g_object_set (s_con,
12464		              NM_SETTING_CONNECTION_ID, "Test Write InfiniBand",
12465		              NM_SETTING_CONNECTION_UUID, uuid,
12466		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
12467		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_INFINIBAND_SETTING_NAME,
12468		              NULL);
12469		g_free (uuid);
12470	
12471		/* InfiniBand setting */
12472		s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new ();
12473		nm_connection_add_setting (connection, NM_SETTING (s_infiniband));
12474	
12475		mac = g_byte_array_sized_new (sizeof (tmpmac));
12476		g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
12477	
12478		g_object_set (s_infiniband,
12479		              NM_SETTING_INFINIBAND_MAC_ADDRESS, mac,
12480		              NM_SETTING_INFINIBAND_MTU, mtu,
12481		              NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected",
12482		              NULL);
12483		g_byte_array_free (mac, TRUE);
12484	
12485		/* IP4 setting */
12486		s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
12487		nm_connection_add_setting (connection, NM_SETTING (s_ip4));
12488	
12489		g_object_set (s_ip4,
12490		              NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
12491		              NM_SETTING_IP4_CONFIG_MAY_FAIL, TRUE,
12492		              NULL);
12493	
12494		addr = nm_ip4_address_new ();
12495		nm_ip4_address_set_address (addr, ip1);
12496		nm_ip4_address_set_prefix (addr, prefix);
12497		nm_ip4_address_set_gateway (addr, gw);
12498		nm_setting_ip4_config_add_address (s_ip4, addr);
12499		nm_ip4_address_unref (addr);
12500	
12501		/* IP6 setting */
12502		s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
12503		nm_connection_add_setting (connection, NM_SETTING (s_ip6));
12504	
12505		g_object_set (s_ip6,
12506		              NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
12507		              NULL);
12508	
12509		ASSERT (nm_connection_verify (connection, &error) == TRUE,
12510		        "infiniband-write", "failed to verify connection: %s",
12511		        (error && error->message) ? error->message : "(unknown)");
12512	
12513		/* Save the ifcfg */
12514		success = writer_new_connection (connection,
12515		                                 TEST_SCRATCH_DIR "/network-scripts/",
12516		                                 &testfile,
12517		                                 &error);
12518		ASSERT (success == TRUE,
12519		        "infiniband-write", "failed to write connection to disk: %s",
12520		        (error && error->message) ? error->message : "(unknown)");
12521	
12522		ASSERT (testfile != NULL,
12523		        "infiniband-write", "didn't get ifcfg file path back after writing connection");
12524	
12525		/* reread will be normalized, so we must normalize connection too. */
12526		nm_utils_normalize_connection (connection, TRUE);
12527	
12528		/* re-read the connection for comparison */
12529		reread = connection_from_file (testfile,
12530		                               NULL,
12531		                               TYPE_INFINIBAND,
12532		                               NULL,
12533		                               &unmanaged,
12534		                               &keyfile,
12535		                               &routefile,
12536		                               &route6file,
12537		                               &error,
12538		                               &ignore_error);
12539		unlink (testfile);
12540	
12541		ASSERT (reread != NULL,
12542		        "infiniband-write-reread", "failed to read %s: %s", testfile, error->message);
12543	
12544		ASSERT (nm_connection_verify (reread, &error),
12545		        "infiniband-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
12546	
12547		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
12548		        "infiniband-write", "written and re-read connection weren't the same.");
12549	
12550		g_free (testfile);
12551		g_free (unmanaged);
12552		g_free (keyfile);
12553		g_free (routefile);
12554		g_free (route6file);
12555		g_object_unref (connection);
12556		g_object_unref (reread);
12557	}
12558	
12559	#define TEST_IFCFG_BOND_SLAVE_IB TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bond-slave-ib"
12560	
12561	static void
12562	test_read_bond_slave_ib (void)
12563	{
12564		NMConnection *connection;
12565		NMSettingConnection *s_con;
12566		char *unmanaged = NULL;
12567		char *keyfile = NULL;
12568		char *routefile = NULL;
12569		char *route6file = NULL;
12570		gboolean ignore_error = FALSE;
12571		GError *error = NULL;
12572	
12573		connection = connection_from_file (TEST_IFCFG_BOND_SLAVE_IB,
12574		                                   NULL,
12575		                                   NULL,
12576		                                   NULL,
12577		                                   &unmanaged,
12578		                                   &keyfile,
12579		                                   &routefile,
12580		                                   &route6file,
12581		                                   &error,
12582		                                   &ignore_error);
12583		ASSERT (connection != NULL,
12584		        "bond-slave-read-ib", "unexpected failure reading %s", TEST_IFCFG_BOND_SLAVE_IB);
12585	
12586		ASSERT (nm_connection_verify (connection, &error),
12587		        "bond-slave-read-ib", "failed to verify %s: %s", TEST_IFCFG_BOND_SLAVE_IB, error->message);
12588	
12589		s_con = nm_connection_get_setting_connection (connection);
12590		ASSERT (s_con != NULL,
12591		        "bond-slave-read-ib", "failed to verify %s: missing %s setting",
12592		        TEST_IFCFG_BOND_SLAVE_IB, NM_SETTING_CONNECTION_SETTING_NAME);
12593	
12594		ASSERT (g_strcmp0 (nm_setting_connection_get_master (s_con), "bond0") == 0,
12595		        "bond-slave-read-ib", "failed to verify %s: master is not bond0",
12596		        TEST_IFCFG_BOND_SLAVE_IB);
12597	
12598		ASSERT (g_strcmp0 (nm_setting_connection_get_slave_type (s_con), NM_SETTING_BOND_SETTING_NAME) == 0,
12599		        "bond-slave-read-ib", "failed to verify %s: slave-type is not bond",
12600		        TEST_IFCFG_BOND_SLAVE_IB);
12601	
12602		g_free (unmanaged);
12603		g_free (keyfile);
12604		g_free (routefile);
12605		g_free (route6file);
12606		g_object_unref (connection);
12607	}
12608	
12609	static void
12610	test_write_bond_slave_ib (void)
12611	{
12612		NMConnection *connection;
12613		NMConnection *reread;
12614		NMSettingConnection *s_con;
12615		NMSettingInfiniband *s_infiniband;
12616		static unsigned char tmpmac[] = { 
12617			0x80, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
12618			0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22
12619		};
12620		GByteArray *mac;
12621		char *uuid;
12622		gboolean success;
12623		GError *error = NULL;
12624		char *testfile = NULL;
12625		char *unmanaged = NULL;
12626		char *keyfile = NULL;
12627		char *routefile = NULL;
12628		char *route6file = NULL;
12629		gboolean ignore_error = FALSE;
12630	
12631		connection = nm_connection_new ();
12632	
12633		/* Connection setting */
12634		s_con = (NMSettingConnection *) nm_setting_connection_new ();
12635		nm_connection_add_setting (connection, NM_SETTING (s_con));
12636	
12637		uuid = nm_utils_uuid_generate ();
12638		g_object_set (s_con,
12639		              NM_SETTING_CONNECTION_ID, "Test Write Bond Slave InfiniBand",
12640		              NM_SETTING_CONNECTION_UUID, uuid,
12641		              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
12642		              NM_SETTING_CONNECTION_TYPE, NM_SETTING_INFINIBAND_SETTING_NAME,
12643					  NM_SETTING_CONNECTION_MASTER, "bond0",
12644					  NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BOND_SETTING_NAME,
12645		              NULL);
12646		g_free (uuid);
12647	
12648		/* InfiniBand setting */
12649		s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new ();
12650		nm_connection_add_setting (connection, NM_SETTING (s_infiniband));
12651	
12652		mac = g_byte_array_sized_new (sizeof (tmpmac));
12653		g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
12654	
12655		g_object_set (s_infiniband,
12656		              NM_SETTING_INFINIBAND_MAC_ADDRESS, mac,
12657		              NM_SETTING_INFINIBAND_MTU, 2044,
12658		              NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram",
12659		              NULL);
12660		g_byte_array_free (mac, TRUE);
12661	
12662		ASSERT (nm_connection_verify (connection, &error) == TRUE,
12663		        "bond-slave-write-ib", "failed to verify connection: %s",
12664		        (error && error->message) ? error->message : "(unknown)");
12665	
12666		/* Save the ifcfg */
12667		success = writer_new_connection (connection,
12668		                                 TEST_SCRATCH_DIR "/network-scripts/",
12669		                                 &testfile,
12670		                                 &error);
12671		ASSERT (success == TRUE,
12672		        "bond-slave-write-ib", "failed to write connection to disk: %s",
12673		        (error && error->message) ? error->message : "(unknown)");
12674	
12675		ASSERT (testfile != NULL,
12676		        "bond-slave-write-ib", "didn't get ifcfg file path back after writing connection");
12677	
12678		/* reread will be normalized, so we must normalize connection too. */
12679		nm_utils_normalize_connection (connection, TRUE);
12680	
12681		/* re-read the connection for comparison */
12682		reread = connection_from_file (testfile,
12683		                               NULL,
12684		                               NULL,
12685		                               NULL,
12686		                               &unmanaged,
12687		                               &keyfile,
12688		                               &routefile,
12689		                               &route6file,
12690		                               &error,
12691		                               &ignore_error);
12692		unlink (testfile);
12693	
12694		ASSERT (reread != NULL,
12695		        "bond-slave-write-ib-reread", "failed to read %s: %s", testfile, error->message);
12696	
12697		ASSERT (nm_connection_verify (reread, &error),
12698		        "bond-slave-write-ib-reread-verify", "failed to verify %s: %s", testfile, error->message);
12699	
12700		ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
12701		        "bond-slave-write-ib", "written and re-read connection weren't the same.");
12702	
12703		if (route6file)
12704			unlink (route6file);
12705	
12706		g_free (testfile);
12707		g_free (unmanaged);
12708		g_free (keyfile);
12709		g_free (routefile);
12710		g_free (route6file);
12711		g_object_unref (connection);
12712		g_object_unref (reread);
12713	}
12714	
12715	#define TEST_IFCFG_WIFI_OPEN_SSID_BAD_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-bad-hex"
12716	#define TEST_IFCFG_WIFI_OPEN_SSID_LONG_QUOTED TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-long-quoted"
12717	#define TEST_IFCFG_WIFI_OPEN_SSID_LONG_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-long-hex"
12718	
12719	
12720	#define TEST_IFCFG_WIRED_STATIC           TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static"
12721	#define TEST_IFCFG_WIRED_STATIC_BOOTPROTO TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static-bootproto"
12722	
12723	#define TEST_IFCFG_WIRED_IPV4_MANUAL_1 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv4-manual-1"
12724	#define TEST_IFCFG_WIRED_IPV4_MANUAL_2 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv4-manual-2"
12725	#define TEST_IFCFG_WIRED_IPV4_MANUAL_3 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv4-manual-3"
12726	#define TEST_IFCFG_WIRED_IPV4_MANUAL_4 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv4-manual-4"
12727	
12728	#define DEFAULT_HEX_PSK "7d308b11df1b4243b0f78e5f3fc68cdbb9a264ed0edf4c188edf329ff5b467f0"
12729	
12730	#define TPATH "/settings/plugins/ifcfg-rh/"
12731	
12732	int main (int argc, char **argv)
12733	{
12734		GError *error = NULL;
12735		gboolean success;
12736	
12737		g_test_init (&argc, &argv, NULL);
12738		g_type_init ();
12739	
12740		success = nm_utils_init (&error);
12741		g_assert_no_error (error);
12742		g_assert (success);
12743	
12744		g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL);
12745	
12746		g_test_add_func (TPATH "unmanaged", test_read_unmanaged);
12747		g_test_add_func (TPATH "basic", test_read_basic);
12748		g_test_add_func (TPATH "variables-corner-cases", test_read_variables_corner_cases);
12749		g_test_add_data_func (TPATH "no-prefix/8", GUINT_TO_POINTER (8), test_read_wired_static_no_prefix);
12750		g_test_add_data_func (TPATH "no-prefix/16", GUINT_TO_POINTER (16), test_read_wired_static_no_prefix);
12751		g_test_add_data_func (TPATH "no-prefix/24", GUINT_TO_POINTER (24), test_read_wired_static_no_prefix);
12752		g_test_add_data_func (TPATH "static-ip6-only-gw/_NULL_", NULL, test_write_wired_static_ip6_only_gw);
12753		g_test_add_data_func (TPATH "static-ip6-only-gw/::", "::", test_write_wired_static_ip6_only_gw);
12754		g_test_add_data_func (TPATH "static-ip6-only-gw/2001:db8:8:4::2", "2001:db8:8:4::2", test_write_wired_static_ip6_only_gw);
12755		g_test_add_data_func (TPATH "static-ip6-only-gw/ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255", "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255", test_write_wired_static_ip6_only_gw);
12756	
12757		test_read_wired_static (TEST_IFCFG_WIRED_STATIC, "System test-wired-static", TRUE);
12758		test_read_wired_static (TEST_IFCFG_WIRED_STATIC_BOOTPROTO, "System test-wired-static-bootproto", FALSE);
12759		test_read_wired_dhcp ();
12760		g_test_add_func (TPATH "dhcp-plus-ip", test_read_wired_dhcp_plus_ip);
12761		test_read_wired_global_gateway ();
12762		test_read_wired_never_default ();
12763		test_read_wired_defroute_no ();
12764		test_read_wired_defroute_no_gatewaydev_yes ();
12765		test_read_wired_static_routes ();
12766		test_read_wired_static_routes_legacy ();
12767		test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_1, "System test-wired-ipv4-manual-1");
12768		test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_2, "System test-wired-ipv4-manual-2");
12769		test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_3, "System test-wired-ipv4-manual-3");
12770		test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_4, "System test-wired-ipv4-manual-4");
12771		test_read_wired_ipv6_manual ();
12772		test_read_wired_ipv6_only ();
12773		test_read_wired_dhcp6_only ();
12774		test_read_onboot_no ();
12775		test_read_noip ();
12776		test_read_wired_8021x_peap_mschapv2 ();
12777		test_read_wired_8021x_tls_secret_flags (TEST_IFCFG_WIRED_8021X_TLS_AGENT, NM_SETTING_SECRET_FLAG_AGENT_OWNED);
12778		test_read_wired_8021x_tls_secret_flags (TEST_IFCFG_WIRED_8021X_TLS_ALWAYS,
12779		                                        NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED);
12780		test_read_wifi_open ();
12781		test_read_wifi_open_auto ();
12782		test_read_wifi_open_ssid_hex ();
12783		test_read_wifi_open_ssid_bad (TEST_IFCFG_WIFI_OPEN_SSID_BAD_HEX, "wifi-open-ssid-bad-hex-read");
12784		test_read_wifi_open_ssid_bad (TEST_IFCFG_WIFI_OPEN_SSID_LONG_HEX, "wifi-open-ssid-long-hex-read");
12785		test_read_wifi_open_ssid_bad (TEST_IFCFG_WIFI_OPEN_SSID_LONG_QUOTED, "wifi-open-ssid-long-quoted-read");
12786		test_read_wifi_open_ssid_quoted ();
12787		test_read_wifi_wep ();
12788		test_read_wifi_wep_adhoc ();
12789		test_read_wifi_wep_passphrase ();
12790		test_read_wifi_wep_40_ascii ();
12791		test_read_wifi_wep_104_ascii ();
12792		test_read_wifi_leap ();
12793		test_read_wifi_leap_secret_flags (TEST_IFCFG_WIFI_LEAP_AGENT, NM_SETTING_SECRET_FLAG_AGENT_OWNED);
12794		test_read_wifi_leap_secret_flags (TEST_IFCFG_WIFI_LEAP_ALWAYS,
12795		                                  NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED);
12796		test_read_wifi_wpa_psk ();
12797		test_read_wifi_wpa_psk_2 ();
12798		test_read_wifi_wpa_psk_unquoted ();
12799		test_read_wifi_wpa_psk_unquoted2 ();
12800		test_read_wifi_wpa_psk_adhoc ();
12801		test_read_wifi_wpa_psk_hex ();
12802		test_read_wifi_dynamic_wep_leap ();
12803		test_read_wifi_wpa_eap_tls ();
12804		test_read_wifi_wpa_eap_ttls_tls ();
12805		test_read_wifi_wep_eap_ttls_chap ();
12806		test_read_wired_qeth_static ();
12807		test_read_wired_ctc_static ();
12808		test_read_wifi_wep_no_keys ();
12809		test_read_permissions ();
12810		test_read_wifi_wep_agent_keys ();
12811		test_read_infiniband ();
12812		test_read_vlan_interface ();
12813		test_read_vlan_only_vlan_id ();
12814		test_read_vlan_only_device ();
12815		g_test_add_func (TPATH "vlan/physdev", test_read_vlan_physdev);
12816	
12817		test_write_wired_static ();
12818		test_write_wired_static_ip6_only ();
12819		test_write_wired_static_routes ();
12820		test_read_write_static_routes_legacy ();
12821		test_write_wired_dhcp ();
12822		g_test_add_func (TPATH "dhcp-plus-ip", test_write_wired_dhcp_plus_ip);
12823		test_write_wired_dhcp_8021x_peap_mschapv2 ();
12824		test_write_wired_8021x_tls (NM_SETTING_802_1X_CK_SCHEME_PATH, NM_SETTING_SECRET_FLAG_AGENT_OWNED);
12825		test_write_wired_8021x_tls (NM_SETTING_802_1X_CK_SCHEME_PATH, NM_SETTING_SECRET_FLAG_NOT_SAVED);
12826		test_write_wired_8021x_tls (NM_SETTING_802_1X_CK_SCHEME_PATH, NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED);
12827		test_write_wired_8021x_tls (NM_SETTING_802_1X_CK_SCHEME_BLOB, NM_SETTING_SECRET_FLAG_NONE);
12828		test_write_wifi_open ();
12829		test_write_wifi_open_hex_ssid ();
12830		test_write_wifi_wep ();
12831		test_write_wifi_wep_adhoc ();
12832		test_write_wifi_wep_passphrase ();
12833		test_write_wifi_wep_40_ascii ();
12834		test_write_wifi_wep_104_ascii ();
12835		test_write_wifi_leap ();
12836		test_write_wifi_leap_secret_flags (NM_SETTING_SECRET_FLAG_AGENT_OWNED);
12837		test_write_wifi_leap_secret_flags (NM_SETTING_SECRET_FLAG_NOT_SAVED);
12838		test_write_wifi_leap_secret_flags (NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED);
12839		test_write_wifi_wpa_psk ("Test Write Wifi WPA PSK",
12840		                         "wifi-wpa-psk-write",
12841		                         FALSE,
12842		                         TRUE,
12843		                         FALSE,
12844		                         DEFAULT_HEX_PSK);
12845		test_write_wifi_wpa_psk ("Test Write Wifi WPA2 PSK",
12846		                         "wifi-wpa2-psk-write",
12847		                         FALSE,
12848		                         FALSE,
12849		                         TRUE,
12850		                         DEFAULT_HEX_PSK);
12851		test_write_wifi_wpa_psk ("Test Write Wifi WPA WPA2 PSK",
12852		                         "wifi-wpa-wpa2-psk-write",
12853		                         FALSE,
12854		                         TRUE,
12855		                         TRUE,
12856		                         DEFAULT_HEX_PSK);
12857		test_write_wifi_wpa_psk ("Test Write Wifi WEP WPA WPA2 PSK",
12858		                         "wifi-wep-wpa-wpa2-psk-write",
12859		                         TRUE,
12860		                         TRUE,
12861		                         TRUE,
12862		                         DEFAULT_HEX_PSK);
12863		test_write_wifi_wpa_psk ("Test Write Wifi WPA WPA2 PSK Passphrase",
12864		                         "wifi-wpa-wpa2-psk-passphrase-write",
12865		                         FALSE,
12866		                         TRUE,
12867		                         TRUE,
12868		                         "really insecure passphrase04!");
12869		test_write_wifi_wpa_psk ("Test Write Wifi WPA WPA2 PSK Passphrase Special Chars",
12870		                         "wifi-wpa-wpa2-psk-passphrase-write-spec-chars",
12871		                         FALSE,
12872		                         TRUE,
12873		                         TRUE,
12874		                         "blah`oops\"grr'$*@~!%\\");
12875		test_write_wifi_wpa_psk_adhoc ();
12876		test_write_wifi_wpa_eap_tls ();
12877		test_write_wifi_wpa_eap_ttls_tls ();
12878		test_write_wifi_wpa_eap_ttls_mschapv2 ();
12879		test_write_wifi_dynamic_wep_leap ();
12880		test_write_wifi_wpa_then_open ();
12881		test_write_wifi_wpa_then_wep_with_perms ();
12882		test_write_wired_qeth_dhcp ();
12883		test_write_wired_ctc_dhcp ();
12884		test_write_permissions ();
12885		test_write_wifi_wep_agent_keys ();
12886		test_write_infiniband ();
12887		test_write_vlan ();
12888		test_write_vlan_only_vlanid ();
12889		test_write_ethernet_missing_ipv6 ();
12890	
12891		/* iSCSI / ibft */
12892		test_read_ibft_dhcp ();
12893		test_read_ibft_static ();
12894		test_read_ibft_malformed ("ibft-bad-record-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-record");
12895		test_read_ibft_malformed ("ibft-bad-entry-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-entry");
12896		test_read_ibft_malformed ("ibft-bad-ipaddr-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-ipaddr");
12897		test_read_ibft_malformed ("ibft-bad-gateway-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-gateway");
12898		test_read_ibft_malformed ("ibft-bad-dns1-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-dns1");
12899		test_read_ibft_malformed ("ibft-bad-dns2-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-dns2");
12900	
12901		/* bonding */
12902		test_read_bond_main ();
12903		test_read_bond_slave ();
12904		test_read_bond_slave_ib ();
12905		test_write_bond_main ();
12906		test_write_bond_slave ();
12907		test_write_bond_slave_ib ();
12908	
12909		/* bridging */
12910		test_read_bridge_main ();
12911		test_write_bridge_main ();
12912		test_read_bridge_component ();
12913		test_write_bridge_component ();
12914		test_read_bridge_missing_stp ();
12915	
12916		/* Stuff we expect to fail for now */
12917		test_write_wired_pppoe ();
12918		test_write_vpn ();
12919		test_write_mobile_broadband (TRUE);
12920		test_write_mobile_broadband (FALSE);
12921	
12922		return g_test_run ();
12923	}
12924	
12925