Provided by: plainbox_0.25-1_all bug

NAME

       plainbox-run - run a test job

SYNOPSIS

          plainbox run [-h] [--non-interactive] [-n] [--dont-suppress-output]
                       [-f FORMAT] [-p OPTIONS] [-o FILE] [-t TRANSPORT]
                       [--transport-where WHERE] [--transport-options OPTIONS]
                       [-T TEST-PLAN-ID] [-i PATTERN] [-x PATTERN] [-w WHITELIST]

DESCRIPTION

       Run a test job

       This  command  runs  zero or more Plainbox jobs as a part of a single session and saves the test results.
       Plainbox will follow the following high-level algorithm during the execution of this command.

       1. Parse command line arguments and look if there's a session that can be resumed (see  RESUMING  below).
          If  so, offer the user a choice to resume that session. If the resume operation fails move to the next
          qualifying session. Finally offer to create a new session.

       2. If the session is being resumed, replay the effects of the session execution from the  on-disk  state.
          This  recreates  generated  jobs and re-introduces the same resources into the session state. In other
          words, no jobs that have run in the past are re-ran.

          If the resumed session was about to execute a job then  offer  to  skip  the  job.  This  allows  test
          operators to skip jobs that have caused the system to crash in the past (e.g. system suspend tests)

          If the session is not being resumed (a new session was created), set the incomplete flag.

       3. Use  the job selection (see SELECTING JOBS below) to derive the run list. This step involves resolving
          job dependencies and reordering jobs if required.

       4. Follow the run list, executing each job in sequence if possible.  Jobs can be inhibited from execution
          by failed dependencies or failed (evaluating to non-True result) resource expressions.

          If at any time a new job is being re-introduced into the system (see GENERATED JOBS  below)  then  the
          loop is aborted and control jumps back to step 3 to re-select jobs. Existing results are not discarded
          so jobs that already have some results are not executed again.

          Before  and  after  executing  any job the session state is saved to disk to allow resuming from a job
          that somehow crashes the system or crashes Plainbox itself.

       5. Remove the incomplete flag.

       6. Export the state of the session to the desired format (see EXPORTING  RESULTS)  and  use  the  desired
          transport to send the results (see TRANSPORTING RESULTS).

       7. Set the submitted flag.

   SELECTING JOBS
       Plainbox  offers  two  mechanisms for selecting jobs. Both can be used at the same time, both can be used
       multiple times.

   Selecting jobs with patterns
       The first mechanism is exposed through the --include-pattern PATTERN command-line  option.  It  instructs
       Plainbox to select any job whose fully-qualified identifier matches the regular expression PATTERN.

       Jobs  selected  this  way will be, if possible, ordered according to the order of command line arguments.
       For example, having the following command line would run the job foo before running the job bar:
          plainbox run -i '.*::foo' -i '.*::bar'

   Selecting jobs with whitelists
       The second mechanism is the --whitelist WHITELIST command-line option.  WhiteLists (or test plans,  which
       is  somewhat  easier  to  relate  to).   Whitelists  are  simple text files composed of a list of regular
       expressions, identical to those that may be passed with the -i option.

       Unlike the -i option though, there are two kinds of whitelists.  Standalone whitelists are not associated
       with any Plainbox Provider.  Such whitelists can  be  distributed  entirely  separately  from  any  other
       component and thus have no association with any namespace.

       Therefore,  be  fully  qualified, each pattern must include both the namespace and the partial identifier
       components. For example, this is a valid, fully quallified whitelist:

          2013.com.canonical.plainbox::stub/.*

       It will unambiguously select some of the jobs from the special, internal StubBox provider that  is  built
       into  Plainbox.  It can be saved under any filename and stored in any directory and it will always select
       the same set of jobs.

       In contrast, whitelists that  are  associated  with  a  particular  provider,  by  being  stored  in  the
       per-provider  whitelists/  directory,  carry an implicit namespace. Such whitelists are typically written
       without mentioning the namespace component.

       For example, the same "stub/.*" pattern can be abbreviated to:

          stub/.*

       Typically this syntax is used in all whitelists specific to a particular  provider  unless  the  provider
       maintainer  explicitly  wants to include a job from another namespace (for example, one of the well-known
       Checkbox job definitions).

   GENERATED JOBS
       Plainbox offers a way to generate jobs at runtime. There are two motivations for this feature.

   Instantiating Tests for Multiple Devices
       The classic example is to probe the hardware (for example, to enumerate all  storage  devices)  and  then
       duplicate each of the store specific tests so that all devices are tested separately.

       At  this  time  jobs  can  be generated only from jobs using the plugin type local. Jobs of this kind are
       expected to print fully conforming job definitions on stdout. Generated jobs cause a few complexities and
       one limitation that is currently enforced is that generated jobs cannot generate additional jobs  if  any
       of the affected jobs need to run as another user.

       Another limitation is that jobs cannot override existing definitions.

   Creating Parent-Child Association
       A  relatively  niche  and  legacy  feature  of generated jobs is to print a verbatim copy of existing job
       definitions from a local job definition named afer a generic testing theme or category. For  example  the
       Checkbox job definition __wireless__ prints, with the help of cat (1), all of the job definitions defined
       in the file wireless.txt.

       This  behavior  is special-cased not to cause redefinition errors. Instead, existing definitions gain the
       via attribute that links them to the generator job. This feature is used by derivative  application  such
       as Checkbox. Plainbox is not using it at this time.

   RESUMING
       Plainbox  offers  a  session  resume  functionality  whereas  a  session  that  was  interrupted  (either
       purposefully or due to a malfunction) can be resumed and effectively continued where it was left off.

       When resuming a session you may be given an option to either re-run, pass, fail or skip the test job that
       was being executed before the session was interrupted. This is intended to handle both normal situations,
       such as a "system reboot test" where it is perfectly fine to  "pass"  the  test  without  re-running  the
       command. In addition it can be used to handle anomalous cases where the machine misbehaves and re-running
       the same test would cause the problem to occur again indefinitely.

   Limitations
       This functionality does not allow to interrupt and resume a test job that is already being executed. Such
       job will be restarted from scratch.

       Plainbox  tries  to ensure that a single session is consistent and the assumptions that held at the start
       of the session are maintained at the end. To that end, Plainbox will try to ensure that  job  definitions
       have not changed between two separate invocations that worked with a single session.  If such a situation
       is detected the session will not be resumed.

   EXPORTING RESULTS
       Plainbox  offers  a way to export the internal state of the session into a more useful format for further
       processing.

   Selecting Exporters
       The exporter can be selected using the --output-format FORMAT command-line option. A  list  of  available
       exporters  (which  may  include  3rd  party  exporters)  can be obtained by passing the --output-format ?
       option.

       Some formats are more useful than others in that they are capable of transferring more  of  the  internal
       state. Depending on your application you may wish to choose the most generic format (json) and process it
       further  with  additional  tools, choose the most basic format (text) just to get a simple summary of the
       results or lastly choose one of the two specialized formats (xml and  html)  that  are  specific  to  the
       Checkbox workflow.

       Out of the box the following exporters are supported:

   html
       This exporter creates a static HTML page with human-readable test report.  It is useful for communicating
       with other humans and since it is entirely standalone and off-line it can be sent by email or archived.

   json
       This  exporter  creates  a JSON document with the internal representation of the session state. It is the
       most versatile exporter and it is useful  and  easy  for  further  processing.  It  is  not  particularly
       human-readable  but  can  be quite useful for high-level debugging without having to use pdb and know the
       internals of Plainbox.

   rfc822
       This exporter creates quasi-RFC822 documents. It is rather limited and not used much. Still,  it  can  be
       useful in some circumstances.

   text
       This  is  the  default exporter. It simply prints a human-readable representation of test results without
       much detail. It discards nearly all of the internal state though.

   xlsx
       This exporter creates a  standalone  .xlsx  (XML  format  for  Microsoft  Excel)  file  that  contains  a
       human-readable  test report. It is quit similar to the HTML report but it is easier to edit. It is useful
       for communicating with other humans and since it is entirely standalone and off-line it can  be  sent  by
       email or archived.

       It depends on python3-xlsxwriter package

   hexr
       This  exporter  creates  a  rather  confusingly named XML document only applicable for internal Canonical
       Hardware Certification Team workflow.

       It is not a generic XML representation of test  results  and  instead  it  carries  quite  a  few  legacy
       constructs  that  are  only  retained  for  compatibility  with other internal tools. If you want generic
       processing look for JSON instead.

   Selecting Exporter Options
       Certain exporters offer a set of options that can further customize the exported data.  A  full  list  of
       options  available  for  each  exporter  can  be  obtained by passing the --output-options ? command-line
       option.

       Options may be specified as a comma-separated list. Some options act as simple flags, other  options  can
       take an argument with the option=value syntax.

       Known exporter options are documented below:

   json
       with-io-log:
              Exported  data  will  include  the  input/output  log associated with each job result. The data is
              included in its native three-tuple form unless one of the squash-io-log or flatten-io-log  options
              are used as well.

              IO  logs  are  representations  of the data produced by the process created from the shell command
              associated with some jobs.

       squash-io-log:
              When used together with with-io-log option it causes Plainbox  to  discard  the  stream  name  and
              time-stamp  and  just  include a list of base64-encoded binary strings. This option is more useful
              for reconstructing simple "log files"

       flatten-io-log:
              When used together with with-io-log option it causes Plainbox to concatenate all of  the  separate
              base64-encoded  records  into  one  large  base64-encoded  binary  string  representing  the whole
              communication that took place.

       with-run-list:
              Exported data will include the run list (sequence of jobs computed from the desired job list).

       with-job-list:
              Exported data will include the full list of jobs known to the system

       with-resource-map:
              Exported data will include the full resource map. Resources are records of key-value sets that are
              associated with each job result for jobs that have plugin type resource. They are expected  to  be
              printed to stdout by such resource jobs and are parsed and stored by Plainbox.

       with-job-defs:
              Exported  data  will  include  some  of  the properties of each job definition. Currently this set
              includes the following fields: plugin, requires, depends, command and description.

       with-attachments:
              Exported data will include attachments. Attachments are created from stdout  stream  of  each  job
              having plugin type attachment. The actual attachments are base64-encoded.

       with-comments:
              Exported data will include comments added by the test operator to each job result that has them.

       with-job-via:
              Exported data will include the via attribute alongside each job result. The via attribute contains
              the  checksum of the job definition that generated a particular job definition. This is useful for
              tracking jobs generated by jobs with the plugin type local.

       with-job-hash:
              Exported data will include the hash attribute alongside each job result. The hash attribute is the
              checksum of the job definition's data. It can be useful alongside with with-job-via.

       machine-json:
              The generated JSON document will be minimal (devoid of any optional whitespace).  This  option  is
              best to be used if the result is not intended to be read by humans as it saves some space.

   rfc822
       All  of  the  options  have  the  same  meaning  as  for  the  json exporter: with-io-log, squash-io-log,
       flatten-io-log,  with-run-list,  with-job-list,   with-resource-map,   with-job-defs,   with-attachments,
       with-comments,  with-job-via, with-job-hash.  The only exception is the machine-json option which doesn't
       exist for this exporter.

   text
       Same as with rfc822.

   xlsx
       with-sys-info:
              Exported spreadsheet will include a worksheet detailing  the  hardware  devices  based  on  lspci,
              lsusb, udev, etc.

       with-summary:
              Exported  spreadsheet  will  include test figures. This includes the percentage of tests that have
              passed, have failed, have been skipped and the total count.

       with-job-description:
              Exported spreadsheet will include job descriptions on a separate sheet

       with-text-attachments:
              Exported spreadsheet will include text attachments on a separate sheet

   xml
       client-name:
              This option allows clients to override the name of the application generating the XML document. By
              default that name is plainbox.  To use this option  pass  --output-options  client-name=other-name
              command-line option.

   TRANSPORTING RESULTS
       Exported  results  can  be  either  saved to a file (this is the most basic, default transport) or can be
       handed to one of the transport systems for further processing. The idea is  that  specialized  users  can
       provide  their  own  transport  systems (often coupled with a specific exporter) to move the test results
       from the system-under-test to a central testing result repository.

       Transport can be selected with the --transport  option.  Again,  as  with  exporters,  a  list  of  known
       transports  can  be obtained by passing the --transport ? option. Transports need a destination URL which
       can be specified with the --transport-where= option. The syntax of the URL varies by transport type.

       Plainbox comes equipped with the following transports:

   launchpad
       This transport can send the results exported using xml exporter to the Launchpad Hardware Database.  This
       is a little-known feature offered by the https://launchpad.net/ website.

   certification
       This  transport  can  send  the  results  exported  using the xml exporter to the Canonical Certification
       Website (https://certification.canonical.com).

       This transport is of little use to anyone  but  the  Canonical  Hardware  Certification  Team  that  also
       maintains Plainbox and Checkbox but it is mentioned here for completeness.

OPTIONS

       Optional arguments:

       --non-interactive
              skip tests that require interactivity

       -n, --dry-run
              don't really run most jobs

       --dont-suppress-output
              don't suppress the output of certain job plugin types

       -f, --output-format
              save test results in the specified FORMAT (pass ? for a list of choices)

       -p, --output-options
              comma-separated list of options for the export mechanism (pass ? for a list of choices)

       -o, --output-file
              save test results to the specified FILE (or to stdout if FILE is -)

       -t, --transport
              use TRANSPORT to send results somewhere (pass ? for a list of choices)

              Possible choices: ?

       --transport-where
              where to send data using the selected transport

       --transport-options
              comma-separated list of key-value options (k=v) to be passed to the transport

       -T, --test-plan
              load the specified test plan

       -i, --include-pattern
              include jobs matching the given regular expression

       -x, --exclude-pattern
              exclude jobs matching the given regular expression

       -w, --whitelist
              load whitelist containing run patterns

SEE ALSO

       plainbox-dev-analyze

AUTHOR

       Zygmunt Krynicki & Checkbox Contributors

COPYRIGHT

       2012-2014 Canonical Ltd

0.25                                            January 05, 2016                                 PLAINBOX-RUN(1)