summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2018-12-03 10:27:06 +0100
committerThomas Haller <thaller@redhat.com>2018-12-11 09:23:47 +0100
commit487ee687d5bba82ee1054d74961afe122260811f (patch)
tree9e5f40bf34a138c40a109de3b1c7dd80a771e8fd
parente0191d420162fa78561ab1f45749ef2cd6464626 (diff)
downloadNetworkManager-487ee687d5bba82ee1054d74961afe122260811f.tar.gz
libnm: add nm_connectivity_state_cmp() helper
-rw-r--r--src/nm-connectivity.h15
-rw-r--r--src/tests/test-general.c57
2 files changed, 72 insertions, 0 deletions
diff --git a/src/nm-connectivity.h b/src/nm-connectivity.h
index fad248be7b..f262298a82 100644
--- a/src/nm-connectivity.h
+++ b/src/nm-connectivity.h
@@ -24,6 +24,21 @@
#include "nm-dbus-interface.h"
+/*****************************************************************************/
+
+static inline int
+nm_connectivity_state_cmp (NMConnectivityState a, NMConnectivityState b)
+{
+ if (a == NM_CONNECTIVITY_PORTAL && b == NM_CONNECTIVITY_LIMITED)
+ return 1;
+ if (b == NM_CONNECTIVITY_PORTAL && a == NM_CONNECTIVITY_LIMITED)
+ return -1;
+ NM_CMP_DIRECT (a, b);
+ return 0;
+}
+
+/*****************************************************************************/
+
#define NM_CONNECTIVITY_ERROR ((NMConnectivityState) -1)
#define NM_CONNECTIVITY_FAKE ((NMConnectivityState) -2)
#define NM_CONNECTIVITY_CANCELLED ((NMConnectivityState) -3)
diff --git a/src/tests/test-general.c b/src/tests/test-general.c
index 16121facf0..223bf019a1 100644
--- a/src/tests/test-general.c
+++ b/src/tests/test-general.c
@@ -34,6 +34,7 @@
#include "systemd/nm-sd-utils.h"
#include "dns/nm-dns-manager.h"
+#include "nm-connectivity.h"
#include "nm-test-utils-core.h"
@@ -2039,6 +2040,60 @@ test_nm_utils_dhcp_client_id_systemd_node_specific (gconstpointer test_data)
/*****************************************************************************/
+static void
+test_connectivity_state_cmp (void)
+{
+ NMConnectivityState a;
+
+#define _cmp(a, b, cmp) \
+ G_STMT_START { \
+ const NMConnectivityState _a = (a); \
+ const NMConnectivityState _b = (b); \
+ const int _cmp = (cmp); \
+ \
+ g_assert (NM_IN_SET (_cmp, -1, 0, 1)); \
+ g_assert_cmpint (nm_connectivity_state_cmp (_a, _b), ==, _cmp); \
+ g_assert_cmpint (nm_connectivity_state_cmp (_b, _a), ==, -_cmp); \
+ } G_STMT_END
+
+ for (a = NM_CONNECTIVITY_UNKNOWN; a <= NM_CONNECTIVITY_FULL; a++)
+ _cmp (a, a, 0);
+
+ _cmp (NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_UNKNOWN, 0);
+ _cmp (NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_NONE, -1);
+ _cmp (NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_LIMITED, -1);
+ _cmp (NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_PORTAL, -1);
+ _cmp (NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_FULL, -1);
+
+ _cmp (NM_CONNECTIVITY_NONE, NM_CONNECTIVITY_UNKNOWN, 1);
+ _cmp (NM_CONNECTIVITY_NONE, NM_CONNECTIVITY_NONE, 0);
+ _cmp (NM_CONNECTIVITY_NONE, NM_CONNECTIVITY_LIMITED, -1);
+ _cmp (NM_CONNECTIVITY_NONE, NM_CONNECTIVITY_PORTAL, -1);
+ _cmp (NM_CONNECTIVITY_NONE, NM_CONNECTIVITY_FULL, -1);
+
+ _cmp (NM_CONNECTIVITY_LIMITED, NM_CONNECTIVITY_UNKNOWN, 1);
+ _cmp (NM_CONNECTIVITY_LIMITED, NM_CONNECTIVITY_NONE, 1);
+ _cmp (NM_CONNECTIVITY_LIMITED, NM_CONNECTIVITY_LIMITED, 0);
+ _cmp (NM_CONNECTIVITY_LIMITED, NM_CONNECTIVITY_PORTAL, -1);
+ _cmp (NM_CONNECTIVITY_LIMITED, NM_CONNECTIVITY_FULL, -1);
+
+ _cmp (NM_CONNECTIVITY_PORTAL, NM_CONNECTIVITY_UNKNOWN, 1);
+ _cmp (NM_CONNECTIVITY_PORTAL, NM_CONNECTIVITY_NONE, 1);
+ _cmp (NM_CONNECTIVITY_PORTAL, NM_CONNECTIVITY_LIMITED, 1);
+ _cmp (NM_CONNECTIVITY_PORTAL, NM_CONNECTIVITY_PORTAL, 0);
+ _cmp (NM_CONNECTIVITY_PORTAL, NM_CONNECTIVITY_FULL, -1);
+
+ _cmp (NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_UNKNOWN, 1);
+ _cmp (NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_NONE, 1);
+ _cmp (NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_LIMITED, 1);
+ _cmp (NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_PORTAL, 1);
+ _cmp (NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_FULL, 0);
+
+#undef _cmp
+}
+
+/*****************************************************************************/
+
NMTST_DEFINE ();
int
@@ -2094,6 +2149,8 @@ main (int argc, char **argv)
g_test_add_data_func ("/general/nm_utils_dhcp_client_id_systemd_node_specific/0", GINT_TO_POINTER (0), test_nm_utils_dhcp_client_id_systemd_node_specific);
g_test_add_data_func ("/general/nm_utils_dhcp_client_id_systemd_node_specific/1", GINT_TO_POINTER (1), test_nm_utils_dhcp_client_id_systemd_node_specific);
+ g_test_add_func ("/core/general/test_connectivity_state_cmp", test_connectivity_state_cmp);
+
return g_test_run ();
}