From 7a62416558fc56fdfcf45786102e60f1a314fe77 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Tue, 11 Feb 2014 13:08:02 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6704 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- test/rt/testmsg.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 test/rt/testmsg.c (limited to 'test/rt/testmsg.c') diff --git a/test/rt/testmsg.c b/test/rt/testmsg.c new file mode 100644 index 000000000..b3b2aedcd --- /dev/null +++ b/test/rt/testmsg.c @@ -0,0 +1,108 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#include "ch.h" +#include "test.h" + +/** + * @page test_msg Messages test + * + * File: @ref testmsg.c + * + *

Description

+ * This module implements the test sequence for the @ref messages subsystem. + * + *

Objective

+ * Objective of the test module is to cover 100% of the @ref messages + * subsystem code. + * + *

Preconditions

+ * The module requires the following kernel options: + * - @p CH_CFG_USE_MESSAGES + * . + * In case some of the required options are not enabled then some or all tests + * may be skipped. + * + *

Test Cases

+ * - @subpage test_msg_001 + * . + * @file testmsg.c + * @brief Messages test source file + * @file testmsg.h + * @brief Messages header file + */ + +#if CH_CFG_USE_MESSAGES || defined(__DOXYGEN__) + +/** + * @page test_msg_001 Messages Server loop + * + *

Description

+ * A thread is spawned that sends four messages back to the tester thread.
+ * The test expect to receive the messages in the correct sequence and to + * not find a fifth message waiting. + */ + +static msg_t thread(void *p) { + + chMsgSend(p, 'A'); + chMsgSend(p, 'B'); + chMsgSend(p, 'C'); + return 0; +} + +static void msg1_execute(void) { + thread_t *tp; + msg_t msg; + + /* + * Testing the whole messages loop. + */ + threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriorityX() + 1, + thread, chThdGetSelfX()); + tp = chMsgWait(); + msg = chMsgGet(tp); + chMsgRelease(tp, msg); + test_emit_token(msg); + tp = chMsgWait(); + msg = chMsgGet(tp); + chMsgRelease(tp, msg); + test_emit_token(msg); + tp = chMsgWait(); + msg = chMsgGet(tp); + chMsgRelease(tp, msg); + test_emit_token(msg); + test_assert_sequence(1, "ABC"); +} + +ROMCONST struct testcase testmsg1 = { + "Messages, loop", + NULL, + NULL, + msg1_execute +}; + +#endif /* CH_CFG_USE_MESSAGES */ + +/** + * @brief Test sequence for messages. + */ +ROMCONST struct testcase * ROMCONST patternmsg[] = { +#if CH_CFG_USE_MESSAGES || defined(__DOXYGEN__) + &testmsg1, +#endif + NULL +}; -- cgit v1.2.3