diff --git a/.packit.yaml b/.packit.yaml index f8914eb21..d5822bb45 100644 --- a/.packit.yaml +++ b/.packit.yaml @@ -69,8 +69,16 @@ jobs: - job: tests trigger: pull_request targets: + - centos-stream-9-x86_64 + - centos-stream-9-aarch64 + - centos-stream-10-x86_64 + - centos-stream-10-aarch64 - fedora-41-x86_64 - fedora-41-aarch64 + - fedora-42-x86_64 + - fedora-42-aarch64 + - fedora-rawhide-x86_64 + - fedora-rawhide-aarch64 tmt_plan: /integration skip_build: true identifier: integration-test diff --git a/hack/provision-derived.sh b/hack/provision-derived.sh index 215c598ec..688716129 100755 --- a/hack/provision-derived.sh +++ b/hack/provision-derived.sh @@ -3,18 +3,34 @@ set -xeu # I'm a big fan of nushell for interactive use, and I want to support # using it in our test suite because it's better than bash. First, # enable EPEL to get it. -. /usr/lib/os-release -if echo $ID_LIKE $ID | grep -q centos; then - dnf config-manager --set-enabled crb - dnf -y install epel-release epel-next-release -fi + # Ensure this is pre-created mkdir -p -m 0700 /var/roothome mkdir -p ~/.config/nushell echo '$env.config = { show_banner: false, }' > ~/.config/nushell/config.nu touch ~/.config/nushell/env.nu -dnf -y install nu -dnf clean all + +. /usr/lib/os-release +case "${ID}-${VERSION_ID}" in + "centos-9") + dnf config-manager --set-enabled crb + dnf -y install epel-release epel-next-release + dnf -y install nu + dnf clean all + ;; + "centos-10") + # nu is not available in CS10 + curl -kL "https://github.com/nushell/nushell/releases/download/0.103.0/nu-0.103.0-$(uname -m)-unknown-linux-gnu.tar.gz" --output nu.tar.gz + mkdir -p nu && tar zvxf nu.tar.gz --strip-components=1 -C nu + mv nu/nu /usr/bin/nu + rm -rf nu nu.tar.gz + ;; + "fedora-"*) + dnf -y install nu + dnf clean all + ;; +esac + # Stock extra cleaning of logs and caches in general (mostly dnf) rm /var/log/* /var/cache /var/lib/{dnf,rpm-state,rhsm} -rf # And clean root's homedir diff --git a/plans/integration.fmf b/plans/integration.fmf deleted file mode 100644 index 42b277ed1..000000000 --- a/plans/integration.fmf +++ /dev/null @@ -1,33 +0,0 @@ -provision: - hardware: - cpu: - processors: ">= 2" - memory: ">= 6 GB" - virtualization: - is-supported: true -prepare: - - how: install - package: - - git - - podman - - skopeo - - tmt+provision-virtual - - tmt+provision-bootc - - how: shell - script: | - systemctl start libvirtd - systemctl status libvirtd -environment: - TMT_VERBOSE: 1 -execute: - how: tmt -discover: - how: fmf - test: - - /integration -finish: - how: shell - script: - # move all tmt plan logs to tmt plan data folder - - mkdir -p $TMT_PLAN_DATA/test-tmt-log - - cp -r /var/tmp/tmt/run-* $TMT_PLAN_DATA/test-tmt-log diff --git a/plans/test-01-readonly.fmf b/plans/test-01-readonly.fmf deleted file mode 100644 index bf1642dae..000000000 --- a/plans/test-01-readonly.fmf +++ /dev/null @@ -1,19 +0,0 @@ -provision: - how: bootc - add-tmt-dependencies: true - container-file: hack/Containerfile - container-file-workdir: . - image-builder: quay.io/centos-bootc/bootc-image-builder:latest - disk: 20 -summary: Execute booted readonly/nondestructive tests -execute: - how: tmt - # We currently write tests in nushell. It is is quite nice for running subprocesses - # and the like while making it easy to parse JSON etc. - # All of these tests should generally be read-only - avoid any kind - # of persistent changes. - # If you need to do that, unfortunately right now that needs to be - # a separate plan. - script: | - set -xeu - ls tests/booted/readonly/*-test-*.nu |sort -n | while read t; do nu $t; done diff --git a/plans/test-20-local-upgrade.fmf b/plans/test-20-local-upgrade.fmf deleted file mode 100644 index 8b5a655ea..000000000 --- a/plans/test-20-local-upgrade.fmf +++ /dev/null @@ -1,13 +0,0 @@ -provision: - how: bootc - add-tmt-dependencies: true - container-file: hack/Containerfile - container-file-workdir: . - image-builder: quay.io/centos-bootc/bootc-image-builder:latest - disk: 20 -summary: Execute local upgrade tests -execute: - how: tmt - # We avoid writing nontrivial shell script as a general rule, - # so this is written in nu. - script: exec nu tests/booted/test-image-pushpull-upgrade.nu diff --git a/plans/test-21-logically-bound-switch.fmf b/plans/test-21-logically-bound-switch.fmf deleted file mode 100644 index cbc5b0c5d..000000000 --- a/plans/test-21-logically-bound-switch.fmf +++ /dev/null @@ -1,13 +0,0 @@ -provision: - how: bootc - add-tmt-dependencies: true - container-file: hack/Containerfile - container-file-workdir: . - image-builder: quay.io/centos-bootc/bootc-image-builder:latest - disk: 20 -summary: Execute logically bound images tests for switching images -execute: - how: tmt - # We avoid writing nontrivial shell script as a general rule, - # so this is written in nu. - script: exec nu tests/booted/test-logically-bound-switch.nu diff --git a/plans/test-22-logically-bound-install.fmf b/plans/test-22-logically-bound-install.fmf deleted file mode 100644 index fb1eb5e2e..000000000 --- a/plans/test-22-logically-bound-install.fmf +++ /dev/null @@ -1,11 +0,0 @@ -provision: - how: bootc - add-tmt-dependencies: true - container-file: tests/containerfiles/lbi/Containerfile - container-file-workdir: . - image-builder: quay.io/centos-bootc/bootc-image-builder:latest - disk: 20 -summary: Execute logically bound images tests for installing image -execute: - how: tmt - script: exec nu tests/booted/test-logically-bound-install.nu diff --git a/plans/test-23-install-outside-container.fmf b/plans/test-23-install-outside-container.fmf deleted file mode 100644 index ec17929c0..000000000 --- a/plans/test-23-install-outside-container.fmf +++ /dev/null @@ -1,11 +0,0 @@ -provision: - how: bootc - add-tmt-dependencies: true - container-file: hack/Containerfile - container-file-workdir: . - image-builder: quay.io/centos-bootc/bootc-image-builder:latest - disk: 20 -summary: Execute tests for installing outside of a container -execute: - how: tmt - script: exec nu tests/booted/test-install-outside-container.nu diff --git a/tests/containerfiles/lbi/Containerfile b/tests/containerfiles/lbi/Containerfile deleted file mode 100644 index 5e8606042..000000000 --- a/tests/containerfiles/lbi/Containerfile +++ /dev/null @@ -1,42 +0,0 @@ -# Build bootc from the current git into a c9s-bootc container image. -# Use e.g. --build-arg=base=quay.io/fedora/fedora-bootc:41 to target -# Fedora instead. -# -# You can also generate an image with cloud-init and other dependencies -# with `--build-arg=tmt` which is intended for use particularly via -# https://tmt.readthedocs.io/en/stable/ -ARG base=quay.io/centos-bootc/centos-bootc:stream9 -FROM $base as build -# Keep this stuff before the `COPY . /build` below to ensure that the packages -# are cached, i.e. we don't invalidate the package install stage by editing the source. -COPY contrib /contrib -COPY hack/build.sh /build.sh -RUN /build.sh && rm -v /build.sh -COPY . /build -WORKDIR /build -RUN mkdir -p /build/target/dev-rootfs # This can hold arbitrary extra content -# See https://www.reddit.com/r/rust/comments/126xeyx/exploring_the_problem_of_faster_cargo_docker/ -# We aren't using the full recommendations there, just the simple bits. -RUN --mount=type=cache,target=/build/target --mount=type=cache,target=/var/roothome make test-bin-archive && mkdir -p /out && cp target/bootc.tar.zst /out - -FROM $base -# We support e.g. adding cloud-init -ARG variant= -COPY hack/provision-derived.sh /tmp -RUN /tmp/provision-derived.sh "$variant" && rm -f /tmp/*.sh -# Also copy in some default install configs we use for testing -COPY hack/install-test-configs/* /usr/lib/bootc/install/ -# And some test kargs -COPY hack/test-kargs /usr/lib/bootc/kargs.d/ -# Inject our built code -COPY --from=build /out/bootc.tar.zst /tmp -RUN tar -C / --zstd -xvf /tmp/bootc.tar.zst && rm -vrf /tmp/* -# Also copy over arbitrary bits from the target root -COPY --from=build /build/target/dev-rootfs/ / -# Test our own linting -RUN bootc container lint -# For test-22-logically-bound-install -COPY tests/containerfiles/lbi/usr/. /usr -RUN ln -s /usr/share/containers/systemd/curl.container /usr/lib/bootc/bound-images.d/curl.container && \ - ln -s /usr/share/containers/systemd/curl-base.image /usr/lib/bootc/bound-images.d/curl-base.image && \ - ln -s /usr/share/containers/systemd/podman.image /usr/lib/bootc/bound-images.d/podman.image diff --git a/tests/integration.fmf b/tests/integration.fmf deleted file mode 100644 index f3bb14b04..000000000 --- a/tests/integration.fmf +++ /dev/null @@ -1,3 +0,0 @@ -summary: Run integration test -test: cd .. && dnf -y builddep bootc && make test-tmt -duration: 1h diff --git a/tmt/plans/integration.fmf b/tmt/plans/integration.fmf new file mode 100644 index 000000000..fab04517d --- /dev/null +++ b/tmt/plans/integration.fmf @@ -0,0 +1,56 @@ +# Please change the image when you run this plan locally with tmt run +# tmt run -vvvvv plan -n /integration/test-01-readonly +# local image: file:///home/foobar/image.qcow2 +provision: + how: virtual + image: https://composes.stream.centos.org/stream-10/production/CentOS-Stream-10-20250331.0/compose/BaseOS/x86_64/images/CentOS-Stream-GenericCloud-10-20250331.0.x86_64.qcow2 +prepare: + - how: install + package: + - podman + - skopeo + - jq +execute: + how: tmt + +/test-01-readonly: + summary: Execute booted readonly/nondestructive tests + discover: + how: fmf + test: + - /tmt/tests/test-00-bootc-install + - /tmt/tests/test-01-readonly + +/test-20-local-upgrade: + summary: Execute local upgrade tests + discover: + how: fmf + test: + - /tmt/tests/test-00-bootc-install + - /tmt/tests/test-20-local-upgrade + +/test-21-logically-bound-switch: + summary: Execute logically bound images tests for switching images + discover: + how: fmf + test: + - /tmt/tests/test-00-bootc-install + - /tmt/tests/test-21-logically-bound-switch + +/test-22-logically-bound-install: + summary: Execute logically bound images tests for switching images + environment+: + LBI: enabled + discover: + how: fmf + test: + - /tmt/tests/test-00-bootc-install + - /tmt/tests/test-22-logically-bound-install + +/test-23-install-outside-container: + summary: Execute tests for installing outside of a container + discover: + how: fmf + test: + - /tmt/tests/test-00-bootc-install + - /tmt/tests/test-23-install-outside-container diff --git a/tests/booted/.gitignore b/tmt/tests/booted/.gitignore similarity index 100% rename from tests/booted/.gitignore rename to tmt/tests/booted/.gitignore diff --git a/tests/booted/README.md b/tmt/tests/booted/README.md similarity index 100% rename from tests/booted/README.md rename to tmt/tests/booted/README.md diff --git a/tests/booted/readonly/001-test-status.nu b/tmt/tests/booted/readonly/001-test-status.nu similarity index 100% rename from tests/booted/readonly/001-test-status.nu rename to tmt/tests/booted/readonly/001-test-status.nu diff --git a/tests/booted/readonly/010-test-bootc-container-store.nu b/tmt/tests/booted/readonly/010-test-bootc-container-store.nu similarity index 100% rename from tests/booted/readonly/010-test-bootc-container-store.nu rename to tmt/tests/booted/readonly/010-test-bootc-container-store.nu diff --git a/tests/booted/readonly/011-hostname.nu b/tmt/tests/booted/readonly/011-hostname.nu similarity index 100% rename from tests/booted/readonly/011-hostname.nu rename to tmt/tests/booted/readonly/011-hostname.nu diff --git a/tests/booted/readonly/011-test-ostree-ext-cli.nu b/tmt/tests/booted/readonly/011-test-ostree-ext-cli.nu similarity index 100% rename from tests/booted/readonly/011-test-ostree-ext-cli.nu rename to tmt/tests/booted/readonly/011-test-ostree-ext-cli.nu diff --git a/tests/booted/readonly/011-test-resolvconf.nu b/tmt/tests/booted/readonly/011-test-resolvconf.nu similarity index 100% rename from tests/booted/readonly/011-test-resolvconf.nu rename to tmt/tests/booted/readonly/011-test-resolvconf.nu diff --git a/tests/booted/readonly/012-test-unit-status.nu b/tmt/tests/booted/readonly/012-test-unit-status.nu similarity index 100% rename from tests/booted/readonly/012-test-unit-status.nu rename to tmt/tests/booted/readonly/012-test-unit-status.nu diff --git a/tests/booted/readonly/015-test-fsck.nu b/tmt/tests/booted/readonly/015-test-fsck.nu similarity index 100% rename from tests/booted/readonly/015-test-fsck.nu rename to tmt/tests/booted/readonly/015-test-fsck.nu diff --git a/tests/booted/readonly/020-test-relabel.nu b/tmt/tests/booted/readonly/020-test-relabel.nu similarity index 100% rename from tests/booted/readonly/020-test-relabel.nu rename to tmt/tests/booted/readonly/020-test-relabel.nu diff --git a/tests/booted/readonly/tap.nu b/tmt/tests/booted/readonly/tap.nu similarity index 100% rename from tests/booted/readonly/tap.nu rename to tmt/tests/booted/readonly/tap.nu diff --git a/tests/booted/tap.nu b/tmt/tests/booted/tap.nu similarity index 100% rename from tests/booted/tap.nu rename to tmt/tests/booted/tap.nu diff --git a/tests/booted/test-image-pushpull-upgrade.nu b/tmt/tests/booted/test-image-pushpull-upgrade.nu similarity index 100% rename from tests/booted/test-image-pushpull-upgrade.nu rename to tmt/tests/booted/test-image-pushpull-upgrade.nu diff --git a/tests/booted/test-install-outside-container.nu b/tmt/tests/booted/test-install-outside-container.nu similarity index 100% rename from tests/booted/test-install-outside-container.nu rename to tmt/tests/booted/test-install-outside-container.nu diff --git a/tests/booted/test-logically-bound-install.nu b/tmt/tests/booted/test-logically-bound-install.nu similarity index 100% rename from tests/booted/test-logically-bound-install.nu rename to tmt/tests/booted/test-logically-bound-install.nu diff --git a/tests/booted/test-logically-bound-switch.nu b/tmt/tests/booted/test-logically-bound-switch.nu similarity index 100% rename from tests/booted/test-logically-bound-switch.nu rename to tmt/tests/booted/test-logically-bound-switch.nu diff --git a/tests/containerfiles/lbi/usr/share/containers/systemd/curl-base.image b/tmt/tests/lbi/usr/share/containers/systemd/curl-base.image similarity index 100% rename from tests/containerfiles/lbi/usr/share/containers/systemd/curl-base.image rename to tmt/tests/lbi/usr/share/containers/systemd/curl-base.image diff --git a/tests/containerfiles/lbi/usr/share/containers/systemd/curl.container b/tmt/tests/lbi/usr/share/containers/systemd/curl.container similarity index 100% rename from tests/containerfiles/lbi/usr/share/containers/systemd/curl.container rename to tmt/tests/lbi/usr/share/containers/systemd/curl.container diff --git a/tests/containerfiles/lbi/usr/share/containers/systemd/jboss-webserver-5.image b/tmt/tests/lbi/usr/share/containers/systemd/jboss-webserver-5.image similarity index 100% rename from tests/containerfiles/lbi/usr/share/containers/systemd/jboss-webserver-5.image rename to tmt/tests/lbi/usr/share/containers/systemd/jboss-webserver-5.image diff --git a/tests/containerfiles/lbi/usr/share/containers/systemd/podman.image b/tmt/tests/lbi/usr/share/containers/systemd/podman.image similarity index 100% rename from tests/containerfiles/lbi/usr/share/containers/systemd/podman.image rename to tmt/tests/lbi/usr/share/containers/systemd/podman.image diff --git a/tmt/tests/test-00-bootc-install.fmf b/tmt/tests/test-00-bootc-install.fmf new file mode 100644 index 000000000..2802ac666 --- /dev/null +++ b/tmt/tests/test-00-bootc-install.fmf @@ -0,0 +1,3 @@ +summary: Run bootc install to-existing-root to deploy bootc image +test: ./test-00-bootc-install.sh +duration: 30m diff --git a/tmt/tests/test-00-bootc-install.sh b/tmt/tests/test-00-bootc-install.sh new file mode 100755 index 000000000..b9535718a --- /dev/null +++ b/tmt/tests/test-00-bootc-install.sh @@ -0,0 +1,147 @@ +#!/bin/bash +set -exuo pipefail + +BOOTC_TEMPDIR=$(mktemp -d) +trap 'rm -rf -- "$BOOTC_TEMPDIR"' EXIT + +# LBI only enabled for test-22-logically-bound-install +LBI="${LBI:-disabled}" + +# Get OS info +source /etc/os-release +case "$ID" in + "centos") + TIER1_IMAGE_URL="${TIER1_IMAGE_URL:-quay.io/centos-bootc/centos-bootc:stream${VERSION_ID}}" + ;; + "fedora") + TIER1_IMAGE_URL="${TIER1_IMAGE_URL:-quay.io/fedora/fedora-bootc:${VERSION_ID}}" + ;; +esac + +if [ "$TMT_REBOOT_COUNT" -eq 0 ]; then + # Copy bootc root folder to image build root folder + cp -a ../../. "$BOOTC_TEMPDIR" + + # TMT needs this key + cp -r /root/.ssh "$BOOTC_TEMPDIR" + + # Running on Testing Farm + if [[ -d "/var/ARTIFACTS" ]]; then + cp -r /var/ARTIFACTS "$BOOTC_TEMPDIR" + # Running on local machine with tmt run + else + cp -r /var/tmp/tmt "$BOOTC_TEMPDIR" + fi + + # Some rhts-*, rstrnt-* and tmt-* commands are in /usr/local/bin + cp -r /usr/local/bin "$BOOTC_TEMPDIR" + + # Check image building folder content + ls -al "$BOOTC_TEMPDIR" + + CONTAINERFILE=${BOOTC_TEMPDIR}/Containerfile + tee "$CONTAINERFILE" > /dev/null << REALEOF +FROM $TIER1_IMAGE_URL as build + +COPY contrib /contrib +COPY hack/build.sh /build.sh +RUN /build.sh && rm -v /build.sh +COPY . /build +WORKDIR /build + +RUN mkdir -p /build/target/dev-rootfs +RUN --mount=type=cache,target=/build/target --mount=type=cache,target=/var/roothome make test-bin-archive && mkdir -p /out && cp target/bootc.tar.zst /out + +FROM $TIER1_IMAGE_URL + +COPY hack/provision-derived.sh /tmp +RUN /tmp/provision-derived.sh && rm -f /tmp/*.sh +# Also copy in some default install configs we use for testing +COPY hack/install-test-configs/* /usr/lib/bootc/install/ +# And some test kargs +COPY hack/test-kargs /usr/lib/bootc/kargs.d/ +# Inject our built code +COPY --from=build /out/bootc.tar.zst /tmp +RUN tar -C / --zstd -xvf /tmp/bootc.tar.zst && rm -vrf /tmp/* +# Also copy over arbitrary bits from the target root +COPY --from=build /build/target/dev-rootfs/ / + +RUN <> /usr/lib/bootc/kargs.d/20-console.toml +kargs = ["console=ttyS0,115200n8"] +KARGEOF + +# cloud-init and rsync are required by TMT +dnf -y install cloud-init rsync +ln -s ../cloud-init.target /usr/lib/systemd/system/default.target.wants +dnf -y clean all + +rm -rf /var/cache /var/lib/dnf +EORUN + +# Some rhts-*, rstrnt-* and tmt-* commands are in /usr/local/bin +COPY bin /usr/local/bin + +# In Testing Farm, all ssh things should be reserved for ssh command run after reboot +COPY .ssh /var/roothome/.ssh +REALEOF + + if [[ -d "/var/ARTIFACTS" ]]; then + # In Testing Farm, TMT work dir /var/ARTIFACTS should be reserved + echo "COPY ARTIFACTS /var/ARTIFACTS" >> "$CONTAINERFILE" + else + # In local machine, TMT work dir /var/tmp/tmt should be reserved + echo "COPY tmt /var/tmp/tmt" >> "$CONTAINERFILE" + fi + + # For test-22-logically-bound-install + if [[ "$LBI" == "enabled" ]]; then + echo "COPY tmt/tests/lbi/usr/. /usr" >> "$CONTAINERFILE" + echo "RUN ln -s /usr/share/containers/systemd/curl.container /usr/lib/bootc/bound-images.d/curl.container && ln -s /usr/share/containers/systemd/curl-base.image /usr/lib/bootc/bound-images.d/curl-base.image && ln -s /usr/share/containers/systemd/podman.image /usr/lib/bootc/bound-images.d/podman.image" >> "$CONTAINERFILE" + podman pull --retry 5 --retry-delay 5s quay.io/curl/curl:latest + podman pull --retry 5 --retry-delay 5s quay.io/curl/curl-base:latest + podman pull --retry 5 --retry-delay 5s registry.access.redhat.com/ubi9/podman:latest + fi + + cat "$CONTAINERFILE" + # Retry here to avoid quay.io "502 Bad Gateway" + podman build --retry 5 --retry-delay 5s --tls-verify=false -t localhost/bootc:tmt -f "$CONTAINERFILE" "$BOOTC_TEMPDIR" + + podman images + podman run \ + --rm \ + --tls-verify=false \ + --privileged \ + --pid=host \ + -v /:/target \ + -v /dev:/dev \ + -v /var/lib/containers:/var/lib/containers \ + -v /root/.ssh:/output \ + --security-opt label=type:unconfined_t \ + "localhost/bootc:tmt" \ + bootc install to-existing-root --target-transport containers-storage + + # Reboot + tmt-reboot +elif [ "$TMT_REBOOT_COUNT" -eq 1 ]; then + # Some simple and fast checkings + bootc status + echo "$PATH" + printenv + if [[ -d "/var/ARTIFACTS" ]]; then + ls -al /var/ARTIFACTS + else + ls -al /var/tmp/tmt + fi + ls -al /usr/local/bin + echo "Bootc system on TMT/TF runner" + + exit 0 +fi diff --git a/tmt/tests/test-01-readonly.fmf b/tmt/tests/test-01-readonly.fmf new file mode 100644 index 000000000..7789daad7 --- /dev/null +++ b/tmt/tests/test-01-readonly.fmf @@ -0,0 +1,3 @@ +summary: Execute booted readonly/nondestructive tests +test: ls booted/readonly/*-test-*.nu | sort -n | while read t; do nu $t; done +duration: 30m diff --git a/tmt/tests/test-20-local-upgrade.fmf b/tmt/tests/test-20-local-upgrade.fmf new file mode 100644 index 000000000..431722448 --- /dev/null +++ b/tmt/tests/test-20-local-upgrade.fmf @@ -0,0 +1,3 @@ +summary: Execute local upgrade tests +test: nu booted/test-image-pushpull-upgrade.nu +duration: 30m diff --git a/tmt/tests/test-21-logically-bound-switch.fmf b/tmt/tests/test-21-logically-bound-switch.fmf new file mode 100644 index 000000000..ad7b0a1f4 --- /dev/null +++ b/tmt/tests/test-21-logically-bound-switch.fmf @@ -0,0 +1,3 @@ +summary: Execute logically bound images tests for switching images +test: nu booted/test-logically-bound-switch.nu +duration: 30m diff --git a/tmt/tests/test-22-logically-bound-install.fmf b/tmt/tests/test-22-logically-bound-install.fmf new file mode 100644 index 000000000..0152c17bc --- /dev/null +++ b/tmt/tests/test-22-logically-bound-install.fmf @@ -0,0 +1,3 @@ +summary: Execute logically bound images tests for installing image +test: nu booted/test-logically-bound-install.nu +duration: 30m diff --git a/tmt/tests/test-23-install-outside-container.fmf b/tmt/tests/test-23-install-outside-container.fmf new file mode 100644 index 000000000..a48017859 --- /dev/null +++ b/tmt/tests/test-23-install-outside-container.fmf @@ -0,0 +1,3 @@ +summary: Execute tests for installing outside of a container +test: nu booted/test-install-outside-container.nu +duration: 30m