Managing Assets

Note

Please note that we are constantly improving on how we handle assets inside Avocado. Probably some changes will be delivered during the next releases.

Assets are test artifacts that Avocado can download automatically either during the test execution, or before the test even starts (by parsing the test code or on-demand, manually registering them at the command-line).

Sometimes, depending on the use case, those assets can be a bottleneck for disk space. If the tests constantly use large assets, it is important to know how Avocado stores and handles those artifacts.

Listing assets

To list cached assets in the system, use the following command:

$ avocado assets list

This command supports --by-size-filter and --by-days options. When using the former, use a comparison filter and a size in bytes. For instance:

$ avocado assets list --by-size-filter=">=2048"

The command above will list only assets bigger than 2Kb. Avocado supports the following operators: =, >=, <=, < and >.

Now, to look for old assets (based on the access time), for example, 10 days older, use the --by-days option:

$ avocado assets list --by-days=10

Registering assets

To manually register a local asset in the cache, use the register command:

$ avocado assets register *NAME* *URL*

Where NAME is the unique name to associate with this asset and URL is the path to the local asset to be manually registered.

The register command also supports the --hash option, which allows the addition of the file’s hash.

Fetching assets from instrumented tests

The fetch command allows the download of a limited definition of assets inside an Avocado Instrumented test. It uses a parser on instrumented test source to find fetch_asset calls composed of simple strings as parameters, or at least one level of variable in the same context with a string assignment, and fetch those assets without running the test. The only exception to strings as arguments is the locations parameter, which allows the user of a list.

Following are some examples of supported definitions of assets by the fetch command:

tarball_locations = [
    'https://mirrors.peers.community/mirrors/gnu/hello/hello-2.9.tar.gz',
    'https://mirrors.kernel.org/gnu/hello/hello-2.9.tar.gz',
    'http://gnu.c3sl.ufpr.br/ftp/hello-2.9.tar.gz',
    'ftp://ftp.funet.fi/pub/gnu/prep/hello/hello-2.9.tar.gz'
    ]
self.hello = self.fetch_asset(
    name='hello-2.9.tar.gz',
    asset_hash='cb0470b0e8f4f7768338f5c5cfe1688c90fbbc74',
    locations=tarball_locations)
kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
              '/linux/releases/29/Everything/x86_64/os/images/pxeboot'
              '/vmlinuz')
kernel_hash = '23bebd2680757891cf7adedb033532163a792495'
kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)

To fetch the assets defined inside an instrumented test, use:

$ avocado assets fetch *avocado-instrumented*

Where avocado-instrumented is the path to the Avocado instrumented test file.

Removing assets

It is possible to remove files from the cache directories manually. The purge utility helps with that:

$ avocado assets purge –help

Assets can be removed applying the same filters as described when listing them. It is possible to remove assets by a size filter (--by-size-filter) or assets older than N days (--by-days).

Removing by overall cache limit

Besides the existing features, Avocado is able to set an overall limit, so that it matches the storage limitations locally or on CI systems.

For instance it may be the case that a GitLab cache limit is 4 GiB, in that case Avocado can sort assets by last access, and remove all that exceeds 4 GiB (that is, keep the last accessed 4 GiB worth of cached files). Use the --by-overall-limit option specifying the size limit:

$ avocado assets purge --by-overall-limit=4g

This ensures that the files which are not used for some time in the cache are automatically removed.

Please, note that at the moment, you can only use ‘b’, ‘k’, ‘m’, ‘g’, and ‘t’as suffixes.

Changing the default cache dirs

Assets are stored inside the datadir.paths.cache_dirs option. It is possible to change this in the configuration file. The current value is shown with the following command:

$ avocado config | grep datadir.paths.cache_dirs