1 /*
2 * Copyright (c) 2003, Intel Corporation. All rights reserved.
3 * Created by: crystal.xiong REMOVE-THIS AT intel DOT com
4 * This file is licensed under the GPL license. For the full content
5 * of this license, see the COPYING file at the top level of this
6 * source tree.
7 */
8
9 /*
10 * mq_timedreceive() test plan:
11 * If message queue is empty and O_NONBLOCK is set in the message queue,
12 * no message will be removed from the queue, mq_timedreceive will return an
13 * error.
14 */
15
16 #include <stdio.h>
17 #include <mqueue.h>
18 #include <fcntl.h>
19 #include <sys/stat.h>
20 #include <sys/types.h>
21 #include <unistd.h>
22 #include <string.h>
23 #include <stdlib.h>
24 #include <time.h>
25 #include "posixtest.h"
26
27 #define TEST "7-1"
28 #define FUNCTION "mq_timedreceive"
29 #define ERROR_PREFIX "unexpected error: " FUNCTION " " TEST ": "
30
31 #define NAMESIZE 50
32 #define BUFFER 40
33
main()34 int main()
35 {
36 char mqname[NAMESIZE], msgrv[BUFFER];
37 mqd_t mqdes;
38 struct timespec ts;
39 struct mq_attr attr;
40 int unresolved = 0, failure = 0;
41
42 sprintf(mqname, "/" FUNCTION "_" TEST "_%d", getpid());
43
44 attr.mq_msgsize = BUFFER;
45 attr.mq_maxmsg = BUFFER;
46 mqdes = mq_open(mqname, O_CREAT | O_NONBLOCK | O_RDWR, S_IRUSR | S_IWUSR, &attr);
47 if (mqdes == (mqd_t)-1) {
48 perror(ERROR_PREFIX "mq_open");
49 unresolved = 1;
50 }
51
52 ts.tv_sec = time(NULL) + 1;
53 ts.tv_nsec = 0;
54 if (mq_timedreceive(mqdes, msgrv, BUFFER, NULL, &ts) != -1) {
55 printf("mq_timedreceive succeed unexpectly \n");
56 failure = 1;
57 }
58 if (mq_close(mqdes) != 0) {
59 perror(ERROR_PREFIX "mq_close");
60 unresolved = 1;
61 }
62
63 if (mq_unlink(mqname) != 0) {
64 perror(ERROR_PREFIX "mq_unlink");
65 unresolved = 1;
66 }
67
68 if (failure==1) {
69 printf("Test FAILED\n");
70 return PTS_FAIL;
71 }
72
73 if (unresolved==1) {
74 printf("Test UNRESOLVED\n");
75 return PTS_UNRESOLVED;
76 }
77 printf("Test PASSED\n");
78 return PTS_PASS;
79 }
80
81