| @@ -1,33 +1,31 @@ | | | @@ -1,33 +1,31 @@ |
1 | /* $NetBSD: t_mqueue.c,v 1.3 2012/11/06 19:35:38 pgoyette Exp $ */ | | 1 | /* $NetBSD: t_mqueue.c,v 1.4 2014/03/02 19:56:48 jmmv Exp $ */ |
2 | | | 2 | |
3 | /* | | 3 | /* |
4 | * Test for POSIX message queue priority handling. | | 4 | * Test for POSIX message queue priority handling. |
5 | * | | 5 | * |
6 | * This file is in the Public Domain. | | 6 | * This file is in the Public Domain. |
7 | */ | | 7 | */ |
8 | | | 8 | |
9 | #include <atf-c.h> | | 9 | #include <atf-c.h> |
10 | | | 10 | |
11 | #include <stdio.h> | | 11 | #include <stdio.h> |
12 | #include <stdlib.h> | | 12 | #include <stdlib.h> |
13 | #include <string.h> | | 13 | #include <string.h> |
14 | #include <errno.h> | | 14 | #include <errno.h> |
15 | #include <unistd.h> | | 15 | #include <unistd.h> |
16 | | | 16 | |
17 | #include <mqueue.h> | | 17 | #include <mqueue.h> |
18 | | | 18 | |
19 | char *tmpdir; | | | |
20 | | | | |
21 | #define MQ_PRIO_BASE 24 | | 19 | #define MQ_PRIO_BASE 24 |
22 | | | 20 | |
23 | static void | | 21 | static void |
24 | send_msgs(mqd_t mqfd) | | 22 | send_msgs(mqd_t mqfd) |
25 | { | | 23 | { |
26 | char msg[2]; | | 24 | char msg[2]; |
27 | | | 25 | |
28 | msg[1] = '\0'; | | 26 | msg[1] = '\0'; |
29 | | | 27 | |
30 | msg[0] = 'a'; | | 28 | msg[0] = 'a'; |
31 | ATF_REQUIRE_MSG(mq_send(mqfd, msg, sizeof(msg), MQ_PRIO_BASE) != -1, | | 29 | ATF_REQUIRE_MSG(mq_send(mqfd, msg, sizeof(msg), MQ_PRIO_BASE) != -1, |
32 | "mq_send 1 failed: %d", errno); | | 30 | "mq_send 1 failed: %d", errno); |
33 | | | 31 | |
| @@ -88,61 +86,52 @@ receive_msgs(mqd_t mqfd) | | | @@ -88,61 +86,52 @@ receive_msgs(mqd_t mqfd) |
88 | "mq_receive 4 prio/data mismatch"); | | 86 | "mq_receive 4 prio/data mismatch"); |
89 | | | 87 | |
90 | ATF_REQUIRE_MSG(mq_receive(mqfd, m, len, &p) != -1, | | 88 | ATF_REQUIRE_MSG(mq_receive(mqfd, m, len, &p) != -1, |
91 | "mq_receive 5 failed: %d", errno); | | 89 | "mq_receive 5 failed: %d", errno); |
92 | ATF_REQUIRE_MSG(p == (MQ_PRIO_BASE - 1) && m[0] == 'd', | | 90 | ATF_REQUIRE_MSG(p == (MQ_PRIO_BASE - 1) && m[0] == 'd', |
93 | "mq_receive 5 prio/data mismatch"); | | 91 | "mq_receive 5 prio/data mismatch"); |
94 | | | 92 | |
95 | ATF_REQUIRE_MSG(mq_receive(mqfd, m, len, &p) != -1, | | 93 | ATF_REQUIRE_MSG(mq_receive(mqfd, m, len, &p) != -1, |
96 | "mq_receive 6 failed: %d", errno); | | 94 | "mq_receive 6 failed: %d", errno); |
97 | ATF_REQUIRE_MSG(p == 0 && m[0] == 'e', | | 95 | ATF_REQUIRE_MSG(p == 0 && m[0] == 'e', |
98 | "mq_receive 6 prio/data mismatch"); | | 96 | "mq_receive 6 prio/data mismatch"); |
99 | } | | 97 | } |
100 | | | 98 | |
101 | ATF_TC_WITH_CLEANUP(mqueue); | | 99 | ATF_TC(mqueue); |
102 | ATF_TC_HEAD(mqueue, tc) | | 100 | ATF_TC_HEAD(mqueue, tc) |
103 | { | | 101 | { |
104 | | | 102 | |
105 | atf_tc_set_md_var(tc, "timeout", "3"); | | 103 | atf_tc_set_md_var(tc, "timeout", "3"); |
106 | atf_tc_set_md_var(tc, "descr", "Checks mqueue send/receive"); | | 104 | atf_tc_set_md_var(tc, "descr", "Checks mqueue send/receive"); |
107 | } | | 105 | } |
108 | | | 106 | |
109 | ATF_TC_BODY(mqueue, tc) | | 107 | ATF_TC_BODY(mqueue, tc) |
110 | { | | 108 | { |
111 | int status; | | 109 | int status; |
| | | 110 | char *tmpdir; |
112 | char template[32]; | | 111 | char template[32]; |
113 | char mq_name[64]; | | 112 | char mq_name[64]; |
114 | | | 113 | |
115 | strlcpy(template, "./t_mqueue.XXXXXX", sizeof(template)); | | 114 | strlcpy(template, "./t_mqueue.XXXXXX", sizeof(template)); |
116 | tmpdir = mkdtemp(template); | | 115 | tmpdir = mkdtemp(template); |
117 | ATF_REQUIRE_MSG(tmpdir != NULL, "mkdtemp failed: %d", errno); | | 116 | ATF_REQUIRE_MSG(tmpdir != NULL, "mkdtemp failed: %d", errno); |
118 | snprintf(mq_name, sizeof(mq_name), "%s/mq", tmpdir); | | 117 | snprintf(mq_name, sizeof(mq_name), "%s/mq", tmpdir); |
119 | | | 118 | |
120 | mqd_t mqfd; | | 119 | mqd_t mqfd; |
121 | | | 120 | |
122 | mqfd = mq_open(mq_name, O_RDWR | O_CREAT, | | 121 | mqfd = mq_open(mq_name, O_RDWR | O_CREAT, |
123 | S_IRUSR | S_IRWXG | S_IROTH, NULL); | | 122 | S_IRUSR | S_IRWXG | S_IROTH, NULL); |
124 | ATF_REQUIRE_MSG(mqfd != -1, "mq_open failed: %d", errno); | | 123 | ATF_REQUIRE_MSG(mqfd != -1, "mq_open failed: %d", errno); |
125 | | | 124 | |
126 | send_msgs(mqfd); | | 125 | send_msgs(mqfd); |
127 | receive_msgs(mqfd); | | 126 | receive_msgs(mqfd); |
128 | | | 127 | |
129 | status = mq_close(mqfd); | | 128 | status = mq_close(mqfd); |
130 | ATF_REQUIRE_MSG(status == 0, "mq_close failed: %d", errno); | | 129 | ATF_REQUIRE_MSG(status == 0, "mq_close failed: %d", errno); |
131 | } | | 130 | } |
132 | | | 131 | |
133 | ATF_TC_CLEANUP(mqueue, tc) | | | |
134 | { | | | |
135 | int status; | | | |
136 | | | | |
137 | if (tmpdir != NULL) { | | | |
138 | status = rmdir(tmpdir); | | | |
139 | ATF_REQUIRE_MSG(status == 0, "rmdir failed: %d", errno); | | | |
140 | } | | | |
141 | } | | | |
142 | | | | |
143 | ATF_TP_ADD_TCS(tp) | | 132 | ATF_TP_ADD_TCS(tp) |
144 | { | | 133 | { |
145 | ATF_TP_ADD_TC(tp, mqueue); | | 134 | ATF_TP_ADD_TC(tp, mqueue); |
146 | | | 135 | |
147 | return atf_no_error(); | | 136 | return atf_no_error(); |
148 | } | | 137 | } |