wwan/tests: test service-providers.xml parser

Just a handful of unit tests.
This commit is contained in:
Lubomir Rintel 2019-08-12 12:42:10 +02:00
parent 6632c77094
commit 6e5385a4eb
6 changed files with 243 additions and 2 deletions

1
.gitignore vendored
View file

@ -209,6 +209,7 @@ test-*.trs
/src/devices/tests/test-acd
/src/devices/tests/test-lldp
/src/devices/wifi/tests/test-devices-wifi
/src/devices/wwan/tests/test-service-providers
/src/dhcp/nm-dhcp-helper
/src/dhcp/tests/test-dhcp-dhclient
/src/dhcp/tests/test-dhcp-options

View file

@ -3367,11 +3367,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

View file

@ -29,8 +29,10 @@ libnm_wwan = shared_module(
install_dir: nm_plugindir,
)
wwan_inc = include_directories('.')
libnm_wwan_dep = declare_dependency(
include_directories: include_directories('.'),
include_directories: wwan_inc,
link_with: libnm_wwan,
)
@ -75,3 +77,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

View file

@ -0,0 +1,13 @@
exe = executable(
'test-service-providers',
sources: files('test-service-providers.c',
'../nm-service-providers.c'),
dependencies: test_nm_dep,
include_directories: wwan_inc,
)
test(
'wwan/test-service-providers',
test_script,
timeout: default_test_timeout,
args: test_args + [exe.full_path()],
)

View file

@ -0,0 +1,124 @@
// SPDX-License-Identifier: LGPL-2.1+
/*
* 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 ();
}

View file

@ -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>