diff options
-rwxr-xr-x | tests/integration/base/generate-base.sh | 67 | ||||
-rw-r--r-- | tests/integration/pip.py | 2 | ||||
-rw-r--r-- | tests/integration/project/elements/base.bst | 3 | ||||
-rw-r--r-- | tests/integration/project/elements/base/base-alpine.bst | 12 | ||||
-rw-r--r-- | tests/integration/project/elements/base/base-sdk.bst | 18 | ||||
-rw-r--r-- | tests/integration/project/elements/base/usermerge.bst | 6 | ||||
-rw-r--r-- | tests/integration/project/files/usrmerge.tar.xz | bin | 232 -> 0 bytes | |||
-rw-r--r-- | tests/integration/script.py | 2 | ||||
-rw-r--r-- | tests/integration/shell.py | 2 |
9 files changed, 83 insertions, 29 deletions
diff --git a/tests/integration/base/generate-base.sh b/tests/integration/base/generate-base.sh new file mode 100755 index 000000000..433f36ea5 --- /dev/null +++ b/tests/integration/base/generate-base.sh @@ -0,0 +1,67 @@ +#!/bin/sh + +# Generate a base sysroot for running the BuildStream integration tests. +# +# The sysroot is based off the Alpine Linux distribution. The script downloads +# a release of Alpine, sets up a cheap consider using `bwrap` and installs the +# packages that are needed by the integration tests, then outputs a .tar.xz +# file. + +set -eux + +ALPINE_ARCH=${ARCH:-x86_64} +ALPINE_BASE=http://dl-cdn.alpinelinux.org/alpine/v3.7/releases/${ALPINE_ARCH}/alpine-minirootfs-3.7.0-${ALPINE_ARCH}.tar.gz + +mkdir root + +wget ${ALPINE_BASE} -O alpine-base.tar.gz + +tar -x -f ./alpine-base.tar.gz -C ./root --exclude dev/\* + +run() { + # This turns the unpacked rootfs into a container using Bubblewrap. + # The Alpine package manager (apk) calls `chroot` when running package + # triggers so we need to enable CAP_SYS_CHROOT. We also have to fake + # UID 0 (root) inside the container to avoid permissions errors. + bwrap --bind ./root / --dev /dev --proc /proc --tmpfs /tmp \ + --ro-bind /etc/resolv.conf /etc/resolv.conf \ + --setenv PATH "/usr/bin:/usr/sbin:/bin:/sbin" \ + --unshare-user --uid 0 --gid 0 \ + --cap-add CAP_SYS_CHROOT \ + /bin/sh -c "$@" +} + +# Enable testing repo for Tiny C Compiler package +run "echo http://dl-cdn.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories" + +# Fetch the list of Alpine packages. +run "apk update" + +# There are various random errors from `apk add` to do with ownership, probably +# because of our hacked up `bwrap` container. The errors seem harmless so I am +# just ignoring them. +set +e + +# Install stuff needed by all integration tests that compile C code. +# +# Note that we use Tiny C Compiler in preference to GCC. There is a huge +# size difference -- 600KB for TinyCC vs. 50MB to 100MB for GCC. TinyCC +# supports most of the ISO C99 standard, but has no C++ support at all. +run "apk add binutils libc-dev make tcc" +run "ln -s /usr/bin/tcc /usr/bin/cc" + +# Install stuff for tests/integration/autotools +run "apk add autoconf automake" + +# Install stuff for tests/integration/cmake +run "apk add cmake" + +# Install stuff for tests/integration/pip +run "apk add python3" + +set -e + +# Cleanup the package cache +run "rm -R /var/cache/apk" + +tar -c -v -J -f integration-tests-base.tar.xz -C root . diff --git a/tests/integration/pip.py b/tests/integration/pip.py index 6471bd242..6c6de8bf8 100644 --- a/tests/integration/pip.py +++ b/tests/integration/pip.py @@ -49,7 +49,7 @@ def test_pip_build(cli, tmpdir, datafiles): assert result.exit_code == 0 assert_contains(checkout, ['/usr', '/usr/lib', '/usr/bin', - '/usr/bin/hello', '/usr/lib/python3.5']) + '/usr/bin/hello', '/usr/lib/python3.6']) # Test running an executable built with pip diff --git a/tests/integration/project/elements/base.bst b/tests/integration/project/elements/base.bst index 6f2c56fa9..428afa736 100644 --- a/tests/integration/project/elements/base.bst +++ b/tests/integration/project/elements/base.bst @@ -2,5 +2,4 @@ kind: stack depends: - - base/base-sdk.bst - - base/usermerge.bst + - base/base-alpine.bst diff --git a/tests/integration/project/elements/base/base-alpine.bst b/tests/integration/project/elements/base/base-alpine.bst new file mode 100644 index 000000000..91327bc73 --- /dev/null +++ b/tests/integration/project/elements/base/base-alpine.bst @@ -0,0 +1,12 @@ +kind: import + +description: | + Alpine Linux base for tests + + Generated using the `tests/integration-tests/base/generate-base.sh` script. + +sources: + - kind: tar + url: https://gnome7.codethink.co.uk/tarballs/integration-tests-base.v1.x86_64.tar.xz + base-dir: '' + ref: 3eb559250ba82b64a68d86d0636a6b127aa5f6d25d3601a79f79214dc9703639 diff --git a/tests/integration/project/elements/base/base-sdk.bst b/tests/integration/project/elements/base/base-sdk.bst deleted file mode 100644 index 6b7418e99..000000000 --- a/tests/integration/project/elements/base/base-sdk.bst +++ /dev/null @@ -1,18 +0,0 @@ -kind: import -description: Import the base freedesktop SDK -(?): - - linux == True: - sources: - - kind: ostree - url: gnomesdk:repo/ - gpg-key: keys/gnome-sdk.gpg - track: runtime/org.freedesktop.BaseSdk/x86_64/1.6 - ref: 48b8c907522d3edeb0fb9f36c6515ce1ef5fb80a6e4e5dd54033b3fd6ad784d0 - - linux == False: - sources: - - kind: tar - url: gnome7:tarballs/gnome-sdk.tar.xz - ref: 96d5062a19fa9ac3439f8a502664f8d46860bad7efd28e7909b03ddbcdbe66e6 -config: - source: files - target: usr diff --git a/tests/integration/project/elements/base/usermerge.bst b/tests/integration/project/elements/base/usermerge.bst deleted file mode 100644 index fb9cffba9..000000000 --- a/tests/integration/project/elements/base/usermerge.bst +++ /dev/null @@ -1,6 +0,0 @@ -kind: import -description: Some symlinks for the flatpak runtime environment -sources: - - kind: tar - url: project_dir:/files/usrmerge.tar.xz - ref: 96e4458fafb85c10fe6271ad8839754b6eabeceac8523f8f602dea6470db5961 diff --git a/tests/integration/project/files/usrmerge.tar.xz b/tests/integration/project/files/usrmerge.tar.xz Binary files differdeleted file mode 100644 index e54fbbb43..000000000 --- a/tests/integration/project/files/usrmerge.tar.xz +++ /dev/null diff --git a/tests/integration/script.py b/tests/integration/script.py index d7448c4d5..af5ff67a8 100644 --- a/tests/integration/script.py +++ b/tests/integration/script.py @@ -107,7 +107,7 @@ def test_script_no_root(cli, tmpdir, datafiles): res = cli.run(project=project, args=['build', element_name]) assert res.exit_code != 0 - assert "sh: /test: Read-only file system" in res.stderr + assert "/test: Read-only file system" in res.stderr @pytest.mark.datafiles(DATA_DIR) diff --git a/tests/integration/shell.py b/tests/integration/shell.py index 1e14f736c..6a66b7e4d 100644 --- a/tests/integration/shell.py +++ b/tests/integration/shell.py @@ -76,6 +76,6 @@ def test_no_shell(cli, tmpdir, datafiles): result = cli.run(project=project, args=['build', element_name]) assert result.exit_code == 0 - result = execute_shell(cli, project, '/usr/bin/echo Pegasissies!', element=element_name) + result = execute_shell(cli, project, '/bin/echo Pegasissies!', element=element_name) assert result.exit_code == 0 assert result.output == "Pegasissies!\n" |