Commit 3bc74092 authored by Simon McVittie's avatar Simon McVittie Committed by Simon McVittie
Browse files

dbus-daemon test: exercise max_names_per_connection limit

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=86442

Signed-off-by: default avatarSimon McVittie <simon.mcvittie@collabora.co.uk>
parent 935555c2
......@@ -350,6 +350,7 @@ in_data = \
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-names-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 \
......
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<!-- Our well-known bus type, don't change this -->
<type>session</type>
<listen>@TEST_LISTEN@</listen>
<policy context="default">
<!-- Allow everything to be sent -->
<allow send_destination="*" eavesdrop="true"/>
<!-- Allow everything to be received -->
<allow eavesdrop="true"/>
<!-- Allow anyone to own anything -->
<allow own="*"/>
</policy>
<limit name="max_names_per_connection">4</limit>
</busconfig>
......@@ -874,6 +874,45 @@ test_max_match_rules_per_connection (Fixture *f,
test_assert_no_error (&error);
}
static void
test_max_names_per_connection (Fixture *f,
gconstpointer context)
{
DBusError error = DBUS_ERROR_INIT;
int ret;
if (f->skip)
return;
/* The limit in the configuration file is set to 4, but we only own 3
* names here - remember that the unique name is a name too. */
ret = dbus_bus_request_name (f->left_conn, "com.example.C1", 0, &error);
test_assert_no_error (&error);
g_assert_cmpint (ret, ==, DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER);
ret = dbus_bus_request_name (f->left_conn, "com.example.C2", 0, &error);
test_assert_no_error (&error);
g_assert_cmpint (ret, ==, DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER);
ret = dbus_bus_request_name (f->left_conn, "com.example.C3", 0, &error);
test_assert_no_error (&error);
g_assert_cmpint (ret, ==, DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER);
ret = dbus_bus_request_name (f->left_conn, "com.example.C4", 0, &error);
g_assert_cmpstr (error.name, ==, DBUS_ERROR_LIMITS_EXCEEDED);
dbus_error_free (&error);
g_assert_cmpint (ret, ==, -1);
ret = dbus_bus_release_name (f->left_conn, "com.example.C3", &error);
test_assert_no_error (&error);
g_assert_cmpint (ret, ==, DBUS_RELEASE_NAME_REPLY_RELEASED);
ret = dbus_bus_request_name (f->left_conn, "com.example.C4", 0, &error);
test_assert_no_error (&error);
g_assert_cmpint (ret, ==, DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER);
}
static void
teardown (Fixture *f,
gconstpointer context G_GNUC_UNUSED)
......@@ -978,6 +1017,11 @@ static Config max_match_rules_per_connection_config = {
SPECIFY_ADDRESS
};
static Config max_names_per_connection_config = {
NULL, 1, "valid-config-files/max-names-per-connection.conf",
SPECIFY_ADDRESS
};
int
main (int argc,
char **argv)
......@@ -1007,6 +1051,9 @@ main (int argc,
g_test_add ("/limits/max-match-rules-per-connection", Fixture,
&max_match_rules_per_connection_config,
setup, test_max_match_rules_per_connection, teardown);
g_test_add ("/limits/max-names-per-connection", Fixture,
&max_names_per_connection_config,
setup, test_max_names_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,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment