source: rtems/testsuites/sptests/spfifo05/init.c @ a0b1b5ed

4.115
Last change on this file since a0b1b5ed was a0b1b5ed, checked in by Sebastian Huber <sebastian.huber@…>, on 12/15/14 at 13:19:43

Delete CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM

This define was superfluous, undocumented and used inconsistently.

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