summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2019-08-12 12:42:10 +0200
committerLubomir Rintel <lkundrak@v3.sk>2019-08-26 20:25:35 +0200
commitb2ee791988f4b06e7423bc668df618e94f957bce (patch)
tree6a0ab86e0b862a16035bbbf26f602b86a76cc64a
parent92f469196ac82f378fedd8fabeeb9b5bde000cf8 (diff)
downloadNetworkManager-b2ee791988f4b06e7423bc668df618e94f957bce.tar.gz
wwan/tests: test service-providers.xml parser
Just a handful of unit tests.
-rw-r--r--Makefile.am26
-rw-r--r--src/devices/wwan/meson.build4
-rw-r--r--src/devices/wwan/tests/test-service-providers.c137
-rw-r--r--src/devices/wwan/tests/test-service-providers.xml73
4 files changed, 239 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am
index 6aa685681d..01007890da 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -3326,11 +3326,35 @@ check-local-devices-wwan: src/devices/wwan/libnm-device-plugin-wwan.la src/devic
check_local += check-local-devices-wwan
+src_devices_wwan_tests_test_service_providers_SOURCES = \
+ src/devices/wwan/tests/test-service-providers.c \
+ src/devices/wwan/nm-service-providers.c \
+ src/devices/wwan/nm-service-providers.h \
+ $(NULL)
+
+src_devices_wwan_tests_test_service_providers_CPPFLAGS = \
+ $(src_cppflags_base_test) \
+ -I$(srcdir)/src/devices/wwan \
+ $(NULL)
+
+src_devices_wwan_tests_test_service_providers_LDFLAGS = \
+ $(SANITIZER_EXEC_LDFLAGS) \
+ $(NULL)
+
+src_devices_wwan_tests_test_service_providers_LDADD = \
+ src/libNetworkManagerTest.la \
+ $(GLIB_LIBS) \
+ $(NULL)
+
+check_programs += src/devices/wwan/tests/test-service-providers
+
endif
EXTRA_DIST += \
src/devices/wwan/libnm-wwan.ver \
- src/devices/wwan/meson.build
+ src/devices/wwan/meson.build \
+ src/devices/wwan/tests/test-service-providers.xml \
+ $(NULL)
###############################################################################
# src/devices/bluetooth
diff --git a/src/devices/wwan/meson.build b/src/devices/wwan/meson.build
index 7f28265f81..e4412c17df 100644
--- a/src/devices/wwan/meson.build
+++ b/src/devices/wwan/meson.build
@@ -75,3 +75,7 @@ check-local-devices-wwan: src/devices/wwan/libnm-device-plugin-wwan.la src/devic
$(srcdir)/tools/check-exports.sh $(builddir)/src/devices/wwan/.libs/libnm-wwan.so "$(srcdir)/src/devices/wwan/libnm-wwan.ver"
$(call check_so_symbols,$(builddir)/src/devices/wwan/.libs/libnm-wwan.so)
'''
+
+if enable_tests
+ subdir('tests')
+endif
diff --git a/src/devices/wwan/tests/test-service-providers.c b/src/devices/wwan/tests/test-service-providers.c
new file mode 100644
index 0000000000..4634b65976
--- /dev/null
+++ b/src/devices/wwan/tests/test-service-providers.c
@@ -0,0 +1,137 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library 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) 2019 Red Hat
+ */
+
+#include "nm-default.h"
+
+#include "nm-service-providers.h"
+
+#include "nm-test-utils-core.h"
+
+static void
+test_positive_cb (const char *apn,
+ const char *username,
+ const char *password,
+ const char *gateway,
+ const char *auth_method,
+ const GSList *dns,
+ GError *error,
+ gpointer user_data)
+{
+ GMainLoop *loop = user_data;
+
+ g_main_loop_quit (loop);
+ g_assert_no_error (error);
+ g_assert_cmpstr (apn, ==, "gprs.example.com");
+ g_assert_cmpstr (username, ==, "praise");
+ g_assert_cmpstr (password, ==, "santa");
+ g_assert_cmpstr (gateway, ==, "192.0.2.3");
+ g_assert_cmpstr (auth_method, ==, "pap");
+
+ g_assert_nonnull (dns);
+ g_assert_cmpstr (dns->data, ==, "192.0.2.2");
+ dns = dns->next;
+ g_assert_nonnull (dns);
+ g_assert_cmpstr (dns->data, ==, "192.0.2.1");
+ g_assert_null (dns->next);
+}
+
+static void
+test_positive (void)
+{
+ GMainLoop *loop = g_main_loop_new (NULL, FALSE);
+
+ nm_service_providers_find_gsm_apn (NM_BUILD_SRCDIR"/src/devices/wwan/tests/test-service-providers.xml",
+ "13337", NULL, test_positive_cb, loop);
+ g_main_loop_run (loop);
+ g_main_loop_unref (loop);
+}
+
+/*****************************************************************************/
+
+static void
+test_negative_cb (const char *apn,
+ const char *username,
+ const char *password,
+ const char *gateway,
+ const char *auth_method,
+ const GSList *dns,
+ GError *error,
+ gpointer user_data)
+{
+ GMainLoop *loop = user_data;
+
+ g_main_loop_quit (loop);
+ g_assert_error (error, NM_UTILS_ERROR, NM_UTILS_ERROR_UNKNOWN);
+}
+
+static void
+test_negative (void)
+{
+ GMainLoop *loop = g_main_loop_new (NULL, FALSE);
+
+ nm_service_providers_find_gsm_apn (NM_BUILD_SRCDIR"/src/devices/wwan/tests/test-service-providers.xml",
+ "78130", NULL, test_negative_cb, loop);
+ g_main_loop_run (loop);
+ g_main_loop_unref (loop);
+}
+
+/*****************************************************************************/
+
+static void
+test_nonexistent_cb (const char *apn,
+ const char *username,
+ const char *password,
+ const char *gateway,
+ const char *auth_method,
+ const GSList *dns,
+ GError *error,
+ gpointer user_data)
+{
+ GMainLoop *loop = user_data;
+
+ g_main_loop_quit (loop);
+ g_assert_error (error, G_IO_ERROR, G_IO_ERROR_AGAIN);
+}
+
+static void
+test_nonexistent (void)
+{
+ GMainLoop *loop = g_main_loop_new (NULL, FALSE);
+
+ nm_service_providers_find_gsm_apn ("nonexistent.xml", "13337", NULL,
+ test_nonexistent_cb, loop);
+ g_main_loop_run (loop);
+ g_main_loop_unref (loop);
+}
+
+/*****************************************************************************/
+
+NMTST_DEFINE ();
+
+int
+main (int argc, char **argv)
+{
+ nmtst_init_assert_logging (&argc, &argv, "INFO", "DEFAULT");
+
+ g_test_add_func ("/service-providers/positive", test_positive);
+ g_test_add_func ("/service-providers/negative", test_negative);
+ g_test_add_func ("/service-providers/nonexistent", test_nonexistent);
+
+ return g_test_run ();
+}
+
diff --git a/src/devices/wwan/tests/test-service-providers.xml b/src/devices/wwan/tests/test-service-providers.xml
new file mode 100644
index 0000000000..f0ca2debce
--- /dev/null
+++ b/src/devices/wwan/tests/test-service-providers.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding='utf-8'?>
+<!DOCTYPE serviceproviders SYSTEM "serviceproviders.2.dtd">
+
+<serviceproviders format="2.0">
+
+<country code="feh">
+ <provider>
+ <name>Sophia</name>
+ <gsm>
+ <network-id mcc="666" mnc="999"/>
+ <apn value="access.example.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>APN</name>
+ <dns>192.0.2.1</dns>
+ <dns>192.0.2.2</dns>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+<country code="meh">
+ <provider>
+ <name>Demiurge</name>
+ <gsm>
+ <network-id mcc="133" mnc="37"/>
+ <network-id mcc="133" mnc="666"/>
+ <apn value="mms">
+ <usage type="mms"/>
+ <name>Unsolicited Nudes MMS</name>
+ <username>mms</username>
+ <password>mms</password>
+ <mmsc>http://mms.example.com/</mmsc>
+ <mmsproxy>192.0.2.1:8080</mmsproxy>
+ </apn>
+ <apn value="gprs.example.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>GPRS</name>
+ <username>praise</username>
+ <password>santa</password>
+ <dns>192.0.2.1</dns>
+ <dns>192.0.2.2</dns>
+ <gateway>192.0.2.3</gateway>
+ <authentication method="pap"/>
+ </apn>
+ <apn value="second.example.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>Second</name>
+ <username>worship</username>
+ <password>doom</password>
+ </apn>
+ </gsm>
+ </provider>
+
+ <provider>
+ <name>Personal</name>
+ <gsm>
+ <network-id mcc="666" mnc="999"/>
+ <apn value="access.example.com">
+ <plan type="postpaid"/>
+ <usage type="internet"/>
+ <name>APN</name>
+ <dns>192.0.2.1</dns>
+ <dns>192.0.2.2</dns>
+ </apn>
+ </gsm>
+ </provider>
+</country>
+
+</serviceproviders>
+