From 3c37c7cb3f00ba3164ba735d2df0a0a059f85f1c Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Fri, 1 Jul 2016 13:07:49 +0100 Subject: [PATCH 12/13] dbus-daemon test: exercise maximum match rules per connection Bug: https://bugs.freedesktop.org/show_bug.cgi?id=86442 Signed-off-by: Simon McVittie --- test/Makefile.am | 1 + .../max-match-rules-per-connection.conf.in | 18 ++++++++++++ test/dbus-daemon.c | 32 ++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 test/data/valid-config-files/max-match-rules-per-connection.conf.in diff --git a/test/Makefile.am b/test/Makefile.am index dcbfa23..616968b 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -313,6 +313,7 @@ in_data = \ data/valid-config-files/incoming-limit.conf.in \ data/valid-config-files/max-completed-connections.conf.in \ data/valid-config-files/max-connections-per-user.conf.in \ + data/valid-config-files/max-match-rules-per-connection.conf.in \ data/valid-config-files/max-replies-per-connection.conf.in \ data/valid-config-files/multi-user.conf.in \ data/valid-config-files/systemd-activation.conf.in \ diff --git a/test/data/valid-config-files/max-match-rules-per-connection.conf.in b/test/data/valid-config-files/max-match-rules-per-connection.conf.in new file mode 100644 index 0000000..27d27b6 --- /dev/null +++ b/test/data/valid-config-files/max-match-rules-per-connection.conf.in @@ -0,0 +1,18 @@ + + + + session + @TEST_LISTEN@ + + + + + + + + + + + 3 + diff --git a/test/dbus-daemon.c b/test/dbus-daemon.c index d25aa35..57982eb 100644 --- a/test/dbus-daemon.c +++ b/test/dbus-daemon.c @@ -842,6 +842,30 @@ test_max_replies_per_connection (Fixture *f, } static void +test_max_match_rules_per_connection (Fixture *f, + gconstpointer context) +{ + DBusError error = DBUS_ERROR_INIT; + + dbus_bus_add_match (f->left_conn, "sender='com.example.C1'", &error); + test_assert_no_error (&error); + dbus_bus_add_match (f->left_conn, "sender='com.example.C2'", &error); + test_assert_no_error (&error); + dbus_bus_add_match (f->left_conn, "sender='com.example.C3'", &error); + test_assert_no_error (&error); + + dbus_bus_add_match (f->left_conn, "sender='com.example.C4'", &error); + g_assert_cmpstr (error.name, ==, DBUS_ERROR_LIMITS_EXCEEDED); + dbus_error_free (&error); + + dbus_bus_remove_match (f->left_conn, "sender='com.example.C3'", &error); + test_assert_no_error (&error); + + dbus_bus_add_match (f->left_conn, "sender='com.example.C4'", &error); + test_assert_no_error (&error); +} + +static void teardown (Fixture *f, gconstpointer context G_GNUC_UNUSED) { @@ -940,6 +964,11 @@ static Config max_replies_per_connection_config = { SPECIFY_ADDRESS }; +static Config max_match_rules_per_connection_config = { + NULL, 1, "valid-config-files/max-match-rules-per-connection.conf", + SPECIFY_ADDRESS +}; + int main (int argc, char **argv) @@ -966,6 +995,9 @@ main (int argc, g_test_add ("/limits/max-replies-per-connection", Fixture, &max_replies_per_connection_config, setup, test_max_replies_per_connection, teardown); + g_test_add ("/limits/max-match-rules-per-connection", Fixture, + &max_match_rules_per_connection_config, + setup, test_max_match_rules_per_connection, teardown); #ifdef DBUS_UNIX /* We can't test this in loopback.c with the rest of unix:runtime=yes, * because dbus_bus_get[_private] is the only way to use the default, -- 2.8.1