source: rtems/testsuites/sptests/spfifo05/init.c @ 7d3f9c6

4.115
Last change on this file since 7d3f9c6 was 7d3f9c6, checked in by Ralf Corsepius <ralf.corsepius@…>, on 02/22/11 at 07:37:03

Add HAVE_CONFIG_H.

  • Property mode set to 100644
File size: 7.6 KB
Line 
1/*
2 *  COPYRIGHT (c) 1989-2010.
3 *  On-Line Applications Research Corporation (OAR).
4 *
5 *  The license and distribution terms for this file may be
6 *  found in the file LICENSE in this distribution or at
7 *  http://www.rtems.com/license/LICENSE.
8 *
9 *  $Id$
10 */
11
12#ifdef HAVE_CONFIG_H
13#include "config.h"
14#endif
15
16#include <bsp.h>
17#include <tmacros.h>
18#include <stdio.h>
19#include <sys/types.h>
20#include <sys/stat.h>
21#include <fcntl.h>
22#include <unistd.h>
23#include <errno.h>
24#include <limits.h>
25
26#include <rtems.h>
27#include <rtems/libio.h>
28
29#define SEND_RCV_BUFSIZ       (PIPE_BUF+20)
30
31rtems_id rBarrier;
32rtems_id wBarrier;
33
34char recvBuf[SEND_RCV_BUFSIZ] = {0};
35char sendBuf[SEND_RCV_BUFSIZ] = {0};
36
37rtems_task read_task( rtems_task_argument not_used )
38{
39  int fd = 0;
40  int status = -1;
41  uint32_t released = 0;
42
43  puts( "read_task - opening /fifo in non-blocking mode" );
44
45  fd = open( "/fifo", O_RDONLY | O_NONBLOCK );
46  if( fd <= 0 ) {
47    printf( "Error opening file: (%d) :: %s\n", errno, strerror( errno ) );
48    rtems_test_assert( 0 );
49  }
50
51  puts( "read_task - attempt to read with number of writers = 0" );
52  status = read( fd, recvBuf, SEND_RCV_BUFSIZ );
53  rtems_test_assert( status == 0 );
54
55  puts( "read_task - releasing the write task" );
56  status = rtems_barrier_release( wBarrier, &released );
57  rtems_test_assert( status == 0 );
58
59  puts( "read_task - waiting at a barrier" );
60  status = rtems_barrier_wait( rBarrier, RTEMS_NO_TIMEOUT );
61  rtems_test_assert( status == RTEMS_SUCCESSFUL );
62
63  puts( "read_task - attempting to read from the fifo -- Expect EAGAIN" );
64  status = read( fd, recvBuf, SEND_RCV_BUFSIZ );
65  rtems_test_assert( status == -1 );
66  rtems_test_assert( errno == EAGAIN );
67
68  puts( "read_task - closing /fifo" );
69  status = close( fd );
70  rtems_test_assert( status == 0 );
71
72  puts("read_task - opening /fifo in read-only mode");
73  fd = open( "/fifo", O_RDONLY );
74  if( fd <= 0 ) {
75    printf( "Error opening file: (%d) :: %s\n", errno, strerror( errno ) );
76    rtems_test_assert( 0 );
77  }
78
79  puts( "read_task - releasing the write task" );
80  status = rtems_barrier_release( wBarrier, &released );
81  rtems_test_assert( status == 0 );
82
83  puts( "read_task - reading from /fifo - OK" );
84  status = read( fd, recvBuf, 10 );
85  rtems_test_assert( status == 10 );
86
87  puts( "read_task - reading from /fifo - OK" );
88  status = read( fd, recvBuf+10, 10 );
89  rtems_test_assert( status == 10 );
90
91  puts( "read_task - waiting at a barrier" );
92  status = rtems_barrier_wait( rBarrier, RTEMS_NO_TIMEOUT );
93  rtems_test_assert( status == RTEMS_SUCCESSFUL );
94
95  puts( "read_task - reading from /fifo - OK" );
96  status = read( fd, recvBuf+20, SEND_RCV_BUFSIZ - 20 );
97  rtems_test_assert( status == SEND_RCV_BUFSIZ - 20 );
98
99  if( strcmp( sendBuf, recvBuf ) ) {
100    puts( "Sent, received buffer do not match" );
101    rtems_test_assert( 0 );
102  }
103
104  puts( "read_task - releasing the write task" );
105  status = rtems_barrier_release( wBarrier, &released );
106  rtems_test_assert( status == 0 );
107
108  puts( "read_task - waiting at a barrier" );
109  status = rtems_barrier_wait( rBarrier, RTEMS_NO_TIMEOUT );
110  rtems_test_assert( status == RTEMS_SUCCESSFUL );
111
112  status = close( fd );
113  rtems_test_assert( status == 0 );
114
115  puts( "read_task - releasing the write task" );
116  status = rtems_barrier_release( wBarrier, &released );
117  rtems_test_assert( status == 0 );
118
119  rtems_task_delete( RTEMS_SELF );
120}
121
122
123
124rtems_task Init(
125  rtems_task_argument not_used
126)
127{
128  rtems_id readTaskID;
129
130  rtems_name readTaskName;
131
132  int status = -1;
133  int fd = 0;
134  uint32_t released = 0;
135  int flag = 1;
136
137  puts("\n*** FIFO / PIPE TESTS - 5 ***");
138
139  memset( sendBuf, '1', SEND_RCV_BUFSIZ - 30 );
140  memset( sendBuf, '2', 29 );
141  sendBuf[SEND_RCV_BUFSIZ-1] = 0;
142
143  memset( &rBarrier, 0, sizeof(rBarrier) );
144  status = rtems_barrier_create (
145    rtems_build_name ( 'B', 'A', 'R', 'r' ),
146    RTEMS_BARRIER_MANUAL_RELEASE,
147    2,
148    &rBarrier
149    );
150
151  rtems_test_assert( status == RTEMS_SUCCESSFUL );
152
153  memset( &wBarrier, 0, sizeof( wBarrier ) );
154  status = rtems_barrier_create (
155    rtems_build_name ( 'B', 'A', 'R', 'w' ),
156    RTEMS_BARRIER_MANUAL_RELEASE,
157    2,
158    &wBarrier
159    );
160  rtems_test_assert( status == RTEMS_SUCCESSFUL );
161
162  readTaskName = rtems_build_name( 'T','A','r',' ' );
163  status = rtems_task_create(
164                             readTaskName,
165                             1,
166                             RTEMS_MINIMUM_STACK_SIZE * 2,
167                             RTEMS_INTERRUPT_LEVEL(31),
168                             RTEMS_DEFAULT_ATTRIBUTES,
169                             &readTaskID
170                             );
171 
172  rtems_test_assert( status == RTEMS_SUCCESSFUL );
173
174  puts( "Init - Creating fifo file /fifo" );
175  status = mkfifo( "/fifo", 0777 );
176  rtems_test_assert( status == 0 );
177
178  puts( "Init - starting the read task" );
179  status = rtems_task_start( readTaskID, read_task, 0 );
180  rtems_test_assert( status == 0 );
181
182  puts( "Init - waiting at a barrier" );
183  status = rtems_barrier_wait( wBarrier, RTEMS_NO_TIMEOUT );
184  rtems_test_assert( status == RTEMS_SUCCESSFUL );
185
186  puts("Init - opening the fifo in write only mode -- OK");
187  fd = open("/fifo", O_WRONLY);
188  if(fd <= 0) {
189    printf("Error opening file: (%d) :: %s\n", errno, strerror(errno));
190    rtems_test_assert(0);
191  }
192
193  puts( "Init - writing to /fifo" );
194  status = write(fd, sendBuf, 0 );
195  rtems_test_assert( status == 0 );
196
197  puts( "Init - releasing the read_task" );
198  status = rtems_barrier_release( rBarrier, &released );
199  rtems_test_assert( status == 0 );
200
201  puts( "Init - waiting at a barrier" );
202  status = rtems_barrier_wait( wBarrier, RTEMS_NO_TIMEOUT );
203  rtems_test_assert( status == RTEMS_SUCCESSFUL );
204 
205  puts( "Init - writing to /fifo - OK" );
206  status = write(fd, sendBuf, SEND_RCV_BUFSIZ - 30 );
207  rtems_test_assert( status == SEND_RCV_BUFSIZ - 30 );
208
209  puts( "Init - writing to /fifo - OK" );
210  status = write(fd, sendBuf+SEND_RCV_BUFSIZ - 30, 30 );
211  rtems_test_assert( status == 30 );
212
213  puts( "Init - releasing the read_task" );
214  status = rtems_barrier_release( rBarrier, &released );
215  rtems_test_assert( status == 0 );
216
217  puts( "Init - waiting at a barrier" );
218  status = rtems_barrier_wait( wBarrier, RTEMS_NO_TIMEOUT );
219  rtems_test_assert( status == RTEMS_SUCCESSFUL ); 
220
221  puts( "Init - converting the write-mode to non-block" );
222  status = ioctl( fd, FIONBIO, &flag );
223  rtems_test_assert( status == 0 );
224
225  puts( "Init - writing to /fifo - OK" );
226  status = write(fd, sendBuf, SEND_RCV_BUFSIZ - 30 );
227  rtems_test_assert( status == SEND_RCV_BUFSIZ - 30 );
228 
229  puts( "Init - writing to /fifo - Expect EAGAIN" );
230  status = write(fd, sendBuf, SEND_RCV_BUFSIZ - 30 );
231  rtems_test_assert( status == -1 );
232  rtems_test_assert( errno == EAGAIN );
233
234  puts( "Init - releasing the read_task" );
235  status = rtems_barrier_release( rBarrier, &released );
236  rtems_test_assert( status == 0 );
237
238  puts( "Init - waiting at a barrier" );
239  status = rtems_barrier_wait( wBarrier, RTEMS_NO_TIMEOUT );
240  rtems_test_assert( status == RTEMS_SUCCESSFUL ); 
241
242  puts( "Init - writing to /fifo - Expect EPIPE" );
243  status = write(fd, sendBuf, SEND_RCV_BUFSIZ - 30 );
244  rtems_test_assert( status == -1 );
245  rtems_test_assert( errno == EPIPE );
246
247  status = close( fd );
248  rtems_test_assert( status == 0 );
249
250  puts( "Removing the fifo" );
251  status = unlink("/fifo");
252  rtems_test_assert(status == 0);
253 
254  puts("*** END OF FIFO / PIPE OPEN TEST - 6 ***");
255  rtems_test_exit(0);
256}
257
258#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
259#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
260
261#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
262#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 6
263
264#define CONFIGURE_MAXIMUM_TASKS 3
265
266#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
267
268#define CONFIGURE_MAXIMUM_BARRIERS 2
269
270#define CONFIGURE_INIT
271#define CONFIGURE_FIFOS_ENABLED
272#define CONFIGURE_MAXIMUM_FIFOS 1
273
274
275#define CONFIGURE_INIT
276#include <rtems/confdefs.h>
277
278/* end of file */
Note: See TracBrowser for help on using the repository browser.