From de3fbaebe6f00a5109f4a107372d0b059f27de51 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Tue, 24 Oct 2017 13:58:24 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@10896 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- test/oslib/source/test/oslib_test_sequence_004.c | 104 ++++++++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) (limited to 'test/oslib/source') diff --git a/test/oslib/source/test/oslib_test_sequence_004.c b/test/oslib/source/test/oslib_test_sequence_004.c index d43b9165f..38cb28358 100644 --- a/test/oslib/source/test/oslib_test_sequence_004.c +++ b/test/oslib/source/test/oslib_test_sequence_004.c @@ -36,7 +36,8 @@ * . * *

Test Cases

- * No test cases defined in the test sequence. + * - @subpage oslib_test_004_001 + * . */ #if ((CH_CFG_USE_FACTORY == TRUE) && (CH_CFG_USE_MEMPOOLS == TRUE) && (CH_CFG_USE_HEAP == TRUE)) || defined(__DOXYGEN__) @@ -50,6 +51,106 @@ * Test cases. ****************************************************************************/ +/** + * @page oslib_test_004_001 [4.1] Objects Registry + * + *

Description

+ * This test case verifies the static objects registry. + * + *

Test Steps

+ * - [4.1.1] Retrieving a registered object by name, must not exist. + * - [4.1.2] Registering an object, it must not exists, must succeed. + * - [4.1.3] Registering an object with the same name, must fail. + * - [4.1.4] Retrieving the registered object by name, must exist, then + * increasing the reference counter, finally releasing both + * references. + * - [4.1.5] Releasing the first reference to the object, must not + * trigger an assertion. + * - [4.1.6] Retrieving the registered object by name again, must not + * exist. + * . + */ + +static void oslib_test_004_001_execute(void) { + registered_object_t *rop; + + /* [4.1.1] Retrieving a registered object by name, must not exist.*/ + test_set_step(1); + { + registered_object_t *rop; + + rop = chFactoryFindObject("myobj"); + test_assert(rop == NULL, "found"); + } + + /* [4.1.2] Registering an object, it must not exists, must succeed.*/ + test_set_step(2); + { + registered_object_t *rop; + static uint32_t myobj = 0x55aa; + + rop = chFactoryRegisterObject("myobj", (void *)&myobj); + test_assert(rop != NULL, "cannot register"); + } + + /* [4.1.3] Registering an object with the same name, must fail.*/ + test_set_step(3); + { + registered_object_t *rop1; + static uint32_t myobj = 0x55aa; + + rop1 = chFactoryRegisterObject("myobj", (void *)&myobj); + test_assert(rop1 == NULL, "can register"); + } + + /* [4.1.4] Retrieving the registered object by name, must exist, then + increasing the reference counter, finally releasing both + references.*/ + test_set_step(4); + { + registered_object_t *rop1, *rop2; + + rop1 = chFactoryFindObject("myobj"); + test_assert(rop1 != NULL, "not found"); + test_assert(*(uint32_t *)(rop1->objp) == 0x55aa, "object mismatch"); + test_assert(rop == rop1, "object reference mismatch"); + test_assert(rop1->element.refs == 2, "object reference mismatch"); + + rop2 = (registered_object_t *)chFactoryDuplicateReference((dyn_element_t *)rop1); + test_assert(rop1 == rop2, "object reference mismatch"); + test_assert(*(uint32_t *)(rop2->objp) == 0x55aa, "object mismatch"); + test_assert(rop1->element.refs == 3, "object reference mismatch"); + + chFactoryReleaseObject(rop1); + test_assert(rop->element.refs == 2, "references mismatch"); + + chFactoryReleaseObject(rop2); + test_assert(rop->element.refs == 1, "references mismatch"); + } + + /* [4.1.5] Releasing the first reference to the object, must not + trigger an assertion.*/ + test_set_step(5); + { + chFactoryReleaseObject(rop); + } + + /* [4.1.6] Retrieving the registered object by name again, must not + exist.*/ + test_set_step(6); + { + rop = chFactoryFindObject("myobj"); + test_assert(rop == NULL, "found"); + } +} + +static const testcase_t oslib_test_004_001 = { + "Objects Registry", + NULL, + NULL, + oslib_test_004_001_execute +}; + /**************************************************************************** * Exported data. ****************************************************************************/ @@ -58,6 +159,7 @@ * @brief Array of test cases. */ const testcase_t * const oslib_test_sequence_004_array[] = { + &oslib_test_004_001, NULL }; -- cgit v1.2.3