diff --git a/.gitignore b/.gitignore index d74b40c08d..55e8317e31 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/Makefile.am b/Makefile.am index aea13af505..7eb6a82674 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 diff --git a/src/devices/wwan/meson.build b/src/devices/wwan/meson.build index 7f28265f81..363e522bf1 100644 --- a/src/devices/wwan/meson.build +++ b/src/devices/wwan/meson.build @@ -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 diff --git a/src/devices/wwan/tests/meson.build b/src/devices/wwan/tests/meson.build new file mode 100644 index 0000000000..64dd76742a --- /dev/null +++ b/src/devices/wwan/tests/meson.build @@ -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()], +) 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..33402cd52c --- /dev/null +++ b/src/devices/wwan/tests/test-service-providers.c @@ -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 (); +} + 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 @@ + + + + + + + + Sophia + + + + + + APN + 192.0.2.1 + 192.0.2.2 + + + + + + + + Demiurge + + + + + + Unsolicited Nudes MMS + mms + mms + http://mms.example.com/ + 192.0.2.1:8080 + + + + + GPRS + praise + santa + 192.0.2.1 + 192.0.2.2 + 192.0.2.3 + + + + + + Second + worship + doom + + + + + + Personal + + + + + + APN + 192.0.2.1 + 192.0.2.2 + + + + + + +