Add basic test
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 8 Jul 2020 21:09:54 +0000 (17:09 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 8 Jul 2020 21:10:28 +0000 (17:10 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
.gitignore
tests/Makefile.am
tests/basic_test.c [new file with mode: 0644]

index 62d0292d83f200f5154143f5321fcca1a3e21ef3..e0c4ce63e175e495847f39a31159ed57db7d116a 100644 (file)
@@ -53,6 +53,7 @@ dkms.conf
 
 /src/librseq.pc
 /tests/basic_percpu_ops_test
+/tests/basic_test
 
 #automake
 /include/config.h
index 4a4c9cf18291ef63a3c9438d5bd6c3b00d8c233a..22bcb840065b1877da09ca271e953c2773c75eb8 100644 (file)
@@ -5,9 +5,12 @@
 
 AM_CFLAGS += -I$(top_srcdir)/include -I$(top_builddir)/include
 
-noinst_PROGRAMS = basic_percpu_ops_test
+noinst_PROGRAMS = basic_percpu_ops_test basic_test
 
 basic_percpu_ops_test_SOURCES = basic_percpu_ops_test.c
 basic_percpu_ops_test_LDADD = $(top_builddir)/src/librseq.la
 
-TESTS = basic_percpu_ops_test
+basic_test_SOURCES = basic_test.c
+basic_test_LDADD = $(top_builddir)/src/librseq.la
+
+TESTS = basic_percpu_ops_test basic_test
diff --git a/tests/basic_test.c b/tests/basic_test.c
new file mode 100644 (file)
index 0000000..b492601
--- /dev/null
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: LGPL-2.1
+/*
+ * Basic test coverage for critical regions and rseq_current_cpu().
+ */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include <assert.h>
+#include <sched.h>
+#include <signal.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/time.h>
+
+#include <rseq/rseq.h>
+
+void test_cpu_pointer(void)
+{
+       cpu_set_t affinity, test_affinity;
+       int i;
+
+       sched_getaffinity(0, sizeof(affinity), &affinity);
+       CPU_ZERO(&test_affinity);
+       for (i = 0; i < CPU_SETSIZE; i++) {
+               if (CPU_ISSET(i, &affinity)) {
+                       CPU_SET(i, &test_affinity);
+                       sched_setaffinity(0, sizeof(test_affinity),
+                                       &test_affinity);
+                       assert(sched_getcpu() == i);
+                       assert(rseq_current_cpu() == (unsigned int) i);
+                       assert(rseq_current_cpu_raw() == i);
+                       assert(rseq_cpu_start() == (unsigned int) i);
+                       CPU_CLR(i, &test_affinity);
+               }
+       }
+       sched_setaffinity(0, sizeof(affinity), &affinity);
+}
+
+int main(void)
+{
+       if (rseq_register_current_thread()) {
+               fprintf(stderr, "Error: rseq_register_current_thread(...) failed(%d): %s\n",
+                       errno, strerror(errno));
+               goto init_thread_error;
+       }
+       printf("testing current cpu\n");
+       test_cpu_pointer();
+       if (rseq_unregister_current_thread()) {
+               fprintf(stderr, "Error: rseq_unregister_current_thread(...) failed(%d): %s\n",
+                       errno, strerror(errno));
+               goto init_thread_error;
+       }
+       return 0;
+
+init_thread_error:
+       return -1;
+}
This page took 0.025765 seconds and 4 git commands to generate.