diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2009-08-19 13:11:25 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2009-08-19 13:11:25 +0000 |
commit | 45a6b7dc5a1758cb2bc49b0d76effa381043d297 (patch) | |
tree | 2e9f38ca4e3eed5f7d1c3b0c1271564c4f5655f0 /test | |
parent | 0a59caa507fd9aed69345ba2c915dfa8f7c2395c (diff) | |
download | ChibiOS-45a6b7dc5a1758cb2bc49b0d76effa381043d297.tar.gz ChibiOS-45a6b7dc5a1758cb2bc49b0d76effa381043d297.tar.bz2 ChibiOS-45a6b7dc5a1758cb2bc49b0d76effa381043d297.zip |
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1082 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'test')
-rw-r--r-- | test/test.c | 2 | ||||
-rw-r--r-- | test/test.mk | 3 | ||||
-rw-r--r-- | test/testserial.c | 245 | ||||
-rw-r--r-- | test/testserial.h | 25 |
4 files changed, 1 insertions, 274 deletions
diff --git a/test/test.c b/test/test.c index 8d709a5b2..434ef1b8c 100644 --- a/test/test.c +++ b/test/test.c @@ -30,7 +30,6 @@ #include "testpools.h"
#include "testdyn.h"
#include "testqueues.h"
-#include "testserial.h"
#include "testbmk.h"
/*
@@ -47,7 +46,6 @@ static const struct testcase **patterns[] = { patternpools,
patterndyn,
patternqueues,
- patternserial,
patternbmk,
NULL
};
diff --git a/test/test.mk b/test/test.mk index f80237f8a..2a3e1a4f9 100644 --- a/test/test.mk +++ b/test/test.mk @@ -4,8 +4,7 @@ TESTSRC = ../../test/test.c ../../test/testthd.c \ ../../test/testmsg.c ../../test/testmbox.c \
../../test/testevt.c ../../test/testheap.c \
../../test/testpools.c ../../test/testdyn.c \
- ../../test/testqueues.c ../../test/testserial.c \
- ../../test/testbmk.c
+ ../../test/testqueues.c ../../test/testbmk.c
# Required include directories
TESTINC = ../../test
diff --git a/test/testserial.c b/test/testserial.c deleted file mode 100644 index 6781a3785..000000000 --- a/test/testserial.c +++ /dev/null @@ -1,245 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. -*/ - -#include <ch.h> - -#include "test.h" - -/** - * @page test_serial Serial Drivers test - * - * <h2>Description</h2> - * This module implements the test sequence for the @ref Serial subsystem. - * The tests are performed on a loopback software serial driver where a - * dedicated thread echoes back in the input queue the data read from the - * output queue at a fixed rate. The test module also tests implicitly the - * channels code. - * - * <h2>Objective</h2> - * Objective of the test module is to cover 100% of the @ref Serial code - * as a necessary step in order to assess its maturity level.<br> - * Note that the @ref Serial subsystem depends on the @ref Semaphores and - * @ref Events subsystems that have to met their testing objectives as well. - * - * <h2>Preconditions</h2> - * The module requires the following kernel options: - * - @p CH_USE_SERIAL_FULLDUPLEX - * . - * In case some of the required options are not enabled then some or all tests - * may be skipped. - * - * - * <h2>Test Cases</h2> - * - @subpage test_serial_001 - * - @subpage test_serial_002 - * . - * @file testserial.c - * @brief Serial Driver test source file - * @file testserial.h - * @brief Serial Driver test header file - */ - -#if CH_USE_SERIAL_FULLDUPLEX - -#define TEST_QUEUES_SIZE 8 - -static FullDuplexDriver fdd; - -/* Loopback thread, it simulates a low level driver. The thread terminates by - sending a zero through the loopback driver.*/ -static msg_t thread1(void *p) { - - while (TRUE) { - chEvtWaitAny(1); - chSysLock(); - while (TRUE) { - msg_t b = chFDDRequestDataI(&fdd); - if (b < Q_OK) - break; - if (b == 0) { - chSchRescheduleS(); - chSysUnlock(); - return 0; - } - chFDDIncomingDataI(&fdd, (uint8_t)b); - chSchRescheduleS(); - } - chSysUnlock(); - } -} - -static void infy(void) {} - -static void onfy(void) { - - chEvtSignalI(threads[0], 1); - chSchRescheduleS(); -} - -/** - * @page test_serial_001 Synchronous loopback - * - * <h2>Description</h2> - * A sequence of characters are sent to the loopback driver and read back. The - * test is performed twice using both the direct APIs and the channels API - * implementations.<br> - * The test expects to read all the characters back and in the correct - * sequence. - */ - -static char *serial1_gettest(void) { - - return "Serial driver, synchronous"; -} - -static void serial1_setup(void) { - - /* Initializes the loopback driver.*/ - chFDDInit(&fdd, wa[3], 8, infy, wa[4], 8, onfy); - /* Starts the loopback thread.*/ - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority() + 1, - thread1, 0); -} - -static void serial1_teardown(void) { - - /* Terminates the loopback thread.*/ - chFDDPut(&fdd, 0); -} - -static void serial1_execute(void) { - unsigned i; - msg_t b; - - /* Loopback test using the direct APIs.*/ - for (i = 0; i < 4; i++) { - chFDDPut(&fdd, 'A' + i); - b = chFDDGetTimeout(&fdd, S2ST(1)); - if (b < Q_OK) - break; - test_emit_token(b); - } - test_assert_sequence(1, "ABCD"); - test_assert(2, chFDDPutWouldBlock(&fdd) == FALSE, "output would block"); - test_assert(3, chFDDGetWouldBlock(&fdd) == TRUE, "input would not block"); - - /* Loopback test using the channel APIs.*/ - for (i = 0; i < 4; i++) { - chIOPut(&fdd, 'A' + i); - b = chIOGetTimeout(&fdd, S2ST(1)); - if (b < Q_OK) - break; - test_emit_token(b); - } - test_assert_sequence(4, "ABCD"); - test_assert(5, chIOPutWouldBlock(&fdd) == FALSE, "output would block"); - test_assert(6, chIOGetWouldBlock(&fdd) == TRUE, "input would not block"); -} - -const struct testcase testserial1 = { - serial1_gettest, - serial1_setup, - serial1_teardown, - serial1_execute -}; - -/** - * @page test_serial_002 Asynchronous loopback - * - * <h2>Description</h2> - * A sequence of characters are sent to the loopback driver using the - * asynchronous APIs and then read back. The test is performed twice using - * both the direct APIs and the channels API. An input queue overflow test - * is performed too.<br> - * The test expects that the queues are filled and emptied as expected and that - * the overflow error condition is reported when expected. - */ - -static char *serial2_gettest(void) { - - return "Serial driver, asynchronous"; -} - -static void serial2_setup(void) { - - /* Initializes the loopback driver.*/ - chFDDInit(&fdd, wa[3], 8, infy, wa[4], 8, onfy); - /* Starts the loopback thread.*/ - threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority() + 1, - thread1, 0); -} - -static void serial2_teardown(void) { - - /* Terminates the loopback thread.*/ - chFDDPut(&fdd, 0); -} - -static void serial2_execute(void) { - size_t n; - dflags_t flags; - - /* Asynchronous test using the direct APIs.*/ - n = chFDDWrite(&fdd, (uint8_t *)"ABCDEFGH", TEST_QUEUES_SIZE); - test_assert(1, n == TEST_QUEUES_SIZE, "unexpected write condition"); - n = chFDDRead(&fdd, wa[1], TEST_QUEUES_SIZE); - test_assert(2, n == TEST_QUEUES_SIZE, "unexpected read condition"); - test_assert(2, chFDDPutWouldBlock(&fdd) == FALSE, "output would block"); - test_assert(3, chFDDGetWouldBlock(&fdd) == TRUE, "input would not block"); - flags = chFDDGetAndClearFlags(&fdd); - test_assert(4, flags == 0, "unexpected error condition"); - - /* Input overflow testing.*/ - n = chFDDWrite(&fdd, (uint8_t *)"ABCDEFGH", TEST_QUEUES_SIZE); - test_assert(5, n == TEST_QUEUES_SIZE, "unexpected write condition"); - /* The following operation will fail to loopback because the input queue - * is full.*/ - chFDDPut(&fdd, 'Z'); - flags = chFDDGetAndClearFlags(&fdd); - test_assert(6, flags == SD_OVERRUN_ERROR, "unexpected error condition"); - n = chFDDRead(&fdd, wa[1], TEST_QUEUES_SIZE); - test_assert(7, n == TEST_QUEUES_SIZE, "unexpected read condition"); - - /* Asynchronous test using the channel APIs.*/ - n = chIOWrite(&fdd, (uint8_t *)"ABCDEFGH", TEST_QUEUES_SIZE); - test_assert(8, n == TEST_QUEUES_SIZE, "unexpected write condition"); - n = chIORead(&fdd, wa[1], TEST_QUEUES_SIZE); - test_assert(9, n == TEST_QUEUES_SIZE, "unexpected read condition"); - test_assert(10, chIOPutWouldBlock(&fdd) == FALSE, "output would block"); - test_assert(11, chIOGetWouldBlock(&fdd) == TRUE, "input would not block"); -} - -const struct testcase testserial2 = { - serial2_gettest, - serial2_setup, - serial2_teardown, - serial2_execute -}; -#endif /* CH_USE_SERIAL_FULLDUPLEX */ - -/* - * Test sequence for queues pattern. - */ -const struct testcase * const patternserial[] = { -#if CH_USE_SERIAL_FULLDUPLEX - &testserial1, - &testserial2, -#endif - NULL -}; diff --git a/test/testserial.h b/test/testserial.h deleted file mode 100644 index 3e68dd9c7..000000000 --- a/test/testserial.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef _TESTSERIAL_H_ -#define _TESTSERIAL_H_ - -extern const struct testcase *patternserial[]; - -#endif /* _TESTSERIAL_H_ */ |