source: rtems/testsuites/psxtests/psxaio01/init.c @ a14b982

4.115
Last change on this file since a14b982 was a14b982, checked in by Joel Sherrill <joel.sherrill@…>, on 11/01/10 at 17:33:08

2010-11-01 Alin Rus <alin.codejunkie@…>

  • psxaio01/init.c, psxaio02/init.c: Improve coverage.
  • Property mode set to 100644
File size: 4.4 KB
Line 
1/*
2 * Copyright 2010, Alin Rus <alin.codejunkie@gmail.com>
3 *
4 * The license and distribution terms for this file may be
5 * found in the file LICENSE in this distribution or at
6 * http://www.rtems.com/license/LICENSE.
7 *
8 * $Id$
9 */
10
11#define CONFIGURE_INIT
12#include "system.h"
13#include <rtems.h>
14#include "tmacros.h"
15#include <rtems/posix/aio_misc.h>
16#include <aio.h>
17#include <stdlib.h>
18#include <unistd.h>
19#include <stdio.h>
20#include <sched.h>
21#include <fcntl.h>
22
23#define BUFSIZE 512
24#define WRONG_FD 404
25
26struct aiocb *
27create_aiocb (int fd)
28{
29  struct aiocb *aiocbp;
30
31  aiocbp = malloc (sizeof (struct aiocb));
32  memset (aiocbp, 0, sizeof (struct aiocb));
33  aiocbp->aio_buf = malloc (BUFSIZE * sizeof (char));
34  aiocbp->aio_nbytes = BUFSIZE;
35  aiocbp->aio_offset = 0;
36  aiocbp->aio_reqprio = 0;
37  aiocbp->aio_fildes = fd;
38
39  return aiocbp;
40}
41
42void
43free_aiocb (struct aiocb *aiocbp)
44{
45  free ((char*) aiocbp->aio_buf);
46  free (aiocbp);
47}
48
49void *
50POSIX_Init (void *argument)
51{
52  int result, fd;
53  struct aiocb *aiocbp;
54  int status;
55
56  rtems_aio_init ();
57
58  status = mkdir ("/tmp", S_IRWXU);
59  rtems_test_assert (!status);
60 
61  fd = open ("/tmp/aio_fildes", O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
62  rtems_test_assert ( fd != -1);
63
64  puts ("\n\n*** POSIX AIO TEST 01 ***");
65
66  puts (" Init: EBADF TESTS ");
67
68  aiocbp = create_aiocb (WRONG_FD);
69  status = aio_write (aiocbp);
70  rtems_test_assert (status == -1);
71
72  /* Bad file descriptor */
73  puts ("Init: aio_write() - EBADF ");
74
75  result = aio_return (aiocbp);
76  rtems_test_assert (result == -1);
77  status = aio_error (aiocbp);
78  rtems_test_assert (status == EBADF);
79
80  status = aio_read (aiocbp);
81  rtems_test_assert (status == -1);
82
83  /* Bad file descriptor */
84  puts ("Init: aio_read() - EBADF ");
85
86  result = aio_return (aiocbp);
87  rtems_test_assert (result == -1);
88  status = aio_error (aiocbp);
89  rtems_test_assert (status == EBADF);
90
91  status = aio_cancel (WRONG_FD, NULL);
92  rtems_test_assert (status == -1);
93
94  /* Bad file descriptor */
95  puts ("Init: aio_cancel() - EBADF ");
96 
97  result = aio_return (aiocbp);
98  rtems_test_assert (result == -1);
99  status = aio_error (aiocbp);
100  rtems_test_assert (status == EBADF);
101
102  status = aio_fsync (O_SYNC, aiocbp);
103  rtems_test_assert (status == -1);
104 
105  /* Bad file descriptor */
106  puts ("Init: aio_fsync() - EBADF ");
107
108  result = aio_return (aiocbp);
109  rtems_test_assert (result == -1);
110  status = aio_error (aiocbp);
111  rtems_test_assert (status == EBADF);
112 
113  free_aiocb (aiocbp);
114
115  /* Invalid offset */
116  puts ("Init: aio_write() - EINVAL [aio_offset]");
117
118  aiocbp = create_aiocb (fd);
119  aiocbp->aio_offset = -1;
120  status = aio_write (aiocbp);
121  rtems_test_assert (status == -1);
122
123  result = aio_return (aiocbp);
124  rtems_test_assert (result == -1);
125  status = aio_error (aiocbp);
126  rtems_test_assert (status == EINVAL);
127
128    /* Invalid offset */
129  puts ("Init: aio_read() - EINVAL [aio_offset]");
130
131  status = aio_read (aiocbp);
132  rtems_test_assert (status == -1);
133
134  result = aio_return (aiocbp);
135  rtems_test_assert (result == -1);
136  status = aio_error (aiocbp);
137  rtems_test_assert (status == EINVAL);
138
139  free_aiocb (aiocbp);
140
141  /* Invalid request priority */
142  puts ("Init: aio_write() - EINVAL [aio_reqprio]");
143
144  aiocbp = create_aiocb (fd);
145  aiocbp->aio_reqprio = AIO_PRIO_DELTA_MAX + 1;
146  status = aio_write (aiocbp);
147  rtems_test_assert (status == -1);
148
149  result = aio_return (aiocbp);
150  rtems_test_assert (result == -1);
151  status = aio_error (aiocbp);
152  rtems_test_assert (status == EINVAL);
153
154   /* Invalid request priority */
155  puts ("Init: aio_read() - EINVAL [aio_reqprio]");
156
157  status = aio_read (aiocbp);
158  rtems_test_assert (status == -1);
159
160  result = aio_return (aiocbp);
161  rtems_test_assert (result == -1);
162  status = aio_error (aiocbp);
163  rtems_test_assert (status == EINVAL);
164
165  /* Invalid request aio_cancel */
166  puts ("Init: aio_cancel() - EINVAL ");
167
168  status = aio_cancel (WRONG_FD, aiocbp);
169  rtems_test_assert (status == -1);
170
171  result = aio_return (aiocbp);
172  rtems_test_assert (result == -1);
173  status = aio_error (aiocbp);
174  rtems_test_assert (status == EINVAL);
175
176  /* Invalid operation to aio_fsync */
177  puts ("Init: aio_fsync() - EINVAL ");
178  status = aio_fsync (-1, aiocbp);
179  rtems_test_assert (status == -1);
180
181  result = aio_return (aiocbp);
182  rtems_test_assert (result == -1);
183  status = aio_error (aiocbp);
184  rtems_test_assert (status == EINVAL);
185
186  free_aiocb (aiocbp);
187
188  puts ("*** END OF POSIX AIO TEST 01 ***");
189
190  close (fd);
191  rtems_test_exit (0);
192
193  return NULL;
194
195}
Note: See TracBrowser for help on using the repository browser.