Files
NetworkManager/system-settings/plugins/keyfile/tests/test-keyfile.c
Dan Williams da3d920d97 keyfile: read and write SSIDs as strings by default
Keep compat with old format if the SSID includes unprintable
characters.  But having to type an int list for an SSID is just silly
and it's about damn time we fix that.
2010-09-16 18:27:19 -05:00

2029 lines
72 KiB
C

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* NetworkManager system settings service - keyfile plugin
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Copyright (C) 2008 - 2010 Red Hat, Inc.
*/
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
#include <string.h>
#include <netinet/ether.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <dbus/dbus-glib.h>
#include <nm-utils.h>
#include <nm-setting-connection.h>
#include <nm-setting-wired.h>
#include <nm-setting-wireless.h>
#include <nm-setting-ip4-config.h>
#include <nm-setting-ip6-config.h>
#include <nm-setting-bluetooth.h>
#include <nm-setting-serial.h>
#include <nm-setting-ppp.h>
#include <nm-setting-gsm.h>
#include "nm-test-helpers.h"
#include "reader.h"
#include "writer.h"
#define TEST_WIRED_FILE TEST_KEYFILES_DIR"/Test_Wired_Connection"
#define TEST_WIRELESS_FILE TEST_KEYFILES_DIR"/Test_Wireless_Connection"
static void
test_read_valid_wired_connection (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
NMSettingIP4Config *s_ip4;
NMSettingIP6Config *s_ip6;
GError *error = NULL;
const GByteArray *array;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
const char *tmp;
const char *expected_id = "Test Wired Connection";
const char *expected_uuid = "4e80a56d-c99f-4aad-a6dd-b449bc398c57";
const guint64 expected_timestamp = 6654332;
guint64 timestamp;
const char *expected_dns1 = "4.2.2.1";
const char *expected_dns2 = "4.2.2.2";
struct in_addr addr;
const char *expected_address1 = "192.168.0.5";
const char *expected_address2 = "1.2.3.4";
const char *expected_address1_gw = "192.168.0.1";
const char *expected_address2_gw = "1.2.1.1";
NMIP4Address *ip4_addr;
const char *expected6_dns1 = "1111:dddd::aaaa";
const char *expected6_dns2 = "1::cafe";
const char *expected6_dnssearch1 = "super-domain.com";
const char *expected6_dnssearch2 = "redhat.com";
const char *expected6_dnssearch3 = "gnu.org";
struct in6_addr addr6;
const char *expected6_address1 = "abcd:1234:ffff::cdde";
const char *expected6_address2 = "1:2:3:4:5:6:7:8";
const char *expected6_route_dest = "a:b:c:d::";
const char *expected6_route_nh = "f:e:d:c:1:2:3:4";
NMIP6Address *ip6_addr;
NMIP6Route *ip6_route;
connection = connection_from_file (TEST_WIRED_FILE, NULL);
ASSERT (connection != NULL,
"connection-read", "failed to read %s", TEST_WIRED_FILE);
ASSERT (nm_connection_verify (connection, &error),
"connection-verify", "failed to verify %s: %s", TEST_WIRED_FILE, error->message);
/* ===== CONNECTION SETTING ===== */
s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
ASSERT (s_con != NULL,
"connection-verify-connection", "failed to verify %s: missing %s setting",
TEST_WIRED_FILE,
NM_SETTING_CONNECTION_SETTING_NAME);
/* ID */
tmp = nm_setting_connection_get_id (s_con);
ASSERT (tmp != NULL,
"connection-verify-connection", "failed to verify %s: missing %s / %s key",
TEST_WIRED_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_ID);
ASSERT (strcmp (tmp, expected_id) == 0,
"connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_ID);
/* UUID */
tmp = nm_setting_connection_get_uuid (s_con);
ASSERT (tmp != NULL,
"connection-verify-connection", "failed to verify %s: missing %s / %s key",
TEST_WIRED_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_UUID);
ASSERT (strcmp (tmp, expected_uuid) == 0,
"connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_UUID);
/* Timestamp */
timestamp = nm_setting_connection_get_timestamp (s_con);
ASSERT (timestamp == expected_timestamp,
"connection-verify-connection", "failed to verify %s: unexpected %s /%s key value",
TEST_WIRED_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_TIMESTAMP);
/* Autoconnect */
ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
"connection-verify-connection", "failed to verify %s: unexpected %s /%s key value",
TEST_WIRED_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_AUTOCONNECT);
/* ===== WIRED SETTING ===== */
s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
ASSERT (s_wired != NULL,
"connection-verify-wired", "failed to verify %s: missing %s setting",
TEST_WIRED_FILE,
NM_SETTING_WIRED_SETTING_NAME);
/* MAC address */
array = nm_setting_wired_get_mac_address (s_wired);
ASSERT (array != NULL,
"connection-verify-wired", "failed to verify %s: missing %s / %s key",
TEST_WIRED_FILE,
NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_MAC_ADDRESS);
ASSERT (array->len == ETH_ALEN,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
TEST_WIRED_FILE,
NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_MAC_ADDRESS);
ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_MAC_ADDRESS);
ASSERT (nm_setting_wired_get_mtu (s_wired) == 1400,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_MTU);
/* ===== IPv4 SETTING ===== */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
ASSERT (s_ip4 != NULL,
"connection-verify-ip4", "failed to verify %s: missing %s setting",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
tmp = nm_setting_ip4_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_METHOD);
/* DNS Addresses */
ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert DNS IP address #1",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr.s_addr,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #1",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert DNS IP address #2",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr.s_addr,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #2",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 2,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
/* Address #1 */
ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
ASSERT (ip4_addr,
"connection-verify-wired", "failed to verify %s: missing IP4 address #1",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES);
ASSERT (nm_ip4_address_get_prefix (ip4_addr) == 24,
"connection-verify-wired", "failed to verify %s: unexpected IP4 address #1 prefix",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES);
ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert IP address #1",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
"connection-verify-wired", "failed to verify %s: unexpected IP4 address #1",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES);
ASSERT (inet_pton (AF_INET, expected_address1_gw, &addr) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert IP address #1 gateway",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES);
ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr.s_addr,
"connection-verify-wired", "failed to verify %s: unexpected IP4 address #1 gateway",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES);
/* Address #2 */
ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 1);
ASSERT (ip4_addr,
"connection-verify-wired", "failed to verify %s: missing IP4 address #2",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES);
ASSERT (nm_ip4_address_get_prefix (ip4_addr) == 16,
"connection-verify-wired", "failed to verify %s: unexpected IP4 address #2 prefix",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES);
ASSERT (inet_pton (AF_INET, expected_address2, &addr) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert IP address #2",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
ASSERT (nm_ip4_address_get_address (ip4_addr) == addr.s_addr,
"connection-verify-wired", "failed to verify %s: unexpected IP4 address #2",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES);
ASSERT (inet_pton (AF_INET, expected_address2_gw, &addr) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert IP address #2 gateway",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES);
ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr.s_addr,
"connection-verify-wired", "failed to verify %s: unexpected IP4 address #2 gateway",
TEST_WIRED_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_ADDRESSES);
/* ===== IPv6 SETTING ===== */
s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG));
ASSERT (s_ip6 != NULL,
"connection-verify-ip6", "failed to verify %s: missing %s setting",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME);
/* Method */
tmp = nm_setting_ip6_config_get_method (s_ip6);
ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_METHOD);
/* DNS Addresses */
ASSERT (nm_setting_ip6_config_get_num_dns (s_ip6) == 2,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS);
ASSERT (inet_pton (AF_INET6, expected6_dns1, &addr6) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert DNS IP6 address #1",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS);
ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr6),
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #1",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS);
ASSERT (inet_pton (AF_INET6, expected6_dns2, &addr6) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert DNS IP address #2",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS);
ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 1), &addr6),
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #2",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS);
ASSERT (nm_setting_ip6_config_get_num_addresses (s_ip6) == 2,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS);
/* DNS Searches */
ASSERT (nm_setting_ip6_config_get_num_dns_searches (s_ip6) == 3,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS_SEARCH);
ASSERT (!strcmp (nm_setting_ip6_config_get_dns_search (s_ip6, 0), expected6_dnssearch1),
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #1",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS_SEARCH);
ASSERT (!strcmp (nm_setting_ip6_config_get_dns_search (s_ip6, 1), expected6_dnssearch2),
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #2",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS_SEARCH);
ASSERT (!strcmp (nm_setting_ip6_config_get_dns_search (s_ip6, 2), expected6_dnssearch3),
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value #3",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS_SEARCH);
/* Address #1 */
ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
ASSERT (ip6_addr,
"connection-verify-wired", "failed to verify %s: missing IP6 address #1",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ADDRESSES);
ASSERT (nm_ip6_address_get_prefix (ip6_addr) == 64,
"connection-verify-wired", "failed to verify %s: unexpected IP6 address #1 prefix",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ADDRESSES);
ASSERT (inet_pton (AF_INET6, expected6_address1, &addr6) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert IP address #1",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS);
ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6),
"connection-verify-wired", "failed to verify %s: unexpected IP4 address #1",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ADDRESSES);
/* Address #2 */
ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 1);
ASSERT (ip6_addr,
"connection-verify-wired", "failed to verify %s: missing IP6 address #2",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ADDRESSES);
ASSERT (nm_ip6_address_get_prefix (ip6_addr) == 96,
"connection-verify-wired", "failed to verify %s: unexpected IP6 address #2 prefix",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ADDRESSES);
ASSERT (inet_pton (AF_INET6, expected6_address2, &addr6) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert IP address #2",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS);
ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6),
"connection-verify-wired", "failed to verify %s: unexpected IP6 address #2",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ADDRESSES);
/* Route #1 */
ip6_route = nm_setting_ip6_config_get_route (s_ip6, 0);
ASSERT (ip6_route,
"connection-verify-wired", "failed to verify %s: missing IP6 route #1",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ROUTES);
ASSERT (inet_pton (AF_INET6, expected6_route_dest, &addr6) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert IP route dest #1",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS);
ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_route_get_dest (ip6_route), &addr6),
"connection-verify-wired", "failed to verify %s: unexpected IP4 route dest #1",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ROUTES);
ASSERT (nm_ip6_route_get_prefix (ip6_route) == 64,
"connection-verify-wired", "failed to verify %s: unexpected IP6 route #1 prefix",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ROUTES);
ASSERT (inet_pton (AF_INET6, expected6_route_nh, &addr6) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert IP route next hop #1",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS);
ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_route_get_next_hop (ip6_route), &addr6),
"connection-verify-wired", "failed to verify %s: unexpected IP4 route dest #1",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ROUTES);
ASSERT (nm_ip6_route_get_metric (ip6_route) == 99,
"connection-verify-wired", "failed to verify %s: unexpected IP6 route #1 metric",
TEST_WIRED_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ROUTES);
g_object_unref (connection);
}
static void
add_one_ip4_address (NMSettingIP4Config *s_ip4,
const char *addr,
const char *gw,
guint32 prefix)
{
struct in_addr tmp;
NMIP4Address *ip4_addr;
ip4_addr = nm_ip4_address_new ();
nm_ip4_address_set_prefix (ip4_addr, prefix);
inet_pton (AF_INET, addr, &tmp);
nm_ip4_address_set_address (ip4_addr, tmp.s_addr);
inet_pton (AF_INET, gw, &tmp);
nm_ip4_address_set_gateway (ip4_addr, tmp.s_addr);
nm_setting_ip4_config_add_address (s_ip4, ip4_addr);
nm_ip4_address_unref (ip4_addr);
}
static void
add_one_ip4_route (NMSettingIP4Config *s_ip4,
const char *dest,
const char *nh,
guint32 prefix,
guint32 metric)
{
struct in_addr addr;
NMIP4Route *route;
route = nm_ip4_route_new ();
nm_ip4_route_set_prefix (route, prefix);
nm_ip4_route_set_metric (route, metric);
inet_pton (AF_INET, dest, &addr);
nm_ip4_route_set_dest (route, addr.s_addr);
inet_pton (AF_INET, nh, &addr);
nm_ip4_route_set_next_hop (route, addr.s_addr);
nm_setting_ip4_config_add_route (s_ip4, route);
nm_ip4_route_unref (route);
}
static void
add_one_ip6_address (NMSettingIP6Config *s_ip6,
const char *addr,
guint32 prefix,
const char *gw)
{
struct in6_addr tmp;
NMIP6Address *ip6_addr;
ip6_addr = nm_ip6_address_new ();
nm_ip6_address_set_prefix (ip6_addr, prefix);
inet_pton (AF_INET6, addr, &tmp);
nm_ip6_address_set_address (ip6_addr, &tmp);
if (gw) {
inet_pton (AF_INET6, gw, &tmp);
nm_ip6_address_set_gateway (ip6_addr, &tmp);
}
nm_setting_ip6_config_add_address (s_ip6, ip6_addr);
nm_ip6_address_unref (ip6_addr);
}
static void
add_one_ip6_route (NMSettingIP6Config *s_ip6,
const char *dest,
const char *nh,
guint32 prefix,
guint32 metric)
{
struct in6_addr addr;
NMIP6Route *route;
route = nm_ip6_route_new ();
nm_ip6_route_set_prefix (route, prefix);
nm_ip6_route_set_metric (route, metric);
inet_pton (AF_INET6, dest, &addr);
nm_ip6_route_set_dest (route, &addr);
inet_pton (AF_INET6, nh, &addr);
nm_ip6_route_set_next_hop (route, &addr);
nm_setting_ip6_config_add_route (s_ip6, route);
nm_ip6_route_unref (route);
}
static void
test_write_wired_connection (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
NMSettingIP4Config *s_ip4;
NMSettingIP6Config *s_ip6;
char *uuid;
GByteArray *mac;
unsigned char tmpmac[] = { 0x99, 0x88, 0x77, 0x66, 0x55, 0x44 };
gboolean success;
NMConnection *reread;
char *testfile = NULL;
GError *error = NULL;
pid_t owner_grp;
uid_t owner_uid;
struct in_addr addr;
struct in6_addr addr6;
const char *dns1 = "4.2.2.1";
const char *dns2 = "4.2.2.2";
const char *address1 = "192.168.0.5";
const char *address1_gw = "192.168.0.1";
const char *address2 = "1.2.3.4";
const char *address2_gw = "1.2.1.1";
const char *route1 = "10.10.10.2";
const char *route1_nh = "10.10.10.1";
const char *route2 = "1.1.1.1";
const char *route2_nh = "1.2.1.1";
const char *dns6_1 = "1::cafe";
const char *dns6_2 = "2::cafe";
const char *address6_1 = "abcd::beef";
const char *address6_2 = "dcba::beef";
const char *route6_1 = "1:2:3:4:5:6:7:8";
const char *route6_1_nh = "8:7:6:5:4:3:2:1";
const char *route6_2 = "2001::1000";
const char *route6_2_nh = "2001::1111";
guint64 timestamp = 0x12345678L;
connection = nm_connection_new ();
ASSERT (connection != NULL,
"connection-write", "failed to allocate new connection");
/* Connection setting */
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
ASSERT (s_con != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
g_object_set (s_con,
NM_SETTING_CONNECTION_ID, "Work Wired",
NM_SETTING_CONNECTION_UUID, uuid,
NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_CONNECTION_TIMESTAMP, timestamp,
NULL);
g_free (uuid);
/* Wired setting */
s_wired = NM_SETTING_WIRED (nm_setting_wired_new ());
ASSERT (s_wired != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
mac = g_byte_array_sized_new (ETH_ALEN);
g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
g_object_set (s_wired,
NM_SETTING_WIRED_MAC_ADDRESS, mac,
NM_SETTING_WIRED_MTU, 900,
NULL);
g_byte_array_free (mac, TRUE);
/* IP4 setting */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
ASSERT (s_ip4 != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
NULL);
/* Addresses */
add_one_ip4_address (s_ip4, address1, address1_gw, 24);
add_one_ip4_address (s_ip4, address2, address2_gw, 8);
/* Routes */
add_one_ip4_route (s_ip4, route1, route1_nh, 24, 3);
add_one_ip4_route (s_ip4, route2, route2_nh, 8, 1);
/* DNS servers */
inet_pton (AF_INET, dns1, &addr);
nm_setting_ip4_config_add_dns (s_ip4, addr.s_addr);
inet_pton (AF_INET, dns2, &addr);
nm_setting_ip4_config_add_dns (s_ip4, addr.s_addr);
/* IP6 setting */
s_ip6 = NM_SETTING_IP6_CONFIG (nm_setting_ip6_config_new ());
ASSERT (s_ip6 != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
NULL);
/* Addresses */
add_one_ip6_address (s_ip6, address6_1, 64, NULL);
add_one_ip6_address (s_ip6, address6_2, 56, NULL);
/* Routes */
add_one_ip6_route (s_ip6, route6_1, route6_1_nh, 64, 3);
add_one_ip6_route (s_ip6, route6_2, route6_2_nh, 56, 1);
/* DNS servers */
inet_pton (AF_INET6, dns6_1, &addr6);
nm_setting_ip6_config_add_dns (s_ip6, &addr6);
inet_pton (AF_INET6, dns6_2, &addr6);
nm_setting_ip6_config_add_dns (s_ip6, &addr6);
/* DNS searches */
nm_setting_ip6_config_add_dns_search (s_ip6, "wallaceandgromit.com");
/* Write out the connection */
owner_uid = geteuid ();
owner_grp = getegid ();
success = write_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error);
ASSERT (success == TRUE,
"connection-write", "failed to allocate write keyfile: %s",
error ? error->message : "(none)");
ASSERT (testfile != NULL,
"connection-write", "didn't get keyfile name back after writing connection");
/* Read the connection back in and compare it to the one we just wrote out */
reread = connection_from_file (testfile, NULL);
ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
"connection-write", "written and re-read connection weren't the same");
g_clear_error (&error);
unlink (testfile);
g_free (testfile);
g_object_unref (reread);
g_object_unref (connection);
}
#define TEST_WIRED_IP6_FILE TEST_KEYFILES_DIR"/Test_Wired_Connection_IP6"
static void
test_read_ip6_wired_connection (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
NMSettingIP4Config *s_ip4;
NMSettingIP6Config *s_ip6;
GError *error = NULL;
const char *tmp;
const char *expected_id = "Test Wired Connection IP6";
const char *expected_uuid = "4e80a56d-c99f-4aad-a6dd-b449bc398c57";
struct in6_addr addr6;
const char *expected6_address1 = "abcd:1234:ffff::cdde";
const char *expected6_gw1 = "abcd:1234:ffff::cdd1";
NMIP6Address *ip6_addr;
connection = connection_from_file (TEST_WIRED_IP6_FILE, NULL);
ASSERT (connection != NULL,
"connection-read", "failed to read %s", TEST_WIRED_IP6_FILE);
ASSERT (nm_connection_verify (connection, &error),
"connection-verify", "failed to verify %s: %s", TEST_WIRED_IP6_FILE, error->message);
/* ===== CONNECTION SETTING ===== */
s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
ASSERT (s_con != NULL,
"connection-verify-connection", "failed to verify %s: missing %s setting",
TEST_WIRED_IP6_FILE,
NM_SETTING_CONNECTION_SETTING_NAME);
/* ID */
tmp = nm_setting_connection_get_id (s_con);
ASSERT (tmp != NULL,
"connection-verify-connection", "failed to verify %s: missing %s / %s key",
TEST_WIRED_IP6_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_ID);
ASSERT (strcmp (tmp, expected_id) == 0,
"connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_IP6_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_ID);
/* UUID */
tmp = nm_setting_connection_get_uuid (s_con);
ASSERT (tmp != NULL,
"connection-verify-connection", "failed to verify %s: missing %s / %s key",
TEST_WIRED_IP6_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_UUID);
ASSERT (strcmp (tmp, expected_uuid) == 0,
"connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_IP6_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_UUID);
/* ===== WIRED SETTING ===== */
s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
ASSERT (s_wired != NULL,
"connection-verify-wired", "failed to verify %s: missing %s setting",
TEST_WIRED_IP6_FILE,
NM_SETTING_WIRED_SETTING_NAME);
/* ===== IPv4 SETTING ===== */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
ASSERT (s_ip4 != NULL,
"connection-verify-ip4", "failed to verify %s: missing %s setting",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
tmp = nm_setting_ip4_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_METHOD);
ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_DNS);
/* ===== IPv6 SETTING ===== */
s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP6_CONFIG));
ASSERT (s_ip6 != NULL,
"connection-verify-ip6", "failed to verify %s: missing %s setting",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME);
/* Method */
tmp = nm_setting_ip6_config_get_method (s_ip6);
ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_METHOD);
ASSERT (nm_setting_ip6_config_get_num_addresses (s_ip6) == 1,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_DNS);
/* Address #1 */
ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
ASSERT (ip6_addr,
"connection-verify-wired", "failed to verify %s: missing IP6 address #1",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ADDRESSES);
ASSERT (nm_ip6_address_get_prefix (ip6_addr) == 64,
"connection-verify-wired", "failed to verify %s: unexpected IP6 address #1 prefix",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ADDRESSES);
ASSERT (inet_pton (AF_INET6, expected6_address1, &addr6) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert IP address #1",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ADDRESSES);
ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6),
"connection-verify-wired", "failed to verify %s: unexpected IP4 address #1",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ADDRESSES);
ASSERT (inet_pton (AF_INET6, expected6_gw1, &addr6) > 0,
"connection-verify-wired", "failed to verify %s: couldn't convert GW address #1",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ADDRESSES);
ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_gateway (ip6_addr), &addr6),
"connection-verify-wired", "failed to verify %s: unexpected IP4 address #1",
TEST_WIRED_IP6_FILE,
NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP6_CONFIG_ADDRESSES);
g_object_unref (connection);
}
static void
test_write_ip6_wired_connection (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
NMSettingIP4Config *s_ip4;
NMSettingIP6Config *s_ip6;
char *uuid;
gboolean success;
NMConnection *reread;
char *testfile = NULL;
GError *error = NULL;
pid_t owner_grp;
uid_t owner_uid;
struct in6_addr addr6;
const char *dns = "1::cafe";
const char *address = "abcd::beef";
const char *gw = "dcba::beef";
connection = nm_connection_new ();
ASSERT (connection != NULL,
"connection-write", "failed to allocate new connection");
/* Connection setting */
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
ASSERT (s_con != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
g_object_set (s_con,
NM_SETTING_CONNECTION_ID, "Work Wired IP6",
NM_SETTING_CONNECTION_UUID, uuid,
NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
NULL);
g_free (uuid);
/* Wired setting */
s_wired = NM_SETTING_WIRED (nm_setting_wired_new ());
ASSERT (s_wired != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_WIRED_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wired));
/* IP4 setting */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
ASSERT (s_ip4 != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
NULL);
/* IP6 setting */
s_ip6 = NM_SETTING_IP6_CONFIG (nm_setting_ip6_config_new ());
ASSERT (s_ip6 != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
NULL);
/* Addresses */
add_one_ip6_address (s_ip6, address, 64, gw);
/* DNS servers */
inet_pton (AF_INET6, dns, &addr6);
nm_setting_ip6_config_add_dns (s_ip6, &addr6);
/* DNS searches */
nm_setting_ip6_config_add_dns_search (s_ip6, "wallaceandgromit.com");
/* Write out the connection */
owner_uid = geteuid ();
owner_grp = getegid ();
success = write_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error);
ASSERT (success == TRUE,
"connection-write", "failed to allocate write keyfile: %s",
error ? error->message : "(none)");
ASSERT (testfile != NULL,
"connection-write", "didn't get keyfile name back after writing connection");
/* Read the connection back in and compare it to the one we just wrote out */
reread = connection_from_file (testfile, NULL);
ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
"connection-write", "written and re-read connection weren't the same");
g_clear_error (&error);
unlink (testfile);
g_free (testfile);
g_object_unref (reread);
g_object_unref (connection);
}
#define TEST_WIRED_MAC_CASE_FILE TEST_KEYFILES_DIR"/Test_Wired_Connection_MAC_Case"
static void
test_read_wired_mac_case (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
GError *error = NULL;
const GByteArray *array;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0xaa, 0xbb, 0xcc, 0x55 };
const char *tmp;
const char *expected_id = "Test Wired Connection MAC Case";
const char *expected_uuid = "4e80a56d-c99f-4aad-a6dd-b449bc398c57";
connection = connection_from_file (TEST_WIRED_MAC_CASE_FILE, NULL);
ASSERT (connection != NULL,
"connection-read", "failed to read %s", TEST_WIRED_MAC_CASE_FILE);
ASSERT (nm_connection_verify (connection, &error),
"connection-verify", "failed to verify %s: %s", TEST_WIRED_MAC_CASE_FILE, error->message);
/* ===== CONNECTION SETTING ===== */
s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
ASSERT (s_con != NULL,
"connection-verify-connection", "failed to verify %s: missing %s setting",
TEST_WIRED_MAC_CASE_FILE,
NM_SETTING_CONNECTION_SETTING_NAME);
/* ID */
tmp = nm_setting_connection_get_id (s_con);
ASSERT (tmp != NULL,
"connection-verify-connection", "failed to verify %s: missing %s / %s key",
TEST_WIRED_MAC_CASE_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_ID);
ASSERT (strcmp (tmp, expected_id) == 0,
"connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_MAC_CASE_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_ID);
/* UUID */
tmp = nm_setting_connection_get_uuid (s_con);
ASSERT (tmp != NULL,
"connection-verify-connection", "failed to verify %s: missing %s / %s key",
TEST_WIRED_MAC_CASE_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_UUID);
ASSERT (strcmp (tmp, expected_uuid) == 0,
"connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_MAC_CASE_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_UUID);
/* ===== WIRED SETTING ===== */
s_wired = NM_SETTING_WIRED (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRED));
ASSERT (s_wired != NULL,
"connection-verify-wired", "failed to verify %s: missing %s setting",
TEST_WIRED_MAC_CASE_FILE,
NM_SETTING_WIRED_SETTING_NAME);
/* MAC address */
array = nm_setting_wired_get_mac_address (s_wired);
ASSERT (array != NULL,
"connection-verify-wired", "failed to verify %s: missing %s / %s key",
TEST_WIRED_MAC_CASE_FILE,
NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_MAC_ADDRESS);
ASSERT (array->len == ETH_ALEN,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
TEST_WIRED_MAC_CASE_FILE,
NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_MAC_ADDRESS);
ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
"connection-verify-wired", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRED_MAC_CASE_FILE,
NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_MAC_ADDRESS);
g_object_unref (connection);
}
static void
test_read_valid_wireless_connection (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
NMSettingIP4Config *s_ip4;
GError *error = NULL;
const GByteArray *array;
char expected_bssid[ETH_ALEN] = { 0x00, 0x1a, 0x33, 0x44, 0x99, 0x82 };
const char *tmp;
const char *expected_id = "Test Wireless Connection";
const char *expected_uuid = "2f962388-e5f3-45af-a62c-ac220b8f7baa";
const guint64 expected_timestamp = 1226604314;
guint64 timestamp;
connection = connection_from_file (TEST_WIRELESS_FILE, NULL);
ASSERT (connection != NULL,
"connection-read", "failed to read %s", TEST_WIRELESS_FILE);
ASSERT (nm_connection_verify (connection, &error),
"connection-verify", "failed to verify %s: %s", TEST_WIRELESS_FILE, error->message);
/* ===== CONNECTION SETTING ===== */
s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
ASSERT (s_con != NULL,
"connection-verify-connection", "failed to verify %s: missing %s setting",
TEST_WIRELESS_FILE,
NM_SETTING_CONNECTION_SETTING_NAME);
/* ID */
tmp = nm_setting_connection_get_id (s_con);
ASSERT (tmp != NULL,
"connection-verify-connection", "failed to verify %s: missing %s / %s key",
TEST_WIRELESS_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_ID);
ASSERT (strcmp (tmp, expected_id) == 0,
"connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRELESS_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_ID);
/* UUID */
tmp = nm_setting_connection_get_uuid (s_con);
ASSERT (tmp != NULL,
"connection-verify-connection", "failed to verify %s: missing %s / %s key",
TEST_WIRELESS_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_UUID);
ASSERT (strcmp (tmp, expected_uuid) == 0,
"connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRELESS_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_UUID);
/* Timestamp */
timestamp = nm_setting_connection_get_timestamp (s_con);
ASSERT (timestamp == expected_timestamp,
"connection-verify-connection", "failed to verify %s: unexpected %s /%s key value",
TEST_WIRELESS_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_TIMESTAMP);
/* Autoconnect */
ASSERT (nm_setting_connection_get_autoconnect (s_con) == FALSE,
"connection-verify-connection", "failed to verify %s: unexpected %s /%s key value",
TEST_WIRELESS_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_AUTOCONNECT);
/* ===== WIRED SETTING ===== */
s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
ASSERT (s_wireless != NULL,
"connection-verify-wireless", "failed to verify %s: missing %s setting",
TEST_WIRELESS_FILE,
NM_SETTING_WIRED_SETTING_NAME);
/* BSSID */
array = nm_setting_wireless_get_bssid (s_wireless);
ASSERT (array != NULL,
"connection-verify-wireless", "failed to verify %s: missing %s / %s key",
TEST_WIRELESS_FILE,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_BSSID);
ASSERT (array->len == ETH_ALEN,
"connection-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
TEST_WIRELESS_FILE,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_BSSID);
ASSERT (memcmp (array->data, &expected_bssid[0], sizeof (expected_bssid)) == 0,
"connection-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRELESS_FILE,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_BSSID);
/* ===== IPv4 SETTING ===== */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting (connection, NM_TYPE_SETTING_IP4_CONFIG));
ASSERT (s_ip4 != NULL,
"connection-verify-ip4", "failed to verify %s: missing %s setting",
TEST_WIRELESS_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME);
/* Method */
tmp = nm_setting_ip4_config_get_method (s_ip4);
ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
"connection-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRELESS_FILE,
NM_SETTING_IP4_CONFIG_SETTING_NAME,
NM_SETTING_IP4_CONFIG_METHOD);
g_object_unref (connection);
}
static void
test_write_wireless_connection (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
NMSettingIP4Config *s_ip4;
NMSettingIP6Config *s_ip6;
char *uuid;
GByteArray *bssid;
unsigned char tmpbssid[] = { 0xaa, 0xb9, 0xa1, 0x74, 0x55, 0x44 };
GByteArray *ssid;
unsigned char tmpssid[] = { 0x31, 0x33, 0x33, 0x37 };
gboolean success;
NMConnection *reread;
char *testfile = NULL;
GError *error = NULL;
pid_t owner_grp;
uid_t owner_uid;
guint64 timestamp = 0x12344433L;
connection = nm_connection_new ();
ASSERT (connection != NULL,
"connection-write", "failed to allocate new connection");
/* Connection setting */
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
ASSERT (s_con != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
g_object_set (s_con,
NM_SETTING_CONNECTION_ID, "Work Wireless",
NM_SETTING_CONNECTION_UUID, uuid,
NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_CONNECTION_TIMESTAMP, timestamp,
NULL);
g_free (uuid);
/* Wireless setting */
s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ());
ASSERT (s_wireless != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wireless));
bssid = g_byte_array_sized_new (ETH_ALEN);
g_byte_array_append (bssid, &tmpbssid[0], sizeof (tmpbssid));
ssid = g_byte_array_sized_new (sizeof (tmpssid));
g_byte_array_append (ssid, &tmpssid[0], sizeof (tmpssid));
g_object_set (s_wireless,
NM_SETTING_WIRELESS_BSSID, bssid,
NM_SETTING_WIRELESS_SSID, ssid,
NM_SETTING_WIRED_MTU, 1000,
NULL);
g_byte_array_free (bssid, TRUE);
g_byte_array_free (ssid, TRUE);
/* IP4 setting */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
ASSERT (s_ip4 != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
/* IP6 setting */
s_ip6 = NM_SETTING_IP6_CONFIG (nm_setting_ip6_config_new ());
ASSERT (s_ip6 != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_IP6_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
NULL);
/* Write out the connection */
owner_uid = geteuid ();
owner_grp = getegid ();
success = write_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error);
ASSERT (success == TRUE,
"connection-write", "failed to allocate write keyfile: %s",
error ? error->message : "(none)");
ASSERT (testfile != NULL,
"connection-write", "didn't get keyfile name back after writing connection");
/* Read the connection back in and compare it to the one we just wrote out */
reread = connection_from_file (testfile, NULL);
ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
"connection-write", "written and re-read connection weren't the same");
g_clear_error (&error);
unlink (testfile);
g_free (testfile);
g_object_unref (reread);
g_object_unref (connection);
}
#define TEST_STRING_SSID_FILE TEST_KEYFILES_DIR"/Test_String_SSID"
static void
test_read_string_ssid (void)
{
NMConnection *connection;
NMSettingWireless *s_wireless;
GError *error = NULL;
const GByteArray *array;
const char *expected_ssid = "blah blah ssid 1234";
connection = connection_from_file (TEST_STRING_SSID_FILE, NULL);
ASSERT (connection != NULL,
"connection-read", "failed to read %s", TEST_STRING_SSID_FILE);
ASSERT (nm_connection_verify (connection, &error),
"connection-verify", "failed to verify %s: %s", TEST_STRING_SSID_FILE, error->message);
/* ===== WIRELESS SETTING ===== */
s_wireless = NM_SETTING_WIRELESS (nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS));
ASSERT (s_wireless != NULL,
"connection-verify-wireless", "failed to verify %s: missing %s setting",
TEST_STRING_SSID_FILE,
NM_SETTING_WIRELESS_SETTING_NAME);
/* SSID */
array = nm_setting_wireless_get_ssid (s_wireless);
ASSERT (array != NULL,
"connection-verify-wireless", "failed to verify %s: missing %s / %s key",
TEST_STRING_SSID_FILE,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
ASSERT (memcmp (array->data, expected_ssid, sizeof (expected_ssid)) == 0,
"connection-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
TEST_STRING_SSID_FILE,
NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID);
g_object_unref (connection);
}
static void
test_write_string_ssid (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWireless *s_wireless;
NMSettingIP4Config *s_ip4;
char *uuid, *testfile = NULL, *tmp;
GByteArray *ssid;
unsigned char tmpssid[] = { 65, 49, 50, 51, 32, 46, 92, 46, 36, 37, 126, 93 };
gboolean success;
NMConnection *reread;
GError *error = NULL;
pid_t owner_grp;
uid_t owner_uid;
GKeyFile *keyfile;
connection = nm_connection_new ();
ASSERT (connection != NULL,
"connection-write", "failed to allocate new connection");
/* Connection setting */
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
ASSERT (s_con != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
g_object_set (s_con,
NM_SETTING_CONNECTION_ID, "String SSID Test",
NM_SETTING_CONNECTION_UUID, uuid,
NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
NULL);
g_free (uuid);
/* Wireless setting */
s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ());
ASSERT (s_wireless != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_WIRELESS_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_wireless));
ssid = g_byte_array_sized_new (sizeof (tmpssid));
g_byte_array_append (ssid, &tmpssid[0], sizeof (tmpssid));
g_object_set (s_wireless, NM_SETTING_WIRELESS_SSID, ssid, NULL);
g_byte_array_free (ssid, TRUE);
/* IP4 setting */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
ASSERT (s_ip4 != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
/* Write out the connection */
owner_uid = geteuid ();
owner_grp = getegid ();
success = write_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error);
ASSERT (success == TRUE,
"connection-write", "failed to allocate write keyfile: %s",
error ? error->message : "(none)");
ASSERT (testfile != NULL,
"connection-write", "didn't get keyfile name back after writing connection");
/* Ensure the SSID was written out as a string */
keyfile = g_key_file_new ();
ASSERT (g_key_file_load_from_file (keyfile, testfile, 0, NULL) == TRUE,
"string-ssid-verify", "failed to load keyfile to verify");
tmp = g_key_file_get_string (keyfile, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID, NULL);
ASSERT (tmp, "string-ssid-verify", "failed to load 'ssid' key from file");
ASSERT (strlen (tmp) == sizeof (tmpssid),
"string-ssid-verify", "reread SSID and expected were different sizes");
ASSERT (memcmp (tmp, tmpssid, sizeof (tmpssid)) == 0,
"string-ssid-verify", "reread SSID and expected were different");
g_free (tmp);
g_key_file_free (keyfile);
/* Read the connection back in and compare it to the one we just wrote out */
reread = connection_from_file (testfile, NULL);
ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
"connection-write", "written and re-read connection weren't the same");
g_clear_error (&error);
unlink (testfile);
g_free (testfile);
g_object_unref (reread);
g_object_unref (connection);
}
#define TEST_BT_DUN_FILE TEST_KEYFILES_DIR"/ATT_Data_Connect_BT"
static void
test_read_bt_dun_connection (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingBluetooth *s_bluetooth;
NMSettingSerial *s_serial;
NMSettingPPP *s_ppp;
NMSettingGsm *s_gsm;
GError *error = NULL;
const GByteArray *array;
char expected_bdaddr[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
const char *tmp;
const char *expected_id = "AT&T Data Connect BT";
const char *expected_uuid = "089130ab-ce28-46e4-ad77-d44869b03d19";
const char *expected_apn = "ISP.CINGULAR";
const char *expected_username = "ISP@CINGULARGPRS.COM";
const char *expected_password = "CINGULAR1";
connection = connection_from_file (TEST_BT_DUN_FILE, NULL);
ASSERT (connection != NULL,
"connection-read", "failed to read %s", TEST_BT_DUN_FILE);
ASSERT (nm_connection_verify (connection, &error),
"connection-verify", "failed to verify %s: %s", TEST_BT_DUN_FILE, error->message);
/* ===== CONNECTION SETTING ===== */
s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
ASSERT (s_con != NULL,
"connection-verify-connection", "failed to verify %s: missing %s setting",
TEST_BT_DUN_FILE,
NM_SETTING_CONNECTION_SETTING_NAME);
/* ID */
tmp = nm_setting_connection_get_id (s_con);
ASSERT (tmp != NULL,
"connection-verify-connection", "failed to verify %s: missing %s / %s key",
TEST_BT_DUN_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_ID);
ASSERT (strcmp (tmp, expected_id) == 0,
"connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
TEST_BT_DUN_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_ID);
/* UUID */
tmp = nm_setting_connection_get_uuid (s_con);
ASSERT (tmp != NULL,
"connection-verify-connection", "failed to verify %s: missing %s / %s key",
TEST_WIRELESS_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_UUID);
ASSERT (strcmp (tmp, expected_uuid) == 0,
"connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
TEST_WIRELESS_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_UUID);
/* ===== BLUETOOTH SETTING ===== */
s_bluetooth = NM_SETTING_BLUETOOTH (nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH));
ASSERT (s_bluetooth != NULL,
"connection-verify-bt", "failed to verify %s: missing %s setting",
TEST_WIRELESS_FILE,
NM_SETTING_WIRED_SETTING_NAME);
/* BDADDR */
array = nm_setting_bluetooth_get_bdaddr (s_bluetooth);
ASSERT (array != NULL,
"connection-verify-bt", "failed to verify %s: missing %s / %s key",
TEST_BT_DUN_FILE,
NM_SETTING_BLUETOOTH_SETTING_NAME,
NM_SETTING_BLUETOOTH_BDADDR);
ASSERT (array->len == ETH_ALEN,
"connection-verify-bt", "failed to verify %s: unexpected %s / %s key value length",
TEST_BT_DUN_FILE,
NM_SETTING_BLUETOOTH_SETTING_NAME,
NM_SETTING_BLUETOOTH_BDADDR);
ASSERT (memcmp (array->data, &expected_bdaddr[0], sizeof (expected_bdaddr)) == 0,
"connection-verify-bt", "failed to verify %s: unexpected %s / %s key value",
TEST_BT_DUN_FILE,
NM_SETTING_BLUETOOTH_SETTING_NAME,
NM_SETTING_BLUETOOTH_BDADDR);
/* Type */
tmp = nm_setting_bluetooth_get_connection_type (s_bluetooth);
ASSERT (tmp != NULL,
"connection-verify-bt", "failed to verify %s: missing %s / %s key",
TEST_BT_DUN_FILE,
NM_SETTING_BLUETOOTH_SETTING_NAME,
NM_SETTING_BLUETOOTH_TYPE);
ASSERT (strcmp (tmp, NM_SETTING_BLUETOOTH_TYPE_DUN) == 0,
"connection-verify-bt", "failed to verify %s: unexpected %s / %s key value",
TEST_BT_DUN_FILE,
NM_SETTING_BLUETOOTH_SETTING_NAME,
NM_SETTING_BLUETOOTH_TYPE);
/* ===== GSM SETTING ===== */
s_gsm = NM_SETTING_GSM (nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM));
ASSERT (s_gsm != NULL,
"connection-verify-gsm", "failed to verify %s: missing %s setting",
TEST_BT_DUN_FILE,
NM_SETTING_GSM_SETTING_NAME);
/* APN */
tmp = nm_setting_gsm_get_apn (s_gsm);
ASSERT (tmp != NULL,
"connection-verify-gsm", "failed to verify %s: missing %s / %s key",
TEST_BT_DUN_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_APN);
ASSERT (strcmp (tmp, expected_apn) == 0,
"connection-verify-bt", "failed to verify %s: unexpected %s / %s key value",
TEST_BT_DUN_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_APN);
/* Username */
tmp = nm_setting_gsm_get_username (s_gsm);
ASSERT (tmp != NULL,
"connection-verify-gsm", "failed to verify %s: missing %s / %s key",
TEST_BT_DUN_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_USERNAME);
ASSERT (strcmp (tmp, expected_username) == 0,
"connection-verify-bt", "failed to verify %s: unexpected %s / %s key value",
TEST_BT_DUN_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_USERNAME);
/* Password */
tmp = nm_setting_gsm_get_password (s_gsm);
ASSERT (tmp != NULL,
"connection-verify-gsm", "failed to verify %s: missing %s / %s key",
TEST_BT_DUN_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_PASSWORD);
ASSERT (strcmp (tmp, expected_password) == 0,
"connection-verify-bt", "failed to verify %s: unexpected %s / %s key value",
TEST_BT_DUN_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_PASSWORD);
/* ===== SERIAL SETTING ===== */
s_serial = NM_SETTING_SERIAL (nm_connection_get_setting (connection, NM_TYPE_SETTING_SERIAL));
ASSERT (s_serial != NULL,
"connection-verify-serial", "failed to verify %s: missing %s setting",
TEST_BT_DUN_FILE,
NM_SETTING_SERIAL_SETTING_NAME);
/* ===== PPP SETTING ===== */
s_ppp = NM_SETTING_PPP (nm_connection_get_setting (connection, NM_TYPE_SETTING_PPP));
ASSERT (s_ppp != NULL,
"connection-verify-ppp", "failed to verify %s: missing %s setting",
TEST_BT_DUN_FILE,
NM_SETTING_PPP_SETTING_NAME);
g_object_unref (connection);
}
static void
test_write_bt_dun_connection (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingBluetooth *s_bt;
NMSettingIP4Config *s_ip4;
NMSettingGsm *s_gsm;
char *uuid;
GByteArray *bdaddr;
unsigned char tmpbdaddr[] = { 0xaa, 0xb9, 0xa1, 0x74, 0x55, 0x44 };
gboolean success;
NMConnection *reread;
char *testfile = NULL;
GError *error = NULL;
pid_t owner_grp;
uid_t owner_uid;
guint64 timestamp = 0x12344433L;
connection = nm_connection_new ();
ASSERT (connection != NULL,
"connection-write", "failed to allocate new connection");
/* Connection setting */
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
ASSERT (s_con != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
g_object_set (s_con,
NM_SETTING_CONNECTION_ID, "T-Mobile Funkadelic",
NM_SETTING_CONNECTION_UUID, uuid,
NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
NM_SETTING_CONNECTION_TYPE, NM_SETTING_BLUETOOTH_SETTING_NAME,
NM_SETTING_CONNECTION_TIMESTAMP, timestamp,
NULL);
g_free (uuid);
/* Bluetooth setting */
s_bt = NM_SETTING_BLUETOOTH (nm_setting_bluetooth_new ());
ASSERT (s_bt != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_BLUETOOTH_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_bt));
bdaddr = g_byte_array_sized_new (ETH_ALEN);
g_byte_array_append (bdaddr, &tmpbdaddr[0], sizeof (tmpbdaddr));
g_object_set (s_bt,
NM_SETTING_BLUETOOTH_BDADDR, bdaddr,
NM_SETTING_BLUETOOTH_TYPE, NM_SETTING_BLUETOOTH_TYPE_DUN,
NULL);
g_byte_array_free (bdaddr, TRUE);
/* IP4 setting */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
ASSERT (s_ip4 != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
/* GSM setting */
s_gsm = NM_SETTING_GSM (nm_setting_gsm_new ());
ASSERT (s_gsm != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_GSM_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_gsm));
g_object_set (s_gsm,
NM_SETTING_GSM_APN, "internet2.voicestream.com",
NM_SETTING_GSM_USERNAME, "george.clinton",
NM_SETTING_GSM_PASSWORD, "parliament",
NM_SETTING_GSM_NUMBER, "*99#",
NULL);
/* Serial setting */
nm_connection_add_setting (connection, nm_setting_serial_new ());
/* PPP setting */
nm_connection_add_setting (connection, nm_setting_ppp_new ());
/* Write out the connection */
owner_uid = geteuid ();
owner_grp = getegid ();
success = write_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error);
ASSERT (success == TRUE,
"connection-write", "failed to allocate write keyfile: %s",
error ? error->message : "(none)");
ASSERT (testfile != NULL,
"connection-write", "didn't get keyfile name back after writing connection");
/* Read the connection back in and compare it to the one we just wrote out */
reread = connection_from_file (testfile, NULL);
ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
"connection-write", "written and re-read connection weren't the same");
g_clear_error (&error);
unlink (testfile);
g_free (testfile);
g_object_unref (reread);
g_object_unref (connection);
}
#define TEST_GSM_FILE TEST_KEYFILES_DIR"/ATT_Data_Connect_Plain"
static void
test_read_gsm_connection (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingSerial *s_serial;
NMSettingPPP *s_ppp;
NMSettingGsm *s_gsm;
NMSetting *s_bluetooth;
GError *error = NULL;
const char *tmp;
const char *expected_id = "AT&T Data Connect";
const char *expected_apn = "ISP.CINGULAR";
const char *expected_username = "ISP@CINGULARGPRS.COM";
const char *expected_password = "CINGULAR1";
const char *expected_network_id = "24005";
const char *expected_pin = "2345";
connection = connection_from_file (TEST_GSM_FILE, NULL);
ASSERT (connection != NULL,
"connection-read", "failed to read %s", TEST_GSM_FILE);
ASSERT (nm_connection_verify (connection, &error),
"connection-verify", "failed to verify %s: %s", TEST_GSM_FILE, error->message);
/* ===== CONNECTION SETTING ===== */
s_con = NM_SETTING_CONNECTION (nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION));
ASSERT (s_con != NULL,
"connection-verify-connection", "failed to verify %s: missing %s setting",
TEST_GSM_FILE,
NM_SETTING_CONNECTION_SETTING_NAME);
/* ID */
tmp = nm_setting_connection_get_id (s_con);
ASSERT (tmp != NULL,
"connection-verify-connection", "failed to verify %s: missing %s / %s key",
TEST_GSM_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_ID);
ASSERT (strcmp (tmp, expected_id) == 0,
"connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
TEST_GSM_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_ID);
tmp = nm_setting_connection_get_connection_type (s_con);
ASSERT (tmp != NULL,
"connection-verify-connection", "failed to verify %s: missing %s / %s key",
TEST_GSM_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_ID);
ASSERT (strcmp (tmp, NM_SETTING_GSM_SETTING_NAME) == 0,
"connection-verify-connection", "failed to verify %s: unexpected %s / %s key value",
TEST_GSM_FILE,
NM_SETTING_CONNECTION_SETTING_NAME,
NM_SETTING_CONNECTION_TYPE);
/* ===== BLUETOOTH SETTING ===== */
/* Plain GSM, so no BT setting expected */
s_bluetooth = nm_connection_get_setting (connection, NM_TYPE_SETTING_BLUETOOTH);
ASSERT (s_bluetooth == NULL,
"connection-verify-bt", "unexpected %s setting",
TEST_GSM_FILE,
NM_SETTING_BLUETOOTH_SETTING_NAME);
/* ===== GSM SETTING ===== */
s_gsm = NM_SETTING_GSM (nm_connection_get_setting (connection, NM_TYPE_SETTING_GSM));
ASSERT (s_gsm != NULL,
"connection-verify-gsm", "failed to verify %s: missing %s setting",
TEST_GSM_FILE,
NM_SETTING_GSM_SETTING_NAME);
/* APN */
tmp = nm_setting_gsm_get_apn (s_gsm);
ASSERT (tmp != NULL,
"connection-verify-gsm", "failed to verify %s: missing %s / %s key",
TEST_GSM_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_APN);
ASSERT (strcmp (tmp, expected_apn) == 0,
"connection-verify-gsm", "failed to verify %s: unexpected %s / %s key value",
TEST_GSM_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_APN);
/* Username */
tmp = nm_setting_gsm_get_username (s_gsm);
ASSERT (tmp != NULL,
"connection-verify-gsm", "failed to verify %s: missing %s / %s key",
TEST_GSM_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_USERNAME);
ASSERT (strcmp (tmp, expected_username) == 0,
"connection-verify-gsm", "failed to verify %s: unexpected %s / %s key value",
TEST_GSM_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_USERNAME);
/* Password */
tmp = nm_setting_gsm_get_password (s_gsm);
ASSERT (tmp != NULL,
"connection-verify-gsm", "failed to verify %s: missing %s / %s key",
TEST_GSM_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_PASSWORD);
ASSERT (strcmp (tmp, expected_password) == 0,
"connection-verify-gsm", "failed to verify %s: unexpected %s / %s key value",
TEST_GSM_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_PASSWORD);
/* Network ID */
tmp = nm_setting_gsm_get_network_id (s_gsm);
ASSERT (tmp != NULL,
"connection-verify-gsm", "failed to verify %s: missing %s / %s key",
TEST_GSM_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_NETWORK_ID);
ASSERT (strcmp (tmp, expected_network_id) == 0,
"connection-verify-gsm", "failed to verify %s: unexpected %s / %s key value",
TEST_GSM_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_NETWORK_ID);
/* PIN */
tmp = nm_setting_gsm_get_pin (s_gsm);
ASSERT (tmp != NULL,
"connection-verify-gsm", "failed to verify %s: missing %s / %s key",
TEST_GSM_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_PIN);
ASSERT (strcmp (tmp, expected_pin) == 0,
"connection-verify-gsm", "failed to verify %s: unexpected %s / %s key value",
TEST_GSM_FILE,
NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_GSM_PIN);
/* ===== SERIAL SETTING ===== */
s_serial = NM_SETTING_SERIAL (nm_connection_get_setting (connection, NM_TYPE_SETTING_SERIAL));
ASSERT (s_serial != NULL,
"connection-verify-serial", "failed to verify %s: missing %s setting",
TEST_GSM_FILE,
NM_SETTING_SERIAL_SETTING_NAME);
/* ===== PPP SETTING ===== */
s_ppp = NM_SETTING_PPP (nm_connection_get_setting (connection, NM_TYPE_SETTING_PPP));
ASSERT (s_ppp != NULL,
"connection-verify-ppp", "failed to verify %s: missing %s setting",
TEST_GSM_FILE,
NM_SETTING_PPP_SETTING_NAME);
g_object_unref (connection);
}
static void
test_write_gsm_connection (void)
{
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingIP4Config *s_ip4;
NMSettingGsm *s_gsm;
char *uuid;
gboolean success;
NMConnection *reread;
char *testfile = NULL;
GError *error = NULL;
pid_t owner_grp;
uid_t owner_uid;
guint64 timestamp = 0x12344433L;
connection = nm_connection_new ();
ASSERT (connection != NULL,
"connection-write", "failed to allocate new connection");
/* Connection setting */
s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
ASSERT (s_con != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_CONNECTION_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
g_object_set (s_con,
NM_SETTING_CONNECTION_ID, "T-Mobile Funkadelic 2",
NM_SETTING_CONNECTION_UUID, uuid,
NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
NM_SETTING_CONNECTION_TYPE, NM_SETTING_GSM_SETTING_NAME,
NM_SETTING_CONNECTION_TIMESTAMP, timestamp,
NULL);
g_free (uuid);
/* IP4 setting */
s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ());
ASSERT (s_ip4 != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_IP4_CONFIG_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NULL);
/* GSM setting */
s_gsm = NM_SETTING_GSM (nm_setting_gsm_new ());
ASSERT (s_gsm != NULL,
"connection-write", "failed to allocate new %s setting",
NM_SETTING_GSM_SETTING_NAME);
nm_connection_add_setting (connection, NM_SETTING (s_gsm));
g_object_set (s_gsm,
NM_SETTING_GSM_APN, "internet2.voicestream.com",
NM_SETTING_GSM_USERNAME, "george.clinton.again",
NM_SETTING_GSM_PASSWORD, "parliament2",
NM_SETTING_GSM_NUMBER, "*99#",
NM_SETTING_GSM_PIN, "123456",
NM_SETTING_GSM_NETWORK_ID, "254098",
NM_SETTING_GSM_HOME_ONLY, TRUE,
NM_SETTING_GSM_NETWORK_TYPE, NM_SETTING_GSM_NETWORK_TYPE_PREFER_UMTS_HSPA,
NULL);
/* Serial setting */
nm_connection_add_setting (connection, nm_setting_serial_new ());
/* PPP setting */
nm_connection_add_setting (connection, nm_setting_ppp_new ());
/* Write out the connection */
owner_uid = geteuid ();
owner_grp = getegid ();
success = write_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error);
ASSERT (success == TRUE,
"connection-write", "failed to allocate write keyfile: %s",
error ? error->message : "(none)");
ASSERT (testfile != NULL,
"connection-write", "didn't get keyfile name back after writing connection");
/* Read the connection back in and compare it to the one we just wrote out */
reread = connection_from_file (testfile, NULL);
ASSERT (reread != NULL, "connection-write", "failed to re-read test connection");
ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
"connection-write", "written and re-read connection weren't the same");
g_clear_error (&error);
unlink (testfile);
g_free (testfile);
g_object_unref (reread);
g_object_unref (connection);
}
int main (int argc, char **argv)
{
GError *error = NULL;
DBusGConnection *bus;
char *base;
g_type_init ();
bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
if (!nm_utils_init (&error))
FAIL ("nm-utils-init", "failed to initialize libnm-util: %s", error->message);
/* The tests */
test_read_valid_wired_connection ();
test_write_wired_connection ();
test_read_ip6_wired_connection ();
test_write_ip6_wired_connection ();
test_read_wired_mac_case ();
test_read_valid_wireless_connection ();
test_write_wireless_connection ();
test_read_string_ssid ();
test_write_string_ssid ();
test_read_bt_dun_connection ();
test_write_bt_dun_connection ();
test_read_gsm_connection ();
test_write_gsm_connection ();
base = g_path_get_basename (argv[0]);
fprintf (stdout, "%s: SUCCESS\n", base);
g_free (base);
dbus_g_connection_unref (bus);
return 0;
}