View Source ct_master (common_test v1.26.2)

Distributed test execution control for Common Test.

Distributed test execution control for Common Test.

This module exports functions for running Common Test nodes on multiple hosts in parallel.

Summary

Functions

abort() -> ok

abort(Nodes) -> ok

basic_html(Bool) -> ok

get_event_mgr_ref() -> MasterEvMgrRef

progress() -> [{Node, Status}]

run(TestSpecs) -> [{Specs, ok} | {error, Reason}]

run(TestSpecs, InclNodes, ExclNodes) -> [{Specs, ok} | {error, Reason}]

run(TestSpecs, AllowUserTerms, InclNodes, ExclNodes) -> [{Specs, ok} | {error, Reason}]

run_on_node(TestSpecs, Node) -> [{Specs, ok} | {error, Reason}]

run_on_node(TestSpecs, AllowUserTerms, Node) -> [{Specs, ok} | {error, Reason}]

run_test(Node, Opts) -> ok

Types

-type test_spec() :: file:name_all().

Functions

-spec abort() -> ok.

abort() -> ok

Stops all running tests.

-spec abort(Nodes) -> ok when Nodes :: Node | [Node], Node :: node().

abort(Nodes) -> ok

Stops tests on specified nodes.

Link to this function

basic_html(Bool)

View Source (since OTP R15B01)
-spec basic_html(Bool) -> ok when Bool :: boolean().

basic_html(Bool) -> ok

If set to true, the ct_master logs are written on a primitive HTML format, not using the Common Test CSS style sheet.

Link to this function

get_event_mgr_ref()

View Source (since OTP 17.5)
-spec get_event_mgr_ref() -> atom().

get_event_mgr_ref() -> MasterEvMgrRef

Gets a reference to the Common Test master event manager. The reference can be used to, for example, add a user-specific event handler while tests are running.

Example:

 gen_event:add_handler(ct_master:get_event_mgr_ref(), my_ev_h, [])
-spec progress() -> [{Node, Status}] when Node :: node(), Status :: atom().

progress() -> [{Node, Status}]

Returns test progress. If Status is ongoing, tests are running on the node and are not yet finished.

-spec run(TestSpecs) -> [{Specs, ok} | {error, Reason}]
       when
           TestSpecs :: TestSpec | [TestSpec] | [[TestSpec]],
           TestSpec :: test_spec(),
           Specs :: [file:filename_all()],
           Reason :: term().

run(TestSpecs) -> [{Specs, ok} | {error, Reason}]

Equivalent to ct_master:run(TestSpecs, false, [], []).

Link to this function

run(TestSpecs, InclNodes, ExclNodes)

View Source
-spec run(TestSpecs, InclNodes, ExclNodes) -> [{Specs, ok} | {error, Reason}]
       when
           TestSpecs :: TestSpec | [TestSpec] | [[TestSpec]],
           TestSpec :: test_spec(),
           InclNodes :: [node()],
           ExclNodes :: [node()],
           Specs :: [file:filename_all()],
           Reason :: term().

run(TestSpecs, InclNodes, ExclNodes) -> [{Specs, ok} | {error, Reason}]

Equivalent to ct_master:run(TestSpecs, false, InclNodes, ExclNodes).

Link to this function

run(TestSpecs, AllowUserTerms, InclNodes, ExclNodes)

View Source
-spec run(TestSpecs, AllowUserTerms, InclNodes, ExclNodes) -> [{Specs, ok} | {error, Reason}]
       when
           TestSpecs :: TestSpec | [TestSpec] | [[TestSpec]],
           TestSpec :: test_spec(),
           AllowUserTerms :: boolean(),
           InclNodes :: [node()],
           ExclNodes :: [node()],
           Specs :: [file:filename_all()],
           Reason :: term().

run(TestSpecs, AllowUserTerms, InclNodes, ExclNodes) -> [{Specs, ok} | {error, Reason}]

Tests are spawned on the nodes as specified in TestSpecs. Each specification in TestSpec is handled separately. However, it is also possible to specify a list of specifications to be merged into one specification before the tests are executed. Any test without a particular node specification is also executed on the nodes in InclNodes. Nodes in the ExclNodes list are excluded from the test.

Link to this function

run_on_node(TestSpecs, Node)

View Source
-spec run_on_node(TestSpecs, Node) -> [{Specs, ok} | {error, Reason}]
               when
                   TestSpecs :: TestSpec | [TestSpec] | [[TestSpec]],
                   TestSpec :: test_spec(),
                   Node :: node(),
                   Specs :: [file:filename_all()],
                   Reason :: term().

run_on_node(TestSpecs, Node) -> [{Specs, ok} | {error, Reason}]

Equivalent to ct_master:run_on_node(TestSpecs, false, Node).

Link to this function

run_on_node(TestSpecs, AllowUserTerms, Node)

View Source
-spec run_on_node(TestSpecs, AllowUserTerms, Node) -> [{Specs, ok} | {error, Reason}]
               when
                   TestSpecs :: TestSpec | [TestSpec] | [[TestSpec]],
                   TestSpec :: test_spec(),
                   AllowUserTerms :: boolean(),
                   Node :: node(),
                   Specs :: [file:filename_all()],
                   Reason :: term().

run_on_node(TestSpecs, AllowUserTerms, Node) -> [{Specs, ok} | {error, Reason}]

Tests are spawned on Node according to TestSpecs.

-spec run_test(Node, Opts) -> ok
            when
                Node :: node(),
                Opts :: [OptTuples],
                OptTuples ::
                    {dir, TestDirs} |
                    {suite, Suites} |
                    {group, Groups} |
                    {testcase, Cases} |
                    {spec, TestSpecs} |
                    {join_specs, boolean()} |
                    {label, Label} |
                    {config, CfgFiles} |
                    {userconfig, UserConfig} |
                    {allow_user_terms, boolean()} |
                    {logdir, LogDir} |
                    {silent_connections, Conns} |
                    {stylesheet, CSSFile} |
                    {cover, CoverSpecFile} |
                    {cover_stop, boolean()} |
                    {step, StepOpts} |
                    {event_handler, EventHandlers} |
                    {include, InclDirs} |
                    {auto_compile, boolean()} |
                    {abort_if_missing_suites, boolean()} |
                    {create_priv_dir, CreatePrivDir} |
                    {multiply_timetraps, M} |
                    {scale_timetraps, boolean()} |
                    {repeat, N} |
                    {duration, DurTime} |
                    {until, StopTime} |
                    {force_stop, ForceStop} |
                    {decrypt, DecryptKeyOrFile} |
                    {refresh_logs, LogDir} |
                    {logopts, LogOpts} |
                    {verbosity, VLevels} |
                    {basic_html, boolean()} |
                    {esc_chars, boolean()} |
                    {keep_logs, KeepSpec} |
                    {ct_hooks, CTHs} |
                    {ct_hooks_order, CTHsOrder} |
                    {enable_builtin_hooks, boolean()} |
                    {release_shell, boolean()},
                TestDirs :: [string()] | string(),
                Suites :: [string()] | [atom()] | string() | atom(),
                Cases :: [atom()] | atom(),
                Groups :: GroupNameOrPath | [GroupNameOrPath],
                GroupNameOrPath :: [atom()] | atom() | all,
                TestSpecs :: [string()] | string(),
                Label :: string() | atom(),
                CfgFiles :: [string()] | string(),
                UserConfig :: [{CallbackMod, CfgStrings}] | {CallbackMod, CfgStrings},
                CallbackMod :: atom(),
                CfgStrings :: [string()] | string(),
                LogDir :: string(),
                Conns :: all | [atom()],
                CSSFile :: string(),
                CoverSpecFile :: string(),
                StepOpts :: [StepOpt],
                StepOpt :: config | keep_inactive,
                EventHandlers :: EH | [EH],
                EH :: atom() | {atom(), InitArgs} | {[atom()], InitArgs},
                InitArgs :: [term()],
                InclDirs :: [string()] | string(),
                CreatePrivDir :: auto_per_run | auto_per_tc | manual_per_tc,
                M :: integer(),
                N :: integer(),
                DurTime :: HHMMSS,
                HHMMSS :: string(),
                StopTime :: YYMoMoDDHHMMSS | HHMMSS,
                YYMoMoDDHHMMSS :: string(),
                ForceStop :: skip_rest | boolean(),
                DecryptKeyOrFile :: {key, DecryptKey} | {file, DecryptFile},
                DecryptKey :: string(),
                DecryptFile :: string(),
                LogOpts :: [LogOpt],
                LogOpt :: no_nl | no_src,
                VLevels :: VLevel | [{Category, VLevel}],
                VLevel :: integer(),
                Category :: atom(),
                KeepSpec :: all | pos_integer(),
                CTHs :: [CTHModule | {CTHModule, CTHInitArgs}],
                CTHsOrder :: atom(),
                CTHModule :: atom(),
                CTHInitArgs :: term().

run_test(Node, Opts) -> ok

Tests are spawned on Node using ct:run_test/1