source: rtems/testsuites/sptests/spfifo05/init.c @ 9cdd944

4.115
Last change on this file since 9cdd944 was 9cdd944, checked in by Joel Sherrill <joel.sherrill@…>, on 07/05/10 at 20:14:19

2010-07-05 Bharath Suri <bharath.s.jois@…>

PR 1600/testing

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