about summary refs log tree commit diff
path: root/src/libnm-client-aux-extern/tests
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2026-02-22 00:39:58 +0100
committerMichael Biebl <biebl@debian.org>2026-02-22 00:39:58 +0100
commit067fb576988f685e83ac8b0ae690334aff547c85 (patch)
tree204c7c8a0300691c53627cd3418cf54671ada1a8 /src/libnm-client-aux-extern/tests
parent6de29285e533f4fec22a219013f3687edb6b7399 (diff)
New upstream version 1.56.0 upstream/1.56.0
Diffstat (limited to 'src/libnm-client-aux-extern/tests')
-rw-r--r--src/libnm-client-aux-extern/tests/test-libnm-client-aux.c222
1 files changed, 222 insertions, 0 deletions
diff --git a/src/libnm-client-aux-extern/tests/test-libnm-client-aux.c b/src/libnm-client-aux-extern/tests/test-libnm-client-aux.c
index f727b3d9..6a25b652 100644
--- a/src/libnm-client-aux-extern/tests/test-libnm-client-aux.c
+++ b/src/libnm-client-aux-extern/tests/test-libnm-client-aux.c
@@ -234,6 +234,227 @@ test_team_link_watcher_tofro_string(void)
                            NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_NONE);
 }
 
+static void
+test_wireguard_peer(void)
+{
+    guint i;
+    struct {
+        const char *input;
+        const char *canonical; /* canonical string representation */
+
+        gboolean    invalid;
+        const char *pubkey;
+        const char *endpoint;
+        guint16     keepalive;
+        guint       num_allowed_ips;
+        const char *allowed_ips[2];
+        const char *psk;
+        int         psk_flags;
+    } tests[] = {{
+                     /* Public key only */
+                     .input     = "MWEKYcE9MEh5RoGDuJYrJ2YgkoosONGhuHRBAC00e14=",
+                     .canonical = "MWEKYcE9MEh5RoGDuJYrJ2YgkoosONGhuHRBAC00e14=",
+                     .pubkey    = "MWEKYcE9MEh5RoGDuJYrJ2YgkoosONGhuHRBAC00e14=",
+                 },
+                 {
+                     /* IPv4 endpoint */
+                     .input     = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04="
+                                  " endpoint=1.2.3.4:5555",
+                     .canonical = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04="
+                                  " endpoint=1.2.3.4:5555",
+                     .pubkey    = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04=",
+                     .endpoint  = "1.2.3.4:5555",
+                 },
+                 {
+                     /* IPv6 endpoint */
+                     .input     = "aPsdPkeqH4l5Nax3g3e8A8f7g0hJk2l3m4N5p6q7R8s="
+                                  " endpoint=[fd01:db8::1]:8080",
+                     .canonical = "aPsdPkeqH4l5Nax3g3e8A8f7g0hJk2l3m4N5p6q7R8s="
+                                  " endpoint=[fd01:db8::1]:8080",
+                     .pubkey    = "aPsdPkeqH4l5Nax3g3e8A8f7g0hJk2l3m4N5p6q7R8s=",
+                     .endpoint  = "[fd01:db8::1]:8080",
+                 },
+                 {
+                     /* IPv6 endpoint, without brackets */
+                     .input     = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04="
+                                  " endpoint=fd01::12:8080",
+                     .canonical = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04="
+                                  " endpoint=fd01::12:8080",
+                     .pubkey    = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04=",
+                     .endpoint  = "fd01::12:8080",
+                 },
+                 {
+                     /* Single IPv4 allowed-ip */
+                     .input           = "s4fmZZA3gMGVv8+0hkSwrmeLC6nNd+Pd6DlSaufLKhY="
+                                        " allowed-ips=172.16.0.0/16",
+                     .canonical       = "s4fmZZA3gMGVv8+0hkSwrmeLC6nNd+Pd6DlSaufLKhY="
+                                        " allowed-ips=172.16.0.0/16",
+                     .pubkey          = "s4fmZZA3gMGVv8+0hkSwrmeLC6nNd+Pd6DlSaufLKhY=",
+                     .num_allowed_ips = 1,
+                     .allowed_ips     = {"172.16.0.0/16"},
+                 },
+                 {
+                     /* Multiple allowed-ips */
+                     .input           = "V02J2zmCi2LHX2KMK+ZOgDNhZzK4JXjGNr7CYfz9DxQ="
+                                        " allowed-ips=192.168.2.0/24;2001:db8:a::/48",
+                     .canonical       = "V02J2zmCi2LHX2KMK+ZOgDNhZzK4JXjGNr7CYfz9DxQ="
+                                        " allowed-ips=192.168.2.0/24;2001:db8:a::/48",
+                     .pubkey          = "V02J2zmCi2LHX2KMK+ZOgDNhZzK4JXjGNr7CYfz9DxQ=",
+                     .num_allowed_ips = 2,
+                     .allowed_ips     = {"192.168.2.0/24", "2001:db8:a::/48"},
+                 },
+                 {
+                     /* Persistent-keepalive */
+                     .input     = "D1FTp8Wy1oJQI045yXo9EMdxJqjXHC3VhTCPTh3lSQM="
+                                  " persistent-keepalive=25",
+                     .canonical = "D1FTp8Wy1oJQI045yXo9EMdxJqjXHC3VhTCPTh3lSQM="
+                                  " persistent-keepalive=25",
+                     .pubkey    = "D1FTp8Wy1oJQI045yXo9EMdxJqjXHC3VhTCPTh3lSQM=",
+                     .keepalive = 25,
+                 },
+                 {
+                     /* Preshared-key without flags (should default to 0) */
+                     .input     = "H5cWWgpWgJH+nHFhsuPS3adgZHuc6Z4cRzfiNRTinE0="
+                                  " preshared-key=16uGwZvROnwyNGoW6Z3pvJB5GKbd6ncYROA/FFleLQA=",
+                     .canonical = "H5cWWgpWgJH+nHFhsuPS3adgZHuc6Z4cRzfiNRTinE0="
+                                  " preshared-key=16uGwZvROnwyNGoW6Z3pvJB5GKbd6ncYROA/FFleLQA="
+                                  " preshared-key-flags=0",
+                     .pubkey    = "H5cWWgpWgJH+nHFhsuPS3adgZHuc6Z4cRzfiNRTinE0=",
+                     .psk       = "16uGwZvROnwyNGoW6Z3pvJB5GKbd6ncYROA/FFleLQA=",
+                     .psk_flags = 0,
+                 },
+                 {
+                     /* Preshared-key flags as string */
+                     .input     = "H5cWWgpWgJH+nHFhsuPS3adgZHuc6Z4cRzfiNRTinE0="
+                                  " preshared-key=16uGwZvROnwyNGoW6Z3pvJB5GKbd6ncYROA/FFleLQA="
+                                  " preshared-key-flags=not-saved",
+                     .canonical = "H5cWWgpWgJH+nHFhsuPS3adgZHuc6Z4cRzfiNRTinE0="
+                                  " preshared-key=16uGwZvROnwyNGoW6Z3pvJB5GKbd6ncYROA/FFleLQA="
+                                  " preshared-key-flags=2",
+                     .pubkey    = "H5cWWgpWgJH+nHFhsuPS3adgZHuc6Z4cRzfiNRTinE0=",
+                     .psk       = "16uGwZvROnwyNGoW6Z3pvJB5GKbd6ncYROA/FFleLQA=",
+                     .psk_flags = 2,
+                 },
+                 {
+                     /* Non-canonical order and extra whitespaces */
+                     .input           = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY="
+                                        "  preshared-key=EVVP8pOzn8R3nQtv62/hnGsXzyagEgykSboFe4EFhQc="
+                                        " endpoint=vpn.example.com:51820  "
+                                        " preshared-key-flags=1"
+                                        " persistent-keepalive=45"
+                                        " allowed-ips=0.0.0.0/0;::/0",
+                     .canonical       = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY="
+                                        " allowed-ips=0.0.0.0/0;::/0"
+                                        " endpoint=vpn.example.com:51820"
+                                        " persistent-keepalive=45"
+                                        " preshared-key=EVVP8pOzn8R3nQtv62/hnGsXzyagEgykSboFe4EFhQc="
+                                        " preshared-key-flags=1",
+                     .pubkey          = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY=",
+                     .endpoint        = "vpn.example.com:51820",
+                     .keepalive       = 45,
+                     .num_allowed_ips = 2,
+                     .allowed_ips     = {"0.0.0.0/0", "::/0"},
+                     .psk             = "EVVP8pOzn8R3nQtv62/hnGsXzyagEgykSboFe4EFhQc=",
+                     .psk_flags       = 1,
+                 },
+                 {
+                     /* Empty string */
+                     .input   = "",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Invalid public key*/
+                     .input   = "aaaaaaaaaaaaaaaaaaaaaaa=",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Missing value*/
+                     .input   = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY= "
+                                "persistent-keepalive=",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Unknown attribute */
+                     .input   = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY= "
+                                "persistent-keepalive=12 foobarness=13",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Invalid IPv4 allowed-ip*/
+                     .input   = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY= "
+                                "allowed-ips=192.168.10.256/32",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Invalid IPv6 allowed-ip */
+                     .input   = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY= "
+                                "allowed-ips=fd01::1::3/64",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Endpoint with no port */
+                     .input   = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04="
+                                " endpoint=1.2.3.4",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Invalid endpoint */
+                     .input   = "+DIX0qWKQ4E6hy7MWzsSRXjqAHCtffWrXTdJPe/xS04="
+                                " endpoint=1.2.3.5.6",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Invalid persistent-keepalive */
+                     .input   = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY= "
+                                "persistent-keepalive=yes",
+                     .invalid = TRUE,
+                 },
+                 {
+                     /* Invalid PSK */
+                     .input   = "gqQ9dUqKQNfz/KOqELJpS0MKBvRcYWL8sm/LGEWKKQY="
+                                " preshared-key=pskpskpskpskpskpskpskpskpskpskpskpsk",
+                     .invalid = TRUE,
+                 }};
+
+    for (i = 0; i < G_N_ELEMENTS(tests); i++) {
+        nm_auto_unref_wgpeer NMWireGuardPeer *peer   = NULL;
+        gs_free_error GError                 *error  = NULL;
+        gs_free char                         *newstr = NULL;
+        guint                                 j;
+
+        peer = _nm_utils_wireguard_peer_from_string(tests[i].input, &error);
+        if (tests[i].invalid) {
+            g_assert(!peer);
+            g_assert(error);
+            continue;
+        }
+        g_assert_no_error(error);
+        g_assert_nonnull(peer);
+
+        newstr = _nm_utils_wireguard_peer_to_string(peer);
+        g_assert_nonnull(newstr);
+        g_assert_cmpstr(tests[i].canonical, ==, newstr);
+
+        g_assert_cmpstr(tests[i].pubkey, ==, nm_wireguard_peer_get_public_key(peer));
+        g_assert_cmpstr(tests[i].endpoint, ==, nm_wireguard_peer_get_endpoint(peer));
+
+        g_assert_cmpint(tests[i].num_allowed_ips, ==, nm_wireguard_peer_get_allowed_ips_len(peer));
+        for (j = 0; j < tests[i].num_allowed_ips; j++) {
+            g_assert_cmpstr(tests[i].allowed_ips[j],
+                            ==,
+                            nm_wireguard_peer_get_allowed_ip(peer, j, NULL));
+        }
+
+        g_assert_cmpint(tests[i].keepalive, ==, nm_wireguard_peer_get_persistent_keepalive(peer));
+        g_assert_cmpstr(tests[i].psk, ==, nm_wireguard_peer_get_preshared_key(peer));
+        if (tests[i].psk) {
+            g_assert_cmpint(tests[i].psk_flags,
+                            ==,
+                            nm_wireguard_peer_get_preshared_key_flags(peer));
+        }
+    }
+}
+
 /*****************************************************************************/
 
 NMTST_DEFINE();
@@ -245,6 +466,7 @@ main(int argc, char **argv)
 
     g_test_add_func("/libnm-core-aux/test_team_link_watcher_tofro_string",
                     test_team_link_watcher_tofro_string);
+    g_test_add_func("/libnm-core-aux/test-wireguard-peer", test_wireguard_peer);
 
     return g_test_run();
 }