Files
snapd/spread.yaml
Sergio Cazzolato 9134ef8daa tests: re-organize the perf test suite (#13672)
* tests:new perf test to install many snaps with --no-wait and check changes

Install different snaps many times based on arch availability. In this
scenario all the snaps are installed in parallel and the test checks
the system can handel all the installs and remains active.

* performance tests reorganization

To avoid executing perf tests when the nested tests are executed, the
tests have been moved under tests/perf

tests/perf/main -> suite with the tests executed in the target device
tests/perf/nested -> suite with the tests executed in a nested
environment

* Update tests/perf/nested/install-many-snaps-no-wait/task.yaml

Co-authored-by: Miguel Pires <miguelpires94@gmail.com>

* Update tests/perf/nested/install-many-snaps-no-wait/task.yaml

Co-authored-by: Miguel Pires <miguelpires94@gmail.com>

* Update tests/perf/main/install-many-snaps-no-wait/task.yaml

Co-authored-by: Miguel Pires <miguelpires94@gmail.com>

* improve logs check and fixes based on review comments

* addressing review comments

---------

Co-authored-by: Miguel Pires <miguelpires94@gmail.com>
2024-04-03 10:01:18 -03:00

1360 lines
54 KiB
YAML

project: snapd
environment:
GOHOME: /home/gopath
GOPATH: $GOHOME
# On some distros the default GOPROXY setting is 'direct' (eg. Fedora).
# Some of the external go packages may get removed or could be temporary
# offline (as happened with maze.io/x/crypt), and then the sources are
# only available through the proxy cache. Play it safe and enable the
# proxy to allow for least CI interruptions.
GOPROXY: https://proxy.golang.org,direct
REUSE_PROJECT: '$(HOST: echo "$REUSE_PROJECT")'
PROJECT_PATH: $GOHOME/src/github.com/snapcore/snapd
PATH: $GOHOME/bin:/snap/bin:$PATH:/var/lib/snapd/snap/bin:$PROJECT_PATH/tests/bin
TESTSLIB: $PROJECT_PATH/tests/lib
TESTSTOOLS: $PROJECT_PATH/tests/lib/tools
TESTSTMP: /var/tmp/snapd-tools
RUNTIME_STATE_PATH: $TESTSTMP/runtime-state
# turn debug off so that we don't get errant debug messages while running
# tests, and in some cases like on UC20 we have the kernel command line
# parameter, snapd.debug=1 turned on to enable early boot debugging before
# we have a shell, but then once we get a shell and run spread tests, we
# want debug messages to be off for commands we run as part of tests, unless
# tests explicitly turn the messages on
SNAPD_DEBUG: 0
SNAPPY_TESTING: 1
# we run the entire suite with re-exec on (the default) and modify
# the core snap so that it contains our new code. So we run new
# snapd from the deb that re-execs into new snapd in core. To
# test purely from the deb, set "export SPREAD_SNAP_REEXEC=0"
SNAP_REEXEC: '$(HOST: echo "${SPREAD_SNAP_REEXEC:-}")'
MODIFY_CORE_SNAP_FOR_REEXEC: '$(HOST: echo "${SPREAD_MODIFY_CORE_SNAP_FOR_REEXEC:-1}")'
SPREAD_STORE_USER: '$(HOST: echo "$SPREAD_STORE_USER")'
SPREAD_STORE_PASSWORD: '$(HOST: echo "$SPREAD_STORE_PASSWORD")'
SPREAD_STORE_EXPIRED_MACAROON: '$(HOST: echo "$SPREAD_STORE_EXPIRED_MACAROON")'
SPREAD_STORE_EXPIRED_DISCHARGE: '$(HOST: echo "$SPREAD_STORE_EXPIRED_DISCHARGE")'
SPREAD_DEBUG_EACH: '$(HOST: echo "${SPREAD_DEBUG_EACH:-1}")'
LANG: "C.UTF-8"
LANGUAGE: "en"
# important to ensure adhoc and linode/qemu behave the same
SUDO_USER: ""
SUDO_UID: ""
TRUST_TEST_KEYS: '$(HOST: echo "${SPREAD_TRUST_TEST_KEYS:-true}")'
# a global setting for LXD channel to use in the tests
# TODO: Consider reverting to latest/candidate after Snapcraft compatibility with LXD 5.21 extended version string "5.21 LTS" is fixed
LXD_SNAP_CHANNEL: "latest/edge"
UBUNTU_IMAGE_SNAP_CHANNEL: "2/stable"
# controls whether ubuntu-image is built using the current snapd tree as a
# dependency or the one listed in its go.mod
UBUNTU_IMAGE_ALLOW_API_BREAK: '$(HOST: echo "${SPREAD_UBUNTU_IMAGE_ALLOW_API_BREAK:-true}")'
CORE_CHANNEL: '$(HOST: echo "${SPREAD_CORE_CHANNEL:-edge}")'
BASE_CHANNEL: '$(HOST: echo "${SPREAD_BASE_CHANNEL:-edge}")'
# Channel for kernel cannot be edge as that one is not signed with Canonical keys
KERNEL_CHANNEL: '$(HOST: echo "${SPREAD_KERNEL_CHANNEL:-beta}")'
GADGET_CHANNEL: '$(HOST: echo "${SPREAD_GADGET_CHANNEL:-beta}")'
SNAPD_CHANNEL: '$(HOST: echo "${SPREAD_SNAPD_CHANNEL:-edge}")'
REMOTE_STORE: '$(HOST: echo "${SPREAD_REMOTE_STORE:-production}")'
SNAPPY_USE_STAGING_STORE: '$(HOST: if [ "$SPREAD_REMOTE_STORE" = staging ]; then echo 1; else echo 0; fi)'
DELTA_REF: 2.52
DELTA_PREFIX: snapd-$DELTA_REF/
REPACK_KEEP_VENDOR: '$(HOST: echo "${REPACK_KEEP_VENDOR:-n}")'
HTTP_PROXY: '$(HOST: echo "$SPREAD_HTTP_PROXY")'
HTTPS_PROXY: '$(HOST: echo "$SPREAD_HTTPS_PROXY")'
NO_PROXY: "127.0.0.1"
NEW_CORE_CHANNEL: '$(HOST: echo "$SPREAD_NEW_CORE_CHANNEL")'
SRU_VALIDATION: '$(HOST: echo "${SPREAD_SRU_VALIDATION:-0}")'
# use the ppa_validation_name to install snapd from a public ppa
PPA_VALIDATION_NAME: '$(HOST: echo "${SPREAD_PPA_VALIDATION_NAME:-}")'
# use the ppa_source_line and ppa_gpg_key to install snapd from a private ppa
PPA_SOURCE_LINE: '$(HOST: echo "${SPREAD_PPA_SOURCE_LINE:-}")'
PPA_GPG_KEY: '$(HOST: echo "${SPREAD_PPA_GPG_KEY:-}")'
# List the snaps which are cached
PRE_CACHE_SNAPS: test-snapd-tools test-snapd-sh jq
# always skip removing the rsync snap
SKIP_REMOVE_SNAPS: '$(HOST: echo "${SPREAD_SKIP_REMOVE_SNAPS:-}") test-snapd-rsync test-snapd-rsync-core18 test-snapd-rsync-core20 test-snapd-rsync-core22'
# Use the installed snapd and reset the systems without removing snapd
REUSE_SNAPD: '$(HOST: echo "${SPREAD_REUSE_SNAPD:-0}")'
EXPERIMENTAL_FEATURES: '$(HOST: echo "${SPREAD_EXPERIMENTAL_FEATURES:-}")'
# set to 1 when the snapd memory limit has to be removed
SNAPD_NO_MEMORY_LIMIT: '$(HOST: echo "${SPREAD_SNAPD_NO_MEMORY_LIMIT:-}")'
SNAPD_PUBLISHED_VERSION: '$(HOST: echo "$SPREAD_SNAPD_PUBLISHED_VERSION")'
# Build and use snapd from current branch
BUILD_SNAPD_FROM_CURRENT: '$(HOST: echo "${SPREAD_BUILD_SNAPD_FROM_CURRENT:-true}")'
# Directory where the nested images and test assets are stored
NESTED_WORK_DIR: '$(HOST: echo "${NESTED_WORK_DIR:-/tmp/work-dir}")'
# Channel used to create the nested vm
NESTED_CORE_CHANNEL: '$(HOST: echo "${NESTED_CORE_CHANNEL:-beta}")'
# Kernel channel used to create the nested vm
NESTED_KERNEL_CHANNEL: '$(HOST: echo "${NESTED_KERNEL_CHANNEL:-beta}")'
# Gadget channel used to create the nested vm
NESTED_GADGET_CHANNEL: '$(HOST: echo "${NESTED_GADGET_CHANNEL:-edge}")'
# Use cloud init to make initial system configuration instead of user assertion
NESTED_CORE_REFRESH_CHANNEL: '$(HOST: echo "${NESTED_CORE_REFRESH_CHANNEL:-edge}")'
# Use cloud init to make initial system configuration instead of user assertion
NESTED_USE_CLOUD_INIT: '$(HOST: echo "${NESTED_USE_CLOUD_INIT:-true}")'
# Build and use snapd from current branch
NESTED_BUILD_SNAPD_FROM_CURRENT: '$(HOST: echo "${NESTED_BUILD_SNAPD_FROM_CURRENT:-true}")'
# Download and use an custom image from this url
NESTED_CUSTOM_IMAGE_URL: '$(HOST: echo "${NESTED_CUSTOM_IMAGE_URL:-}")'
# Configure nested images to be reused on the following tests
NESTED_CONFIGURE_IMAGES: '$(HOST: echo "${NESTED_CONFIGURE_IMAGES:-false}")'
# Indicates if the snap has to be repacked in case NESTED_BUILD_SNAPD_FROM_CURRENT is true
NESTED_REPACK_KERNEL_SNAP: '$(HOST: echo "${NESTED_REPACK_KERNEL_SNAP:-true}")'
NESTED_REPACK_GADGET_SNAP: '$(HOST: echo "${NESTED_REPACK_GADGET_SNAP:-true}")'
NESTED_REPACK_BASE_SNAP: '$(HOST: echo "${NESTED_REPACK_BASE_SNAP:-true}")'
NESTED_FORCE_MS_KEYS: '$(HOST: echo "${NESTED_FORCE_MS_KEYS:-false}")'
backends:
google:
key: '$(HOST: echo "$SPREAD_GOOGLE_KEY")'
location: snapd-spread/us-east1-b
halt-timeout: 2h
systems:
- ubuntu-14.04-64:
workers: 6
- ubuntu-16.04-64:
workers: 8
storage: 12G
- ubuntu-18.04-32:
workers: 6
- ubuntu-18.04-64:
storage: 12G
workers: 8
- ubuntu-20.04-64:
storage: 12G
workers: 8
- ubuntu-core-16-64:
image: ubuntu-16.04-64
workers: 6
- ubuntu-core-18-64:
image: ubuntu-18.04-64
workers: 6
- ubuntu-core-20-64:
image: ubuntu-20.04-64
workers: 8
storage: 20G
- ubuntu-core-22-64:
image: ubuntu-22.04-64
workers: 8
storage: 20G
- ubuntu-core-24-64:
image: ubuntu-24.04-64
workers: 8
storage: 20G
- ubuntu-secboot-20.04-64:
image: ubuntu-20.04-64
workers: 1
secure-boot: true
- ubuntu-22.04-64:
storage: 12G
workers: 8
- ubuntu-23.10-64:
storage: 12G
workers: 8
- ubuntu-24.04-64:
storage: 12G
workers: 8
google-central:
type: google
key: '$(HOST: echo "$SPREAD_GOOGLE_KEY")'
location: snapd-spread/us-central1-b
halt-timeout: 2h
systems:
- debian-11-64:
workers: 6
- debian-12-64:
workers: 6
- debian-sid-64:
storage: 12G
workers: 6
- fedora-38-64:
workers: 6
- fedora-39-64:
workers: 6
- arch-linux-64:
workers: 6
storage: 12G
- amazon-linux-2-64:
workers: 6
storage: preserve-size
- amazon-linux-2023-64:
workers: 6
storage: preserve-size
- centos-7-64:
workers: 6
storage: preserve-size
image: centos-7-64
- centos-8-64:
workers: 6
storage: preserve-size
image: centos-8-64
- centos-9-64:
workers: 6
storage: preserve-size
image: centos-9-64
- opensuse-15.5-64:
workers: 6
- opensuse-tumbleweed-64:
workers: 6
google-arm:
type: google
key: '$(HOST: echo "$SPREAD_GOOGLE_KEY")'
location: snapd-spread/us-central1-a
plan: t2a-standard-1
halt-timeout: 2h
systems:
- ubuntu-20.04-arm-64:
image: ubuntu-os-cloud/ubuntu-2004-lts-arm64
workers: 8
storage: 12G
- ubuntu-22.04-arm-64:
image: ubuntu-os-cloud/ubuntu-2204-lts-arm64
workers: 8
storage: 12G
- ubuntu-core-22-arm-64:
image: ubuntu-22.04-arm-64
workers: 6
storage: 30G
google-sru:
type: google
key: '$(HOST: echo "$SPREAD_GOOGLE_KEY")'
location: snapd-spread/us-east1-b
halt-timeout: 2h
systems:
- ubuntu-20.04-64:
workers: 8
- ubuntu-22.04-64:
workers: 8
- ubuntu-23.10-64:
workers: 8
- ubuntu-24.04-64:
workers: 8
google-nested:
type: google
key: '$(HOST: echo "$SPREAD_GOOGLE_KEY")'
location: snapd-spread/us-east1-b
plan: n2-standard-2
halt-timeout: 2h
cpu-family: "Intel Cascade Lake"
systems:
- ubuntu-16.04-64:
image: ubuntu-1604-64-virt-enabled
storage: 20G
workers: 4
- ubuntu-18.04-64:
image: ubuntu-1804-64-virt-enabled
storage: 20G
workers: 4
- ubuntu-20.04-64:
image: ubuntu-2004-64-virt-enabled
storage: 20G
workers: 10
- ubuntu-22.04-64:
image: ubuntu-2204-64-virt-enabled
storage: 25G
workers: 10
google-nested-arm:
type: google
key: '$(HOST: echo "$SPREAD_GOOGLE_KEY")'
location: snapd-spread/us-central1-a
plan: t2a-standard-2
halt-timeout: 2h
systems:
- ubuntu-22.04-arm-64:
image: ubuntu-2204-arm-64-virt-enabled
storage: 25G
workers: 8
google-nested-dev:
type: google
key: '$(HOST: echo "$SPREAD_GOOGLE_KEY")'
location: snapd-spread/northamerica-northeast1-a
plan: n2-standard-4
halt-timeout: 6h
cpu-family: "Intel Cascade Lake"
systems:
- ubuntu-16.04-64:
image: ubuntu-1604-64-virt-enabled
storage: 20G
workers: 3
- ubuntu-18.04-64:
image: ubuntu-1804-64-virt-enabled
storage: 20G
workers: 3
- ubuntu-20.04-64:
image: ubuntu-2004-64-virt-enabled
storage: 20G
workers: 8
- ubuntu-22.04-64:
image: ubuntu-2204-64-virt-enabled
storage: 20G
workers: 8
qemu-nested:
memory: 4G
type: qemu
systems:
- ubuntu-16.04-64:
username: ubuntu
password: ubuntu
- ubuntu-18.04-64:
username: ubuntu
password: ubuntu
- ubuntu-20.04-64:
username: ubuntu
password: ubuntu
- ubuntu-22.04-64:
username: ubuntu
password: ubuntu
qemu:
memory: 4G
systems:
- ubuntu-14.04-32:
username: ubuntu
password: ubuntu
- ubuntu-14.04-64:
username: ubuntu
password: ubuntu
- ubuntu-16.04-32:
username: ubuntu
password: ubuntu
- ubuntu-16.04-64:
username: ubuntu
password: ubuntu
- ubuntu-core-16-64:
image: ubuntu-16.04-64
username: ubuntu
password: ubuntu
- ubuntu-core-18-64:
image: ubuntu-18.04-64
username: ubuntu
password: ubuntu
- ubuntu-core-20-64:
image: ubuntu-20.04-64
username: ubuntu
password: ubuntu
bios: uefi
# TODO: remove once everyone switch to official spread
flags: [virtio]
- ubuntu-core-22-64:
image: ubuntu-22.04-64
username: ubuntu
password: ubuntu
bios: uefi
# TODO: remove once everyone switch to official spread
flags: [virtio]
- ubuntu-18.04-64:
username: ubuntu
password: ubuntu
- ubuntu-18.04-32:
username: ubuntu
password: ubuntu
- ubuntu-20.04-64:
username: ubuntu
password: ubuntu
- ubuntu-20.04-32:
username: ubuntu
password: ubuntu
- ubuntu-22.04-64:
username: ubuntu
password: ubuntu
- ubuntu-23.10-64:
username: ubuntu
password: ubuntu
- ubuntu-24.04-64:
username: ubuntu
password: ubuntu
- debian-11-64:
username: debian
password: debian
- debian-12-64:
username: debian
password: debian
- debian-sid-64:
username: debian
password: debian
- centos-7-64:
username: centos
password: centos
- amazon-linux-2-64:
username: ec2-user
password: ec2-user
- opensuse-tumbleweed-64:
username: opensuse
password: opensuse
autopkgtest:
type: adhoc
allocate: |
echo "Allocating ad-hoc $SPREAD_SYSTEM"
if [ -z "${ADT_ARTIFACTS}" ]; then
FATAL "adhoc only works inside autopkgtest"
exit 1
fi
echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/99-spread-users
ADDRESS localhost:22
discard: |
echo "Discarding ad-hoc $SPREAD_SYSTEM"
systems:
# Trusty
- ubuntu-14.04-amd64:
username: ubuntu
password: ubuntu
- ubuntu-14.04-i386:
username: ubuntu
password: ubuntu
# Xenial
- ubuntu-16.04-amd64:
username: ubuntu
password: ubuntu
- ubuntu-16.04-i386:
username: ubuntu
password: ubuntu
- ubuntu-16.04-ppc64el:
username: ubuntu
password: ubuntu
- ubuntu-16.04-armhf:
username: ubuntu
password: ubuntu
- ubuntu-16.04-s390x:
username: ubuntu
password: ubuntu
# Bionic
- ubuntu-18.04-amd64:
username: ubuntu
password: ubuntu
- ubuntu-18.04-i386:
username: ubuntu
password: ubuntu
- ubuntu-18.04-ppc64el:
username: ubuntu
password: ubuntu
- ubuntu-18.04-armhf:
username: ubuntu
password: ubuntu
- ubuntu-18.04-s390x:
username: ubuntu
password: ubuntu
- ubuntu-18.04-arm64:
username: ubuntu
password: ubuntu
# Focal
- ubuntu-20.04-amd64:
username: ubuntu
password: ubuntu
- ubuntu-20.04-i386:
username: ubuntu
password: ubuntu
- ubuntu-20.04-ppc64el:
username: ubuntu
password: ubuntu
- ubuntu-20.04-armhf:
username: ubuntu
password: ubuntu
- ubuntu-20.04-s390x:
username: ubuntu
password: ubuntu
- ubuntu-20.04-arm64:
username: ubuntu
password: ubuntu
# Jammy
- ubuntu-22.04-amd64:
username: ubuntu
password: ubuntu
- ubuntu-22.04-i386:
username: ubuntu
password: ubuntu
- ubuntu-22.04-ppc64el:
username: ubuntu
password: ubuntu
- ubuntu-22.04-armhf:
username: ubuntu
password: ubuntu
- ubuntu-22.04-s390x:
username: ubuntu
password: ubuntu
- ubuntu-22.04-arm64:
username: ubuntu
password: ubuntu
external:
type: adhoc
environment:
SPREAD_EXTERNAL_ADDRESS: '$(HOST: echo "${SPREAD_EXTERNAL_ADDRESS:-localhost:8022}")'
TRUST_TEST_KEYS: "false"
allocate: |
ADDRESS $SPREAD_EXTERNAL_ADDRESS
systems:
- ubuntu-core-16-64:
username: external
password: ubuntu
- ubuntu-core-16-32:
username: external
password: ubuntu
- ubuntu-core-16-arm-64:
username: external
password: ubuntu
- ubuntu-core-16-arm-32:
username: external
password: ubuntu
- ubuntu-core-18-64:
username: external
password: ubuntu
- ubuntu-core-18-32:
username: external
password: ubuntu
- ubuntu-core-18-arm-64:
username: external
password: ubuntu
- ubuntu-core-18-arm-32:
username: external
password: ubuntu
- ubuntu-core-20-64:
username: external
password: ubuntu
- ubuntu-core-20-arm-64:
username: external
password: ubuntu
- ubuntu-core-20-arm-32:
username: external
password: ubuntu
- ubuntu-core-22-64:
username: external
password: ubuntu
- ubuntu-core-22-arm-64:
username: external
password: ubuntu
- ubuntu-core-22-arm-32:
username: external
password: ubuntu
- ubuntu-core-24-64:
username: external
password: ubuntu
- ubuntu-core-24-arm-64:
username: external
password: ubuntu
path: /home/gopath/src/github.com/snapcore/snapd
exclude:
- .git
- cmd/snap/snap
- cmd/snapd/snapd
- cmd/snapctl/snapctl
- cmd/snap-exec/snap-exec
- cmd/autom4te.cache
- "*.o"
- "*.a"
- ./vendor
- "*.snap"
debug-each: |
if [ "$SPREAD_DEBUG_EACH" != 1 ]; then
exit
fi
#shellcheck source=tests/lib/state.sh
. "$TESTSLIB/state.sh"
#shellcheck source=tests/lib/systems.sh
. "$TESTSLIB/systems.sh"
echo '# System information'
cat /etc/os-release || true
echo '# Kernel information'
uname -a
echo '# Apparmor information'
apparmor_parser --version || true
echo '# Go information'
go version || true
if tests.nested is-nested; then
echo '# nested VM status'
tests.nested vm status
# filter out ^[ to ensure that the debug output gets not messed up
tests.nested get serial-log | sed 's/\x1b//g'
# add another echo in case the serial log is missing a newline
echo
remote.exec "sudo journalctl --no-pager -u snapd" || true
fi
echo "# definition of snapd.service"
systemctl cat snapd.service || true
echo "# status of snapd service"
systemctl status snapd.service || true
echo "# memory limits of snapd service that systemd uses"
systemctl show snapd.service | grep -e MemoryMax= -e MemoryLimit= || true
echo "# memory limits of snapd service that are actually set"
cat /sys/fs/cgroup/memory/system.slice/snapd.service/memory.limit_in_bytes || true
echo '# journal messages for snapd'
"$TESTSTOOLS"/journal-state get-log -u snapd
echo '# user sessions information'
journalctl --user -u snapd.session-agent.service || true
systemctl status --user snapd.session-agent || true
if ! is_cgroupv2; then
# dump any information on device cgroup of current session
cgroup_dev="$(awk -F: '/:devices:/ { print $3}' < /proc/self/cgroup || true)"
if [ -n "$cgroup_dev" ]; then
echo "# device cgroup $cgroup_dev"
cat "/sys/fs/cgroup/devices/$cgroup_dev/devices.list" || true
fi
else
echo "# snap confinement device filtering maps"
ls -l /sys/fs/bpf/snap || true
fi
case "$SPREAD_SYSTEM" in
fedora-*|centos-*|amazon-*)
if [ -e "$RUNTIME_STATE_PATH/audit-stamp" ]; then
ausearch -i -m AVC --checkpoint "$RUNTIME_STATE_PATH/audit-stamp" --start checkpoint || true
else
ausearch -i -m AVC || true
fi
(
find /root/snap -printf '%Z\t%H/%P\n' || true
find /home -regex '/home/[^/]*/snap\(/.*\)?' -printf '%Z\t%H/%P\n' || true
) | grep -v snappy_home_t || true
find /var/snap -printf '%Z\t%H/%P\n' | grep -v snappy_var_t || true
;;
opensuse-*)
echo '# apparmor denials logged by auditd'
ausearch -m AVC | grep DENIED || true
;;
*)
echo '# apparmor denials '
dmesg --ctime | grep DENIED || true
;;
esac
echo '# seccomp denials (kills) '
dmesg --ctime | grep type=1326 || true
echo '# snap connections --all'
snap connections --all || true
echo '# free space'
df -h || true
echo '# mounts'
# use ascii output to prevent travis from messing up the encoding
findmnt --ascii -o+PROPAGATION || true
echo "# processes"
ps axl
echo "# /var/lib/snapd"
find /var/lib/snapd/ -not -path '/var/lib/snapd/snap/*' -ls || true
echo '# system journal messages'
journalctl -e
# Keep it as the last step in debug-each
echo '# tasks executed on system'
# since the runs file does not have a newline at EOF, add one
echo "" | cat "$RUNTIME_STATE_PATH/runs" - || true
rename:
# Move content into a directory, so that deltas computed by repack benefit
# from the content looking similar to codeload.github.com.
- s,^,$DELTA_PREFIX,S
repack: |
# For Linode, compute a delta based on a known git reference that can be
# obtained directly from GitHub. There's nothing special about that reference,
# other than it will often be in the local repository's history already.
# The more recent the reference, the smaller the delta.
if ! echo "$SPREAD_BACKENDS" | grep -e linode -e google; then
cat <&3 >&4
elif ! git show-ref "$DELTA_REF" > /dev/null; then
cat <&3 >&4
elif [ -n "${NO_DELTA-}" ]; then
# delta has been disabled by the caller
cat <&3 >&4
else
tmpdir="$(mktemp -d)"
#shellcheck disable=SC2064
trap "rm -rf delta-ref.tar current.delta repacked-current.tar $tmpdir" EXIT
if [ "$REPACK_KEEP_VENDOR" = "n" ]; then
tar -C "$tmpdir" -xvf - <&3
rm -rf "$tmpdir"/$DELTA_PREFIX/vendor/*
tar -C "$tmpdir" -c "$DELTA_PREFIX" --sort=name > repacked-current.tar
else
cat <&3 > repacked-current.tar
fi
git archive -o delta-ref.tar --format=tar --prefix="$DELTA_PREFIX" "$DELTA_REF"
xdelta3 -S none -s delta-ref.tar repacked-current.tar > current.delta
tar c current.delta >&4
fi
kill-timeout: 30m
prepare: |
# NOTE: This part of the code needs to be in spread.yaml as it runs before
# the rest of the source code (including the tests/lib directory) is
# around. The purpose of this code is to fix some connectivity issues and
# then apply the delta of the git repository.
# apt update is hanging on security.ubuntu.com with IPv6, prefer IPv4 over IPv6
cat <<EOF > gai.conf
precedence ::1/128 50
precedence ::/0 40
precedence 2002::/16 30
precedence ::/96 20
precedence ::ffff:0:0/96 100
EOF
if ! mv gai.conf /etc/gai.conf; then
echo "/etc/gai.conf is not writable, ubuntu-core system? apt update won't be affected in that case"
rm -f gai.conf
fi
if command -v restorecon ; then
# restore proper context otherwise SELinux may complain
restorecon -v /etc/gai.conf
fi
if [[ "$SPREAD_SYSTEM" == centos-8-* ]]; then
# the default image of CentOS 8 Stream is set up in enforcing mode,
# which may break some tests. Note that there are tests targeting
# SELinux which explicitly enable enforcing mode.
setenforce 0
fi
# Note that os.query or any other tool cannot be used here before the current.delta file is unpacked
if [[ "$SPREAD_SYSTEM" == fedora-* ]]; then
# The Fedora archive mirror seems to be unreliable.
# Switch to the main archive by commenting out metalink and uncommenting
# baseurl with a tweak to go to dl.fedoraproject.org which doens't redirect
# to mirrors again.
#
# https://forum.snapcraft.io/t/issues-with-the-fedora-mirror-network/3489/
sed -i -s -E -e 's@^#?baseurl=http://download.fedoraproject.org/@baseurl=http://dl.fedoraproject.org/@g' -e 's@^metalink=@#metalink@g' /etc/yum.repos.d/fedora*.repo
dnf --refresh -y makecache
# enable audit daemon
systemctl enable --now auditd.service
fi
if [[ "$SPREAD_SYSTEM" == opensuse-* ]]; then
# refresh metadatadata
# Auto import gpg keys needed for could repository added to support google backend
zypper --gpg-auto-import-keys ref
# We seem to be hitting a flaky openSUSE mirror from time to time,
# increase the number of download attempts libzypp will try to
# workaround that.
cat <<-EOF >> /etc/zypp/zypp.conf
# added by spread tests
download.max_silent_tries = 20
EOF
# Make sure docs are installed with the packages
sed 's/rpm.install.excludedocs = yes/rpm.install.excludedocs = no/g' -i /etc/zypp/zypp.conf
fi
if [[ "$SPREAD_SYSTEM" == arch-* ]]; then
# Possible that AppArmor was not started and is not enabled in the
# image, do both now
if systemctl show -p LoadState apparmor.service | MATCH 'LoadState=loaded' ; then
if ! systemctl is-enabled apparmor.service; then
systemctl enable apparmor.service
fi
systemctl start apparmor.service
else
exit 1
fi
fi
if [[ "$SPREAD_SYSTEM" == debian-* ]]; then
apt-get update && apt-get install -y eatmydata
fi
case "$SPREAD_SYSTEM" in
centos-7-*)
# make sure EPEL is enabled
yum install -y epel-release
;;
centos-8-*)
# enable powertools repository
dnf config-manager --set-enabled powertools
# CentOS Stream requires EPEL Next too, see https://docs.fedoraproject.org/en-US/epel/
dnf install -y epel-release epel-next-release
;;
esac
case "$SPREAD_SYSTEM" in
ubuntu-*|debian-*)
# make sure unattended-upgrades does not get in the way
if systemctl is-enabled unattended-upgrades.service; then
systemctl stop unattended-upgrades.service
systemctl mask unattended-upgrades.service
fi
;;
esac
# Make sure ssh service is restarted after it is killed by spread (pkill -o -HUP sshd)
# during the machine setup in google systems. For more details see lp:2011458
if [ "$SPREAD_BACKEND" = "google" ] && [[ "$SPREAD_SYSTEM" == ubuntu-2* ]] && ! systemctl is-active ssh; then
systemctl restart ssh
fi
# Unpack delta, or move content out of the prefixed directory (see rename and repack above).
# (needs to be in spread.yaml directly because there's nothing else on the filesystem yet)
if [ -f current.delta ]; then
tf=$(mktemp)
# NOTE: We can't use tests/lib/pkgdb.sh here as it doesn't exist at
# this time when none of the test files is yet in place.
case "$SPREAD_SYSTEM" in
ubuntu-*|debian-*)
apt-get update >& "$tf" || ( cat "$tf"; exit 1 )
apt-get install -y xdelta3 curl eatmydata >& "$tf" || ( cat "$tf"; exit 1 )
;;
amazon-linux-2023-*)
echo "deltas are not supported on $SPREAD_SYSTEM, use NO_DELTA=1 when running spread"
exit 1
;;
amazon-*|centos-7-*)
yum install -y xdelta curl &> "$tf" || (cat "$tf"; exit 1)
;;
fedora-*|centos-*)
dnf install --refresh -y xdelta curl &> "$tf" || (cat "$tf"; exit 1)
;;
opensuse-*)
zypper -q --gpg-auto-import-keys refresh
zypper -q install -y xdelta3 curl &> "$tf" || (cat "$tf"; exit 1)
;;
arch-*)
# there may be a libc upgrade which only -Syu handles;
# ignore linux kernel as we would fail to detect it and handle
# reboot; actual distro upgrade is done later in prepare.
pacman -Syu --noconfirm xdelta3 curl --ignore linux &> "$tf" || (cat "$tf"; exit 1)
;;
esac
rm -f "$tf"
curl -sS -o - "https://codeload.github.com/snapcore/snapd/tar.gz/$DELTA_REF" | gunzip > delta-ref.tar
xdelta3 -q -c -d -s delta-ref.tar current.delta | tar x --strip-components=1
rm -f delta-ref.tar current.delta
elif [ -d "$DELTA_PREFIX" ]; then
find "$DELTA_PREFIX" -mindepth 1 -maxdepth 1 -exec mv {} . \;
rmdir "$DELTA_PREFIX"
fi
# Take the MATCH and REBOOT functions from spread and allow our shell
# scripts to use them as shell commands. The replacements are real
# executables in tests/lib/bin (which is on PATH) but they source
# spread-funcs.sh written here, base on the definitions provided by SPREAD.
# This ensures that 1) spread functions define the code 2) both MATCH and
# REBOOT are executables and not functions, and can be called from any
# context.
type MATCH | tail -n +2 > "$TESTSLIB"/spread-funcs.sh
unset MATCH
type NOMATCH | tail -n +2 >> "$TESTSLIB"/spread-funcs.sh
unset NOMATCH
type REBOOT | tail -n +2 >> "$TESTSLIB"/spread-funcs.sh
unset REBOOT
# Copy external tools from the subtree to the "$TESTSLIB"/tools directory
# The idea is to have a single directory with all the testing tools
cp -f "$TESTSLIB"/external/snapd-testing-tools/tools/* "$TESTSTOOLS"
cp -f "$TESTSLIB"/external/snapd-testing-tools/remote/* "$TESTSTOOLS"
# ensure there are no broken snaps or the invariant test will fail later
if command -v snap; then
BROKEN="$(snap list --all | awk '/,?broken,?/ {print $1,$3}')"
if [ -n "$BROKEN" ]; then
echo "Test system has broken snaps:"
snap list --all
exit 1
fi
fi
# NOTE: At this stage the source tree is available and no more special
# considerations apply.
"$TESTSLIB"/prepare-restore.sh --prepare-project
prepare-each: |
"$TESTSLIB"/prepare-restore.sh --prepare-project-each
restore: |
"$TESTSLIB"/prepare-restore.sh --restore-project
restore-each: |
"$TESTSLIB"/prepare-restore.sh --restore-project-each
suites:
tests/lib/tools/suite/:
summary: Tests for tests/lib/tools tools
backends: [google, qemu]
prepare-each: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite-each-minimal-no-snaps
restore-each: |
"$TESTSLIB"/prepare-restore.sh --restore-suite-each-minimal-no-snaps
# The essential tests designed to run inside the autopkgtest
# environment on each platform. On autopkgtest we cannot run all tests
# as this is very slow and we run into timeouts.
#
# These tests are executed on all other plattforms as they
# are designed to run on pristine systems
tests/smoke/:
summary: Essential system level tests for snapd
prepare: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite
prepare-each: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite-each
restore-each: |
"$TESTSLIB"/prepare-restore.sh --restore-suite-each
restore: |
"$TESTSLIB"/prepare-restore.sh --restore-suite
# All other tests run now and will heavily modify the system.
tests/main/:
summary: Full-system tests for snapd
systems: [-ubuntu-secboot-*]
prepare: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite
prepare-each: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite-each
restore-each: |
"$TESTSLIB"/prepare-restore.sh --restore-suite-each
restore: |
"$TESTSLIB"/prepare-restore.sh --restore-suite
debug: |
if [ "$SPREAD_DEBUG_EACH" = 1 ]; then
systemctl status snapd.socket || true
fi
tests/core/:
summary: Subset of Ubuntu Core specific tests
systems: [ubuntu-core-*]
prepare: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite
prepare-each: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite-each
restore-each: |
"$TESTSLIB"/prepare-restore.sh --restore-suite-each
restore: |
"$TESTSLIB"/prepare-restore.sh --restore-suite
tests/completion/:
summary: completion tests
# ppc64el disabled because of https://bugs.launchpad.net/snappy/+bug/1655594
systems: [-ubuntu-core-*, -ubuntu-*-ppc64el, -ubuntu-secboot-*]
prepare: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite
prepare-each: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite-each
restore-each: |
"$TESTSLIB"/prepare-restore.sh --restore-suite-each
restore: |
"$TESTSLIB"/prepare-restore.sh --restore-suite
environment:
_/plain: _
_/plain_plusdirs: _
_/funky: _
_/files: _
# dirs fails on indirection because of (mis)handling of trailing
# slashes. This might be configuration-dependent.
# _/dirs: _
_/hosts: _
_/hosts_n_dirs: _
# twisted fails in travis (but not regular spread).
#_/twisted: _
_/func: _
_/funkyfunc: _
_/funcarg: _
tests/regression/:
summary: Regression tests for snapd
systems: [-ubuntu-secboot-*]
prepare: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite
prepare-each: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite-each
restore-each: |
"$TESTSLIB"/prepare-restore.sh --restore-suite-each
restore: |
"$TESTSLIB"/prepare-restore.sh --restore-suite
tests/upgrade/:
summary: Tests for snapd upgrade
# Test cases are not yet ported to openSUSE that is why we keep
# it disabled. A later PR will enable most tests and
# drop the list of excluded systems.
systems: [-ubuntu-core-*, -opensuse-*, -ubuntu-secboot-*]
prepare-each: |
# FIXME: this should really use prepare-restore.sh --prepare-suite-each
# like other suites, needs more investigation
# shellcheck source=tests/lib/state.sh
. "$TESTSLIB"/state.sh
mkdir -p "$RUNTIME_STATE_PATH"
# save the job which is going to be executed in the system
echo -n "$SPREAD_JOB " >> "$RUNTIME_STATE_PATH/runs"
restore: |
if [ "$REMOTE_STORE" = staging ]; then
echo "skip upgrade tests while talking to the staging store"
exit 0
fi
restore-each: |
if [ "$REMOTE_STORE" = staging ]; then
echo "skip upgrade tests while talking to the staging store"
exit 0
fi
#shellcheck source=tests/lib/pkgdb.sh
. "$TESTSLIB"/pkgdb.sh
distro_purge_package snapd
distro_purge_package snapd-xdg-open || true
tests/cross/:
summary: Cross-compile tests
systems: [ubuntu-16.04-64, ubuntu-18.04-64]
tests/unit/:
summary: Suite to run unit tests (non-go and different go runtimes)
# Test cases are not yet ported to Fedora/openSUSE/Arch that is why
# we keep them disabled. A later PR will enable most tests and
# drop the list of excluded systems.
systems:
[
-ubuntu-core-*,
-fedora-*,
-opensuse-*,
-arch-*,
-amazon-*,
-centos-*,
-ubuntu-secboot-*,
]
# unittests are run as part of the autopkgtest build already
backends: [-autopkgtest]
environment:
# env vars required for coverage reporting from a spread task
COVERMODE: '$(HOST: echo "$COVERMODE")'
prepare: |
#shellcheck source=tests/lib/prepare.sh
. "$TESTSLIB"/prepare.sh
prepare_classic
prepare-each: |
"$TESTSLIB"/reset.sh --reuse-core
#shellcheck source=tests/lib/prepare.sh
. "$TESTSLIB"/prepare.sh
prepare_each_classic
restore: |
"$TESTSLIB"/reset.sh --store
#shellcheck source=tests/lib/pkgdb.sh
. "$TESTSLIB"/pkgdb.sh
distro_purge_package snapd
case "$SPREAD_SYSTEM" in
arch-*)
# there is no snap-confine and ubuntu-core-launcher
# in Arch
;;
*)
distro_purge_package snap-confine ubuntu-core-launcher
;;
esac
tests/nightly/:
summary: Suite for nightly, expensive, tests
manual: true
# Test cases are not yet ported to Fedora/openSUSE/Arch/AMZN2 that is why
# we keep them disabled. A later PR will enable most tests and
# drop the list of excluded systems.
prepare: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite
prepare-each: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite-each
restore-each: |
"$TESTSLIB"/prepare-restore.sh --restore-suite-each
restore: |
"$TESTSLIB"/prepare-restore.sh --restore-suite
tests/perf/main/:
summary: Performance and Load tests
backends: [external]
environment:
CONNECTIONS_PERCENTAGE: '$(HOST: echo "${PERF_CONNECTIONS_PERCENTAGE:-100}")'
DISCONNECT_INTERFACES: '$(HOST: echo "${PERF_DISCONNECT_INTERFACES:-true}")'
CPU_LOAD: '$(HOST: echo "${PERF_CPU_LOAD:-}")'
LOAD_DURATION: '$(HOST: echo "${PERF_LOAD_DURATION:-1200}")'
NUM_PARALLEL: '$(HOST: echo "${PERF_NUM_PARALLEL:-10}")'
NUM_SNAPS: '$(HOST: echo "${PERF_NUM_SNAPS:-100}")'
manual: true
warn-timeout: 10m
kill-timeout: 60m
prepare: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite
prepare-each: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite-each
if [ -n "$CPU_LOAD" ]; then
# Start load generator and wait until it is active
# It is generated as a systemd service to make it independent of snapd
# and also to make sure it is not blocking spread scripts
snap install --edge --devmode test-snapd-load-generator
tests.systemd create-and-start-unit load-generator "/snap/bin/test-snapd-load-generator.run -d $LOAD_DURATION -l $CPU_LOAD"
tests.systemd wait-for-service -n 5 --wait 1 --state active load-generator
fi
restore-each: |
if [ -n "$CPU_LOAD" ]; then
# Now we make sure all the load generator processes are killed before
# the load-generator service is removed
#shellcheck disable=SC2009
PIDs="$(ps -ef | grep -e '^root.*python3.*load-generator' | awk '{print $2}')"
# shellcheck disable=SC2086
for pid in $PIDs; do
if ps -p "$pid" &>/dev/null; then
kill -9 "$pid"
fi
done
tests.systemd stop-unit --remove load-generator
fi
"$TESTSLIB"/prepare-restore.sh --restore-suite-each
restore: |
"$TESTSLIB"/prepare-restore.sh --restore-suite
tests/nested/manual/:
summary: Tests for nested images controlled manually from the tests
backends: [google-nested, google-nested-dev, qemu-nested, google-nested-arm]
environment:
NESTED_TYPE: "classic"
# Enable kvm in the qemu command line
NESTED_ENABLE_KVM: '$(HOST: echo "${NESTED_ENABLE_KVM:-true}")'
# Enable tpm in the nested vm in case it is supported
NESTED_ENABLE_TPM: '$(HOST: echo "${NESTED_ENABLE_TPM:-}")'
# Enable secure boot in the nested vm in case it is supported
NESTED_ENABLE_SECURE_BOOT: '$(HOST: echo "${NESTED_ENABLE_SECURE_BOOT:-}")'
# Add snapd debug and log to serial console
NESTED_SNAPD_DEBUG_TO_SERIAL: '$(HOST: echo "${NESTED_SNAPD_DEBUG_TO_SERIAL:-false}")'
# Add any extra cmd line parameter to the nested vm
NESTED_EXTRA_CMDLINE: '$(HOST: echo "${NESTED_EXTRA_CMDLINE:-}")'
# Generic imane name which has to be overwritten in the test
NESTED_IMAGE_ID: "unset"
# Configuration file used for remote tools
REMOTE_CFG_FILE: "$PROJECT_PATH/remote.setup.cfg"
# Define which tests to run in the nested vm in run-spread test
NESTED_SPREAD_TESTS: '$(HOST: echo "${NESTED_SPREAD_TESTS:-}")'
manual: true
warn-timeout: 10m
kill-timeout: 60m
prepare: |
#shellcheck source=tests/lib/pkgdb.sh
. "$TESTSLIB"/pkgdb.sh
#shellcheck source=tests/lib/image.sh
. "$TESTSLIB"/image.sh
distro_update_package_db
distro_install_package snapd qemu qemu-utils genisoimage sshpass qemu-kvm cloud-image-utils ovmf kpartx xz-utils mtools ca-certificates xdelta3
if os.query is-xenial || os.query is-arm; then
# the new ubuntu-image expects mkfs to support -d option, which was not
# supported yet by the version of mkfs that shipped with Ubuntu 16.04
# also ubuntu-image binary is not prebuilt for arm instances
snap install ubuntu-image --channel="$UBUNTU_IMAGE_SNAP_CHANNEL" --classic
else
get_ubuntu_image
fi
if os.query is-arm; then
export NESTED_ARCHITECTURE=arm64
else
export NESTED_ARCHITECTURE=amd64
fi
# Install the snapd built
dpkg -i "$SPREAD_PATH"/../snapd_*.deb
# Configure the ssh connection to the test vm
remote.setup config --host localhost --port 8022 --user user1 --pass ubuntu
prepare-each: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite-each
tests.nested prepare
if os.query is-xenial && ! command -v ubuntu-image >/dev/null; then
# This is needed because the snap in removed during on restore-each
snap install ubuntu-image --channel="$UBUNTU_IMAGE_SNAP_CHANNEL" --classic
fi
restore-each: |
tests.nested vm remove
tests.nested restore
"$TESTSLIB"/prepare-restore.sh --restore-suite-each
restore: |
#shellcheck source=tests/lib/pkgdb.sh
. "$TESTSLIB"/pkgdb.sh
distro_purge_package qemu genisoimage sshpass qemu-kvm cloud-image-utils xz-utils
tests/nested/classic/:
summary: Tests for nested images
backends: [google-nested, google-nested-dev, qemu-nested, google-nested-arm]
environment:
NESTED_TYPE: "classic"
# Channel used to create the nested vm
NESTED_ENABLE_KVM: '$(HOST: echo "${NESTED_ENABLE_KVM:-true}")'
# Enable tpm in the nested vm in case it is supported
NESTED_ENABLE_TPM: '$(HOST: echo "${NESTED_ENABLE_TPM:-false}")'
# Enable secure boot in the nested vm in case it is supported
NESTED_ENABLE_SECURE_BOOT: '$(HOST: echo "${NESTED_ENABLE_SECURE_BOOT:-false}")'
# Configuration file used for remote tools
REMOTE_CFG_FILE: "$PROJECT_PATH/remote.setup.cfg"
manual: true
prepare: |
#shellcheck source=tests/lib/pkgdb.sh
. "$TESTSLIB"/pkgdb.sh
#shellcheck source=tests/lib/image.sh
. "$TESTSLIB"/image.sh
distro_update_package_db
distro_install_package snapd qemu qemu-utils genisoimage sshpass qemu-kvm cloud-image-utils ovmf kpartx xz-utils mtools ca-certificates xdelta3
if os.query is-xenial || os.query is-arm; then
# the new ubuntu-image expects mkfs to support -d option, which was not
# supported yet by the version of mkfs that shipped with Ubuntu 16.04
# also ubuntu-image binary is not prebuilt for arm instances
snap install ubuntu-image --channel="$UBUNTU_IMAGE_SNAP_CHANNEL" --classic
else
get_ubuntu_image
fi
if os.query is-arm; then
export NESTED_ARCHITECTURE=arm64
else
export NESTED_ARCHITECTURE=amd64
fi
# Install the snapd built
dpkg -i "$SPREAD_PATH"/../snapd_*.deb
# Configure the ssh connection to the test vm
remote.setup config --host localhost --port 8022 --user user1 --pass ubuntu
tests.nested prepare
tests.nested build-image classic
prepare-each: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite-each
tests.nested create-vm classic
restore-each: |
tests.nested vm remove
"$TESTSLIB"/prepare-restore.sh --restore-suite-each
restore: |
tests.nested restore
#shellcheck source=tests/lib/pkgdb.sh
. "$TESTSLIB"/pkgdb.sh
distro_purge_package qemu genisoimage sshpass qemu-kvm cloud-image-utils xz-utils
tests/nested/core/:
summary: Tests for nested images
backends: [google-nested, google-nested-dev, qemu-nested, google-nested-arm]
environment:
NESTED_TYPE: "core"
# Enable kvm in the qemu command line
NESTED_ENABLE_KVM: '$(HOST: echo "${NESTED_ENABLE_KVM:-true}")'
# Enable tpm in the nested vm in case it is supported
NESTED_ENABLE_TPM: '$(HOST: echo "${NESTED_ENABLE_TPM:-}")'
# Enable secure boot in the nested vm in case it is supported
NESTED_ENABLE_SECURE_BOOT: '$(HOST: echo "${NESTED_ENABLE_SECURE_BOOT:-}")'
# Add snapd debug and log to serial console
NESTED_SNAPD_DEBUG_TO_SERIAL: '$(HOST: echo "${NESTED_SNAPD_DEBUG_TO_SERIAL:-false}")'
# Add any extra cmd line parameter to the nested vm
NESTED_EXTRA_CMDLINE: '$(HOST: echo "${NESTED_EXTRA_CMDLINE:-}")'
# Configuration file used for remote tools
REMOTE_CFG_FILE: "$PROJECT_PATH/remote.setup.cfg"
manual: true
prepare: |
#shellcheck source=tests/lib/pkgdb.sh
. "$TESTSLIB"/pkgdb.sh
#shellcheck source=tests/lib/image.sh
. "$TESTSLIB"/image.sh
distro_update_package_db
distro_install_package snapd qemu qemu-utils genisoimage sshpass qemu-kvm cloud-image-utils ovmf kpartx xz-utils mtools ca-certificates xdelta3
if os.query is-xenial || os.query is-arm; then
# the new ubuntu-image expects mkfs to support -d option, which was not
# supported yet by the version of mkfs that shipped with Ubuntu 16.04
# also ubuntu-image binary is not prebuilt for arm instances
snap install ubuntu-image --channel="$UBUNTU_IMAGE_SNAP_CHANNEL" --classic
else
get_ubuntu_image
fi
# Install the snapd built
dpkg -i "$SPREAD_PATH"/../snapd_*.deb
# Configure the ssh connection to the test vm
remote.setup config --host localhost --port 8022 --user user1 --pass ubuntu
tests.nested prepare
tests.nested build-image core
prepare-each: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite-each
tests.nested create-vm core
restore-each: |
tests.nested vm remove
"$TESTSLIB"/prepare-restore.sh --restore-suite-each
restore: |
tests.nested restore
#shellcheck source=tests/lib/pkgdb.sh
. "$TESTSLIB"/pkgdb.sh
distro_purge_package qemu genisoimage sshpass qemu-kvm cloud-image-utils xz-utils
tests/perf/nested/:
summary: Performance and Load tests preparation suite
backends: [google-nested, google-nested-dev, qemu-nested]
environment:
NESTED_TYPE: "core"
# Enable kvm in the qemu command line
NESTED_ENABLE_KVM: '$(HOST: echo "${NESTED_ENABLE_KVM:-true}")'
# Enable tpm in the nested vm in case it is supported
NESTED_ENABLE_TPM: '$(HOST: echo "${NESTED_ENABLE_TPM:-true}")'
# Enable secure boot in the nested vm in case it is supported
NESTED_ENABLE_SECURE_BOOT: '$(HOST: echo "${NESTED_ENABLE_SECURE_BOOT:-true}")'
# Add snapd debug and log to serial console
NESTED_SNAPD_DEBUG_TO_SERIAL: '$(HOST: echo "${NESTED_SNAPD_DEBUG_TO_SERIAL:-false}")'
# Add any extra cmd line parameter to the nested vm
NESTED_EXTRA_CMDLINE: '$(HOST: echo "${NESTED_EXTRA_CMDLINE:-}")'
# Configuration file used for remote tools
REMOTE_CFG_FILE: "$PROJECT_PATH/remote.setup.cfg"
# Indicates the number of cpus to use in the nested vm
NESTED_CPUS: '$(HOST: echo "${NESTED_CPUS:-2}")'
# Indicates the amount of memory in MB to use in the nested vm
NESTED_MEM: '$(HOST: echo "${NESTED_MEM:-4096}")'
SPREAD_URL: https://storage.googleapis.com/snapd-spread-tests/spread/spread-amd64.tar.gz
manual: true
warn-timeout: 10m
kill-timeout: 60m
prepare: |
#shellcheck source=tests/lib/pkgdb.sh
. "$TESTSLIB"/pkgdb.sh
#shellcheck source=tests/lib/image.sh
. "$TESTSLIB"/image.sh
distro_update_package_db
distro_install_package snapd qemu qemu-utils genisoimage sshpass qemu-kvm cloud-image-utils ovmf kpartx xz-utils mtools ca-certificates xdelta3
if os.query is-xenial || os.query is-arm; then
# the new ubuntu-image expects mkfs to support -d option, which was not
# supported yet by the version of mkfs that shipped with Ubuntu 16.04
# also ubuntu-image binary is not prebuilt for arm instances
snap install ubuntu-image --channel="$UBUNTU_IMAGE_SNAP_CHANNEL" --classic
else
get_ubuntu_image
fi
# Install the snapd built
dpkg -i "$SPREAD_PATH"/../snapd_*.deb
# Configure the ssh connection to the test vm
remote.setup config --host localhost --port 8022 --user user1 --pass ubuntu
tests.nested prepare
tests.nested build-image core
prepare-each: |
"$TESTSLIB"/prepare-restore.sh --prepare-suite-each
tests.nested create-vm core --param-cpus "$NESTED_CPUS" --param-mem "$NESTED_MEM"
restore-each: |
tests.nested vm remove
"$TESTSLIB"/prepare-restore.sh --restore-suite-each
restore: |
tests.nested restore
#shellcheck source=tests/lib/pkgdb.sh
. "$TESTSLIB"/pkgdb.sh
distro_purge_package qemu genisoimage sshpass qemu-kvm cloud-image-utils xz-utils
# vim:ts=4:sw=4:et