1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
From foo@baz Sat Jun 3 21:22:53 JST 2017
Date: Sat, 03 Jun 2017 21:22:53 +0900
To: Greg KH <gregkh@linuxfoundation.org>
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: tests: convert the membarrier test to TAP format
This converts the membarrier test to output things in TAP format instead
of the "free-flowing" format it was previously using.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
tools/testing/selftests/membarrier/membarrier_test.c | 85 +++++++++++--------
1 file changed, 51 insertions(+), 34 deletions(-)
--- a/tools/testing/selftests/membarrier/membarrier_test.c
+++ b/tools/testing/selftests/membarrier/membarrier_test.c
@@ -13,45 +13,65 @@ enum test_membarrier_status {
TEST_MEMBARRIER_SKIP,
};
+static int test_num = 0;
+
static int sys_membarrier(int cmd, int flags)
{
return syscall(__NR_membarrier, cmd, flags);
}
+static int test_result(const char *msg, int value)
+{
+ test_num++;
+ printf("%s %d %s\n", value ? "not ok" : "ok", test_num, msg);
+ return value;
+}
+
+static int skip_tests(void)
+{
+ printf("Bail out\n");
+ printf("1..%d\n", test_num);
+ return ksft_exit_skip();
+}
+
+static int bail_out(void)
+{
+ printf("Bail out!\n");
+ printf("1..%d\n", test_num);
+ return ksft_exit_fail();
+}
+
static enum test_membarrier_status test_membarrier_cmd_fail(void)
{
int cmd = -1, flags = 0;
+ const char *test_name = "membarrier command fail";
- if (sys_membarrier(cmd, flags) != -1) {
- printf("membarrier: Wrong command should fail but passed.\n");
- return TEST_MEMBARRIER_FAIL;
- }
- return TEST_MEMBARRIER_PASS;
+ if (sys_membarrier(cmd, flags) != -1)
+ return test_result(test_name, TEST_MEMBARRIER_FAIL);
+
+ return test_result(test_name, TEST_MEMBARRIER_PASS);
}
static enum test_membarrier_status test_membarrier_flags_fail(void)
{
int cmd = MEMBARRIER_CMD_QUERY, flags = 1;
+ const char *test_name = "Wrong flags should fail";
- if (sys_membarrier(cmd, flags) != -1) {
- printf("membarrier: Wrong flags should fail but passed.\n");
- return TEST_MEMBARRIER_FAIL;
- }
- return TEST_MEMBARRIER_PASS;
+ if (sys_membarrier(cmd, flags) != -1)
+ return test_result(test_name, TEST_MEMBARRIER_FAIL);
+
+ return test_result(test_name, TEST_MEMBARRIER_PASS);
}
static enum test_membarrier_status test_membarrier_success(void)
{
int cmd = MEMBARRIER_CMD_SHARED, flags = 0;
+ const char *test_name = "execute MEMBARRIER_CMD_SHARED";
- if (sys_membarrier(cmd, flags) != 0) {
- printf("membarrier: Executing MEMBARRIER_CMD_SHARED failed. %s.\n",
- strerror(errno));
- return TEST_MEMBARRIER_FAIL;
- }
+ if (sys_membarrier(cmd, flags) != 0)
+ return test_result(test_name, TEST_MEMBARRIER_FAIL);
- printf("membarrier: MEMBARRIER_CMD_SHARED success.\n");
- return TEST_MEMBARRIER_PASS;
+ return test_result(test_name, TEST_MEMBARRIER_PASS);
}
static enum test_membarrier_status test_membarrier(void)
@@ -74,45 +94,42 @@ static enum test_membarrier_status test_
{
int flags = 0, ret;
- printf("membarrier MEMBARRIER_CMD_QUERY ");
ret = sys_membarrier(MEMBARRIER_CMD_QUERY, flags);
if (ret < 0) {
- printf("failed. %s.\n", strerror(errno));
- switch (errno) {
- case ENOSYS:
+ if (errno == ENOSYS) {
/*
* It is valid to build a kernel with
* CONFIG_MEMBARRIER=n. However, this skips the tests.
*/
- return TEST_MEMBARRIER_SKIP;
- case EINVAL:
- default:
- return TEST_MEMBARRIER_FAIL;
+ test_result("CONFIG_MEMBARRIER is not enabled\n", 0);
+ return skip_tests();
}
+ return test_result("sys_membarrier() failed\n",
+ TEST_MEMBARRIER_FAIL);
}
if (!(ret & MEMBARRIER_CMD_SHARED)) {
- printf("command MEMBARRIER_CMD_SHARED is not supported.\n");
- return TEST_MEMBARRIER_FAIL;
+ return test_result("command MEMBARRIER_CMD_SHARED is not supported.\n",
+ TEST_MEMBARRIER_FAIL);
}
- printf("syscall available.\n");
- return TEST_MEMBARRIER_PASS;
+ return test_result("sys_membarrier availble", TEST_MEMBARRIER_PASS);
}
int main(int argc, char **argv)
{
+ printf("TAP version 13\n");
switch (test_membarrier_query()) {
case TEST_MEMBARRIER_FAIL:
- return ksft_exit_fail();
+ return bail_out();
case TEST_MEMBARRIER_SKIP:
- return ksft_exit_skip();
+ return skip_tests();
}
switch (test_membarrier()) {
case TEST_MEMBARRIER_FAIL:
- return ksft_exit_fail();
+ return bail_out();
case TEST_MEMBARRIER_SKIP:
- return ksft_exit_skip();
+ return skip_tests();
}
- printf("membarrier: tests done!\n");
+ printf("1..%d\n", test_num);
return ksft_exit_pass();
}
|