[asterisk-dev] [Code Review] Unit Test Framework
Matthew Nicholson
mnicholson at digium.com
Thu Dec 17 08:59:10 CST 2009
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/447/#review1321
-----------------------------------------------------------
/trunk/include/asterisk/test.h
<https://reviewboard.asterisk.org/r/447/#comment3047>
I tested this on my system and placing parens around the function body does not fix this problem, but I believe there is another way around this. See below.
/trunk/include/asterisk/test.h
<https://reviewboard.asterisk.org/r/447/#comment3048>
The problem with embedded commas can be avoided if this is defined as follows:
#define AST_TEST_DEFINE(hdr) static enum ast_test_result_state hdr(struct ast_test_info *info, enum ast_test_command cmd, struct ast_test_args *args)
And used like this:
AST_TEST_DEFINE(my_awesome_test)
{
int a, b, c;
return AST_TEST_NOT_RUN;
}
Notice AST_TEST_DEFINE() only takes a single argument now and the body is simply provided after the macro.
/trunk/tests/test_heap.c
<https://reviewboard.asterisk.org/r/447/#comment3049>
Looking at this further with inspriation from boost.test and module.h, I think these registration functions can be replaced with a modified AST_TEST_DEFINE allowing users to define and register tests in one step. If AST_TEST_DEFINE, (or a similar macro) created registration functions with __attribute((constructor)) and __attribute__((destructor)) like AST_MODULE_INFO, then calls to AST_TEST_REGISTER and AST_TEST_UNREGISTER could be avoided. An eample follows.
#define AST_TEST_DEFINE(hdr) static enum ast_test_result_state hdr(struct ast_test_info *info, enum ast_test_command cmd, struct ast_test_args *args)
#define AST_TEST_AUTO(hdr) \
AST_TEST_DEFINE(hdr); \
static void __attribute__((constructor)) __test_reg_hdr() \
{ \
AST_TEST_REGISTER(hdr); \
} \
static void __attribute__((destructor)) __test_unreg_hdr() \
{ \
AST_TEST_UNREGISTER(hdr); \
} \
AST_TEST_DEFINE(hdr)
This new macro would be used as follows:
AST_TEST_AUTO(my_automatically_registered_test_with_a_really_long_name)
{
return AST_TEST_NOT_RUN;
}
- Matthew
On 2009-12-16 19:26:04, David Vossel wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/447/
> -----------------------------------------------------------
>
> (Updated 2009-12-16 19:26:04)
>
>
> Review request for Asterisk Developers and Russell Bryant.
>
>
> Summary
> -------
>
> The Unit Test Framework is a new API that manages registration and execution of unit tests in Asterisk with the purpose of verifying the operation of C functions.
>
> The Framework consists of a single test manager accompanied by a list of registered test functions defined within the code. A test is defined, registered, and unregistered from the framework using a set of macros which allow the test code to only be compiled within asterisk when the TEST_FRAMEWORK flag is enabled in menuselect. This allows the test code to exist in the same file as the C functions it intends to verify. Registered tests may be viewed and executed via a set of new CLI commands. CLI commands are also present for generating and exporting test results into xml and txt formats.
>
> For more information and use cases please refer to the documentation provided at the beginning of the test.h file.
>
>
> Diffs
> -----
>
> /trunk/include/asterisk/_private.h 235408
> /trunk/build_tools/cflags-devmode.xml 235408
> /trunk/include/asterisk/test.h PRE-CREATION
> /trunk/main/asterisk.c 235408
> /trunk/main/test.c PRE-CREATION
> /trunk/tests/test_heap.c 235408
>
> Diff: https://reviewboard.asterisk.org/r/447/diff
>
>
> Testing
> -------
>
> test_heap.c has been modified to take advantage of the Test Framework. I have executed and generated reports for these tests.
>
>
> Thanks,
>
> David
>
>
More information about the asterisk-dev
mailing list