summaryrefslogtreecommitdiffstats
path: root/testsuites/libtests
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
parent2009-10-17 Ralf Corsepius <ralf.corsepius@rtems.org> (diff)
downloadrtems-b344b3deac074603027c4ab1ade594f1304592d9.tar.bz2
added block01 test
Diffstat (limited to 'testsuites/libtests')
-rw-r--r--testsuites/libtests/ChangeLog5
-rw-r--r--testsuites/libtests/Makefile.am2
-rw-r--r--testsuites/libtests/block01/Makefile.am27
-rw-r--r--testsuites/libtests/block01/block01.scn2
-rw-r--r--testsuites/libtests/block01/init.c185
-rw-r--r--testsuites/libtests/configure.ac1
6 files changed, 221 insertions, 1 deletions
diff --git a/testsuites/libtests/ChangeLog b/testsuites/libtests/ChangeLog
index 6f63bc9779..e7575e174b 100644
--- a/testsuites/libtests/ChangeLog
+++ b/testsuites/libtests/ChangeLog
@@ -1,3 +1,8 @@
+2009-10-19 Sebastian Huber <Sebastian.Huber@embedded-brains.de>
+
+ * block01/init.c, block01/block01.scn, block01/Makefile.am: New files.
+ * Makefile.am, configure.ac: Added block01.
+
2009-10-12 Joel Sherrill <joel.sherrill@OARcorp.com>
* cpuuse/init.c, cpuuse/system.h: Use minimum stack size.
diff --git a/testsuites/libtests/Makefile.am b/testsuites/libtests/Makefile.am
index 9e93c6e174..c51b89da4f 100644
--- a/testsuites/libtests/Makefile.am
+++ b/testsuites/libtests/Makefile.am
@@ -6,7 +6,7 @@ ACLOCAL_AMFLAGS = -I ../aclocal
SUBDIRS = bspcmdline01 cpuuse malloctest heapwalk putenvtest monitor \
monitor02 rtmonuse stackchk stackchk01 termios termios01 termios02 \
- rtems++ tztest
+ rtems++ tztest block01
include $(top_srcdir)/../automake/subdirs.am
include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/libtests/block01/Makefile.am b/testsuites/libtests/block01/Makefile.am
new file mode 100644
index 0000000000..b7f5565b5c
--- /dev/null
+++ b/testsuites/libtests/block01/Makefile.am
@@ -0,0 +1,27 @@
+##
+## $Id$
+##
+
+MANAGERS = io semaphore event
+
+rtems_tests_PROGRAMS = block01
+block01_SOURCES = init.c
+
+dist_rtems_tests_DATA = block01.scn
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../automake/compile.am
+include $(top_srcdir)/../automake/leaf.am
+
+block01_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel)
+
+AM_CPPFLAGS += -I$(top_srcdir)/../support/include
+
+LINK_OBJS = $(block01_OBJECTS) $(block01_LDADD)
+LINK_LIBS = $(block01_LDLIBS)
+
+block01$(EXEEXT): $(block01_OBJECTS) $(block01_DEPENDENCIES)
+ @rm -f block01$(EXEEXT)
+ $(make-exe)
+
+include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/libtests/block01/block01.scn b/testsuites/libtests/block01/block01.scn
new file mode 100644
index 0000000000..c3e7ab955a
--- /dev/null
+++ b/testsuites/libtests/block01/block01.scn
@@ -0,0 +1,2 @@
+*** TEST BLOCKDEVS ***
+*** END OF TEST BLOCKDEVS ***
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>
diff --git a/testsuites/libtests/configure.ac b/testsuites/libtests/configure.ac
index 71c9e53e6d..29cecdfcd2 100644
--- a/testsuites/libtests/configure.ac
+++ b/testsuites/libtests/configure.ac
@@ -33,6 +33,7 @@ AM_CONDITIONAL(HAS_CXX,test "$rtems_cv_HAS_CPLUSPLUS" = "yes")
# Explicitly list all Makefiles here
AC_CONFIG_FILES([Makefile
+block01/Makefile
bspcmdline01/Makefile
cpuuse/Makefile
heapwalk/Makefile