Provided by: erlang-manpages_22.2.7+dfsg-1ubuntu0.2_all bug

NAME

       common_test - A framework for automated testing of any target nodes.

DESCRIPTION

       The  Common Test framework is an environment for implementing and performing automatic and
       semi-automatic execution of test cases.

       In brief, Common Test supports:

         * Automated execution of test suites (sets of test cases)

         * Logging of events during execution

         * HTML presentation of test suite results

         * HTML presentation of test suite code

         * Support functions for test suite authors

         * Step-by-step execution of test cases

       The following section describes the mandatory  and  optional  test  suite  functions  that
       Common Test calls during test execution. For more details, see section Writing Test Suites
       in the User's Guide.

TEST CASE CALLBACK FUNCTIONS

       The following functions define the callback interface for a test suite.

EXPORTS

       Module:all() -> Tests | {skip,Reason}

              Types:

                 Tests = [TestCase  |  {testcase,TestCase,TCRepeatProps}  |  {group,GroupName}  |
                 {group,GroupName,Properties} | {group,GroupName,Properties,SubGroups}]
                 TestCase = atom()
                 TCRepeatProps = [{repeat,N} | {repeat_until_ok,N} | {repeat_until_fail,N}]
                 GroupName = atom()
                 Properties = [parallel | sequence | Shuffle | {GroupRepeatType,N}] | default
                 SubGroups = [{GroupName,Properties} | {GroupName,Properties,SubGroups}]
                 Shuffle = shuffle | {shuffle,Seed}
                 Seed = {integer(),integer(),integer()}
                 GroupRepeatType   =  repeat  |  repeat_until_all_ok  |  repeat_until_all_fail  |
                 repeat_until_any_ok | repeat_until_any_fail
                 N = integer() | forever
                 Reason = term()

              MANDATORY

              Returns the list of all test cases and test case groups in the test suite module to
              be  executed.  This list also specifies the order the cases and groups are executed
              by Common Test. A test case is represented by an atom, the name of  the  test  case
              function,  or  a  testcase tuple indicating that the test case shall be repeated. A
              test case group is represented by a group tuple, where GroupName, an atom,  is  the
              name  of  the group (defined in groups/0). Execution properties for groups can also
              be specified, both for a top-level group  and  for  any  of  its  subgroups.  Group
              execution  properties  specified  here  override properties in the group definition
              (see groups/0). (With value default, the group definition properties are used).

              If {skip,Reason} is returned, all test cases in the module are skipped  and  Reason
              is printed on the HTML result page.

              For details on groups, see section Test Case Groups in the User's Guide.

       Module:groups() -> GroupDefs

              Types:

                 GroupDefs = [Group]
                 Group = {GroupName,Properties,GroupsAndTestCases}
                 GroupName = atom()
                 Properties = [parallel | sequence | Shuffle | {GroupRepeatType,N}]
                 GroupsAndTestCases    =    [Group    |    {group,GroupName}    |    TestCase   |
                 {testcase,TestCase,TCRepeatProps}]
                 TestCase = atom()
                 TCRepeatProps = [{repeat,N} | {repeat_until_ok,N} | {repeat_until_fail,N}]
                 Shuffle = shuffle | {shuffle,Seed}
                 Seed = {integer(),integer(),integer()}
                 GroupRepeatType  =  repeat  |  repeat_until_all_ok  |  repeat_until_all_fail   |
                 repeat_until_any_ok | repeat_until_any_fail
                 N = integer() | forever

              OPTIONAL

              Defines  test  case groups. For details, see section Test Case Groups in the User's
              Guide.

       Module:suite() -> [Info]

              Types:

                 Info  =  {timetrap,Time}  |  {require,Required}  |   {require,Name,Required}   |
                 {userdata,UserData}   |   {silent_connections,Conns}  |  {stylesheet,CSSFile}  |
                 {ct_hooks, CTHs}
                 Time = TimeVal | TimeFunc
                 TimeVal   =   MilliSec   |   {seconds,integer()}   |    {minutes,integer()}    |
                 {hours,integer()}
                 TimeFunc = {Mod,Func,Args} | Fun
                 MilliSec = integer()
                 Mod = atom()
                 Func = atom()
                 Args = list()
                 Fun = fun()
                 Required = Key | {Key,SubKeys} | {Key,SubKey} | {Key,SubKey,SubKeys}
                 Key = atom()
                 SubKeys = SubKey | [SubKey]
                 SubKey = atom()
                 Name = atom()
                 UserData = term()
                 Conns = [atom()]
                 CSSFile = string()
                 CTHs = [CTHModule |
                  {CTHModule, CTHInitArgs} |
                  {CTHModule, CTHInitArgs, CTHPriority}]
                 CTHModule = atom()
                 CTHInitArgs = term()

              OPTIONAL

              The  test  suite  information  function. Returns a list of tagged tuples specifying
              various properties related to the execution of this test suite (common for all test
              cases in the suite).

              Tag  timetrap  sets  the  maximum  time  that  each test case is allowed to execute
              (including init_per_testcase/2 and end_per_testcase/2). If  the  timetrap  time  is
              exceeded, the test case fails with reason timetrap_timeout. A TimeFunc function can
              be used to set a new timetrap by returning a  TimeVal.  It  can  also  be  used  to
              trigger  a  timetrap  time-out  by,  at  some point, returning a value other than a
              TimeVal. For details, see section Timetrap Time-Outs in the User's Guide.

              Tag  require  specifies  configuration  variables  required  by  test   cases   (or
              configuration  functions) in the suite. If the required configuration variables are
              not found in any of the configuration  files,  all  test  cases  are  skipped.  For
              details about the require functionality, see funtion ct:require/1,2.

              With  userdata,  the user can specify any test suite-related information, which can
              be read by calling ct:userdata/2.

              Tag ct_hooks specifies the Common Test Hooks to be run with this suite.

              Other tuples than the ones defined are ignored.

              For details about the test suite  information  function,  see  section  Test  Suite
              Information Function in the User's Guide.

       Module:init_per_suite(Config)       ->       NewConfig       |       {skip,Reason}       |
       {skip_and_save,Reason,SaveConfig}

              Types:

                 Config = NewConfig = SaveConfig = [{Key,Value}]
                 Key = atom()
                 Value = term()
                 Reason = term()

              OPTIONAL; if this function is defined, then end_per_suite/1 must also be defined.

              This configuration function is called as  the  first  function  in  the  suite.  It
              typically contains initializations that are common for all test cases in the suite,
              and that must only be done once. Parameter Config is the  configuration  data  that
              can  be modified. Whatever is returned from this function is specified as Config to
              all configuration functions and test cases in the suite.

              If {skip,Reason} is returned, all test cases in the suite are skipped and Reason is
              printed in the overview log for the suite.

              For  information on save_config and skip_and_save, see section Saving Configuration
              Data in the User's Guide.

       Module:end_per_suite(Config) -> term() | {save_config,SaveConfig}

              Types:

                 Config = SaveConfig = [{Key,Value}]
                 Key = atom()
                 Value = term()

              OPTIONAL; if this function is defined, then init_per_suite/1 must also be defined.

              This function is called as the last test case in the suite. It is meant to be  used
              for cleaning up after init_per_suite/1.

              For information on save_config, see section Saving Configuration Data in the User's
              Guide.

       Module:group(GroupName) -> [Info]

              Types:

                 Info  =  {timetrap,Time}  |  {require,Required}  |   {require,Name,Required}   |
                 {userdata,UserData}   |   {silent_connections,Conns}  |  {stylesheet,CSSFile}  |
                 {ct_hooks, CTHs}
                 Time = TimeVal | TimeFunc
                 TimeVal   =   MilliSec   |   {seconds,integer()}   |    {minutes,integer()}    |
                 {hours,integer()}
                 TimeFunc = {Mod,Func,Args} | Fun
                 MilliSec = integer()
                 Mod = atom()
                 Func = atom()
                 Args = list()
                 Fun = fun()
                 Required = Key | {Key,SubKeys} | {Key,Subkey} | {Key,Subkey,SubKeys}
                 Key = atom()
                 SubKeys = SubKey | [SubKey]
                 SubKey = atom()
                 Name = atom()
                 UserData = term()
                 Conns = [atom()]
                 CSSFile = string()
                 CTHs = [CTHModule |
                  {CTHModule, CTHInitArgs} |
                  {CTHModule, CTHInitArgs, CTHPriority}]
                 CTHModule = atom()
                 CTHInitArgs = term()

              OPTIONAL

              The test case group information function. It is supposed to return a list of tagged
              tuples that specify various properties related to the  execution  of  a  test  case
              group  (that  is, its test cases and subgroups). Properties set by group/1 override
              properties with the same key that have been set previously by suite/0.

              Tag timetrap sets the maximum time that  each  test  case  is  allowed  to  execute
              (including  init_per_testcase/2  and  end_per_testcase/2).  If the timetrap time is
              exceeded, the test case fails with reason timetrap_timeout. A TimeFunc function can
              be  used  to  set  a  new  timetrap  by returning a TimeVal. It can also be used to
              trigger a timetrap time-out by, at some point,  returning  a  value  other  than  a
              TimeVal. For details, see section Timetrap Time-Outs in the User's Guide.

              Tag   require   specifies  configuration  variables  required  by  test  cases  (or
              configuration functions) in the suite. If the required configuration variables  are
              not  found  in  any  of  the  configuration files, all test cases in this group are
              skipped. For details about the require functionality, see function ct:require/1,2.

              With userdata, the user can specify any test case group  related  information  that
              can be read by calling ct:userdata/2.

              Tag ct_hooks specifies the Common Test Hooks to be run with this suite.

              Other tuples than the ones defined are ignored.

              For  details  about  the  test  case  group information function, see section Group
              Information Function in the User's Guide.

       Module:init_per_group(GroupName, Config) -> NewConfig | {skip,Reason}

              Types:

                 GroupName = atom()
                 Config = NewConfig = [{Key,Value}]
                 Key = atom()
                 Value = term()
                 Reason = term()

              OPTIONAL; if this function is defined, then end_per_group/2 must also be defined.

              This configuration function is called before execution of a  test  case  group.  It
              typically contains initializations that are common for all test cases and subgroups
              in the group, and that must only be performed once. GroupName is the  name  of  the
              group, as specified in the group definition (see groups/0). Parameter Config is the
              configuration data that can be modified. The return value of this function is given
              as Config to all test cases and subgroups in the group.

              If {skip,Reason} is returned, all test cases in the group are skipped and Reason is
              printed in the overview log for the group.

              For information about test case groups, see section Test Case Groups in the  User's
              Guide.

       Module:end_per_group(GroupName, Config) -> term() | {return_group_result,Status}

              Types:

                 GroupName = atom()
                 Config = [{Key,Value}]
                 Key = atom()
                 Value = term()
                 Status = ok | skipped | failed

              OPTIONAL; if this function is defined, then init_per_group/2 must also be defined.

              This function is called after the execution of a test case group is finished. It is
              meant to be used for cleaning up after  init_per_group/2.  A  status  value  for  a
              nested  subgroup  can be returned with {return_group_result,Status}. The status can
              be retrieved in end_per_group/2 for the group on the level  above.  The  status  is
              also  used  by  Common  Test  for deciding if execution of a group is to proceed if
              property sequence or repeat_until_* is set.

              For details about test case groups, see section Test  Case  Groups  in  the  User's
              Guide.

       Module:init_per_testcase(TestCase, Config) -> NewConfig | {fail,Reason} | {skip,Reason}

              Types:

                  TestCase = atom()
                  Config = NewConfig = [{Key,Value}]
                  Key = atom()
                  Value = term()
                  Reason = term()

              OPTIONAL;  if  this  function  is  defined,  then  end_per_testcase/2  must also be
              defined.

              This function is called before each test case. Argument TestCase is the  test  case
              name,  and  Config (list of key-value tuples) is the configuration data that can be
              modified. The NewConfig list returned from this function is given as Config to  the
              test  case. If {fail,Reason} is returned, the test case is marked as failed without
              being executed.

              If {skip,Reason} is returned, the test case is skipped and Reason is printed in the
              overview log for the suite.

       Module:end_per_testcase(TestCase,     Config)     ->     term()    |    {fail,Reason}    |
       {save_config,SaveConfig}

              Types:

                 TestCase = atom()
                 Config = SaveConfig = [{Key,Value}]
                 Key = atom()
                 Value = term()
                 Reason = term()

              OPTIONAL; if this function  is  defined,  then  init_per_testcase/2  must  also  be
              defined.

              This  function  is  called  after each test case, and can be used to clean up after
              init_per_testcase/2 and the test case. Any return value (besides {fail,Reason}  and
              {save_config,SaveConfig})  is  ignored.  By  returning  {fail,Reason},  TestCase is
              marked as faulty (even though it was successful in the sense  that  it  returned  a
              value instead of terminating).

              For information on save_config, see section Saving Configuration Data in the User's
              Guide.

       Module:Testcase() -> [Info]

              Types:

                 Info  =  {timetrap,Time}  |  {require,Required}  |   {require,Name,Required}   |
                 {userdata,UserData} | {silent_connections,Conns}
                 Time = TimeVal | TimeFunc
                 TimeVal    =    MilliSec   |   {seconds,integer()}   |   {minutes,integer()}   |
                 {hours,integer()}
                 TimeFunc = {Mod,Func,Args} | Fun
                 MilliSec = integer()
                 Mod = atom()
                 Func = atom()
                 Args = list()
                 Fun = fun()
                 Required = Key | {Key,SubKeys} | {Key,Subkey} | {Key,Subkey,SubKeys}
                 Key = atom()
                 SubKeys = SubKey | [SubKey]
                 SubKey = atom()
                 Name = atom()
                 UserData = term()
                 Conns = [atom()]

              OPTIONAL

              The test case information function. It is supposed  to  return  a  list  of  tagged
              tuples  that specify various properties related to the execution of this particular
              test case. Properties set by Testcase/0 override properties set previously for  the
              test case by group/1 or suite/0.

              Tag timetrap sets the maximum time that the test case is allowed to execute. If the
              timetrap time is exceeded,  the  test  case  fails  with  reason  timetrap_timeout.
              init_per_testcase/2  and  end_per_testcase/2  are  included in the timetrap time. A
              TimeFunc function can be used to set a new timetrap by returning a TimeVal. It  can
              also  be  used  to trigger a timetrap time-out by, at some point, returning a value
              other than a TimeVal. For details, see section Timetrap  Time-Outs  in  the  User's
              Guide.

              Tag  require  specifies  configuration variables that are required by the test case
              (or init_per_testcase/2  or  end_per_testcase/2).  If  the  required  configuration
              variables  are  not  found  in  any  of  the  configuration files, the test case is
              skipped. For details about the require functionality, see function ct:require/1,2.

              If timetrap or require is not set, the default  values  specified  by  suite/0  (or
              group/1) are used.

              With  userdata,  the user can specify any test case-related information that can be
              read by calling ct:userdata/3.

              Other tuples than the ones defined are ignored.

              For details about the  test  case  information  function,  see  section  Test  Case
              Information Function in the User's Guide.

       Module:Testcase(Config)    ->    term()    |    {skip,Reason}    |   {comment,Comment}   |
       {save_config,SaveConfig} | {skip_and_save,Reason,SaveConfig} | exit()

              Types:

                 Config = SaveConfig = [{Key,Value}]
                 Key = atom()
                 Value = term()
                 Reason = term()
                 Comment = string()

              MANDATORY

              The implementation of a test case. Call the functions to test and check the result.
              If  something fails, ensure the function causes a runtime error or call ct:fail/1,2
              (which also causes the test case process to terminate).

              Elements from the Config list can, for example, be read with  proplists:get_value/2
              in STDLIB (or the macro ?config defined in ct.hrl).

              If  you  decide not to run the test case after all, return {skip,Reason}. Reason is
              then printed in field Comment on the HTML result page.

              To print some information  in  field  Comment  on  the  HTML  result  page,  return
              {comment,Comment}.

              If  the function returns anything else, the test case is considered successful. The
              return value always gets printed in the test case log file.

              For details about test case implementation, see section Test Cases  in  the  User's
              Guide.

              For  information on save_config and skip_and_save, see section Saving Configuration
              Data in the User's Guide.