[CRIU] [PATCH] zdtm: uptime_grow test
Evgeny Antyshev
eantyshev at parallels.com
Tue Jun 19 10:38:33 EDT 2012
PSBM-10900
new testcase important for rebootless update testing:
we query system timer CLOCK_MONOTONIC continuously
and fail in case it stepped backwards
---
test/zdtm/live/static/Makefile | 2 +
test/zdtm/live/static/uptime_grow.c | 42 +++++++++++++++++++++++++++++++++++
2 files changed, 44 insertions(+), 0 deletions(-)
create mode 100644 test/zdtm/live/static/uptime_grow.c
diff --git a/test/zdtm/live/static/Makefile b/test/zdtm/live/static/Makefile
index a399741..5492d05 100644
--- a/test/zdtm/live/static/Makefile
+++ b/test/zdtm/live/static/Makefile
@@ -46,6 +46,7 @@ TST_NOFILE = \
file_fown \
eventfs00 \
inotify00 \
+ uptime_grow \
# jobctl00 \
TST_FILE = \
@@ -157,6 +158,7 @@ futex: override LDFLAGS += -pthread
jobctl00: override LDLIBS += -lutil
socket_listen: override LDLIBS += -lrt
socket_aio: override LDLIBS += -lrt
+uptime_grow: override LDLIBS += -lrt
unlink_largefile: override CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
inotify_system_nodel: override CFLAGS += -DNODEL
pthread00: override LDLIBS += -pthread
diff --git a/test/zdtm/live/static/uptime_grow.c b/test/zdtm/live/static/uptime_grow.c
new file mode 100644
index 0000000..c5eff51
--- /dev/null
+++ b/test/zdtm/live/static/uptime_grow.c
@@ -0,0 +1,42 @@
+#include "zdtmtst.h"
+
+const char *test_doc = "test to ensure that monotonic clock doesn't decrease";
+const char *test_author = "Evgeny Antysev <eantyshev at parallels.com>";
+
+#include <time.h>
+#include <stdlib.h>
+
+# define tv_gt(a, b) \
+ (((a)->tv_sec == (b)->tv_sec) ? \
+ ((a)->tv_nsec > (b)->tv_nsec) : \
+ ((a)->tv_sec > (b)->tv_sec))
+
+int main(int argc, char **argv)
+{
+ struct timespec tm_old, tm;
+ double diff_nsec;
+ test_init(argc, argv);
+
+ if (clock_gettime(CLOCK_MONOTONIC, &tm_old)) {
+ err("clock_gettime failed: %m\n");
+ exit(1);
+ }
+
+ test_daemon();
+
+ while (test_go()) {
+ if (clock_gettime(CLOCK_MONOTONIC, &tm)) {
+ err("clock_gettime failed: %m\n");
+ exit(1);
+ }
+ if (!tv_gt(&tm, &tm_old)) {
+ diff_nsec = (tm_old.tv_sec - tm.tv_sec) * 1.0E9 +\
+ (tm_old.tv_nsec - tm.tv_nsec);
+ fail("clock step backward for %e nsec\n", diff_nsec);
+ exit(1);
+ }
+ tm_old = tm;
+ }
+ pass();
+ return 0;
+}
--
1.6.5.1.1367.gcd48
More information about the CRIU
mailing list