diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-10-26 21:29:36 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-10-26 21:29:36 +0200 |
commit | 0d68d8f2e943a01e65fb3b57c51f9ec9d70e5b7c (patch) | |
tree | 0d4e093ec61c0f1aaf609bc89caa574146004033 /testsuites | |
parent | bsp/mpc55xx: Stop tasks for SMSC9218i during off (diff) | |
download | rtems-0d68d8f2e943a01e65fb3b57c51f9ec9d70e5b7c.tar.bz2 |
libtests/block16: New test
Diffstat (limited to 'testsuites')
-rw-r--r-- | testsuites/libtests/Makefile.am | 1 | ||||
-rw-r--r-- | testsuites/libtests/block16/Makefile.am | 19 | ||||
-rw-r--r-- | testsuites/libtests/block16/block16.doc | 11 | ||||
-rw-r--r-- | testsuites/libtests/block16/block16.scn | 2 | ||||
-rw-r--r-- | testsuites/libtests/block16/init.c | 153 | ||||
-rw-r--r-- | testsuites/libtests/configure.ac | 1 |
6 files changed, 187 insertions, 0 deletions
diff --git a/testsuites/libtests/Makefile.am b/testsuites/libtests/Makefile.am index 57f965b749..afd8605250 100644 --- a/testsuites/libtests/Makefile.am +++ b/testsuites/libtests/Makefile.am @@ -1,6 +1,7 @@ ACLOCAL_AMFLAGS = -I ../aclocal SUBDIRS = POSIX +SUBDIRS += block16 SUBDIRS += block15 SUBDIRS += block14 SUBDIRS += block13 diff --git a/testsuites/libtests/block16/Makefile.am b/testsuites/libtests/block16/Makefile.am new file mode 100644 index 0000000000..37ca96b847 --- /dev/null +++ b/testsuites/libtests/block16/Makefile.am @@ -0,0 +1,19 @@ +rtems_tests_PROGRAMS = block16 +block16_SOURCES = init.c + +dist_rtems_tests_DATA = block16.scn block16.doc + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(block16_OBJECTS) +LINK_LIBS = $(block16_LDLIBS) + +block16$(EXEEXT): $(block16_OBJECTS) $(block16_DEPENDENCIES) + @rm -f block16$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/libtests/block16/block16.doc b/testsuites/libtests/block16/block16.doc new file mode 100644 index 0000000000..202001482e --- /dev/null +++ b/testsuites/libtests/block16/block16.doc @@ -0,0 +1,11 @@ +This file describes the directives and concepts tested by this test set. + +test set name: block16 + +directives: + + TBD + +concepts: + + - Ensure that set block size will synchronize and purge the disk diff --git a/testsuites/libtests/block16/block16.scn b/testsuites/libtests/block16/block16.scn new file mode 100644 index 0000000000..9e33666422 --- /dev/null +++ b/testsuites/libtests/block16/block16.scn @@ -0,0 +1,2 @@ +*** TEST BLOCK 16 *** +*** END OF TEST BLOCK 16 *** diff --git a/testsuites/libtests/block16/init.c b/testsuites/libtests/block16/init.c new file mode 100644 index 0000000000..e115227f8e --- /dev/null +++ b/testsuites/libtests/block16/init.c @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Obere Lagerstr. 30 + * 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. + */ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include "tmacros.h" + +#include <sys/ioctl.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> +#include <string.h> + +#include <rtems/ramdisk.h> +#include <rtems/bdbuf.h> + +#define ASSERT_SC(sc) rtems_test_assert((sc) == RTEMS_SUCCESSFUL) + +static void test(void) +{ + static const char device [] = "/dev/rda"; + rtems_status_code sc; + int fd; + int rv; + rtems_disk_device *dd; + ramdisk *rd; + unsigned char buf [8]; + uint32_t media_block_size = sizeof(buf [0]); + rtems_blkdev_bnum media_block_count = sizeof(buf) / sizeof(buf [0]); + rtems_blkdev_bnum media_size = media_block_size * media_block_count; + rtems_bdbuf_buffer *media_bd [media_block_count]; + rtems_bdbuf_buffer *large_bd; + rtems_blkdev_bnum i; + + sc = rtems_disk_io_initialize(); + ASSERT_SC(sc); + + for (i = 0; i < media_block_count; ++i) { + buf [i] = i; + } + + rd = ramdisk_allocate(buf, media_block_size, media_block_count, false); + rtems_test_assert(rd != NULL); + + sc = rtems_blkdev_create( + device, + media_block_size, + media_block_count, + ramdisk_ioctl, + rd + ); + ASSERT_SC(sc); + + fd = open(device, O_RDWR); + rtems_test_assert(fd >= 0); + + rv = rtems_disk_fd_get_disk_device(fd, &dd); + rtems_test_assert(rv == 0); + + for (i = 0; i < media_block_count; ++i) { + sc = rtems_bdbuf_read(dd, i, &media_bd [i]); + ASSERT_SC(sc); + + rtems_test_assert(media_bd [i]->buffer [0] == buf [i]); + } + + for (i = 0; i < media_block_count; ++i) { + media_bd [i]->buffer [0] += media_block_count; + + sc = rtems_bdbuf_release_modified(media_bd [i]); + ASSERT_SC(sc); + } + + for (i = 0; i < media_block_count; i += 2) { + sc = rtems_bdbuf_read(dd, i, &media_bd [i]); + ASSERT_SC(sc); + + rtems_test_assert(media_bd [i]->buffer [0] == buf [i] + media_block_count); + } + + sc = rtems_bdbuf_set_block_size(dd, media_size); + ASSERT_SC(sc); + + for (i = 0; i < media_block_count; i += 2) { + rtems_test_assert(media_bd [i]->state == RTEMS_BDBUF_STATE_ACCESS_PURGED); + rtems_test_assert(media_bd [i + 1]->state == RTEMS_BDBUF_STATE_FREE); + + rtems_test_assert(media_bd [i]->buffer [0] == buf [i] + media_block_count); + rtems_test_assert(media_bd [i + 1]->buffer [0] == buf [i + 1]); + + sc = rtems_bdbuf_release(media_bd [i]); + ASSERT_SC(sc); + } + + sc = rtems_bdbuf_read(dd, 0, &large_bd); + ASSERT_SC(sc); + + rtems_test_assert(memcmp(buf, large_bd->buffer, media_size) == 0); + + sc = rtems_bdbuf_release(large_bd); + ASSERT_SC(sc); + + rv = close(fd); + rtems_test_assert(rv == 0); + + rv = unlink(device); + rtems_test_assert(rv == 0); +} + +static void Init(rtems_task_argument arg) +{ + puts("\n\n*** TEST BLOCK 16 ***"); + + test(); + + puts("*** END OF TEST BLOCK 16 ***"); + + rtems_test_exit(0); +} + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK + +#define CONFIGURE_BDBUF_BUFFER_MIN_SIZE 1 +#define CONFIGURE_BDBUF_BUFFER_MAX_SIZE 8 +#define CONFIGURE_BDBUF_CACHE_MEMORY_SIZE 8 + +#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM + +#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 4 + +#define CONFIGURE_MAXIMUM_TASKS 1 + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> diff --git a/testsuites/libtests/configure.ac b/testsuites/libtests/configure.ac index b40055c6ec..83e22ed647 100644 --- a/testsuites/libtests/configure.ac +++ b/testsuites/libtests/configure.ac @@ -43,6 +43,7 @@ AM_CONDITIONAL(HAS_POSIX,test x"${rtems_cv_RTEMS_POSIX_API}" = x"yes") # Explicitly list all Makefiles here AC_CONFIG_FILES([Makefile +block16/Makefile mghttpd01/Makefile block15/Makefile block14/Makefile |