aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Sesek <rsesek@google.com>2019-02-12 11:22:57 -0500
committerRobert Sesek <rsesek@google.com>2019-02-12 11:31:32 -0500
commit8f82d0c580a88b4301353d419779ed41f6f0f443 (patch)
tree8b3347f02c831a09356edc014abbf34a742a901f
parentac56b768c6ca2fd2548cb26d61111e76beb0ff81 (diff)
downloadseccomp-tests-8f82d0c580a88b4301353d419779ed41f6f0f443.tar.gz
Change API to allow running a test by name, rather than returning the list.android-o-mr1-iot-release-1.0.12android-o-mr1-iot-release-1.0.10oreo-mr1-iot-release
Having C++ projects include linux/test_harness.h does not work because libc++ sets _GNU_SOURCE in the compiler built-ins, which then produces a re-defined macro error in that file. Test: cts-tradefed run singleCommand cts -m CtsOsTestCases -t android.os.cts.SeccompTest Bug: 124189460 Change-Id: Ieae63f215258be903e0df1e7f5fcd06e99596de5
-rw-r--r--Android.bp6
-rw-r--r--seccomp_bpf_tests.c47
-rw-r--r--seccomp_bpf_tests.h15
3 files changed, 63 insertions, 5 deletions
diff --git a/Android.bp b/Android.bp
index 38220e3..8d06c40 100644
--- a/Android.bp
+++ b/Android.bp
@@ -25,7 +25,10 @@ cc_library_static {
},
},
- srcs: ["linux/seccomp_bpf.c"],
+ srcs: [
+ "linux/seccomp_bpf.c",
+ "seccomp_bpf_tests.c",
+ ],
cflags: [
"-Wall",
@@ -36,6 +39,7 @@ cc_library_static {
"-Wno-incompatible-pointer-types-discards-qualifiers",
"-Wno-sign-compare",
"-Wno-empty-body",
+ "-Wno-unused-function",
// TODO(rsesek): Remove after syncing in upstream.
"-D__ARCH_WANT_SYSCALL_DEPRECATED",
],
diff --git a/seccomp_bpf_tests.c b/seccomp_bpf_tests.c
new file mode 100644
index 0000000..523084f
--- /dev/null
+++ b/seccomp_bpf_tests.c
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "seccomp_bpf_tests.h"
+
+#include <android/log.h>
+#include <string.h>
+
+static const char TAG[] = "SeccompBpfTest-Native";
+
+/* Forward declare from seccomp_bpf_tests.c. */
+struct __test_metadata {
+ const char *name;
+ void (*fn)(struct __test_metadata *);
+ int termsig;
+ int passed;
+ int trigger; /* extra handler after the evaluation */
+ struct __test_metadata *prev, *next;
+};
+extern struct __test_metadata* get_seccomp_test_list();
+extern void __run_test(struct __test_metadata*);
+
+int run_seccomp_test(const char* name) {
+ for (struct __test_metadata* t = get_seccomp_test_list(); t; t = t->next) {
+ if (strcmp(t->name, name) == 0) {
+ __android_log_print(ANDROID_LOG_INFO, TAG, "Start: %s", t->name);
+ __run_test(t);
+ __android_log_print(ANDROID_LOG_INFO, TAG, "%s: %s",
+ t->passed ? "PASS" : "FAIL", t->name);
+ return t->passed;
+ }
+ }
+ return 0;
+}
diff --git a/seccomp_bpf_tests.h b/seccomp_bpf_tests.h
index a46be51..1de226e 100644
--- a/seccomp_bpf_tests.h
+++ b/seccomp_bpf_tests.h
@@ -20,9 +20,16 @@
* for use by CTS.
*/
-#include "linux/test_harness.h"
-
-// Forward declare from seccomp_bpf_tests.c.
+#ifdef __cplusplus
extern "C" {
-struct __test_metadata* get_seccomp_test_list();
+#endif
+
+/**
+ * Runs a Seccomp kernel test named |name|. Returns 1 if the test passed
+ * and 0 if the test failed.
+ */
+int run_seccomp_test(const char* name);
+
+#ifdef __cplusplus
}
+#endif