about summary refs log tree commit diff
path: root/src/tests
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/test-core.c56
-rwxr-xr-xsrc/tests/test-secret-agent.py51
2 files changed, 90 insertions, 17 deletions
diff --git a/src/tests/test-core.c b/src/tests/test-core.c
index b90a8fac..099786ef 100644
--- a/src/tests/test-core.c
+++ b/src/tests/test-core.c
@@ -968,10 +968,17 @@ test_wildcard_match (void)
 	do_test_wildcard_match ("b",      TRUE,  "!!a");
 	do_test_wildcard_match ("!a",     FALSE, "!!a");
 
-	do_test_wildcard_match ("\\",     TRUE,  "\\\\");
+	do_test_wildcard_match ("\\",     TRUE,  "\\\\\\");
 	do_test_wildcard_match ("\\\\",   FALSE, "\\\\");
 	do_test_wildcard_match ("",       FALSE, "\\\\");
 
+	do_test_wildcard_match ("\\a",    TRUE, "\\\\\\a");
+	do_test_wildcard_match ("b",      TRUE, "&!a");
+	do_test_wildcard_match ("a",      FALSE, "&!a");
+	do_test_wildcard_match ("!a",     TRUE, "&\\!a");
+	do_test_wildcard_match ("!a",     TRUE, "|\\!a");
+	do_test_wildcard_match ("!a",     TRUE, "\\!a");
+
 	do_test_wildcard_match ("name",   FALSE, "name[123]");
 	do_test_wildcard_match ("name1",  TRUE,  "name[123]");
 	do_test_wildcard_match ("name2",  TRUE,  "name[123]");
@@ -979,6 +986,12 @@ test_wildcard_match (void)
 	do_test_wildcard_match ("name4",  FALSE, "name[123]");
 
 	do_test_wildcard_match ("[a]",    TRUE,  "\\[a\\]");
+
+	do_test_wildcard_match ("aa",     FALSE, "!a*");
+	do_test_wildcard_match ("aa",     FALSE, "&!a*");
+	do_test_wildcard_match ("aa",     FALSE, "|!a*");
+	do_test_wildcard_match ("aa",     FALSE, "&!a*", "aa");
+	do_test_wildcard_match ("aa",     TRUE, "|!a*", "aa");
 }
 
 static NMConnection *
@@ -2118,6 +2131,46 @@ test_nm_utils_dhcp_client_id_systemd_node_specific (gconstpointer test_data)
 /*****************************************************************************/
 
 static void
+_kernel_cmdline_match (gboolean expected_match,
+                       const char *const*proc_cmdline,
+                       const char *const*patterns)
+{
+	gs_free_error GError *error = NULL;
+	GError **p_error = nmtst_get_rand_bool () ? &error : NULL;
+	gboolean match;
+
+	nm_assert (proc_cmdline);
+	nm_assert (patterns);
+
+	match = nm_utils_kernel_cmdline_match_check (proc_cmdline, patterns, NM_PTRARRAY_LEN (patterns), p_error);
+	if (expected_match)
+		nmtst_assert_success (match, error);
+	else {
+		g_assert (!p_error || error);
+		g_assert (!match);
+	}
+}
+
+static void
+test_kernel_cmdline_match_check (void)
+{
+	_kernel_cmdline_match (TRUE, NM_MAKE_STRV (""), NM_MAKE_STRV (""));
+	_kernel_cmdline_match (FALSE, NM_MAKE_STRV (""), NM_MAKE_STRV ("a"));
+	_kernel_cmdline_match (TRUE, NM_MAKE_STRV ("a"), NM_MAKE_STRV ("a"));
+	_kernel_cmdline_match (TRUE, NM_MAKE_STRV ("a=b"), NM_MAKE_STRV ("a"));
+	_kernel_cmdline_match (TRUE, NM_MAKE_STRV ("a=b", "b"), NM_MAKE_STRV ("a", "b"));
+	_kernel_cmdline_match (TRUE, NM_MAKE_STRV ("a=b", "b"), NM_MAKE_STRV ("&a", "&b"));
+	_kernel_cmdline_match (FALSE, NM_MAKE_STRV ("a=b", "bc"), NM_MAKE_STRV ("&a", "&b"));
+	_kernel_cmdline_match (FALSE, NM_MAKE_STRV ("a=b", "b"), NM_MAKE_STRV ("&a", "&b", "c"));
+	_kernel_cmdline_match (TRUE, NM_MAKE_STRV ("a=b", "b"), NM_MAKE_STRV ("&a", "&b", "b", "c"));
+	_kernel_cmdline_match (TRUE, NM_MAKE_STRV ("a=b", "b", "c=dd"), NM_MAKE_STRV ("&a", "&b", "c"));
+	_kernel_cmdline_match (FALSE, NM_MAKE_STRV ("a", "b"), NM_MAKE_STRV ("a", "&c"));
+	_kernel_cmdline_match (TRUE, NM_MAKE_STRV ("a", "b"), NM_MAKE_STRV ("a", "|\\c"));
+}
+
+/*****************************************************************************/
+
+static void
 test_connectivity_state_cmp (void)
 {
 	NMConnectivityState a;
@@ -2229,6 +2282,7 @@ main (int argc, char **argv)
 	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);
+	g_test_add_func ("/core/general/test_kernel_cmdline_match_check", test_kernel_cmdline_match_check);
 
 	return g_test_run ();
 }
diff --git a/src/tests/test-secret-agent.py b/src/tests/test-secret-agent.py
index d8cabc65..46f82b34 100755
--- a/src/tests/test-secret-agent.py
+++ b/src/tests/test-secret-agent.py
@@ -6,11 +6,13 @@ import dbus
 import dbus.service
 import dbus.mainloop.glib
 
-IFACE_SECRET_AGENT = 'org.freedesktop.NetworkManager.SecretAgent'
-IFACE_AGENT_MANAGER = 'org.freedesktop.NetworkManager.AgentManager'
+IFACE_SECRET_AGENT = "org.freedesktop.NetworkManager.SecretAgent"
+IFACE_AGENT_MANAGER = "org.freedesktop.NetworkManager.AgentManager"
+
 
 class NotAuthorizedException(dbus.DBusException):
-    _dbus_error_name = IFACE_SECRET_AGENT + '.NotAuthorized'
+    _dbus_error_name = IFACE_SECRET_AGENT + ".NotAuthorized"
+
 
 class Agent(dbus.service.Object):
     def __init__(self, bus, object_path):
@@ -18,41 +20,58 @@ class Agent(dbus.service.Object):
         self.bus = bus
         dbus.service.Object.__init__(self, bus, object_path)
 
-    @dbus.service.method(IFACE_SECRET_AGENT,
-                         in_signature='a{sa{sv}}osasb',
-                         out_signature='a{sa{sv}}',
-                         sender_keyword='sender')
-    def GetSecrets(self, connection_hash, connection_path, setting_name, hints, request_new, sender=None):
+    @dbus.service.method(
+        IFACE_SECRET_AGENT,
+        in_signature="a{sa{sv}}osasb",
+        out_signature="a{sa{sv}}",
+        sender_keyword="sender",
+    )
+    def GetSecrets(
+        self,
+        connection_hash,
+        connection_path,
+        setting_name,
+        hints,
+        request_new,
+        sender=None,
+    ):
         if not sender:
             raise NotAuthorizedException("Internal error: couldn't get sender")
         uid = self.bus.get_unix_user(sender)
         if uid != 0:
             raise NotAuthorizedException("UID %d not authorized" % uid)
 
-        print("Secrets requested path '%s' setting '%s' hints '%s' new %d" % (connection_path, setting_name, str(hints), request_new))
+        print(
+            "Secrets requested path '%s' setting '%s' hints '%s' new %d"
+            % (connection_path, setting_name, str(hints), request_new)
+        )
 
         # return some random GSM secrets
-        s_gsm = dbus.Dictionary({'password': 'asdfadfasdfaf'})
-        con = dbus.Dictionary({'gsm': s_gsm})
+        s_gsm = dbus.Dictionary({"password": "asdfadfasdfaf"})
+        con = dbus.Dictionary({"gsm": s_gsm})
         return con
 
+
 def register(proxy):
     proxy.Register("test.agent.id", dbus_interface=IFACE_AGENT_MANAGER)
     print("Registered!")
     return False
 
+
 def unregister(proxy, loop):
     proxy.Unregister(dbus_interface=IFACE_AGENT_MANAGER)
     loop.quit()
     return False
 
+
 def main():
     dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
 
     bus = dbus.SystemBus()
     obj = Agent(bus, "/org/freedesktop/NetworkManager/SecretAgent")
-    proxy = bus.get_object("org.freedesktop.NetworkManager",
-                           "/org/freedesktop/NetworkManager/AgentManager")
+    proxy = bus.get_object(
+        "org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/AgentManager"
+    )
 
     mainloop = GLib.MainLoop()
 
@@ -65,8 +84,8 @@ def main():
         pass
 
     print("Unregistering...")
-    unregister(proxy, mainloop);
+    unregister(proxy, mainloop)
 
-if __name__ == '__main__':
-    main()
 
+if __name__ == "__main__":
+    main()