[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