summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2015-02-11 11:47:15 +0000
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2015-02-11 14:32:58 +0000
commite38733122084655738d109228b4df271262fac42 (patch)
treecc8954df1683c87d7472bd5d21378de4657b6c6e /test
parent4a3943972798989f433c30394d3349d10c0d0827 (diff)
downloaddbus-e38733122084655738d109228b4df271262fac42.tar.gz
Reduce the number of fds the fdpass test uses
It was relying on a higher-than-default fd limit; cut it down to more than 256 but rather less than 1024, since the default Linux limit is 1024 fds per user. Also automatically skip this test if our rlimit is too small. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=88998 Reviewed-by: Philip Withnall <philip.withnall@collabora.co.uk>
Diffstat (limited to 'test')
-rw-r--r--test/fdpass.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/test/fdpass.c b/test/fdpass.c
index fa958da8..96f9427f 100644
--- a/test/fdpass.c
+++ b/test/fdpass.c
@@ -57,9 +57,11 @@ _DBUS_STATIC_ASSERT (MAX_MESSAGE_UNIX_FDS <= 253);
/* Arbitrary; included here to avoid relying on the default. */
#define MAX_INCOMING_UNIX_FDS (MAX_MESSAGE_UNIX_FDS * 4)
-/* Arbitrary, except that MAX_MESSAGE_UNIX_FDS * SOME_MESSAGES must be
+/* Arbitrary, except that MAX_MESSAGE_UNIX_FDS * SOME_MESSAGES should be
* less than the process's file descriptor limit. */
-#define SOME_MESSAGES 50
+#define SOME_MESSAGES 20
+/* To cover some situations on Linux we want this to be true. */
+_DBUS_STATIC_ASSERT (MAX_MESSAGE_UNIX_FDS * SOME_MESSAGES > 256);
/* Linux won't allow more than 253 fds per sendmsg(). */
#define TOO_MANY_FDS 255
@@ -809,6 +811,25 @@ main (int argc,
{
test_init (&argc, &argv);
+#ifdef HAVE_GETRLIMIT
+ {
+ struct rlimit lim;
+
+ if (getrlimit (RLIMIT_NOFILE, &lim) < 0)
+ g_error ("Failed to get RLIMIT_NOFILE limit: %s", g_strerror (errno));
+
+ if (lim.rlim_cur != RLIM_INFINITY &&
+ /* only run if we have a fairly generous margin of error
+ * for stdout, stderr, duplicates, the D-Bus connection, etc. */
+ lim.rlim_cur < 2 * MAX_MESSAGE_UNIX_FDS * SOME_MESSAGES)
+ {
+ g_message ("not enough RLIMIT_NOFILE to run this test");
+ /* Autotools exit code for "all skipped" */
+ return 77;
+ }
+ }
+#endif
+
g_test_add ("/relay", Fixture, NULL, setup,
test_relay, teardown);
g_test_add ("/limit", Fixture, NULL, setup,