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