avocado.rst 47.8 KB
Newer Older
C
Cleber Rosa 已提交
1 2 3 4 5 6 7 8
:title: avocado
:subtitle: test runner command line tool
:title_upper: AVOCADO
:manual_section: 1

SYNOPSIS
========

A
Amador Pahim 已提交
9 10
avocado [-h] [-v] [--config [CONFIG_FILE]] [--show [STREAM[:LVL]]] [-s]
 {config,diff,distro,exec-path,list,multiplex,plugins,run,sysinfo} ...
C
Cleber Rosa 已提交
11 12 13 14

DESCRIPTION
===========

15
Avocado is a modern test framework that is built on the experience
C
Cleber Rosa 已提交
16 17
accumulated with `autotest` (`http://autotest.github.io`).

A
Amador Pahim 已提交
18 19
`avocado` is also the name of its test runner command line tool,
described in this man page.
20

A
Amador Pahim 已提交
21 22
For more information about the Avocado project, please check its
website: http://avocado-framework.github.io/
C
Cleber Rosa 已提交
23 24 25 26

OPTIONS
=======

27 28
The following list of options are builtin, application level `avocado`
options. Most other options are implemented via plugins and will depend
A
Amador Pahim 已提交
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
on them being loaded (`avocado --help`)::

    -h, --help            show this help message and exit
    -v, --version         show program's version number and exit
    --config [CONFIG_FILE]
                          Use custom configuration from a file
    --show [STREAM[:LVL]]
                          List of comma separated builtin logs, or logging
                          streams optionally followed by LEVEL (DEBUG,INFO,...).
                          Builtin streams are: "test": test output; "debug":
                          tracebacks and other debugging info; "app":
                          application output; "early": early logging of other
                          streams, including test (very verbose); "remote":
                          fabric/paramiko debug; "all": all builtin streams;
                          "none": disables regular output (leaving only errors
                          enabled). By default: 'app'
    -s, --silent          disables regular output (leaving only errors enabled)

Real use of avocado depends on running avocado subcommands. This a
typical list of avocado subcommands::

    config              Shows avocado config keys
    diff                Shows the difference between 2 jobs.
    distro              Shows detected Linux distribution
    exec-path           Returns path to avocado bash libraries and exits.
    list                List available tests
    multiplex           Tool to analyze and visualize test variants and params
    plugins             Displays plugin information
    run                 Runs one or more tests (native test, test alias,
                        binary or script)
    sysinfo             Collect system information

To get usage instructions for a given subcommand, run it with `--help`.
Example::

    $ avocado run --help

Options for subcommand `run` (`avocado run --help`)::

    positional arguments:
      TEST_REFERENCE        List of test references (aliases or paths)

    optional arguments:
      -h, --help            show this help message and exit
      -d, --dry-run         Instead of running the test only list them and log
                            their params.
      --force-job-id UNIQUE_JOB_ID
                            Forces the use of a particular job ID. Used internally
                            when interacting with an avocado server. You should
                            not use this option unless you know exactly what
                            you're doing
      --job-results-dir DIRECTORY
                            Forces to use of an alternate job results directory.
      --job-timeout SECONDS
                            Set the maximum amount of time (in SECONDS) that tests
                            are allowed to execute. Values <= zero means "no
                            timeout". You can also use suffixes, like: s
                            (seconds), m (minutes), h (hours).
      --failfast {on,off}   Enable or disable the job interruption on first failed
                            test.
      --keep-tmp {on,off}   Keep job temporary files (useful for avocado
                            debugging). Defaults to off.
      --sysinfo {on,off}    Enable or disable system information (hardware
                            details, profilers, etc.). Current: on

    output and result format:
      -s, --silent          Silence stdout
      --show-job-log        Display only the job log on stdout. Useful for test
                            debugging purposes. No output will be displayed if you
                            also specify --silent
      --store-logging-stream [STREAM[:LEVEL] [STREAM[:LEVEL] ...]]
                            Store given logging STREAMs in
                            $JOB_RESULTS_DIR/$STREAM.$LEVEL.
      --html FILE           Enable HTML output to the FILE where the result should
                            be written. The value - (output to stdout) is not
                            supported since not all HTML resources can be embedded
                            into a single file (page resources will be copied to
                            the output file dir)
      --open-browser        Open the generated report on your preferred browser.
                            This works even if --html was not explicitly passed,
                            since an HTML report is always generated on the job
                            results dir. Current: False
      --html-job-result {on,off}
                            Enables default HTML result in the job results
                            directory. File will be located at
                            "html/results.html".
      --journal             Records test status changes (for use with avocado-
                            journal-replay and avocado-server)
      --json FILE           Enable JSON result format and write it to FILE. Use
                            '-' to redirect to the standard output.
      --json-job-result {on,off}
                            Enables default JSON result in the job results
                            directory. File will be named "results.json".
      --tap FILE            Enable TAP result output and write it to FILE. Use '-'
                            to redirect to the standard output.
      --tap-job-result {on,off}
                            Enables default TAP result in the job results
                            directory. File will be named "results.tap".
      --xunit FILE          Enable xUnit result format and write it to FILE. Use
                            '-' to redirect to the standard output.
      --xunit-job-result {on,off}
                            Enables default xUnit result in the job results
                            directory. File will be named "results.xml".
      -z, --archive         Archive (ZIP) files generated by tests

    output check arguments:
      --output-check-record {none,all,stdout,stderr}
                            Record output streams of your tests to reference files
                            (valid options: none (do not record output streams),
                            all (record both stdout and stderr), stdout (record
                            only stderr), stderr (record only stderr). Current:
                            none
      --output-check {on,off}
                            Enable or disable test output (stdout/stderr) check.
                            If this option is off, no output will be checked, even
                            if there are reference files present for the test.
                            Current: on (output check enabled)

    loader options:
      --loaders [LOADERS [LOADERS ...]]
                            Overrides the priority of the test loaders. You can
                            specify either @loader_name or TEST_TYPE. By default
                            it tries all available loaders according to priority
                            set in settings->plugins.loaders.
      --external-runner EXECUTABLE
                            Path to an specific test runner that allows the use of
                            its own tests. This should be used for running tests
                            that do not conform to Avocado' SIMPLE testinterface
                            and can not run standalone. Note: the use of
                            --external-runner overwrites the --loaders to
                            "external_runner"
      --external-runner-chdir {runner,test}
                            Change directory before executing tests. This option
                            may be necessary because of requirements and/or
                            limitations of the external test runner. If the
                            external runner requires to be run from its own base
                            directory,use "runner" here. If the external runner
                            runs tests based on files and requires to be run from
                            the directory where those files are located, use
                            "test" here and specify the test directory with the
                            option "--external-runner-testdir". Defaults to "None"
      --external-runner-testdir DIRECTORY
                            Where test files understood by the external test
                            runner are located in the filesystem. Obviously this
                            assumes and only applies to external test runners that
                            run tests from files

    filtering parameters:
      --filter-by-tags TAGS
                            Filter INSTRUMENTED tests based on ":avocado:
                            tags=tag1,tag2" notation in their class docstring
      --filter-by-tags-include-empty
                            Include all tests without tags during filtering. This
                            effectively means they will be kept in the test suite
                            found previously to filtering.

    test execution inside docker container:
      --docker IMAGE        Name of the docker image torun tests on.
      --docker-cmd CMD      Override the docker command, eg. 'sudo docker' or
                            other base docker options like hypervisor. Default:
                            'docker'
      --docker-options OPT  Extra options for docker run cmd. (see: man docker-
                            run)
      --docker-no-cleanup   Preserve container after test

    keep environment variables:
      --env-keep ENV_KEEP   Keep environment variables in remote executions

    GNU Debugger support:
      --gdb-run-bin EXECUTABLE[:BREAKPOINT]
                            Run a given executable inside the GNU debugger,
                            pausing at a given breakpoint (defaults to "main")
      --gdb-prerun-commands EXECUTABLE:COMMANDS
                            After loading an executable in GDB, but before
                            actually running it, execute the GDB commands in the
                            given file. EXECUTABLE is optional, if omitted
                            COMMANDS will apply to all executables
      --gdb-coredump {on,off}
                            Automatically generate a core dump when the inferior
                            process received a fatal signal such as SIGSEGV or
                            SIGABRT

    test execution on a remote machine:
      --remote-hostname REMOTE_HOSTNAME
                            Specify the hostname to login on remote machine
      --remote-port REMOTE_PORT
                            Specify the port number to login on remote machine.
                            Current: 22
      --remote-username REMOTE_USERNAME
                            Specify the username to login on remote machine.
                            Current: apahim
      --remote-password REMOTE_PASSWORD
                            Specify the password to login on remote machine
      --remote-key-file REMOTE_KEY_FILE
                            Specify an identity file with a private key instead of
                            a password (Example: .pem files from Amazon EC2)
      --remote-timeout SECONDS
                            Amount of time (in seconds) to wait for a successful
                            connection to the remote machine. Defaults to 60
                            seconds.

    job replay:
      --replay REPLAY_JOBID
                            Replay a job identified by its (partial) hash id. Use
                            "--replay latest" to replay the latest job.
      --replay-test-status REPLAY_TESTSTATUS
                            Filter tests to replay by test status
      --replay-ignore REPLAY_IGNORE
                            Ignore variants (variants) and/or configuration
                            (config) from the source job

L
Lukáš Doktor 已提交
240 241 242 243 244 245
    resultsdb options:
      --resultsdb-api RESULTSDB_API
                            Specify the resultsdb API url
      --resultsdb-logs RESULTSDB_LOGS
                            Specify the URL where the logs are published

A
Amador Pahim 已提交
246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471
    test execution on a Virtual Machine:
      --vm-domain VM_DOMAIN
                            Specify Libvirt Domain Name
      --vm-hypervisor-uri VM_HYPERVISOR_URI
                            Specify hypervisor URI driver connection. Current:
                            qemu:///system
      --vm-hostname VM_HOSTNAME
                            Specify VM hostname to login. By default Avocado
                            attempts to automatically find the VM IP address.
      --vm-port VM_PORT     Specify the port number to login on VM. Current: 22
      --vm-username VM_USERNAME
                            Specify the username to login on VM
      --vm-password VM_PASSWORD
                            Specify the password to login on VM
      --vm-key-file VM_KEY_FILE
                            Specify an identity file with a private key instead of
                            a password (Example: .pem files from Amazon EC2)
      --vm-cleanup          Restore VM to a previous state, before running tests
      --vm-timeout SECONDS  Amount of time (in seconds) to wait for a successful
                            connection to the virtual machine. Defaults to 120
                            seconds.

    wrapper support:
      --wrapper SCRIPT[:EXECUTABLE]
                            Use a script to wrap executables run by a test. The
                            wrapper is either a path to a script (AKA a global
                            wrapper) or a path to a script followed by colon
                            symbol (:), plus a shell like glob to the target
                            EXECUTABLE. Multiple wrapper options are allowed, but
                            only one global wrapper can be defined.

    yaml to mux options:
      -m [FILE [FILE ...]], --mux-yaml [FILE [FILE ...]]
                            Location of one or more Avocado multiplex (.yaml)
                            FILE(s) (order dependent)
      --mux-filter-only [MUX_FILTER_ONLY [MUX_FILTER_ONLY ...]]
                            Filter only path(s) from multiplexing
      --mux-filter-out [MUX_FILTER_OUT [MUX_FILTER_OUT ...]]
                            Filter out path(s) from multiplexing
      --mux-path [MUX_PATH [MUX_PATH ...]]
                            List of default paths used to determine path priority
                            when querying for parameters
      --mux-inject [MUX_INJECT [MUX_INJECT ...]]
                            Inject [path:]key:node values into the final multiplex
                            tree.

    yaml to mux options [deprecated]:
      --multiplex [FILE [FILE ...]]
                            DEPRECATED: Location of one or more Avocado multiplex
                            (.yaml) FILE(s) (order dependent)
      --filter-only [FILTER_ONLY [FILTER_ONLY ...]]
                            DEPRECATED: Filter only path(s) from multiplexing (use
                            --mux-filter-only instead)
      --filter-out [FILTER_OUT [FILTER_OUT ...]]
                            DEPRECATED: Filter out path(s) from multiplexing (use
                            --mux-filter-out instead)

Options for subcommand `config` (`avocado config --help`)::

    optional arguments:
      -h, --help            show this help message and exit
      --datadir             Shows the data directories currently being used by
                            avocado
      --paginator {on,off}  Turn the paginator on/off. Current: on


Options for subcommand `diff` (`avocado diff --help`)::

    positional arguments:
      <JOB>                 A job reference, identified by a (partial) unique ID
                            (SHA1) or test results directory.

    optional arguments:
      -h, --help            show this help message and exit
      --html FILE           Enable HTML output to the FILE where the result should
                            be written.
      --open-browser        Generate and open a HTML report in your preferred
                            browser. If no --html file is provided, create a
                            temporary file.
      --diff-filter DIFF_FILTER
                            Comma separated filter of diff sections:
                            (no)cmdline,(no)time,(no)variants,(no)results,
                            (no)config,(no)sysinfo (defaults to all enabled).
      --paginator {on,off}  Turn the paginator on/off. Current: on
      --create-reports      Create temporary files with job reports (to be used by
                            other diff tools)

Options for subcommand `distro` (`avocado distro --help`)::

    optional arguments:
      -h, --help            show this help message and exit
      --distro-def-create   Creates a distro definition file based on the path
                            given
      --distro-def-name DISTRO_DEF_NAME
                            Distribution short name
      --distro-def-version DISTRO_DEF_VERSION
                            Distribution major version number
      ---distro-def-release DISTRO_DEF_RELEASE
                            Distribution release version number
      --distro-def-arch DISTRO_DEF_ARCH
                            Primary architecture that the distro targets
      --distro-def-path DISTRO_DEF_PATH
                            Top level directory of the distro installation files
      --distro-def-type {deb,rpm}
                            Distro type (one of: deb, rpm)

Options for subcommand `exec-path` (`avocado exec-path --help`)::

    optional arguments:
      -h, --help  show this help message and exit

Options for subcommand `list` (`avocado list --help`)::

    positional arguments:
      reference             List of test references (aliases or paths). If empty,
                            avocado will list tests on the configured test source,
                            (see 'avocado config --datadir') Also, if there are
                            other test loader plugins active, tests from those
                            plugins might also show up (behavior may vary among
                            plugins)

    optional arguments:
      -h, --help            show this help message and exit
      -V, --verbose         Whether to show extra information (headers and
                            summary). Current: False
      --paginator {on,off}  Turn the paginator on/off. Current: on

    loader options:
      --loaders [LOADERS [LOADERS ...]]
                            Overrides the priority of the test loaders. You can
                            specify either @loader_name or TEST_TYPE. By default
                            it tries all available loaders according to priority
                            set in settings->plugins.loaders.
      --external-runner EXECUTABLE
                            Path to an specific test runner that allows the use of
                            its own tests. This should be used for running tests
                            that do not conform to Avocado' SIMPLE testinterface
                            and can not run standalone. Note: the use of
                            --external-runner overwrites the --loaders to
                            "external_runner"
      --external-runner-chdir {runner,test}
                            Change directory before executing tests. This option
                            may be necessary because of requirements and/or
                            limitations of the external test runner. If the
                            external runner requires to be run from its own base
                            directory,use "runner" here. If the external runner
                            runs tests based on files and requires to be run from
                            the directory where those files are located, use
                            "test" here and specify the test directory with the
                            option "--external-runner-testdir". Defaults to "None"
      --external-runner-testdir DIRECTORY
                            Where test files understood by the external test
                            runner are located in the filesystem. Obviously this
                            assumes and only applies to external test runners that
                            run tests from files

    filtering parameters:
      --filter-by-tags TAGS
                            Filter INSTRUMENTED tests based on ":avocado:
                            tags=tag1,tag2" notation in their class docstring
      --filter-by-tags-include-empty
                            Include all tests without tags during filtering. This
                            effectively means they will be kept in the test suite
                            found previously to filtering.

Options for subcommand `multiplex` (`avocado multiplex --help`)::

    optional arguments:
      -h, --help            show this help message and exit
      --summary SUMMARY     Verbosity of the variants summary. (positive integer -
                            0, 1, ... - or none, brief, normal, verbose, full,
                            max)
      --variants VARIANTS   Verbosity of the list of variants. (positive integer -
                            0, 1, ... - or none, brief, normal, verbose, full,
                            max)
      --system-wide         Combine the files with the default tree.
      -c, --contents        [obsoleted by --variants] Shows the node content
                            (variables)

    environment view options:
      -d, --debug           Debug the multiplex tree.

    tree view options:
      -t, --tree            [obsoleted by --summary] Shows the multiplex tree
                            structure
      -i, --inherit         [obsoleted by --summary] Show the inherited values

    yaml to mux options:
      -m [FILE [FILE ...]], --mux-yaml [FILE [FILE ...]]
                            Location of one or more Avocado multiplex (.yaml)
                            FILE(s) (order dependent)
      --mux-filter-only [MUX_FILTER_ONLY [MUX_FILTER_ONLY ...]]
                            Filter only path(s) from multiplexing
      --mux-filter-out [MUX_FILTER_OUT [MUX_FILTER_OUT ...]]
                            Filter out path(s) from multiplexing
      --mux-path [MUX_PATH [MUX_PATH ...]]
                            List of default paths used to determine path priority
                            when querying for parameters
      --mux-inject [MUX_INJECT [MUX_INJECT ...]]
                            Inject [path:]key:node values into the final multiplex
                            tree.

    yaml to mux options [deprecated]:
      --multiplex [FILE [FILE ...]]
                            DEPRECATED: Location of one or more Avocado multiplex
                            (.yaml) FILE(s) (order dependent)
      --filter-only [FILTER_ONLY [FILTER_ONLY ...]]
                            DEPRECATED: Filter only path(s) from multiplexing (use
                            --mux-filter-only instead)
      --filter-out [FILTER_OUT [FILTER_OUT ...]]
                            DEPRECATED: Filter out path(s) from multiplexing (use
                            --mux-filter-out instead)

Options for subcommand `plugins` (`avocado plugins --help`)::

    optional arguments:
      -h, --help            show this help message and exit
      --paginator {on,off}  Turn the paginator on/off. Current: on

Options for subcommand `sysinfo` (`avocado sysinfo --help`)::

    positional arguments:
      sysinfodir  Dir where to dump sysinfo

    optional arguments:
      -h, --help  show this help message and exit
472

C
Cleber Rosa 已提交
473 474 475
RUNNING A TEST
==============

A
Amador Pahim 已提交
476 477
The most common use of the `avocado` command line tool is to run a
test::
C
Cleber Rosa 已提交
478

A
Amador Pahim 已提交
479
    $ avocado run sleeptest.py
C
Cleber Rosa 已提交
480

A
Amador Pahim 已提交
481 482
This command will run the `sleeptest.py` test, as found on the standard
test directories. The output should be similar to::
C
Cleber Rosa 已提交
483

A
Amador Pahim 已提交
484 485 486 487
    JOB ID    : <id>
    JOB LOG   : /home/<user>/avocado/job-results/job-<date>-<shortid>/job.log
     (1/1) sleeptest.py:SleepTest.test: PASS (1.01 s)
    RESULTS    : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0
488
    JOB TIME   : 1.11 s
C
Cleber Rosa 已提交
489

A
Amador Pahim 已提交
490 491 492
The test directories will vary depending on you system and installation
method used. Still, it's pretty easy to find that out as shown in the
next section.
C
Cleber Rosa 已提交
493

494 495 496
DEBUGGING TESTS
===============

A
Amador Pahim 已提交
497 498 499 500
When you are developing new tests, frequently you want to look at the
straight output of the job log in the stdout, without having to tail the
job log. In order to do that, you can use --show-job-log to the avocado
test runner::
501 502

    $ scripts/avocado run examples/tests/sleeptest.py --show-job-log
A
Amador Pahim 已提交
503 504 505 506
    ...
    PARAMS (key=timeout, path=*, default=None) => None
    START 1-sleeptest.py:SleepTest.test
    PARAMS (key=sleep_length, path=*, default=1) => 1
507 508
    Sleeping for 1.00 seconds
    Not logging /var/log/messages (lack of permissions)
A
Amador Pahim 已提交
509 510
    PASS 1-sleeptest.py:SleepTest.test
    ...
511

A
Amador Pahim 已提交
512 513 514 515
Let's say you are debugging a test particularly large, with lots of
debug output and you want to reduce this output to only messages with
level 'INFO' and higher. You can set job-log-level to info to reduce the
amount of output.
516

517 518 519 520 521 522 523 524
Edit your `~/.config/avocado/avocado.conf` file and add::

    [job.output]
    loglevel = info

Running the same example with this option will give you::

    $ scripts/avocado run sleeptest --show-job-log
A
Amador Pahim 已提交
525 526 527 528
    ...
    START 1-sleeptest.py:SleepTest.test
    PASS 1-sleeptest.py:SleepTest.test
    ...
529

A
Amador Pahim 已提交
530 531 532 533
The levels you can choose are the levels available in the python logging
system `https://docs.python.org/2/library/logging.html#logging-levels`,
translated to lowercase strings, so 'notset', 'debug', 'info',
'warning', 'error', 'critical', in order of severity.
534

535 536 537
As you can see, the UI output is suppressed and only the job log goes to
stdout, making this a useful feature for test development/debugging.

538 539 540
SILENCING RUNNER STDOUT
=======================

A
Amador Pahim 已提交
541 542 543 544 545
You may specify `--silent`, that means avocado will turn off all runner
stdout. Even if you specify things like `--show-job-log` in the CLI,
`--silent` will have precedence and you will not get application stdout.
Note that `--silent` does not affect on disk job logs, those continue to
be generated normally.
546

547 548 549 550
SILENCING SYSINFO REPORT
========================

You may specify --sysinfo=off and avocado will not collect profilers,
A
Amador Pahim 已提交
551 552
hardware details and other system information, inside the job result
directory.
553

C
Cleber Rosa 已提交
554 555 556
LISTING TESTS
=============

A
Amador Pahim 已提交
557 558 559 560 561 562
The `avocado` command line tool also has a `list` command, that lists
the known tests in a given path, be it a path to an individual test, or
a path to a directory. If no arguments provided, avocado will inspect
the contents of the test location being used by avocado (if you are in
doubt about which one is that, you may use `avocado config --datadir`).
The output looks like::
563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585

    $ avocado list
    INSTRUMENTED /usr/share/avocado/tests/abort.py
    INSTRUMENTED /usr/share/avocado/tests/datadir.py
    INSTRUMENTED /usr/share/avocado/tests/doublefail.py
    INSTRUMENTED /usr/share/avocado/tests/doublefree.py
    INSTRUMENTED /usr/share/avocado/tests/errortest.py
    INSTRUMENTED /usr/share/avocado/tests/failtest.py
    INSTRUMENTED /usr/share/avocado/tests/fiotest.py
    INSTRUMENTED /usr/share/avocado/tests/gdbtest.py
    INSTRUMENTED /usr/share/avocado/tests/gendata.py
    INSTRUMENTED /usr/share/avocado/tests/linuxbuild.py
    INSTRUMENTED /usr/share/avocado/tests/multiplextest.py
    INSTRUMENTED /usr/share/avocado/tests/passtest.py
    INSTRUMENTED /usr/share/avocado/tests/skiptest.py
    INSTRUMENTED /usr/share/avocado/tests/sleeptenmin.py
    INSTRUMENTED /usr/share/avocado/tests/sleeptest.py
    INSTRUMENTED /usr/share/avocado/tests/synctest.py
    INSTRUMENTED /usr/share/avocado/tests/timeouttest.py
    INSTRUMENTED /usr/share/avocado/tests/trinity.py
    INSTRUMENTED /usr/share/avocado/tests/warntest.py
    INSTRUMENTED /usr/share/avocado/tests/whiteboard.py

A
Amador Pahim 已提交
586 587 588 589 590
Here, `INSTRUMENTED` means that the files there are python files with an
avocado test class in them, therefore, that they are what we call
instrumented tests. This means those tests can use all avocado APIs and
facilities. Let's try to list a directory with a bunch of executable
shell scripts::
591 592 593 594 595 596 597 598 599

    $ avocado list examples/wrappers/
    SIMPLE examples/wrappers/dummy.sh
    SIMPLE examples/wrappers/ltrace.sh
    SIMPLE examples/wrappers/perf.sh
    SIMPLE examples/wrappers/strace.sh
    SIMPLE examples/wrappers/time.sh
    SIMPLE examples/wrappers/valgrind.sh

A
Amador Pahim 已提交
600 601 602 603 604
Here, `SIMPLE` means that those files are executables, that avocado will
simply execute and return PASS or FAIL depending on their return codes
(PASS -> 0, FAIL -> any integer different than 0). You can also provide
the `--verbose`, or `-V` flag to display files that were detected but
are not avocado tests, along with summary information::
605 606

    $ avocado list examples/gdb-prerun-scripts/ -V
607
    Type       Test                                     Tag(s)
608 609 610 611 612 613 614 615
    NOT_A_TEST examples/gdb-prerun-scripts/README
    NOT_A_TEST examples/gdb-prerun-scripts/pass-sigusr1

    SIMPLE: 0
    INSTRUMENTED: 0
    MISSING: 0
    NOT_A_TEST: 2

A
Amador Pahim 已提交
616 617 618
That summarizes the basic commands you should be using more frequently
when you start with avocado. Let's talk now about how avocado stores
test results.
C
Cleber Rosa 已提交
619 620 621 622 623 624

EXPLORING RESULTS
=================

When `avocado` runs tests, it saves all its results on your system::

A
Amador Pahim 已提交
625 626
    JOB ID    : <id>
    JOB LOG   : /home/<user>/avocado/job-results/job-<date>-<shortid>/job.log
C
Cleber Rosa 已提交
627 628

For your convenience, `avocado` maintains a link to the latest job run
A
Amador Pahim 已提交
629 630
(an `avocado run` command in this context), so you can always use
`"latest"` to browse your test results::
C
Cleber Rosa 已提交
631

A
Amador Pahim 已提交
632 633 634 635 636 637 638 639 640
    $ ls /home/<user>/avocado/job-results/latest
    id
    jobdata
    job.log
    results.json
    results.tap
    results.xml
    sysinfo
    test-results
C
Cleber Rosa 已提交
641

A
Amador Pahim 已提交
642 643
The main log file is `job.log`, but every test has its own results
directory::
C
Cleber Rosa 已提交
644

A
Amador Pahim 已提交
645 646
    $ ls -1 ~/avocado/job-results/latest/test-results/
    1-sleeptest.py:SleepTest.test
C
Cleber Rosa 已提交
647 648 649

Since this is a directory, it should have content similar to::

A
Amador Pahim 已提交
650 651 652 653 654 655 656 657
    $ ls -1 ~/avocado/job-results/latest/test-results/1-sleeptest.py\:SleepTest.test/
    data
    debug.log
    remote.log
    stderr
    stdout
    sysinfo
    whiteboard
C
Cleber Rosa 已提交
658 659 660 661

MULTIPLEX
=========

A
Amador Pahim 已提交
662 663 664 665
Avocado has a powerful tool that enables multiple test scenarios to be
run using a single, unmodified test. This mechanism uses a YAML file
called the 'multiplex file', that tells avocado how to multiply all
possible test scenarios automatically.
C
Cleber Rosa 已提交
666 667

A command by the same name, `multiplex`, is available on the `avocado`
A
Amador Pahim 已提交
668 669
command line tool, and enables you to see all the test scenarios that
can be run::
C
Cleber Rosa 已提交
670

A
Amador Pahim 已提交
671 672
    $ avocado multiplex -m examples/tests/sleeptest.py.data/sleeptest.yaml -c
    Variants generated:
673

A
Amador Pahim 已提交
674 675
    Variant 1:    /run/short
        /run/short:sleep_length => 0.5
676

A
Amador Pahim 已提交
677 678
    Variant 2:    /run/medium
        /run/medium:sleep_length => 1
679

A
Amador Pahim 已提交
680 681
    Variant 3:    /run/long
        /run/long:sleep_length => 5
682

A
Amador Pahim 已提交
683 684
    Variant 4:    /run/longest
        /run/longest:sleep_length => 10
685

A
Amador Pahim 已提交
686 687 688 689
This is a sample that varies the parameter `sleep_length` through the
scenarios ``/run/short`` (sleeps for 0.5 s), ``/run/medium`` (sleeps for
1 s), ``/run/long`` (sleeps for 5s), ``/run/longest`` (sleeps for 10s).
The YAML file (multiplex file) that produced the output above is::
690

A
Amador Pahim 已提交
691 692 693 694 695 696 697 698 699
    !mux
    short:
        sleep_length: 0.5
    medium:
        sleep_length: 1
    long:
        sleep_length: 5
    longest:
        sleep_length: 10
C
Cleber Rosa 已提交
700

A
Amador Pahim 已提交
701
You can execute `sleeptest` in all variations exposed above with::
702

A
Amador Pahim 已提交
703
    $ avocado run sleeptest.py -m examples/tests/sleeptest.py.data/sleeptest.yaml
C
Cleber Rosa 已提交
704 705 706

And the output should look like::

A
Amador Pahim 已提交
707 708 709 710 711 712 713
    JOB ID    : <id>
    JOB LOG   : /home/<user>/avocado/job-results/job-<date>-<shortid>/job.log
     (1/4) sleeptest.py:SleepTest.test;1: PASS (0.51 s)
     (2/4) sleeptest.py:SleepTest.test;2: PASS (1.01 s)
     (3/4) sleeptest.py:SleepTest.test;3: PASS (5.02 s)
     (4/4) sleeptest.py:SleepTest.test;4: PASS (10.01 s)
    RESULTS    : PASS 4 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0
714
    JOB TIME   : 16.65 s
715 716

The `multiplex` plugin and the test runner supports two kinds of global
A
Amador Pahim 已提交
717 718 719 720
filters, through the command line options `--mux-filter-only` and
`--mux-filter-out`.
The `mux-filter-only` exclusively includes one or more paths and the
`mux-filter-out` removes one or more paths from being processed.
721

A
Amador Pahim 已提交
722 723
From the previous example, if we are interested to use the variants
`/run/medium` and `/run/longest`, we do the following command line::
724

A
Amador Pahim 已提交
725 726
    $ avocado run sleeptest.py -m examples/tests/sleeptest.py.data/sleeptest.yaml \
          --mux-filter-only /run/medium /run/longest
727 728 729 730

And if you want to remove `/small` from the variants created,
we do the following::

A
Amador Pahim 已提交
731 732
    $ avocado run sleeptest.py -m examples/tests/sleeptest.py.data/sleeptest.yaml \
          --mux-filter-out /run/medium
733

A
Amador Pahim 已提交
734 735
Note that both `--mux-filter-only` and `--mux-filter-out` filters can be
arranged in the same command line.
736

A
Amador Pahim 已提交
737 738 739 740 741 742
The multiplexer also supports default paths. The base path is ``/run/*``
but it can be overridden by ``--mux-path``, which accepts multiple
arguments. What it does: it splits leaves by the provided paths. Each
query goes one by one through those sub-trees and first one to hit the
match returns the result. It might not solve all problems, but it can
help to combine existing YAML files with your ones::
743

A
Amador Pahim 已提交
744
    qa: # large and complex read-only file, content injected into /qa
745 746 747
        tests:
            timeout: 10
        ...
A
Amador Pahim 已提交
748
    my_variants: !mux # your YAML file injected into /my_variants
749 750 751 752 753
        short:
            timeout: 1
        long:
            timeout: 1000

A
Amador Pahim 已提交
754 755 756
You want to use an existing test which uses
``params.get('timeout', '*')``.  Then you can use
``--mux-path '/my_variants/*' '/qa/*'`` and it'll first look in your
757 758
variants. If no matches are found, then it would proceed to ``/qa/*``

A
Amador Pahim 已提交
759 760
Keep in mind that only slices defined in mux-path are taken into account
for relative paths (the ones starting with ``*``).
C
Cleber Rosa 已提交
761

762 763
DEBUGGING EXECUTABLES RUN AS PART OF A TEST
===========================================
764 765

One interesting avocado feature is the ability to automatically and
766
transparently run executables that are used on a given test inside the
767 768 769 770 771 772 773 774
GNU debugger.

Suppose you are running a test that uses an external, compiled, image
converter. Now suppose you're feeding it with different types of images,
including broken image files, and it fails at a given point. You wish
you could connect to the debugger at that given source location while
your test is running. This is how to do just that with avocado::

A
Amador Pahim 已提交
775
    $ avocado run --gdb-run-bin=convert:convert_ppm_to_raw converttest.py
776 777 778

The job starts running just as usual, and so does your test::

A
Amador Pahim 已提交
779 780 781 782
    JOB ID    : <id>
    JOB LOG   : /home/<user>/avocado/job-results/job-<date>-<shortid>/job.log
    TESTS     : 1
     (1/1) converttest.py:ConvertTest.test: /
783

A
Amador Pahim 已提交
784 785
The `convert` executable though, automatically runs inside GDB. Avocado
will stop when the given breakpoint is reached::
786

A
Amador Pahim 已提交
787 788
    TEST PAUSED because of debugger breakpoint. To DEBUG your application run:
    /home/<user>/avocado/job-results/job-<date>-<shortid>/test-results/converttest.py/data/convert.gdb.sh
789

A
Amador Pahim 已提交
790
    NOTE: please use *disconnect* command in gdb before exiting, or else the debugged process will be KILLED
791 792 793 794

From this point, you can run the generated script (`convert.gdb.sh`) to
debug you application.

A
Amador Pahim 已提交
795 796 797 798
As noted, it is strongly recommended that you *disconnect* from gdb
while your executable is still running. That is, if the executable
finished running while you are debugging it, avocado has no way to know
about its status.
799 800 801 802

Avocado will automatically send a `continue` command to the debugger
when you disconnect from and exit gdb.

803
If, for some reason you have a custom GDB, or your system does not put
A
Amador Pahim 已提交
804 805 806
GDB on what avocado believes to be the standard location
(`/usr/bin/gdb`), you can override that in the section `gdb.paths` of
your documentation::
807

808 809 810
    [gdb.paths]
    gdb = /usr/bin/gdb
    gdbserver = /usr/bin/gdbserver
811

A
Amador Pahim 已提交
812 813
So running avocado after setting those will use the appropriate
gdb/gdbserver path.
814

A
Amador Pahim 已提交
815 816 817
If you are debugging a special application and need to setup GDB in
custom ways by running GDB commands, you can do that with the
`--gdb-prerun-commands` option::
818

A
Amador Pahim 已提交
819
    $ avocado run --gdb-run-bin=foo:bar --gdb-prerun-commands=/tmp/disable-signals footest.py
820

A
Amador Pahim 已提交
821 822
In this example, `/tmp/disable-signals` is a simple text file containing
two lines::
823

A
Amador Pahim 已提交
824 825
    signal SIGUSR1 pass
    signal SIGUSR1 nostop
826 827

Each line is a GDB command, so you can have from simple to very complex
828
debugging environments configured like that.
829

830 831
WRAP EXECUTABLE RUN BY TESTS
============================
832

833 834 835
Avocado allows the instrumentation of executables being run by a test
in a transparent way. The user specifies a script ("the wrapper") to be
used to run the actual program called by the test.
836

837 838 839 840
If the instrumentation script is implemented correctly, it should not
interfere with the test behavior. That is, the wrapper should avoid
changing the return status, standard output and standard error messages
of the original executable.
841

A
Amador Pahim 已提交
842 843
The user can be specific about which program to wrap (with a shell-like
glob), or if that is omitted, a global wrapper that will apply to all
844
programs called by the test.
845

846 847 848
So, for every executable run by the test, the program name will be
compared to the pattern to decide whether to wrap it or not. You can
have multiples wrappers and patterns defined.
849 850 851

Examples::

A
Amador Pahim 已提交
852
    $ avocado run datadir.py --wrapper examples/wrappers/strace.sh
853

A
Amador Pahim 已提交
854 855
Any command created by the test datadir will be wrapped on
``strace.sh``. ::
856

A
Amador Pahim 已提交
857 858
    $ avocado run datadir.py --wrapper examples/wrappers/ltrace.sh:*make \
                             --wrapper examples/wrappers/perf.sh:*datadir
859

A
Amador Pahim 已提交
860 861 862
Any command that matches the pattern `*make` will be wrapper on
``ltrace.sh`` and the pattern ``*datadir`` will trigger the execution of
``perf.sh``.
863

A
Amador Pahim 已提交
864 865
Note that it is not possible to use ``--gdb-run-bin`` together with
``--wrapper``, they are incompatible.
866

867 868
RUNNING TESTS WITH AN EXTERNAL RUNNER
=====================================
C
Cleber Rosa 已提交
869 870 871 872 873 874 875 876 877 878 879

It's quite common to have organically grown test suites in most
software projects. These usually include a custom built, very specific
test runner that knows how to find and run their own tests.

Still, running those tests inside Avocado may be a good idea for
various reasons, including being able to have results in different
human and machine readable formats, collecting system information
alongside those tests (the Avocado's `sysinfo` functionality), and
more.

A
Amador Pahim 已提交
880 881
Avocado makes that possible by means of its "external runner" feature.
The most basic way of using it is::
C
Cleber Rosa 已提交
882

883
    $ avocado run --external-runner=/path/to/external_runner foo bar baz
C
Cleber Rosa 已提交
884 885 886

In this example, Avocado will report individual test results for tests
`foo`, `bar` and `baz`. The actual results will be based on the return
887
code of individual executions of `/path/to/external_runner foo`,
A
Amador Pahim 已提交
888 889
`/path/to/external_runner bar` and finally
`/path/to/external_runner baz`.
C
Cleber Rosa 已提交
890 891

As another way to explain an show how this feature works, think of the
A
Amador Pahim 已提交
892 893
"external runner" as some kind of interpreter and the individual tests
as anything that this interpreter recognizes and is able to execute. A
894
UNIX shell, say `/bin/sh` could be considered an external runner, and
C
Cleber Rosa 已提交
895 896 897 898
files with shell code could be considered tests::

    $ echo "exit 0" > /tmp/pass
    $ echo "exit 1" > /tmp/fail
899
    $ avocado run --external-runner=/bin/sh /tmp/pass /tmp/fail
A
Amador Pahim 已提交
900 901
    JOB ID    : <id>
    JOB LOG   : /home/<user>/avocado/job-results/job-<date>-<shortid>/job.log
C
Cleber Rosa 已提交
902 903 904 905
    TESTS      : 2
    (1/2) /tmp/pass: PASS (0.01 s)
    (2/2) /tmp/fail: FAIL (0.01 s)
    RESULTS    : PASS 1 | ERROR 0 | FAIL 1 | SKIP 0 | WARN 0 | INTERRUPT 0
906
    JOB TIME   : 0.11 s
C
Cleber Rosa 已提交
907 908 909 910 911 912 913 914

This example is pretty obvious, and could be achieved by giving
`/tmp/pass` and `/tmp/fail` shell "shebangs" (`#!/bin/sh`), making
them executable (`chmod +x /tmp/pass /tmp/fail)`, and running them as
"SIMPLE" tests.

But now consider the following example::

915
    $ avocado run --external-runner=/bin/curl http://local-avocado-server:9405/jobs/ \
A
Amador Pahim 已提交
916 917 918
                                              http://remote-avocado-server:9405/jobs/
    JOB ID    : <id>
    JOB LOG   : /home/<user>/avocado/job-results/job-<date>-<shortid>/job.log
C
Cleber Rosa 已提交
919 920 921 922
    TESTS      : 2
    (1/2) http://local-avocado-server:9405/jobs/: PASS (0.02 s)
    (2/2) http://remote-avocado-server:9405/jobs/: FAIL (3.02 s)
    RESULTS    : PASS 1 | ERROR 0 | FAIL 1 | SKIP 0 | WARN 0 | INTERRUPT 0
923
    JOB TIME   : 3.14 s
C
Cleber Rosa 已提交
924

A
Amador Pahim 已提交
925 926 927
This effectively makes `/bin/curl` an "external test runner",
responsible for trying to fetch those URLs, and reporting PASS or FAIL
for each of them.
928

929 930 931
RECORDING TEST REFERENCE OUTPUT
===============================

A
Amador Pahim 已提交
932 933 934 935 936 937
As a tester, you may want to check if the output of a given application
matches an expected output. In order to help with this common use case,
we offer the option ``--output-check-record [mode]`` to the test runner.
If this option is used, it will store the stdout or stderr of the
process (or both, if you specified ``all``) being executed to reference
files: ``stdout.expected`` and ``stderr.expected``.
938

A
Amador Pahim 已提交
939 940 941 942
Those files will be recorded in the test data dir. The data dir is in
the same directory as the test source file, named
``[source_file_name.data]``. Let's take as an example the test
``synctest.py``. In a fresh checkout of avocado, you can see::
943 944 945 946 947 948 949 950 951 952

        examples/tests/synctest.py.data/stderr.expected
        examples/tests/synctest.py.data/stdout.expected

From those 2 files, only stdout.expected is non empty::

    $ cat examples/tests/synctest.py.data/stdout.expected
    PAR : waiting
    PASS : sync interrupted

A
Amador Pahim 已提交
953 954
The output files were originally obtained using the test runner and
passing the option --output-check-record all to the test runner::
955 956 957 958

    $ avocado run --output-check-record all examples/tests/synctest.py
    JOB ID    : <id>
    JOB LOG   : /home/<user>/avocado/job-results/job-<date>-<shortid>/job.log
A
Amador Pahim 已提交
959
     (1/1) examples/tests/synctest.py:SyncTest.test: PASS (4.00 s)
960
    RESULTS    : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0
961
    JOB TIME   : 4.10 s
A
Amador Pahim 已提交
962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979

After the reference files are added, the check process is transparent,
in the sense that you do not need to provide special flags to the test
runner. Now, every time the test is executed, after it is done running,
it will check if the outputs are exactly right before considering the
test as PASSed. If you want to override the default behavior and skip
output check entirely, you may provide the flag ``--output-check=off``
to the test runner.

The ``avocado.utils.process`` APIs have a parameter
``allow_output_check`` (defaults to ``all``), so that you can select
which process outputs will go to the reference files, should you chose
to record them. You may choose ``all``, for both stdout and stderr,
``stdout``, for the stdout only, ``stderr``, for only the stderr only,
or ``none``, to allow neither of them to be recorded and checked.

This process works fine also with simple tests, executables that return
0 (PASSed) or != 0 (FAILed). Let's consider our bogus example::
980 981 982 983 984 985 986 987 988 989 990

    $ cat output_record.sh
    #!/bin/bash
    echo "Hello, world!"

Let's record the output (both stdout and stderr) for this one::

    $ avocado run output_record.sh --output-check-record all
    JOB ID    : <id>
    JOB LOG   : /home/<user>/avocado/job-results/job-<date>-<shortid>/job.log
    TESTS     : 1
991
    (1/1) home/$USER/Code/avocado/output_record.sh: PASS (0.01 s)
992
    RESULTS    : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0
993
    JOB TIME   : 0.11 s
994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007

After this is done, you'll notice that a the test data directory
appeared in the same level of our shell script, containing 2 files::

    $ ls output_record.sh.data/
    stderr.expected  stdout.expected

Let's look what's in each of them::

    $ cat output_record.sh.data/stdout.expected
    Hello, world!
    $ cat output_record.sh.data/stderr.expected
    $

A
Amador Pahim 已提交
1008 1009
Now, every time this test runs, it'll take into account the expected
files that were recorded, no need to do anything else but run the test.
1010

1011 1012 1013
RUNNING REMOTE TESTS
====================

A
Amador Pahim 已提交
1014 1015 1016 1017
Avocado allows you to execute tests on a remote machine by means of a
SSH network connection. The remote machine must be configured to accept
remote connections and the Avocado framework have to be installed in
both origin and remote machines.
1018

A
Amador Pahim 已提交
1019 1020 1021 1022
When running tests on remote machine, the test sources and its data (if 
any present) are transferred to the remote target, just before the test
execution. After the test execution, all test results are transferred 
back to the origin machine.
1023 1024 1025 1026 1027

Here is how to run the sleeptest example test in a remote machine with IP
address 192.168.0.123 (standard port 22), remote user name `fedora` and
remote user password `123456`::

A
Amador Pahim 已提交
1028
    $ avocado run sleeptest.py --remote-hostname 192.168.0.123 --remote-username fedora --remote-password 123456
1029 1030 1031

The output should look like::

A
Amador Pahim 已提交
1032 1033 1034 1035 1036
    JOB ID    : <id>
    JOB LOG   : /home/<user>/avocado/job-results/job-<date>-<shortid>/job.log
    LOGIN      : fedora@localhost:22 (TIMEOUT: 60 seconds)
     (1/1) sleeptest.py:SleepTest.test: PASS (1.02 s)
    RESULTS    : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0
1037
    JOB TIME   : 1.12 s
1038 1039 1040 1041

For more information, please consult the topic Remote Machine Plugin
on Avocado's online documentation.

1042 1043 1044
LINUX DISTRIBUTION UTILITIES
============================

A
Amador Pahim 已提交
1045 1046 1047
Avocado has some planned features that depend on knowing the Linux
Distribution being used on the system. The most basic command prints the
detected Linux Distribution::
1048

A
Amador Pahim 已提交
1049 1050
    $ avocado distro
    Detected distribution: fedora (x86_64) version 21 release 0
1051

A
Amador Pahim 已提交
1052 1053
Other features are available with the same command when command line
options are given, as shown by the `--help` option.
1054

A
Amador Pahim 已提交
1055 1056 1057 1058
For instance, it possible to create a so-called "Linux Distribution
Definition" file, by inspecting an installation tree. The installation
tree could be the contents of the official installation ISO or a local
network mirror.
1059

A
Amador Pahim 已提交
1060 1061 1062 1063 1064
These files let Avocado pinpoint if a given installed package is part of
the original Linux Distribution or something else that was installed
from an external repository or even manually. This, in turn, can help
detecting regressions in base system pacakges that affected a given test
result.
1065 1066 1067

To generate a definition file run::

A
Amador Pahim 已提交
1068 1069 1070
    $ avocado distro --distro-def-create --distro-def-name avocadix  \
                     --distro-def-version 1 --distro-def-arch x86_64 \
                     --distro-def-type rpm --distro-def-path /mnt/dvd
1071 1072 1073

And the output will be something like::

A
Amador Pahim 已提交
1074 1075
    Loading distro information from tree... Please wait...
    Distro information saved to "avocadix-1-x86_64.distro"
1076

1077

C
Cleber Rosa 已提交
1078 1079 1080 1081 1082
FILES
=====

::

A
Amador Pahim 已提交
1083 1084 1085 1086 1087 1088 1089 1090
    System wide configuration file
        /etc/avocado/avocado.conf

    Extra configuration files
        /etc/avocado/conf.d/

    User configuration file
        ~/.config/avocado/avocado.conf
C
Cleber Rosa 已提交
1091 1092 1093 1094

BUGS
====

A
Amador Pahim 已提交
1095 1096
If you find a bug, please report it over our github page as an issue:
`https://github.com/avocado-framework/avocado/issues`
C
Cleber Rosa 已提交
1097

1098
LICENSE
L
Lucas Meneghel Rodrigues 已提交
1099
=======
1100 1101

Avocado is released under GPLv2 (explicit version)
A
Amador Pahim 已提交
1102 1103 1104 1105 1106
`http://gnu.org/licenses/gpl-2.0.html`. Even though most of the current
code is licensed under a "and any later version" clause, some parts are
specifically bound to the version 2 of the license and therefore that's
the official license of the prject itself. For more details, please see
the LICENSE file in the project source code directory.
1107

C
Cleber Rosa 已提交
1108 1109 1110
MORE INFORMATION
================

1111 1112 1113
For more information please check Avocado's project website, located at
`http://avocado-framework.github.io/`. There you'll find links to online
documentation, source code and community resources.
C
Cleber Rosa 已提交
1114 1115 1116 1117

AUTHOR
======

1118
Avocado Development Team <avocado-devel@redhat.com>