Added test case for dynamic mailboxes.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@10902 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
45f40f99b1
commit
034cca7ca5
|
@ -1325,6 +1325,124 @@ test_assert(dsp == NULL, "found");]]></value>
|
||||||
</step>
|
</step>
|
||||||
</steps>
|
</steps>
|
||||||
</case>
|
</case>
|
||||||
|
<case>
|
||||||
|
<brief>
|
||||||
|
<value>Dynamic Mailboxes Factory.</value>
|
||||||
|
</brief>
|
||||||
|
<description>
|
||||||
|
<value>This test case verifies the dynamic mailboxes factory.</value>
|
||||||
|
</description>
|
||||||
|
<condition>
|
||||||
|
<value>CH_CFG_FACTORY_MAILBOXES == TRUE</value>
|
||||||
|
</condition>
|
||||||
|
<various_code>
|
||||||
|
<setup_code>
|
||||||
|
<value />
|
||||||
|
</setup_code>
|
||||||
|
<teardown_code>
|
||||||
|
<value><![CDATA[dyn_mailbox_t *dmp;
|
||||||
|
|
||||||
|
dmp = chFactoryFindMailbox("mymbx");
|
||||||
|
if (dmp != NULL) {
|
||||||
|
while (dmp->element.refs > 0U) {
|
||||||
|
chFactoryReleaseMailbox(dmp);
|
||||||
|
}
|
||||||
|
}]]></value>
|
||||||
|
</teardown_code>
|
||||||
|
<local_variables>
|
||||||
|
<value><![CDATA[dyn_mailbox_t *dmp;]]></value>
|
||||||
|
</local_variables>
|
||||||
|
</various_code>
|
||||||
|
<steps>
|
||||||
|
<step>
|
||||||
|
<description>
|
||||||
|
<value>Retrieving a dynamic mailbox by name, must not exist.</value>
|
||||||
|
</description>
|
||||||
|
<tags>
|
||||||
|
<value />
|
||||||
|
</tags>
|
||||||
|
<code>
|
||||||
|
<value><![CDATA[dmp = chFactoryFindMailbox("mymbx");
|
||||||
|
test_assert(dmp == NULL, "found");]]></value>
|
||||||
|
</code>
|
||||||
|
</step>
|
||||||
|
<step>
|
||||||
|
<description>
|
||||||
|
<value>Creating a dynamic mailbox it must not exists, must succeed.</value>
|
||||||
|
</description>
|
||||||
|
<tags>
|
||||||
|
<value />
|
||||||
|
</tags>
|
||||||
|
<code>
|
||||||
|
<value><![CDATA[dmp = chFactoryCreateMailbox("mymbx", 16U);
|
||||||
|
test_assert(dmp != NULL, "cannot create");]]></value>
|
||||||
|
</code>
|
||||||
|
</step>
|
||||||
|
<step>
|
||||||
|
<description>
|
||||||
|
<value>Creating a dynamic mailbox with the same name, must fail.</value>
|
||||||
|
</description>
|
||||||
|
<tags>
|
||||||
|
<value />
|
||||||
|
</tags>
|
||||||
|
<code>
|
||||||
|
<value><![CDATA[dyn_mailbox_t *dmp1;
|
||||||
|
|
||||||
|
dmp1 = chFactoryCreateMailbox("mymbx", 16U);
|
||||||
|
test_assert(dmp1 == NULL, "can create");]]></value>
|
||||||
|
</code>
|
||||||
|
</step>
|
||||||
|
<step>
|
||||||
|
<description>
|
||||||
|
<value>Retrieving the dynamic mailbox by name, must exist, then increasing the reference counter, finally releasing both references.</value>
|
||||||
|
</description>
|
||||||
|
<tags>
|
||||||
|
<value />
|
||||||
|
</tags>
|
||||||
|
<code>
|
||||||
|
<value><![CDATA[dyn_mailbox_t *dmp1, *dmp2;
|
||||||
|
|
||||||
|
dmp1 = chFactoryFindMailbox("mymbx");
|
||||||
|
test_assert(dmp1 != NULL, "not found");
|
||||||
|
test_assert(dmp == dmp1, "object reference mismatch");
|
||||||
|
test_assert(dmp1->element.refs == 2, "object reference mismatch");
|
||||||
|
|
||||||
|
dmp2 = (dyn_mailbox_t *)chFactoryDuplicateReference((dyn_element_t *)dmp1);
|
||||||
|
test_assert(dmp1 == dmp2, "object reference mismatch");
|
||||||
|
test_assert(dmp2->element.refs == 3, "object reference mismatch");
|
||||||
|
|
||||||
|
chFactoryReleaseMailbox(dmp2);
|
||||||
|
test_assert(dmp1->element.refs == 2, "references mismatch");
|
||||||
|
|
||||||
|
chFactoryReleaseMailbox(dmp1);
|
||||||
|
test_assert(dmp->element.refs == 1, "references mismatch");]]></value>
|
||||||
|
</code>
|
||||||
|
</step>
|
||||||
|
<step>
|
||||||
|
<description>
|
||||||
|
<value>Releasing the first reference to the dynamic mailbox must not trigger an assertion.</value>
|
||||||
|
</description>
|
||||||
|
<tags>
|
||||||
|
<value />
|
||||||
|
</tags>
|
||||||
|
<code>
|
||||||
|
<value><![CDATA[chFactoryReleaseMailbox(dmp);]]></value>
|
||||||
|
</code>
|
||||||
|
</step>
|
||||||
|
<step>
|
||||||
|
<description>
|
||||||
|
<value>Retrieving the dynamic mailbox by name again, must not exist.</value>
|
||||||
|
</description>
|
||||||
|
<tags>
|
||||||
|
<value />
|
||||||
|
</tags>
|
||||||
|
<code>
|
||||||
|
<value><![CDATA[dmp = chFactoryFindMailbox("mymbx");
|
||||||
|
test_assert(dmp == NULL, "found");]]></value>
|
||||||
|
</code>
|
||||||
|
</step>
|
||||||
|
</steps>
|
||||||
|
</case>
|
||||||
</cases>
|
</cases>
|
||||||
</sequence>
|
</sequence>
|
||||||
</sequences>
|
</sequences>
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
* - @subpage oslib_test_004_001
|
* - @subpage oslib_test_004_001
|
||||||
* - @subpage oslib_test_004_002
|
* - @subpage oslib_test_004_002
|
||||||
* - @subpage oslib_test_004_003
|
* - @subpage oslib_test_004_003
|
||||||
|
* - @subpage oslib_test_004_004
|
||||||
* .
|
* .
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -397,6 +398,120 @@ static const testcase_t oslib_test_004_003 = {
|
||||||
};
|
};
|
||||||
#endif /* CH_CFG_FACTORY_SEMAPHORES == TRUE */
|
#endif /* CH_CFG_FACTORY_SEMAPHORES == TRUE */
|
||||||
|
|
||||||
|
#if (CH_CFG_FACTORY_MAILBOXES == TRUE) || defined(__DOXYGEN__)
|
||||||
|
/**
|
||||||
|
* @page oslib_test_004_004 [4.4] Dynamic Mailboxes Factory
|
||||||
|
*
|
||||||
|
* <h2>Description</h2>
|
||||||
|
* This test case verifies the dynamic mailboxes factory.
|
||||||
|
*
|
||||||
|
* <h2>Conditions</h2>
|
||||||
|
* This test is only executed if the following preprocessor condition
|
||||||
|
* evaluates to true:
|
||||||
|
* - CH_CFG_FACTORY_MAILBOXES == TRUE
|
||||||
|
* .
|
||||||
|
*
|
||||||
|
* <h2>Test Steps</h2>
|
||||||
|
* - [4.4.1] Retrieving a dynamic mailbox by name, must not exist.
|
||||||
|
* - [4.4.2] Creating a dynamic mailbox it must not exists, must
|
||||||
|
* succeed.
|
||||||
|
* - [4.4.3] Creating a dynamic mailbox with the same name, must fail.
|
||||||
|
* - [4.4.4] Retrieving the dynamic mailbox by name, must exist, then
|
||||||
|
* increasing the reference counter, finally releasing both
|
||||||
|
* references.
|
||||||
|
* - [4.4.5] Releasing the first reference to the dynamic mailbox must
|
||||||
|
* not trigger an assertion.
|
||||||
|
* - [4.4.6] Retrieving the dynamic mailbox by name again, must not
|
||||||
|
* exist.
|
||||||
|
* .
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void oslib_test_004_004_teardown(void) {
|
||||||
|
dyn_mailbox_t *dmp;
|
||||||
|
|
||||||
|
dmp = chFactoryFindMailbox("mymbx");
|
||||||
|
if (dmp != NULL) {
|
||||||
|
while (dmp->element.refs > 0U) {
|
||||||
|
chFactoryReleaseMailbox(dmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void oslib_test_004_004_execute(void) {
|
||||||
|
dyn_mailbox_t *dmp;
|
||||||
|
|
||||||
|
/* [4.4.1] Retrieving a dynamic mailbox by name, must not exist.*/
|
||||||
|
test_set_step(1);
|
||||||
|
{
|
||||||
|
dmp = chFactoryFindMailbox("mymbx");
|
||||||
|
test_assert(dmp == NULL, "found");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* [4.4.2] Creating a dynamic mailbox it must not exists, must
|
||||||
|
succeed.*/
|
||||||
|
test_set_step(2);
|
||||||
|
{
|
||||||
|
dmp = chFactoryCreateMailbox("mymbx", 16U);
|
||||||
|
test_assert(dmp != NULL, "cannot create");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* [4.4.3] Creating a dynamic mailbox with the same name, must
|
||||||
|
fail.*/
|
||||||
|
test_set_step(3);
|
||||||
|
{
|
||||||
|
dyn_mailbox_t *dmp1;
|
||||||
|
|
||||||
|
dmp1 = chFactoryCreateMailbox("mymbx", 16U);
|
||||||
|
test_assert(dmp1 == NULL, "can create");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* [4.4.4] Retrieving the dynamic mailbox by name, must exist, then
|
||||||
|
increasing the reference counter, finally releasing both
|
||||||
|
references.*/
|
||||||
|
test_set_step(4);
|
||||||
|
{
|
||||||
|
dyn_mailbox_t *dmp1, *dmp2;
|
||||||
|
|
||||||
|
dmp1 = chFactoryFindMailbox("mymbx");
|
||||||
|
test_assert(dmp1 != NULL, "not found");
|
||||||
|
test_assert(dmp == dmp1, "object reference mismatch");
|
||||||
|
test_assert(dmp1->element.refs == 2, "object reference mismatch");
|
||||||
|
|
||||||
|
dmp2 = (dyn_mailbox_t *)chFactoryDuplicateReference((dyn_element_t *)dmp1);
|
||||||
|
test_assert(dmp1 == dmp2, "object reference mismatch");
|
||||||
|
test_assert(dmp2->element.refs == 3, "object reference mismatch");
|
||||||
|
|
||||||
|
chFactoryReleaseMailbox(dmp2);
|
||||||
|
test_assert(dmp1->element.refs == 2, "references mismatch");
|
||||||
|
|
||||||
|
chFactoryReleaseMailbox(dmp1);
|
||||||
|
test_assert(dmp->element.refs == 1, "references mismatch");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* [4.4.5] Releasing the first reference to the dynamic mailbox must
|
||||||
|
not trigger an assertion.*/
|
||||||
|
test_set_step(5);
|
||||||
|
{
|
||||||
|
chFactoryReleaseMailbox(dmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* [4.4.6] Retrieving the dynamic mailbox by name again, must not
|
||||||
|
exist.*/
|
||||||
|
test_set_step(6);
|
||||||
|
{
|
||||||
|
dmp = chFactoryFindMailbox("mymbx");
|
||||||
|
test_assert(dmp == NULL, "found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static const testcase_t oslib_test_004_004 = {
|
||||||
|
"Dynamic Mailboxes Factory",
|
||||||
|
NULL,
|
||||||
|
oslib_test_004_004_teardown,
|
||||||
|
oslib_test_004_004_execute
|
||||||
|
};
|
||||||
|
#endif /* CH_CFG_FACTORY_MAILBOXES == TRUE */
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Exported data.
|
* Exported data.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
@ -413,6 +528,9 @@ const testcase_t * const oslib_test_sequence_004_array[] = {
|
||||||
#endif
|
#endif
|
||||||
#if (CH_CFG_FACTORY_SEMAPHORES == TRUE) || defined(__DOXYGEN__)
|
#if (CH_CFG_FACTORY_SEMAPHORES == TRUE) || defined(__DOXYGEN__)
|
||||||
&oslib_test_004_003,
|
&oslib_test_004_003,
|
||||||
|
#endif
|
||||||
|
#if (CH_CFG_FACTORY_MAILBOXES == TRUE) || defined(__DOXYGEN__)
|
||||||
|
&oslib_test_004_004,
|
||||||
#endif
|
#endif
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue