source: rtems/testsuites/libtests/block01/init.c @ b344b3de

4.104.115
Last change on this file since b344b3de was b344b3de, checked in by Thomas Doerfler <Thomas.Doerfler@…>, on 10/19/09 at 10:58:30

added block01 test

  • Property mode set to 100644
File size: 5.2 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup tests
5 *
6 * @brief Block device tests.
7 */
8
9/*
10 * Copyright (c) 2009
11 * embedded brains GmbH
12 * Obere Lagerstr. 30
13 * D-82178 Puchheim
14 * Germany
15 * <rtems@embedded-brains.de>
16 *
17 * The license and distribution terms for this file may be
18 * found in the file LICENSE in this distribution or at
19 * http://www.rtems.com/license/LICENSE.
20 */
21
22#include <assert.h>
23
24#include <rtems.h>
25#include <rtems/ramdisk.h>
26#include <rtems/diskdevs.h>
27
28#define ASSERT_SC(sc) assert((sc) == RTEMS_SUCCESSFUL)
29
30#define ASSERT_SC_EQ(sc, sc_expected) assert((sc) == (sc_expected))
31
32#define BLOCK_SIZE 512U
33
34#define BLOCK_COUNT 16U
35
36static void test_diskdevs(void)
37{
38  rtems_status_code sc = RTEMS_SUCCESSFUL;
39  rtems_device_major_number major = 0;
40  rtems_device_minor_number minor = 0;
41  rtems_disk_device *physical_dd = NULL;
42  rtems_disk_device *logical_dd = NULL;
43  rtems_disk_device *dd = NULL;
44  dev_t physical_dev = 0;
45  dev_t logical_dev = 0;
46  dev_t logical_2_dev = 0;
47  dev_t const big_major_dev = rtems_filesystem_make_dev_t((rtems_device_major_number) -2, 0);
48  dev_t const big_minor_dev = rtems_filesystem_make_dev_t(0, (rtems_device_minor_number) -2);
49  ramdisk *const rd = ramdisk_allocate(NULL, BLOCK_SIZE, BLOCK_COUNT, false);
50
51  assert(rd != NULL);
52
53  sc = rtems_disk_io_initialize();
54  ASSERT_SC(sc);
55
56  sc = rtems_io_register_driver(0, &ramdisk_ops, &major);
57  ASSERT_SC(sc);
58
59  physical_dev = rtems_filesystem_make_dev_t(major, minor);
60  logical_dev = rtems_filesystem_make_dev_t(major, minor + 1);
61  logical_2_dev = rtems_filesystem_make_dev_t(major, minor + 2);
62
63  /* Consistency checks for physical disks creation */
64
65  sc = rtems_disk_create_phys(physical_dev, BLOCK_SIZE, BLOCK_COUNT, NULL, rd, "/dev/rda");
66  ASSERT_SC_EQ(sc, RTEMS_INVALID_ADDRESS);
67
68  sc = rtems_disk_create_phys(physical_dev, 0, BLOCK_COUNT, ramdisk_ioctl, rd, "/dev/rda");
69  ASSERT_SC_EQ(sc, RTEMS_INVALID_NUMBER);
70
71  sc = rtems_disk_create_phys(big_major_dev, BLOCK_SIZE, BLOCK_COUNT, ramdisk_ioctl, rd, "/dev/rda");
72  ASSERT_SC_EQ(sc, RTEMS_NO_MEMORY);
73
74  sc = rtems_disk_create_phys(big_minor_dev, BLOCK_SIZE, BLOCK_COUNT, ramdisk_ioctl, rd, "/dev/rda");
75  ASSERT_SC_EQ(sc, RTEMS_NO_MEMORY);
76
77  sc = rtems_disk_create_phys(physical_dev, BLOCK_SIZE, BLOCK_COUNT, ramdisk_ioctl, rd, NULL);
78  ASSERT_SC(sc);
79
80  sc = rtems_disk_create_phys(physical_dev, BLOCK_SIZE, BLOCK_COUNT, ramdisk_ioctl, rd, NULL);
81  ASSERT_SC_EQ(sc, RTEMS_RESOURCE_IN_USE);
82
83  sc = rtems_disk_delete(physical_dev);
84  ASSERT_SC(sc);
85
86  /* Consistency checks for logical disks creation */
87
88  sc = rtems_disk_create_log(logical_dev, physical_dev, 0, 1, "/dev/rda1");
89  ASSERT_SC_EQ(sc, RTEMS_INVALID_ID);
90
91  sc = rtems_disk_create_phys(physical_dev, BLOCK_SIZE, BLOCK_COUNT, ramdisk_ioctl, rd, "/dev/rda");
92  ASSERT_SC(sc);
93
94  sc = rtems_disk_create_log(big_major_dev, physical_dev, 0, 1, "/dev/rda1");
95  ASSERT_SC_EQ(sc, RTEMS_NO_MEMORY);
96
97  sc = rtems_disk_create_log(big_minor_dev, physical_dev, 0, 1, "/dev/rda1");
98  ASSERT_SC_EQ(sc, RTEMS_NO_MEMORY);
99
100  sc = rtems_disk_create_log(logical_dev, physical_dev, BLOCK_COUNT, 0, "/dev/rda1");
101  ASSERT_SC_EQ(sc, RTEMS_INVALID_NUMBER);
102
103  sc = rtems_disk_create_log(logical_dev, physical_dev, 0, BLOCK_COUNT + 1, "/dev/rda1");
104  ASSERT_SC_EQ(sc, RTEMS_INVALID_NUMBER);
105
106  sc = rtems_disk_create_log(logical_dev, physical_dev, 1, BLOCK_COUNT, "/dev/rda1");
107  ASSERT_SC_EQ(sc, RTEMS_INVALID_NUMBER);
108
109  sc = rtems_disk_create_log(logical_dev, physical_dev, 0, 1, "/dev/rda1");
110  ASSERT_SC(sc);
111
112  sc = rtems_disk_create_log(logical_dev, physical_dev, 0, 1, "/dev/rda1");
113  ASSERT_SC_EQ(sc, RTEMS_RESOURCE_IN_USE);
114
115  sc = rtems_disk_create_log(logical_2_dev, logical_dev, 0, 1, "/dev/rda1");
116  ASSERT_SC_EQ(sc, RTEMS_INVALID_ID);
117
118  sc = rtems_disk_delete(logical_dev);
119  ASSERT_SC(sc);
120
121  /* Consistency checks delete */
122
123  sc = rtems_disk_create_log(logical_dev, physical_dev, 0, 1, "/dev/rda1");
124  ASSERT_SC(sc);
125
126  physical_dd = rtems_disk_obtain(physical_dev);
127  assert(physical_dd != NULL && physical_dd->uses == 2);
128
129  sc = rtems_disk_release(physical_dd);
130  ASSERT_SC(sc);
131
132  logical_dd = rtems_disk_obtain(logical_dev);
133  assert(logical_dd != NULL && logical_dd->uses == 1);
134
135  sc = rtems_disk_delete(physical_dev);
136  ASSERT_SC(sc);
137
138  sc = rtems_disk_create_phys(physical_dev, BLOCK_SIZE, BLOCK_COUNT, ramdisk_ioctl, rd, "/dev/rda");
139  ASSERT_SC_EQ(sc, RTEMS_RESOURCE_IN_USE);
140
141  dd = rtems_disk_obtain(physical_dev);
142  assert(dd == NULL);
143
144  dd = rtems_disk_obtain(logical_dev);
145  assert(dd == NULL);
146
147  sc = rtems_disk_release(logical_dd);
148  ASSERT_SC(sc);
149
150  /* Cleanup */
151
152  sc = rtems_io_unregister_driver(major);
153  ASSERT_SC(sc);
154
155  sc = rtems_disk_io_done();
156  ASSERT_SC(sc);
157}
158
159static rtems_task Init(rtems_task_argument argument)
160{
161  puts("\n\n*** TEST BLOCK 1 ***");
162
163  test_diskdevs();
164
165  puts("*** END OF TEST BLOCK 1 ***");
166
167  exit(0);
168}
169
170#define CONFIGURE_INIT
171
172#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
173#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
174#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
175
176#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
177
178#define CONFIGURE_MAXIMUM_TASKS 2
179#define CONFIGURE_MAXIMUM_DRIVERS 2
180#define CONFIGURE_MAXIMUM_SEMAPHORES 5
181#define CONFIGURE_EXTRA_TASK_STACKS (8 * 1024)
182
183#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
184
185#include <rtems/confdefs.h>
Note: See TracBrowser for help on using the repository browser.