summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2011-02-15 13:18:20 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2011-02-15 13:18:20 -0800
commit83ca5b985b375b6445d54d99e523508f075a497e (patch)
tree1a9766c9dfa76e6e2446f8fc76bd72ba0eb25b91 /tests
parente7c16927f1b26641a2516c42e690cfe64451309f (diff)
downloadgnulib-83ca5b985b375b6445d54d99e523508f075a497e.tar.gz
getloadavg: set errno
* lib/getloadavg.c: Set errno when returning -1. If no other error number looks appropriate, set it to ENOSYS if the getloadavg looks like it can't possibly ever work, ENOTSUP otherwise. Suggested by Bruno Haible in <http://lists.gnu.org/archive/html/bug-gnulib/2011-02/msg00187.html>. getloadavg: trim unused parts and speed up 'configure' * NEWS: Document this. * lib/getloadavg.c: Ignore HAVE_GETLOADAVG; this file is now always compiled if getloadavg is absent. Move test code to ... * tests/test-getloadavg.c: New file, containing previous contents of test from lib/getloadavg.c. It also contains suggestions by Bruno Haible in <http://lists.gnu.org/archive/html/bug-gnulib/2011-02/msg00186.html>. * modules/getloadavg-tests: New file. * m4/getloadavg.m4 (gl_GETLOADAVG): Do not check for getloadavg twice. Do tests in the same order as they're needed for getloadavg.c. Omit setgid-related tests that generate symbols KMEM_GROUP, NEET_SETGID, GETLOADAVG_PRIVILEGED; nobody seems to use those any more. Do only the tests that are needed to see whether the system has getloadavg, moving the other tests into ... (gl_PREREQ_GETLOADAVG): ... here. Do not define obsolete symbol NLIST_NAME_UNION; nobody should be using it. Do not define symbols C_GETLOADAVG and HAVE_GETLOADAVG; they're no longer relevant, as the user of this module shouldn't care how getloadavg is implemented.
Diffstat (limited to 'tests')
-rw-r--r--tests/test-getloadavg.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/tests/test-getloadavg.c b/tests/test-getloadavg.c
new file mode 100644
index 0000000000..f9b4a79b57
--- /dev/null
+++ b/tests/test-getloadavg.c
@@ -0,0 +1,75 @@
+/* Test of getting load average.
+ Copyright (C) 2011 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "signature.h"
+SIGNATURE_CHECK (getloadavg, int, (double [], int));
+
+#include <errno.h>
+#include <stdio.h>
+#include <unistd.h>
+
+static void
+check_avg (int minutes, double avg, int printit)
+{
+ if (printit)
+ printf ("%d-minute: %f ", minutes, avg);
+ if (avg < 0 || avg != avg)
+ exit (minutes);
+}
+
+/* This program can also be used as a manual test, by invoking it with
+ an argument; it then prints the load average. If the argument is
+ nonzero, the manual test repeats forever, sleeping for the stated
+ interval between each iteration. */
+int
+main (int argc, char **argv)
+{
+ int naptime = 0;
+
+ if (argc > 1)
+ naptime = atoi (argv[1]);
+
+ while (1)
+ {
+ double avg[3];
+ int loads = getloadavg (avg, 3);
+ if (loads == -1)
+ {
+ if (! (errno == ENOSYS || errno == ENOTSUP))
+ return 1;
+ perror ("Skipping test; load average not supported");
+ return 77;
+ }
+ if (loads > 0)
+ check_avg (1, avg[0], argc > 1);
+ if (loads > 1)
+ check_avg (5, avg[1], argc > 1);
+ if (loads > 2)
+ check_avg (15, avg[1], argc > 1);
+ if (loads > 0 && argc > 1)
+ putchar ('\n');
+
+ if (naptime == 0)
+ break;
+ sleep (naptime);
+ }
+
+ return 0;
+}