From: dima@arista.com (Dmitry Safonov)
Subject: [RFC 17/20] selftest/timens: Add test for timerfd
Date: Wed, 19 Sep 2018 21:50:34 +0100 [thread overview]
Message-ID: <20180919205037.9574-18-dima@arista.com> (raw)
Message-ID: <20180919205034.mugc9CrNsCiEZxA8IhloXcJPtFvXZLmbgv6LYLjdVTQ@z> (raw)
In-Reply-To: <20180919205037.9574-1-dima@arista.com>
From: Andrei Vagin <avagin@gmail.com>
Check that timerfd_create takes into account clock offsets.
Cc: linux-kselftest at vger.kernel.org
Signed-off-by: Andrei Vagin <avagin at openvz.org>
Signed-off-by: Dmitry Safonov <dima at arista.com>
---
tools/testing/selftests/timens/.gitignore | 1 +
tools/testing/selftests/timens/Makefile | 2 +-
tools/testing/selftests/timens/timerfd.c | 96 +++++++++++++++++++++++++++++++
3 files changed, 98 insertions(+), 1 deletion(-)
create mode 100644 tools/testing/selftests/timens/timerfd.c
diff --git a/tools/testing/selftests/timens/.gitignore b/tools/testing/selftests/timens/.gitignore
index 27a693229ce1..b609f6ee9fb9 100644
--- a/tools/testing/selftests/timens/.gitignore
+++ b/tools/testing/selftests/timens/.gitignore
@@ -1 +1,2 @@
timens
+timerfd
diff --git a/tools/testing/selftests/timens/Makefile b/tools/testing/selftests/timens/Makefile
index b877efb78974..66b90cd28e5c 100644
--- a/tools/testing/selftests/timens/Makefile
+++ b/tools/testing/selftests/timens/Makefile
@@ -1,4 +1,4 @@
-TEST_GEN_PROGS := timens
+TEST_GEN_PROGS := timens timerfd
CFLAGS := -Wall -Werror
diff --git a/tools/testing/selftests/timens/timerfd.c b/tools/testing/selftests/timens/timerfd.c
new file mode 100644
index 000000000000..914a4cd9a0df
--- /dev/null
+++ b/tools/testing/selftests/timens/timerfd.c
@@ -0,0 +1,96 @@
+// SPDX-License-Identifier: GPL-2.0
+#define _GNU_SOURCE
+#include <sched.h>
+
+#include <sys/timerfd.h>
+#include <sys/syscall.h>
+#include <time.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+
+#include "log.h"
+
+#ifndef CLONE_NEWTIME
+# define CLONE_NEWTIME 0x00001000
+#endif
+
+int run_test(int clockid)
+{
+ struct itimerspec new_value;
+ struct timespec now;
+ long long elapsed;
+ int fd, i;
+
+ if (clock_gettime(clockid, &now))
+ return pr_perror("clock_gettime");
+
+ for (i = 0; i < 2; i++) {
+ int flags = 0;
+
+ pr_msg("timerfd_settime: %d", "INFO", clockid);
+ new_value.it_value.tv_sec = 3600;
+ new_value.it_value.tv_nsec = 0;
+ new_value.it_interval.tv_sec = 1;
+ new_value.it_interval.tv_nsec = 0;
+
+ if (i == 1) {
+ new_value.it_value.tv_sec += now.tv_sec;
+ new_value.it_value.tv_nsec += now.tv_nsec;
+ }
+
+ fd = timerfd_create(clockid, 0);
+ if (fd == -1)
+ return pr_perror("timerfd_create");
+
+ if (i == 1)
+ flags |= TFD_TIMER_ABSTIME;
+
+ if (timerfd_settime(fd, flags, &new_value, NULL))
+ return pr_perror("timerfd_settime");
+
+ if (timerfd_gettime(fd, &new_value))
+ return pr_perror("timerfd_gettime");
+
+ elapsed = new_value.it_value.tv_sec;
+ if (abs(elapsed - 3600) > 60) {
+ printf("FAIL\n");
+ return 1;
+ }
+
+ close(fd);
+ }
+
+ printf("PASS\n");
+
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ struct timespec tp;
+ int ret;
+
+ if (unshare(CLONE_NEWTIME))
+ return pr_perror("unshare");
+
+ if (clock_gettime(CLOCK_MONOTONIC, &tp))
+ return pr_perror("clock_gettime");
+ tp.tv_sec = 7 * 24 * 3600;
+ if (clock_settime(CLOCK_MONOTONIC, &tp))
+ return pr_perror("clock_settime");
+
+ if (clock_gettime(CLOCK_BOOTTIME, &tp))
+ return pr_perror("clock_gettime");
+ tp.tv_sec += 9 * 24 * 3600;
+ tp.tv_nsec = 0;
+ if (clock_settime(CLOCK_BOOTTIME, &tp))
+ return pr_perror("clock_settime");
+
+ ret = 0;
+ ret |= run_test(CLOCK_BOOTTIME);
+ ret |= run_test(CLOCK_MONOTONIC);
+ return ret;
+}
+
--
2.13.6
next prev parent reply other threads:[~2018-09-19 20:50 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-19 20:50 [RFC 00/20] ns: Introduce Time Namespace dima
2018-09-19 20:50 ` Dmitry Safonov
2018-09-19 20:50 ` [RFC 16/20] selftest: Add Time Namespace test for supported clocks dima
2018-09-19 20:50 ` Dmitry Safonov
2018-09-24 21:36 ` shuah
2018-09-24 21:36 ` Shuah Khan
2018-09-19 20:50 ` dima [this message]
2018-09-19 20:50 ` [RFC 17/20] selftest/timens: Add test for timerfd Dmitry Safonov
2018-09-19 20:50 ` [RFC 18/20] selftest/timens: Add test for clock_nanosleep dima
2018-09-19 20:50 ` Dmitry Safonov
2018-09-19 20:50 ` [RFC 19/20] timens/selftest: Add procfs selftest dima
2018-09-19 20:50 ` Dmitry Safonov
2018-09-19 20:50 ` [RFC 20/20] timens/selftest: Add timer offsets test dima
2018-09-19 20:50 ` Dmitry Safonov
2018-09-21 12:27 ` [RFC 00/20] ns: Introduce Time Namespace ebiederm
2018-09-21 12:27 ` Eric W. Biederman
2018-09-24 20:51 ` avagin
2018-09-24 20:51 ` Andrey Vagin
2018-09-24 22:02 ` ebiederm
2018-09-24 22:02 ` Eric W. Biederman
2018-09-25 1:42 ` avagin
2018-09-25 1:42 ` Andrey Vagin
2018-09-26 17:36 ` ebiederm
2018-09-26 17:36 ` Eric W. Biederman
2018-09-26 17:59 ` 0x7f454c46
2018-09-26 17:59 ` Dmitry Safonov
2018-09-27 21:30 ` tglx
2018-09-27 21:30 ` Thomas Gleixner
2018-09-27 21:41 ` tglx
2018-09-27 21:41 ` Thomas Gleixner
2018-10-01 23:20 ` avagin
2018-10-01 23:20 ` Andrey Vagin
2018-10-02 6:15 ` tglx
2018-10-02 6:15 ` Thomas Gleixner
2018-10-02 21:05 ` 0x7f454c46
2018-10-02 21:05 ` Dmitry Safonov
2018-10-02 21:26 ` tglx
2018-10-02 21:26 ` Thomas Gleixner
2018-09-28 17:03 ` ebiederm
2018-09-28 17:03 ` Eric W. Biederman
2018-09-28 19:32 ` tglx
2018-09-28 19:32 ` Thomas Gleixner
2018-10-01 9:05 ` ebiederm
2018-10-01 9:05 ` Eric W. Biederman
2018-10-01 9:15 ` Setting monotonic time? ebiederm
2018-10-01 9:15 ` Eric W. Biederman
2018-10-01 18:52 ` tglx
2018-10-01 18:52 ` Thomas Gleixner
2018-10-02 20:00 ` arnd
2018-10-02 20:00 ` Arnd Bergmann
2018-10-02 20:06 ` tglx
2018-10-02 20:06 ` Thomas Gleixner
2018-10-03 4:50 ` ebiederm
2018-10-03 4:50 ` Eric W. Biederman
2018-10-03 5:25 ` tglx
2018-10-03 5:25 ` Thomas Gleixner
2018-10-03 6:14 ` ebiederm
2018-10-03 6:14 ` Eric W. Biederman
2018-10-03 7:02 ` arnd
2018-10-03 7:02 ` Arnd Bergmann
2018-10-03 6:14 ` tglx
2018-10-03 6:14 ` Thomas Gleixner
2018-10-01 20:51 ` avagin
2018-10-01 20:51 ` Andrey Vagin
2018-10-02 6:16 ` tglx
2018-10-02 6:16 ` Thomas Gleixner
2018-10-21 1:41 ` [RFC 00/20] ns: Introduce Time Namespace avagin
2018-10-21 1:41 ` Andrei Vagin
2018-10-21 3:54 ` avagin
2018-10-21 3:54 ` Andrei Vagin
2018-10-29 20:33 ` tglx
2018-10-29 20:33 ` Thomas Gleixner
2018-10-29 21:21 ` ebiederm
2018-10-29 21:21 ` Eric W. Biederman
2018-10-29 21:36 ` tglx
2018-10-29 21:36 ` Thomas Gleixner
2018-10-31 16:26 ` avagin
2018-10-31 16:26 ` Andrei Vagin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180919205037.9574-18-dima@arista.com \
--to=dima@arista.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).