source: rtems/testsuites/sptests/sp21/init.c @ 6c0301d

4.115
Last change on this file since 6c0301d was 6c0301d, checked in by Sebastian Huber <sebastian.huber@…>, on 03/25/14 at 07:06:21

tests/sptests: Use <rtems/test.h>

  • Property mode set to 100644
File size: 8.6 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 <tmacros.h>
15#include <rtems/devnull.h>
16#include <rtems/devzero.h>
17#include <rtems/libio.h>
18
19const char rtems_test_name[] = "SP 21";
20
21/* forward declarations to avoid warnings */
22rtems_task Init(rtems_task_argument argument);
23void do_test_io_manager(void);
24void do_test_io_lookup_name(void);
25void do_test_zero_driver(void);
26
27#define PRIurtems_device_major_number PRIu32
28
29#define STUB_DRIVER_MAJOR     0x2
30#define ZERO_DRIVER_MAJOR     0x3
31#define NO_DRIVER_MAJOR       0x4
32#define INVALID_DRIVER_MAJOR  \
33     (rtems_configuration_get_number_of_device_drivers() + 1)
34
35/* driver entries to use with io_register */
36rtems_driver_address_table GoodDriver = DEVNULL_DRIVER_TABLE_ENTRY;
37rtems_driver_address_table BadDriver_Nothing = {
38  NULL, NULL, NULL, NULL, NULL, NULL
39};
40
41void do_test_io_manager(void)
42{
43  rtems_status_code         status;
44  rtems_device_major_number registered;
45  rtems_device_major_number registered_worked;
46
47  puts( "-----  TESTING THE NULL DRIVER CHECKS  -----" );
48
49  status = rtems_io_initialize( NO_DRIVER_MAJOR, 0, NULL );
50  directive_failed( status, "rtems_io_initialize" );
51  puts( "rtems_io_initialize  - NULL DRIVER RTEMS_SUCCESSFUL" );
52
53  status = rtems_io_open( NO_DRIVER_MAJOR, 0, NULL );
54  directive_failed( status, "rtems_io_open" );
55  puts( "rtems_io_open        - NULL DRIVER RTEMS_SUCCESSFUL" );
56
57  status = rtems_io_close( NO_DRIVER_MAJOR, 0, NULL );
58  directive_failed( status, "rtems_io_close" );
59  puts( "rtems_io_close       - NULL DRIVER RTEMS_SUCCESSFUL" );
60
61  status = rtems_io_read( NO_DRIVER_MAJOR, 0, NULL );
62  directive_failed( status, "rtems_io_read" );
63  puts( "rtems_io_read        - NULL DRIVER RTEMS_SUCCESSFUL" );
64
65  status = rtems_io_write( NO_DRIVER_MAJOR, 0, NULL );
66  directive_failed( status, "rtems_io_write" );
67  puts( "rtems_io_write       - NULL DRIVER RTEMS_SUCCESSFUL" );
68
69  status = rtems_io_control( NO_DRIVER_MAJOR, 0, NULL );
70  directive_failed( status, "rtems_io_control" );
71  puts( "rtems_io_control     - NULL DRIVER RTEMS_SUCCESSFUL" );
72
73  puts( "-----  TESTING THE I/O MANAGER DIRECTIVES  -----" );
74
75  status = rtems_io_initialize( STUB_DRIVER_MAJOR, 0, NULL );
76  directive_failed( status, "rtems_io_initialize" );
77  puts( "rtems_io_initialize  - STUB DRIVER RTEMS_SUCCESSFUL" );
78
79  status = rtems_io_open( STUB_DRIVER_MAJOR, 0, NULL );
80  directive_failed( status, "rtems_io_open" );
81  puts( "rtems_io_open        - STUB DRIVER RTEMS_SUCCESSFUL" );
82
83  status = rtems_io_close( STUB_DRIVER_MAJOR, 0, NULL );
84  directive_failed( status, "rtems_io_close" );
85  puts( "rtems_io_close       - STUB DRIVER RTEMS_SUCCESSFUL" );
86
87  status = rtems_io_read( STUB_DRIVER_MAJOR, 0, NULL );
88  directive_failed( status, "rtems_io_read" );
89  puts( "rtems_io_read        - STUB DRIVER RTEMS_SUCCESSFUL" );
90
91  status = rtems_io_write( STUB_DRIVER_MAJOR, 0, NULL );
92  directive_failed( status, "rtems_io_write" );
93  puts( "rtems_io_write       - STUB DRIVER RTEMS_SUCCESSFUL" );
94
95  status = rtems_io_control( STUB_DRIVER_MAJOR, 0, NULL );
96  directive_failed( status, "rtems_io_control" );
97  puts( "rtems_io_control     - STUB DRIVER RTEMS_SUCCESSFUL" );
98
99  /*
100   *  Invalid major number
101   */
102  puts( "-----  RETURNING INVALID MAJOR NUMBER -----" );
103
104  status = rtems_io_initialize( INVALID_DRIVER_MAJOR, 0, NULL );
105  fatal_directive_status(
106    status,
107    RTEMS_INVALID_NUMBER,
108    "rtems_io_initialize"
109  );
110  puts( "rtems_io_initialize  - RTEMS_INVALID_NUMBER" );
111
112  status = rtems_io_open( INVALID_DRIVER_MAJOR, 0, NULL );
113  fatal_directive_status(
114    status,
115    RTEMS_INVALID_NUMBER,
116    "rtems_io_open"
117  );
118  puts( "rtems_io_open        - RTEMS_INVALID_NUMBER" );
119
120  /*
121   *  Exercise the io register driver directive
122   */
123  puts( "-----  EXERCISE DRIVER REGISTER -----" );
124
125  status = rtems_io_register_driver( 0, &GoodDriver, NULL );
126  fatal_directive_status(
127    status,
128    RTEMS_INVALID_ADDRESS,
129    "rtems_io_register_driver"
130  );
131  puts(
132   "rtems_io_register_driver - RTEMS_INVALID_ADDRESS - NULL registered"
133  );
134
135  status = rtems_io_register_driver( 0, NULL, &registered );
136  fatal_directive_status(
137    status,
138    RTEMS_INVALID_ADDRESS,
139    "rtems_io_register_driver"
140  );
141  puts(
142    "rtems_io_register_driver - RTEMS_INVALID_ADDRESS - NULL device"
143  );
144
145  status = rtems_io_register_driver( 0, &BadDriver_Nothing, &registered );
146  fatal_directive_status(
147    status,
148    RTEMS_INVALID_ADDRESS,
149    "rtems_io_register_driver"
150  );
151  puts(
152    "rtems_io_register_driver - RTEMS_INVALID_ADDRESS - no callouts"
153  );
154
155  status = rtems_io_register_driver(
156    INVALID_DRIVER_MAJOR, &GoodDriver, &registered );
157  fatal_directive_status(
158    status,
159    RTEMS_INVALID_NUMBER,
160    "rtems_io_register_driver"
161  );
162  puts( "rtems_io_register_driver - RTEMS_INVALID_NUMBER - bad major" );
163
164  /* this has to succeed to overwrite NULL driver entry required above. */
165  status = rtems_io_register_driver( 0, &GoodDriver, &registered_worked );
166  directive_failed( status, "rtems_io_register_driver" );
167  puts( "rtems_io_register_driver - RTEMS_SUCCESSFUL - overwrite NULL" );
168
169  status = rtems_io_register_driver( 0, &GoodDriver, &registered );
170  if ( status == RTEMS_SUCCESSFUL )
171    printf(
172      "registered major = %" PRIurtems_device_major_number "\n", registered );
173  fatal_directive_status(
174    status,
175    RTEMS_TOO_MANY,
176    "rtems_io_register_driver"
177  );
178  puts( "rtems_io_register_driver - RTEMS_TOO_MANY - no slots" );
179
180  /* there should be a driver at major 1 -- clock, console, or stub */
181  status = rtems_io_register_driver( 1, &GoodDriver, &registered );
182  fatal_directive_status(
183    status,
184    RTEMS_RESOURCE_IN_USE,
185    "rtems_io_register_driver"
186  );
187  puts(
188    "rtems_io_register_driver - RTEMS_RESOURCE_IN_USE - major in use"
189  );
190
191  /* this should unregister the device driver we registered above */
192  status = rtems_io_unregister_driver( registered_worked );
193  directive_failed( status, "rtems_io_unregister_driver" );
194  puts( "rtems_io_unregister_driver - RTEMS_SUCCESSFUL" );
195}
196
197void do_test_io_lookup_name(void)
198{
199  rtems_status_code    sc;
200  rtems_driver_name_t  info;
201
202  puts( "rtems_io_lookup_name( \"\", &info ) - RTEMS_UNSATISFIED" );
203  sc = rtems_io_lookup_name( "", &info );
204  fatal_directive_status( sc, RTEMS_UNSATISFIED, "lookup empty string" );
205 
206  puts( "rtems_io_lookup_name( \"/dev\", &info ) - RTEMS_UNSATISFIED" );
207  sc = rtems_io_lookup_name( "/dev", &info );
208  fatal_directive_status( sc, RTEMS_UNSATISFIED, "lookup empty string" );
209
210  puts( "rtems_io_lookup_name( \"/dev/null\", &info ) - RTEMS_SUCCESSFUL" );
211  sc = rtems_io_lookup_name( "/dev/null", &info );
212  directive_failed( sc, "lookup /dev/null" );
213}
214
215void do_test_zero_driver(void)
216{
217  rtems_status_code sc = RTEMS_SUCCESSFUL;
218  char in = 'I';
219  rtems_libio_rw_args_t rw_in = {
220    .buffer = &in,
221    .count = sizeof(in)
222  };
223  char out = 'O';
224  rtems_libio_rw_args_t rw_out = {
225    .buffer = &out,
226    .count = sizeof(out)
227  };
228
229  puts( "-----  TESTING THE ZERO DRIVER CHECKS  -----" );
230
231  sc = rtems_io_initialize( ZERO_DRIVER_MAJOR, 0, NULL );
232  rtems_test_assert( sc == RTEMS_TOO_MANY );
233
234  sc = rtems_io_open( ZERO_DRIVER_MAJOR, 0, NULL );
235  rtems_test_assert( sc == RTEMS_SUCCESSFUL );
236
237  sc = rtems_io_close( ZERO_DRIVER_MAJOR, 0, NULL );
238  rtems_test_assert( sc == RTEMS_SUCCESSFUL );
239
240  sc = rtems_io_read( ZERO_DRIVER_MAJOR, 0, &rw_in );
241  rtems_test_assert( sc == RTEMS_SUCCESSFUL );
242  rtems_test_assert( in == 0 );
243  rtems_test_assert( rw_in.bytes_moved == sizeof(in) );
244
245  sc = rtems_io_write( ZERO_DRIVER_MAJOR, 0, &rw_out );
246  rtems_test_assert( sc == RTEMS_SUCCESSFUL );
247  rtems_test_assert( out == 'O' );
248  rtems_test_assert( rw_out.bytes_moved == sizeof(out) );
249
250  sc = rtems_io_control( ZERO_DRIVER_MAJOR, 0, NULL );
251  rtems_test_assert( sc == RTEMS_IO_ERROR );
252}
253
254rtems_task Init(
255  rtems_task_argument argument
256)
257{
258  TEST_BEGIN();
259
260  do_test_io_manager();
261
262  do_test_io_lookup_name();
263
264  do_test_zero_driver();
265
266  TEST_END();
267  rtems_test_exit( 0 );
268}
269
270/* configuration information */
271
272#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
273#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
274#define CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
275#define CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
276#define CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
277
278#define CONFIGURE_MAXIMUM_TASKS             1
279#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
280
281#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
282
283#define CONFIGURE_INIT
284#include <rtems/confdefs.h>
285/* end of file */
Note: See TracBrowser for help on using the repository browser.