summaryrefslogtreecommitdiffstats
path: root/testsuites/libtests/block01/init.c
diff options
context:
space:
mode:
authorThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-10-19 10:58:30 +0000
committerThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-10-19 10:58:30 +0000
commitb344b3deac074603027c4ab1ade594f1304592d9 (patch)
tree23947a407f5a7ca63a300d4c22d51c7dfd678086 /testsuites/libtests/block01/init.c
parent2009-10-17 Ralf Corsepius <ralf.corsepius@rtems.org> (diff)
downloadrtems-b344b3deac074603027c4ab1ade594f1304592d9.tar.bz2
added block01 test
Diffstat (limited to 'testsuites/libtests/block01/init.c')
-rw-r--r--testsuites/libtests/block01/init.c185
1 files changed, 185 insertions, 0 deletions
diff --git a/testsuites/libtests/block01/init.c b/testsuites/libtests/block01/init.c
new file mode 100644
index 0000000000..c4d196bea6
--- /dev/null
+++ b/testsuites/libtests/block01/init.c
@@ -0,0 +1,185 @@
+/**
+ * @file
+ *
+ * @ingroup tests
+ *
+ * @brief Block device tests.
+ */
+
+/*
+ * Copyright (c) 2009
+ * embedded brains GmbH
+ * Obere Lagerstr. 30
+ * D-82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#include <assert.h>
+
+#include <rtems.h>
+#include <rtems/ramdisk.h>
+#include <rtems/diskdevs.h>
+
+#define ASSERT_SC(sc) assert((sc) == RTEMS_SUCCESSFUL)
+
+#define ASSERT_SC_EQ(sc, sc_expected) assert((sc) == (sc_expected))
+
+#define BLOCK_SIZE 512U
+
+#define BLOCK_COUNT 16U
+
+static void test_diskdevs(void)
+{
+ rtems_status_code sc = RTEMS_SUCCESSFUL;
+ rtems_device_major_number major = 0;
+ rtems_device_minor_number minor = 0;
+ rtems_disk_device *physical_dd = NULL;
+ rtems_disk_device *logical_dd = NULL;
+ rtems_disk_device *dd = NULL;
+ dev_t physical_dev = 0;
+ dev_t logical_dev = 0;
+ dev_t logical_2_dev = 0;
+ dev_t const big_major_dev = rtems_filesystem_make_dev_t((rtems_device_major_number) -2, 0);
+ dev_t const big_minor_dev = rtems_filesystem_make_dev_t(0, (rtems_device_minor_number) -2);
+ ramdisk *const rd = ramdisk_allocate(NULL, BLOCK_SIZE, BLOCK_COUNT, false);
+
+ assert(rd != NULL);
+
+ sc = rtems_disk_io_initialize();
+ ASSERT_SC(sc);
+
+ sc = rtems_io_register_driver(0, &ramdisk_ops, &major);
+ ASSERT_SC(sc);
+
+ physical_dev = rtems_filesystem_make_dev_t(major, minor);
+ logical_dev = rtems_filesystem_make_dev_t(major, minor + 1);
+ logical_2_dev = rtems_filesystem_make_dev_t(major, minor + 2);
+
+ /* Consistency checks for physical disks creation */
+
+ sc = rtems_disk_create_phys(physical_dev, BLOCK_SIZE, BLOCK_COUNT, NULL, rd, "/dev/rda");
+ ASSERT_SC_EQ(sc, RTEMS_INVALID_ADDRESS);
+
+ sc = rtems_disk_create_phys(physical_dev, 0, BLOCK_COUNT, ramdisk_ioctl, rd, "/dev/rda");
+ ASSERT_SC_EQ(sc, RTEMS_INVALID_NUMBER);
+
+ sc = rtems_disk_create_phys(big_major_dev, BLOCK_SIZE, BLOCK_COUNT, ramdisk_ioctl, rd, "/dev/rda");
+ ASSERT_SC_EQ(sc, RTEMS_NO_MEMORY);
+
+ sc = rtems_disk_create_phys(big_minor_dev, BLOCK_SIZE, BLOCK_COUNT, ramdisk_ioctl, rd, "/dev/rda");
+ ASSERT_SC_EQ(sc, RTEMS_NO_MEMORY);
+
+ sc = rtems_disk_create_phys(physical_dev, BLOCK_SIZE, BLOCK_COUNT, ramdisk_ioctl, rd, NULL);
+ ASSERT_SC(sc);
+
+ sc = rtems_disk_create_phys(physical_dev, BLOCK_SIZE, BLOCK_COUNT, ramdisk_ioctl, rd, NULL);
+ ASSERT_SC_EQ(sc, RTEMS_RESOURCE_IN_USE);
+
+ sc = rtems_disk_delete(physical_dev);
+ ASSERT_SC(sc);
+
+ /* Consistency checks for logical disks creation */
+
+ sc = rtems_disk_create_log(logical_dev, physical_dev, 0, 1, "/dev/rda1");
+ ASSERT_SC_EQ(sc, RTEMS_INVALID_ID);
+
+ sc = rtems_disk_create_phys(physical_dev, BLOCK_SIZE, BLOCK_COUNT, ramdisk_ioctl, rd, "/dev/rda");
+ ASSERT_SC(sc);
+
+ sc = rtems_disk_create_log(big_major_dev, physical_dev, 0, 1, "/dev/rda1");
+ ASSERT_SC_EQ(sc, RTEMS_NO_MEMORY);
+
+ sc = rtems_disk_create_log(big_minor_dev, physical_dev, 0, 1, "/dev/rda1");
+ ASSERT_SC_EQ(sc, RTEMS_NO_MEMORY);
+
+ sc = rtems_disk_create_log(logical_dev, physical_dev, BLOCK_COUNT, 0, "/dev/rda1");
+ ASSERT_SC_EQ(sc, RTEMS_INVALID_NUMBER);
+
+ sc = rtems_disk_create_log(logical_dev, physical_dev, 0, BLOCK_COUNT + 1, "/dev/rda1");
+ ASSERT_SC_EQ(sc, RTEMS_INVALID_NUMBER);
+
+ sc = rtems_disk_create_log(logical_dev, physical_dev, 1, BLOCK_COUNT, "/dev/rda1");
+ ASSERT_SC_EQ(sc, RTEMS_INVALID_NUMBER);
+
+ sc = rtems_disk_create_log(logical_dev, physical_dev, 0, 1, "/dev/rda1");
+ ASSERT_SC(sc);
+
+ sc = rtems_disk_create_log(logical_dev, physical_dev, 0, 1, "/dev/rda1");
+ ASSERT_SC_EQ(sc, RTEMS_RESOURCE_IN_USE);
+
+ sc = rtems_disk_create_log(logical_2_dev, logical_dev, 0, 1, "/dev/rda1");
+ ASSERT_SC_EQ(sc, RTEMS_INVALID_ID);
+
+ sc = rtems_disk_delete(logical_dev);
+ ASSERT_SC(sc);
+
+ /* Consistency checks delete */
+
+ sc = rtems_disk_create_log(logical_dev, physical_dev, 0, 1, "/dev/rda1");
+ ASSERT_SC(sc);
+
+ physical_dd = rtems_disk_obtain(physical_dev);
+ assert(physical_dd != NULL && physical_dd->uses == 2);
+
+ sc = rtems_disk_release(physical_dd);
+ ASSERT_SC(sc);
+
+ logical_dd = rtems_disk_obtain(logical_dev);
+ assert(logical_dd != NULL && logical_dd->uses == 1);
+
+ sc = rtems_disk_delete(physical_dev);
+ ASSERT_SC(sc);
+
+ sc = rtems_disk_create_phys(physical_dev, BLOCK_SIZE, BLOCK_COUNT, ramdisk_ioctl, rd, "/dev/rda");
+ ASSERT_SC_EQ(sc, RTEMS_RESOURCE_IN_USE);
+
+ dd = rtems_disk_obtain(physical_dev);
+ assert(dd == NULL);
+
+ dd = rtems_disk_obtain(logical_dev);
+ assert(dd == NULL);
+
+ sc = rtems_disk_release(logical_dd);
+ ASSERT_SC(sc);
+
+ /* Cleanup */
+
+ sc = rtems_io_unregister_driver(major);
+ ASSERT_SC(sc);
+
+ sc = rtems_disk_io_done();
+ ASSERT_SC(sc);
+}
+
+static rtems_task Init(rtems_task_argument argument)
+{
+ puts("\n\n*** TEST BLOCK 1 ***");
+
+ test_diskdevs();
+
+ puts("*** END OF TEST BLOCK 1 ***");
+
+ exit(0);
+}
+
+#define CONFIGURE_INIT
+
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
+
+#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
+
+#define CONFIGURE_MAXIMUM_TASKS 2
+#define CONFIGURE_MAXIMUM_DRIVERS 2
+#define CONFIGURE_MAXIMUM_SEMAPHORES 5
+#define CONFIGURE_EXTRA_TASK_STACKS (8 * 1024)
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#include <rtems/confdefs.h>