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/candidate" OLD_UBUNTU_IMAGE_SNAP_CHANNEL: "2/stable" UBUNTU_IMAGE_SNAP_CHANNEL: "latest/edge" SNAPCRAFT_SNAP_CHANNEL: "latest/candidate" # 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.62 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 test-snapd-rsync-core24' # 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}")' # Whether we should use snapd snap ./built-snap/ directory TESTS_USE_PREBUILT_SNAPD_SNAP: '$(HOST: echo "${TESTS_USE_PREBUILT_SNAPD_SNAP:-false}")' backends: google: key: '$(HOST: echo "$SPREAD_GOOGLE_KEY")' location: snapd-spread/europe-west2-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-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 - ubuntu-24.10-64: storage: 12G workers: 8 google-core: type: google key: '$(HOST: echo "$SPREAD_GOOGLE_KEY")' location: snapd-spread/europe-west1-b halt-timeout: 2h systems: - 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 google-pro: type: google # XXX the role assigned to the key must allow for attaching service # accounts key: '$(HOST: echo "$SPREAD_GOOGLE_KEY")' location: snapd-spread/europe-west1-b halt-timeout: 2h systems: - ubuntu-pro-20.04-64: image: ubuntu-os-pro-cloud/ubuntu-pro-2004-focal-v20240614 workers: 1 attach-service-account: true - ubuntu-pro-22.04-64: image: ubuntu-os-pro-cloud/ubuntu-pro-2004-focal-v20240614 workers: 1 attach-service-account: true google-distro-1: type: google key: '$(HOST: echo "$SPREAD_GOOGLE_KEY")' location: snapd-spread/europe-west3-b halt-timeout: 2h systems: - debian-11-64: workers: 6 - debian-12-64: workers: 6 - debian-sid-64: storage: 12G workers: 6 - fedora-39-64: workers: 6 - amazon-linux-2-64: workers: 6 storage: preserve-size - amazon-linux-2023-64: workers: 6 storage: preserve-size google-distro-2: type: google key: '$(HOST: echo "$SPREAD_GOOGLE_KEY")' location: snapd-spread/europe-west4-b halt-timeout: 2h systems: - arch-linux-64: workers: 6 storage: 15G - 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 kill-timeout: 60m systems: - ubuntu-20.04-arm-64: image: ubuntu-os-cloud/ubuntu-2004-lts-arm64 workers: 8 storage: 15G - ubuntu-22.04-arm-64: image: ubuntu-os-cloud/ubuntu-2204-lts-arm64 workers: 8 storage: 15G - 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-central1-a halt-timeout: 2h systems: - ubuntu-20.04-64: storage: 12G workers: 8 - 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-nested: type: google key: '$(HOST: echo "$SPREAD_GOOGLE_KEY")' location: snapd-spread/us-central1-a 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: 12 - ubuntu-24.04-64: image: ubuntu-2404-64-virt-enabled storage: 25G workers: 12 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 - ubuntu-24.04-64: image: ubuntu-2404-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 - ubuntu-24.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 - 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: ubuntu123 - ubuntu-core-16-32: username: external password: ubuntu123 - ubuntu-core-16-arm-64: username: external password: ubuntu123 - ubuntu-core-16-arm-32: username: external password: ubuntu123 - ubuntu-core-18-64: username: external password: ubuntu123 - ubuntu-core-18-32: username: external password: ubuntu123 - ubuntu-core-18-arm-64: username: external password: ubuntu123 - ubuntu-core-18-arm-32: username: external password: ubuntu123 - ubuntu-core-20-64: username: external password: ubuntu123 - ubuntu-core-20-arm-64: username: external password: ubuntu123 - ubuntu-core-20-arm-32: username: external password: ubuntu123 - ubuntu-core-22-64: username: external password: ubuntu123 - ubuntu-core-22-arm-64: username: external password: ubuntu123 - ubuntu-core-22-arm-32: username: external password: ubuntu123 - ubuntu-core-24-64: username: external password: ubuntu123 - ubuntu-core-24-arm-64: username: external password: ubuntu123 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 exit 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' if [ -f "$RUNTIME_STATE_PATH/runs" ]; then echo "EXECUTED_TESTS=$(cat $RUNTIME_STATE_PATH/runs)" fi # Add new line at the end of the debug output echo '' 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 < 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 # 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 # Enable EPEL see https://docs.fedoraproject.org/en-US/epel/ case "$SPREAD_SYSTEM" in centos-9-*) dnf config-manager --set-enabled crb 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-*) 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-*) # In Arch there is no separate snap-confine package. ;; *) 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-kvm qemu-utils genisoimage sshpass cloud-image-utils ovmf kpartx xz-utils mtools ca-certificates xdelta3 if os.query is-xenial; 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="$OLD_UBUNTU_IMAGE_SNAP_CHANNEL" --classic elif os.query is-arm; then 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="$OLD_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-kvm qemu-utils genisoimage sshpass cloud-image-utils ovmf kpartx xz-utils mtools ca-certificates xdelta3 if os.query is-xenial; 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="$OLD_UBUNTU_IMAGE_SNAP_CHANNEL" --classic elif os.query is-arm; then 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-kvm qemu-utils genisoimage sshpass cloud-image-utils ovmf kpartx xz-utils mtools ca-certificates xdelta3 if os.query is-xenial; 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="$OLD_UBUNTU_IMAGE_SNAP_CHANNEL" --classic elif os.query is-arm; then 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-kvm qemu-utils genisoimage sshpass cloud-image-utils ovmf kpartx xz-utils mtools ca-certificates xdelta3 if os.query is-xenial; 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="$OLD_UBUNTU_IMAGE_SNAP_CHANNEL" --classic elif os.query is-arm; then 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