FrontPage 

Fuego wiki

Login or create account

Release 1.4 Notes in 'raw' format

{{TableOfContents}}

These are the Release Notes for the Fuego 1.4 release, which we are calling "Ember".

= Major changes =
The major changes to Fuego in this release are as follows:
 * Added of clitest to Fuego distribution in the docker container
 * Added [[fuego_board_function_lib.sh]]
 * Added some new functions to core, for use by test programs:
   * [[function_log_this|log_this]]
   * [[function_report_live|report_live]]
   * [[function_assert_has_program|assert_has_program]]
   * [[function_is_abs_path|is_abs_path]]
 * Added (and used) [[FUEGO_LOGLEVELS]] to replace FUEGO_DEBUG
 * Did major cleanup of console log verbosity
 * Added new 'snapshot' phase of test execution
 * Converted Jenkins jobs to call ftc run-test
 * Added support for dynamic variables
 * Simplified install and start of container
 * PLATFORM was renamed to TOOLCHAIN
 * Added many new tests
   * at, bind, tar, etc.
 * Did many fixes and enhancements for existing tests

= Change details =
== clitest ==
clitest is a handy shell script for testing the results of command line
operations.  It is written purely in POSIX, so it can be used for both
host-side and board-side testing.

It is installed in /usr/local/bin in the Fuego docker container, and is
available for any tests that would like to use it.  To use it on the board
being tested, copy it to the board during the test's 'deploy' phase
(in test_deploy in the test's fuego_test.sh file), with a command line so:
 * put /usr/local/bin/clitest $BOARD_TESTDIR/fuego.$TESTDIR

Then use it in a command on the board (usually 'report'), like so:
 * report "cd $BOARD_TESTDIR/fuego.$TESTDIR ; ./clitest --prefix TAB cli-command-file"

== board utility functions ==
This release includes a new shell script which contains a
utility function library.  The script can be used by board-side
scripts, by first deploying it to the board, and then source-ing
it into your test script, and then calling one or more of the
functions.

This script contains a few functions for performing some
common operations in a distribution-independent way.
Use of this library is completely optional for a test.

You might be interested in using this library if you
have a board-side shell script that needs to:
 * 1) detect the type of init manager (proc 1) running on the board
 * 2) detect the type of logger service running on the board
 * 3) start or stop services on the board, as part of your test

To use this library, your fuego_test.sh script should copy the library
script to the board in the test_deploy function, and use it from a board-side
shell script (during the 'run' phase of the test).

See [[fuego_board_function_lib.sh]] for more details.

== new core functions ==
=== log_this ===
Some tests need to get information and data from host-side
operations, that needs to be reported and analyzed by Fuego.
    
The new [[function_log_this|log_this]] function captures the output of
commands executed on the host, and puts it (ultimately) into the test
log for a run. Any command executed with "log_this" is saved during test
execution, and placed in the final testlog.txt, after any board-side log
data (from report and report_append) commands.
    
There are a few tests (especially Fuego self-tests) that 
use this feature to avoid an awkward sequence of push-to-target,
and report-cat, to get log data from the host into the testlog.

=== report_live function ===
A new [[function_report_live|report_live]] function is available to
capture data directly from the test program on the target onto the
host.  The normal [[function_report|report]] function saves the test 
program output to a log file, which is retrieved after the test completes.
For some tests (e.g. tests that reboot the machine, or kexec into a new
kernel), it is not possible to save the data for the whole test
into a log on the target board.

The report_live function saves the data synchronously to the host,
and puts it into the test log during post-processing.

=== assert_has_program function ===
[[function_assert_has_program|assert_has_program]] is a Fuego core
function that can be used to express a test dependency on a program
on the board under test.  It combines several previous functions
into a more convenient single call.

=== is_abs_path function ===
[[function_is_abs_path|is_abs_path]] is a small helper function added
to the Fuego core library, for detecting if a path is absolute or not.


== FUEGO_LOGLEVELS feature ==
A new variable is used to control FUEGO message output.
[[FUEGO_LOGLEVELS]] was added, to replace the previous [[FUEGO_DEBUG]]
variable.

FUEGO_LOGLEVELS is more flexible than FUEGO_DEBUG, and easier to use,
since it is string-based instead of number-based.  FUEGO_LOGLEVELS
supports multiple levels of verbosity, all the way from 'debug'
to 'error'.  Finally, the new FUEGO_LOGLEVELS feature provide
functions for outputting messages at each verbosity level.

Please see the [[FUEGO_LOGLEVELS]] page for detailed information.

== log verbosity ==
In this release, there was a major cleanup of console log output, to
make it so that by default (at the default log level of 'info'), the
log is fairly sparse.  This is done so that the any messages
(particularly warnings) will be more apparent and draw the
attention of the Fuego user.

Many debug messages were moved to the 'debug' log level, and some
informational messages were moved to the 'verbose' log level.
Users can turn these on, if desired, by adjusting [[FUEGO_LOGLEVELS]].
Finally, some information that previously appeared in the log is
now placed in the snapshot file for a run.

The end result of this is that Fuego test execution is much 'quieter'. 
Most of the important machine status information for a run is still
available in the snapshot file (and is saved on every run,
independent of log level). Also, increased verbosity is still
available using a log level, if the user want's more details about
the steps and progress of a run, during test execution.

== snapshot feature ==
In this release, a new mechanism was introduced to save the status
information about the board for a test run.  Previously, the machine status
information was obtained during the pre_test phase, and appeared in the
console log.  Also, it was produced by a core Fuego function, always
producing the same results.

Now, this status information is obtained in a separate phase of execution,
and the operation can be overridden on a per-test or per-board basis.
See [[Board Snapshot]] for more details.

== ftc run-test ==
In this release, the format of Fuego-related Jenkins jobs was changed,
to execute tests from the Fuego command-line tool, 'ftc'.

Previously, Fuego created Jenkins jobs that included a call to 
``main.sh``.  However, in release 1.4, Fuego now creates Jenkins
jobs that call ``ftc run-test`` instead.  There should not be a noticeable
change in job execution behavior, but it is now possible to start a test
more easily from the command line.

One thing that was changed in 'ftc' was the addition of more flags
for the 'ftc run-test' command line, so that options that used to be
specified by environment variables can now be specified on the command line.


== dynamic variables ==
This release added support for dynamic test variables.  These are test
variables that can be specified on the 'ftc' command line, and override
the values of variables specified in the spec.json file.

The purpose of these is to support being able to support "variant" testing,
where a script can loop over a test multiple times, changing the variable
to different values.

The dynamic variables are expanded to full variables names that are prefixed
with the name of the test, during test execution.

Here is an example of using dynamic variables:

{{{#!YellowBox
 $ ftc run-test -b beaglebone -t Benchmark.Dhrystone --dynamic-vars "LOOPS=100000000"
}}}

This would override the default value for BENCHMARK_DHRYSTONE_LOOPS,
setting it to 100000000 (100 million) for this run.

This feature is intended to be useful for doing 'git bisect's of
a bug, passing a different git commit id for each iteration of the test.

See [[Test_variables#Dynamic_variables]] for more information.

== Install simplification ==
There were modifications made to the startup scripts for Fuego.
Previously, a sequence of 'install.sh', 'docker-create-container.sh' and
'docker-start-container.sh'.

This has been simplified to just 2 steps:
 * install.sh
 * start.sh

See [[Fuego Quickstart Guide]] and [[Installing Fuego]] for the
new instructions for bootstrapping Fuego.

== TOOLCHAIN board variable ==
The board variable TOOLCHAIN is now used in place of 'PLATFORM', in a
board file, to specify the toolchain that is used for building software
for a target board.

The PLATFORM variable is still supported for backwards compatibility, if
the TOOLCHAIN variable is not defined.
However, it's use is now deprecated.  Please adjust your board files
by converting PLATFORM to TOOLCHAIN in the files.

= New tests in the 1.4 release =
The following new tests have been added in this release:

== Tests of Linux tools and functionality ==
 * Functional.acpid
 * Functional.at
 * Functional.batch
 * Functional.bgpd
 * Functional.bind
 * Functional.busybox
 * Functional.cryptsetup
 * Functional.dovecot
 * Functional.ethtool
 * Functional.file
 * Functional.mcelog
 * Functional.nss
 * Functional.ospfd
 * Functional.ospf6d
 * Functional.pam
 * Functional.perl-xml-simple
 * Functional.rpm
 * Functional.tar
 * Functional.trousers

== Fuego self-tests ==
 * Benchmark.fuego_check_criteria_handling
 * Functional.fuego_compare_reports
 * Functional.fuego_ftc_test
 * Functional.fuego_report_live
 * Functional.fuego_sleep
 * Functional.fuego_slow_log
 * Functional.fuego_snapshot
 * Functional.fuego_test_variables

See the individual tests for information about them.


= Test commit log =
See the [[Release 1.4 test commit log]] for descriptions of individual
fixes and enhancements to tests in this release.

= Prototype feature enhancements =
The following sections show enhancements to features that are in
the prototype stage.  The features are not complete-enough to be supported
yet, but progress has been made on implementing the features in this release.

The prototype features enhanced in this release are:
 * added "ftc reserve-resource" and "ftc release-resource"
 * new target package feature
 * improved support for (still prototype) central server (fserver.py)
   * added support for server polling for remote job execution
   * reworked support for fuego server operations in ftc

== Resource reservations ==
This is the start of a feature for allowing the scheduling of
lab resources for a test.  For example, a test may need to use
the 'netperf' server during a test of networking performance.
It is desirable for this server to be used by only one test at
a time, in order to avoid disturbing the results of the test
on one board, with packets and networking activity from another
board.  A test can reserve the netperf server by doing
ftc reserve-resource 'netperf-server'

If a board in the test lab should be reserved, then the following
should be used by the test:
 * ftc reserve-resource -b other-board

Resources are held for a fixed period of time.  If another test
or user attempts to reserve a resource already reserved, then
the reservation will fail.

== Target Packages ==
It is now possible to create a 'target package' for a test.
A target packages contains the materials for a test that would normally
be installed during a regular 'test deploy' phase.  Usually, this is
a test program binary, and any associated data and board-side scripts.
A target package can be used to manually install the test program on the
board, and for manually using the test.

See [[Target Packages]] for more information.
A new phase was added 'm' for makepkg.
if phase makepkg is specified, then deploy is altered to put the materials
into  /fuego-rw/stage/fuego.<testname>.
Then, after deployment makepkg is called to create a test program package
file, in /fuego-rw/cache/$TOOLCHAIN-$TESTNAME-board-package.tar.gz

== Fuego Object Server ==
In this release, some additional support was added for interaction between
a local Fuego instance and a centralized testing server.

=== server re-write into standalone code ===
The code for the server was derived from the prototype written for the
2017 server demo (at Embedded Linux Conference in March 2017).  However,
that code was cobbled together quickly based on the tbwiki wiki engine.
The code has been re-written to be a standalone JSON test object
server (independent of the tbwiki code).

The server is now available separately from Fuego, at: https://github.com/tbird20d/fserver.git

Additional features were added to the server, including the ability
to update the status of a run-request that is in-progress of being executed.

=== Required Fuego configuration ===
In order to use the object server, your lab must have its own unique hostname
in the Fuego ecosystem, and you must configure your local Fuego instance
with a reference to the server you want to use.

The Fuego configuration is in fuego/fuego-ro/conf/fuego.conf.
To use the object server, you must set the following variables in the configuration file:
 * host_name
 * fuego_server

The 'host_name' should be an alphanumeric string with a unique name in the
Fuego ecosystem.  The string can contain characters, digits and underscores,
and must start with a character.  (It explicitly may NOT include dashes or periods - as these are used for delimiters for request and run object
names.)

The 'fuego_server' is the server name and path used to access a Fuego object
server.  The default global object server is at fuegotest.org, with path cgi-bin.  In the default fuego.conf file, you will see the line:
{{{#!YellowBox
fuego_server=fuegotest.org/cgi-bin
}}}

=== server polling script ===
There is a script that supports polling the object server for tests and
executing them.

The script is called ``poll_requests.sh``, and is located in the directory
``fuego-core/engine/scripts``.

If this script is executed inside the container, it will poll the
server forever.  When a request is found on the server that is intended
for a board in this Fuego instances (this lab/host), then:
 * the request is downloaded and executed
 * the results are pushed back to the server
 * the request is removed from the server

=== additional ftc support ===
In this (the 1.4) release, the 'ftc' tool was enhanced with
more support for Fuego server operations.

It is now possible to use ftc to remove a request from the server.  To do
this use the 'ftc rm-request'  Also, the 'ftc run-request' command
supports a new option '--put-run' to push the results of the run to
the server, after the test is completed.

Finally, when a request from the server is being executed, its status
is updated on the server in real-time, during the test execution.

This allows someone viewing the request list at the server to see the
requests that are currently in-progress.



TBWiki engine 1.8.3 by Tim Bird