test/system: Optimize the environment variable tests

The system tests can be very I/O intensive, because many of them copy
OCI images from the test suite's image cache directory to its local
container/storage store, create containers, and then delete everything
to run the next test with a clean slate.  This makes them slow.

The runtime environment tests, which includes the environment variable
tests, are particularly slow because they don't skip the I/O even when
testing error handling.  This makes them a good target for
optimizations.

The environment variable tests query the values of different environment
variables from different containers without changing their state.
Therefore, a lot of disk I/O can be avoided by creating these containers
only once for all the tests.

This can reduce the time needed to run the environment variable tests
from almost 26 minutes to almost 9 minutes.

https://github.com/containers/toolbox/pull/1646
This commit is contained in:
Debarshi Ray 2025-05-12 18:18:32 +02:00
parent a5a0d5350f
commit 836c0557f4
1 changed files with 19 additions and 73 deletions

View File

@ -1,6 +1,6 @@
# shellcheck shell=bats # shellcheck shell=bats
# #
# Copyright © 2023 2024 Red Hat, Inc. # Copyright © 2023 2025 Red Hat, Inc.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
@ -21,22 +21,36 @@ load 'libs/bats-support/load'
load 'libs/bats-assert/load' load 'libs/bats-assert/load'
load 'libs/helpers' load 'libs/helpers'
setup() { setup_file() {
bats_require_minimum_version 1.10.0 bats_require_minimum_version 1.10.0
_setup_environment _setup_environment
cleanup_all cleanup_all
pushd "$HOME" || return 1 pushd "$HOME" || return 1
if echo "$TOOLBX_TEST_SYSTEM_TAGS" | grep "arch" >/dev/null 2>/dev/null; then
create_distro_container arch latest arch-toolbox-latest
fi
if echo "$TOOLBX_TEST_SYSTEM_TAGS" | grep "fedora" >/dev/null 2>/dev/null; then
create_default_container
create_distro_container fedora 34 fedora-toolbox-34
create_distro_container rhel 8.10 rhel-toolbox-8.10
fi
if echo "$TOOLBX_TEST_SYSTEM_TAGS" | grep "ubuntu" >/dev/null 2>/dev/null; then
create_distro_container ubuntu 16.04 ubuntu-toolbox-16.04
create_distro_container ubuntu 18.04 ubuntu-toolbox-18.04
create_distro_container ubuntu 20.04 ubuntu-toolbox-20.04
fi
} }
teardown() { teardown_file() {
popd || return 1 popd || return 1
cleanup_all cleanup_all
} }
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: HISTFILESIZE inside the default container" { @test "environment variables: HISTFILESIZE inside the default container" {
create_default_container
if [ "$HISTFILESIZE" = "" ]; then if [ "$HISTFILESIZE" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
HISTFILESIZE=1001 HISTFILESIZE=1001
@ -59,8 +73,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: HISTFILESIZE inside Arch Linux" { @test "environment variables: HISTFILESIZE inside Arch Linux" {
create_distro_container arch latest arch-toolbox-latest
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$HISTFILESIZE" = "" ]; then if [ "$HISTFILESIZE" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -84,8 +96,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: HISTFILESIZE inside Fedora 34" { @test "environment variables: HISTFILESIZE inside Fedora 34" {
create_distro_container fedora 34 fedora-toolbox-34
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$HISTFILESIZE" = "" ]; then if [ "$HISTFILESIZE" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -109,8 +119,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: HISTFILESIZE inside RHEL 8.10" { @test "environment variables: HISTFILESIZE inside RHEL 8.10" {
create_distro_container rhel 8.10 rhel-toolbox-8.10
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$HISTFILESIZE" = "" ]; then if [ "$HISTFILESIZE" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -134,8 +142,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: HISTFILESIZE inside Ubuntu 16.04" { @test "environment variables: HISTFILESIZE inside Ubuntu 16.04" {
create_distro_container ubuntu 16.04 ubuntu-toolbox-16.04
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$HISTFILESIZE" = "" ]; then if [ "$HISTFILESIZE" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -160,8 +166,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: HISTFILESIZE inside Ubuntu 18.04" { @test "environment variables: HISTFILESIZE inside Ubuntu 18.04" {
create_distro_container ubuntu 18.04 ubuntu-toolbox-18.04
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$HISTFILESIZE" = "" ]; then if [ "$HISTFILESIZE" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -186,8 +190,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: HISTFILESIZE inside Ubuntu 20.04" { @test "environment variables: HISTFILESIZE inside Ubuntu 20.04" {
create_distro_container ubuntu 20.04 ubuntu-toolbox-20.04
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$HISTFILESIZE" = "" ]; then if [ "$HISTFILESIZE" = "" ]; then
HISTFILESIZE=1001 HISTFILESIZE=1001
@ -213,8 +215,6 @@ teardown() {
@test "environment variables: HISTSIZE inside the default container" { @test "environment variables: HISTSIZE inside the default container" {
skip "https://pagure.io/setup/pull-request/48" skip "https://pagure.io/setup/pull-request/48"
create_default_container
if [ "$HISTSIZE" = "" ]; then if [ "$HISTSIZE" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
HISTSIZE=1001 HISTSIZE=1001
@ -237,8 +237,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: HISTSIZE inside Arch Linux" { @test "environment variables: HISTSIZE inside Arch Linux" {
create_distro_container arch latest arch-toolbox-latest
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$HISTSIZE" = "" ]; then if [ "$HISTSIZE" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -264,8 +262,6 @@ teardown() {
@test "environment variables: HISTSIZE inside Fedora 34" { @test "environment variables: HISTSIZE inside Fedora 34" {
skip "https://pagure.io/setup/pull-request/48" skip "https://pagure.io/setup/pull-request/48"
create_distro_container fedora 34 fedora-toolbox-34
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$HISTSIZE" = "" ]; then if [ "$HISTSIZE" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -291,8 +287,6 @@ teardown() {
@test "environment variables: HISTSIZE inside RHEL 8.10" { @test "environment variables: HISTSIZE inside RHEL 8.10" {
skip "https://pagure.io/setup/pull-request/48" skip "https://pagure.io/setup/pull-request/48"
create_distro_container rhel 8.10 rhel-toolbox-8.10
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$HISTSIZE" = "" ]; then if [ "$HISTSIZE" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -316,8 +310,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: HISTSIZE inside Ubuntu 16.04" { @test "environment variables: HISTSIZE inside Ubuntu 16.04" {
create_distro_container ubuntu 16.04 ubuntu-toolbox-16.04
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$HISTSIZE" = "" ]; then if [ "$HISTSIZE" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -341,8 +333,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: HISTSIZE inside Ubuntu 18.04" { @test "environment variables: HISTSIZE inside Ubuntu 18.04" {
create_distro_container ubuntu 18.04 ubuntu-toolbox-18.04
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$HISTSIZE" = "" ]; then if [ "$HISTSIZE" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -366,8 +356,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: HISTSIZE inside Ubuntu 20.04" { @test "environment variables: HISTSIZE inside Ubuntu 20.04" {
create_distro_container ubuntu 20.04 ubuntu-toolbox-20.04
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$HISTSIZE" = "" ]; then if [ "$HISTSIZE" = "" ]; then
HISTSIZE=1001 HISTSIZE=1001
@ -390,8 +378,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: HOSTNAME inside the default container" { @test "environment variables: HOSTNAME inside the default container" {
create_default_container
# shellcheck disable=SC2016 # shellcheck disable=SC2016
run --keep-empty-lines --separate-stderr "$TOOLBX" run bash -c 'echo "$HOSTNAME"' run --keep-empty-lines --separate-stderr "$TOOLBX" run bash -c 'echo "$HOSTNAME"'
@ -403,8 +389,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: HOSTNAME inside Arch Linux" { @test "environment variables: HOSTNAME inside Arch Linux" {
create_distro_container arch latest arch-toolbox-latest
# shellcheck disable=SC2016 # shellcheck disable=SC2016
run --keep-empty-lines --separate-stderr "$TOOLBX" run --distro arch bash -c 'echo "$HOSTNAME"' run --keep-empty-lines --separate-stderr "$TOOLBX" run --distro arch bash -c 'echo "$HOSTNAME"'
@ -416,8 +400,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: HOSTNAME inside Fedora 34" { @test "environment variables: HOSTNAME inside Fedora 34" {
create_distro_container fedora 34 fedora-toolbox-34
# shellcheck disable=SC2016 # shellcheck disable=SC2016
run --keep-empty-lines --separate-stderr "$TOOLBX" run --distro fedora --release 34 bash -c 'echo "$HOSTNAME"' run --keep-empty-lines --separate-stderr "$TOOLBX" run --distro fedora --release 34 bash -c 'echo "$HOSTNAME"'
@ -429,8 +411,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: HOSTNAME inside RHEL 8.10" { @test "environment variables: HOSTNAME inside RHEL 8.10" {
create_distro_container rhel 8.10 rhel-toolbox-8.10
# shellcheck disable=SC2016 # shellcheck disable=SC2016
run --keep-empty-lines --separate-stderr "$TOOLBX" run --distro rhel --release 8.10 bash -c 'echo "$HOSTNAME"' run --keep-empty-lines --separate-stderr "$TOOLBX" run --distro rhel --release 8.10 bash -c 'echo "$HOSTNAME"'
@ -442,8 +422,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: HOSTNAME inside Ubuntu 16.04" { @test "environment variables: HOSTNAME inside Ubuntu 16.04" {
create_distro_container ubuntu 16.04 ubuntu-toolbox-16.04
# shellcheck disable=SC2016 # shellcheck disable=SC2016
run --keep-empty-lines --separate-stderr "$TOOLBX" run --distro ubuntu --release 16.04 bash -c 'echo "$HOSTNAME"' run --keep-empty-lines --separate-stderr "$TOOLBX" run --distro ubuntu --release 16.04 bash -c 'echo "$HOSTNAME"'
@ -455,8 +433,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: HOSTNAME inside Ubuntu 18.04" { @test "environment variables: HOSTNAME inside Ubuntu 18.04" {
create_distro_container ubuntu 18.04 ubuntu-toolbox-18.04
# shellcheck disable=SC2016 # shellcheck disable=SC2016
run --keep-empty-lines --separate-stderr "$TOOLBX" run --distro ubuntu --release 18.04 bash -c 'echo "$HOSTNAME"' run --keep-empty-lines --separate-stderr "$TOOLBX" run --distro ubuntu --release 18.04 bash -c 'echo "$HOSTNAME"'
@ -468,8 +444,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: HOSTNAME inside Ubuntu 20.04" { @test "environment variables: HOSTNAME inside Ubuntu 20.04" {
create_distro_container ubuntu 20.04 ubuntu-toolbox-20.04
# shellcheck disable=SC2016 # shellcheck disable=SC2016
run --keep-empty-lines --separate-stderr "$TOOLBX" run --distro ubuntu --release 20.04 bash -c 'echo "$HOSTNAME"' run --keep-empty-lines --separate-stderr "$TOOLBX" run --distro ubuntu --release 20.04 bash -c 'echo "$HOSTNAME"'
@ -481,8 +455,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: KONSOLE_VERSION inside the default container" { @test "environment variables: KONSOLE_VERSION inside the default container" {
create_default_container
if [ "$KONSOLE_VERSION" = "" ]; then if [ "$KONSOLE_VERSION" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
export KONSOLE_VERSION=230804 export KONSOLE_VERSION=230804
@ -501,8 +473,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: KONSOLE_VERSION inside Arch Linux" { @test "environment variables: KONSOLE_VERSION inside Arch Linux" {
create_distro_container arch latest arch-toolbox-latest
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$KONSOLE_VERSION" = "" ]; then if [ "$KONSOLE_VERSION" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -522,8 +492,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: KONSOLE_VERSION inside Fedora 34" { @test "environment variables: KONSOLE_VERSION inside Fedora 34" {
create_distro_container fedora 34 fedora-toolbox-34
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$KONSOLE_VERSION" = "" ]; then if [ "$KONSOLE_VERSION" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -543,8 +511,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: KONSOLE_VERSION inside RHEL 8.10" { @test "environment variables: KONSOLE_VERSION inside RHEL 8.10" {
create_distro_container rhel 8.10 rhel-toolbox-8.10
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$KONSOLE_VERSION" = "" ]; then if [ "$KONSOLE_VERSION" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -564,8 +530,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: KONSOLE_VERSION inside Ubuntu 16.04" { @test "environment variables: KONSOLE_VERSION inside Ubuntu 16.04" {
create_distro_container ubuntu 16.04 ubuntu-toolbox-16.04
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$KONSOLE_VERSION" = "" ]; then if [ "$KONSOLE_VERSION" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -585,8 +549,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: KONSOLE_VERSION inside Ubuntu 18.04" { @test "environment variables: KONSOLE_VERSION inside Ubuntu 18.04" {
create_distro_container ubuntu 18.04 ubuntu-toolbox-18.04
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$KONSOLE_VERSION" = "" ]; then if [ "$KONSOLE_VERSION" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -606,8 +568,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: KONSOLE_VERSION inside Ubuntu 20.04" { @test "environment variables: KONSOLE_VERSION inside Ubuntu 20.04" {
create_distro_container ubuntu 20.04 ubuntu-toolbox-20.04
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$KONSOLE_VERSION" = "" ]; then if [ "$KONSOLE_VERSION" = "" ]; then
export KONSOLE_VERSION=230804 export KONSOLE_VERSION=230804
@ -626,8 +586,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: XTERM_VERSION inside the default container" { @test "environment variables: XTERM_VERSION inside the default container" {
create_default_container
if [ "$XTERM_VERSION" = "" ]; then if [ "$XTERM_VERSION" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
export XTERM_VERSION="XTerm(385)" export XTERM_VERSION="XTerm(385)"
@ -646,8 +604,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: XTERM_VERSION inside Arch Linux" { @test "environment variables: XTERM_VERSION inside Arch Linux" {
create_distro_container arch latest arch-toolbox-latest
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$XTERM_VERSION" = "" ]; then if [ "$XTERM_VERSION" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -667,8 +623,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: XTERM_VERSION inside Fedora 34" { @test "environment variables: XTERM_VERSION inside Fedora 34" {
create_distro_container fedora 34 fedora-toolbox-34
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$XTERM_VERSION" = "" ]; then if [ "$XTERM_VERSION" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -688,8 +642,6 @@ teardown() {
# bats test_tags=arch-fedora # bats test_tags=arch-fedora
@test "environment variables: XTERM_VERSION inside RHEL 8.10" { @test "environment variables: XTERM_VERSION inside RHEL 8.10" {
create_distro_container rhel 8.10 rhel-toolbox-8.10
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$XTERM_VERSION" = "" ]; then if [ "$XTERM_VERSION" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -709,8 +661,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: XTERM_VERSION inside Ubuntu 16.04" { @test "environment variables: XTERM_VERSION inside Ubuntu 16.04" {
create_distro_container ubuntu 16.04 ubuntu-toolbox-16.04
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$XTERM_VERSION" = "" ]; then if [ "$XTERM_VERSION" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -730,8 +680,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: XTERM_VERSION inside Ubuntu 18.04" { @test "environment variables: XTERM_VERSION inside Ubuntu 18.04" {
create_distro_container ubuntu 18.04 ubuntu-toolbox-18.04
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$XTERM_VERSION" = "" ]; then if [ "$XTERM_VERSION" = "" ]; then
# shellcheck disable=SC2030 # shellcheck disable=SC2030
@ -751,8 +699,6 @@ teardown() {
# bats test_tags=ubuntu # bats test_tags=ubuntu
@test "environment variables: XTERM_VERSION inside Ubuntu 20.04" { @test "environment variables: XTERM_VERSION inside Ubuntu 20.04" {
create_distro_container ubuntu 20.04 ubuntu-toolbox-20.04
# shellcheck disable=SC2031 # shellcheck disable=SC2031
if [ "$XTERM_VERSION" = "" ]; then if [ "$XTERM_VERSION" = "" ]; then
export XTERM_VERSION="XTerm(385)" export XTERM_VERSION="XTerm(385)"