aboutsummaryrefslogtreecommitdiffstats
path: root/test/oslib/source
diff options
context:
space:
mode:
Diffstat (limited to 'test/oslib/source')
-rw-r--r--test/oslib/source/test/oslib_test_sequence_004.c104
1 files changed, 103 insertions, 1 deletions
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 @@
* .
*
* <h2>Test Cases</h2>
- * 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
+ *
+ * <h2>Description</h2>
+ * This test case verifies the static objects registry.
+ *
+ * <h2>Test Steps</h2>
+ * - [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
};