From: Colin Walters Date: Mon, 30 Oct 2017 18:17:10 +0000 (-0400) Subject: tests: Add a "pull-test2" that uses slightly more realistic content X-Git-Tag: archive/raspbian/2022.1-3+rpi1~1^2~4^2~30^2~3 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=9d82d258baa3dd89a78a720ccb3d9a963c30be24;p=ostree.git tests: Add a "pull-test2" that uses slightly more realistic content This one actually exercises the delta paths more; I pulled the data from some local F26AH builds. One thing I noticed while doing that is that we try bsdiff on xz'd data, but that won't be useful. https://github.com/projectatomic/rpm-ostree/issues/470 https://bugzilla.redhat.com/show_bug.cgi?id=1367496 Anyways I verified this test fails without the fixup for `pread()` in https://github.com/ostreedev/ostree/pull/1312 Closes: #1314 Approved by: jlebon --- diff --git a/Makefile-tests.am b/Makefile-tests.am index 42e73fa0..bc962aac 100644 --- a/Makefile-tests.am +++ b/Makefile-tests.am @@ -70,6 +70,7 @@ _installed_or_uninstalled_test_scripts = \ tests/test-pull-bare.sh \ tests/test-pull-bareuser.sh \ tests/test-pull-bareuseronly.sh \ + tests/test-pull2-bareuseronly.sh \ tests/test-pull-commit-only.sh \ tests/test-pull-depth.sh \ tests/test-pull-mirror-summary.sh \ @@ -160,10 +161,13 @@ endif dist_installed_test_data = tests/archive-test.sh \ tests/pull-test.sh \ + tests/pull-test2.sh \ tests/admin-test.sh \ tests/basic-test.sh \ tests/pre-endian-deltas-repo-big.tar.xz \ tests/pre-endian-deltas-repo-little.tar.xz \ + tests/fah-deltadata-old.tar.xz \ + tests/fah-deltadata-new.tar.xz \ tests/libtest-core.sh \ $(NULL) diff --git a/tests/fah-deltadata-new.tar.xz b/tests/fah-deltadata-new.tar.xz new file mode 100644 index 00000000..aea6a023 Binary files /dev/null and b/tests/fah-deltadata-new.tar.xz differ diff --git a/tests/fah-deltadata-old.tar.xz b/tests/fah-deltadata-old.tar.xz new file mode 100644 index 00000000..87687337 Binary files /dev/null and b/tests/fah-deltadata-old.tar.xz differ diff --git a/tests/libtest.sh b/tests/libtest.sh index 8798563b..a997ce4b 100755 --- a/tests/libtest.sh +++ b/tests/libtest.sh @@ -229,6 +229,8 @@ ostree_repo_init() { fi } +# The original one; use setup_fake_remote_repo2 for newer code, +# down the line we'll try to port tests. setup_fake_remote_repo1() { mode=$1 commit_opts=${2:-} @@ -267,6 +269,50 @@ setup_fake_remote_repo1() { export OSTREE="${CMD_PREFIX} ostree --repo=repo" } +# Newer version of the above with more "real" data +setup_fake_remote_repo2() { + mode=$1 + commit_opts=${2:-} + args=${3:-} + shift + oldpwd=`pwd` + mkdir ostree-srv + cd ostree-srv + mkdir repo + ostree_repo_init repo --mode=$mode + # Backcompat + ln -sr repo gnomerepo + # Initialize content + mkdir files + cd files + mkdir -p usr/{etc,bin,lib,share} + ln -sr usr/bin bin + ln -sr usr/lib lib + tar xf ${test_srcdir}/fah-deltadata-old.tar.xz + remote_ref=exampleos/42/x86_64/main + cd .. + ${CMD_PREFIX} ostree --repo=${test_tmpdir}/ostree-srv/repo commit \ + --consume $commit_opts --add-metadata-string version=42.0 -b ${remote_ref} \ + --tree=dir=files + test '!' -d files + ${CMD_PREFIX} ostree --repo=${test_tmpdir}/ostree-srv/repo checkout -U ${remote_ref} files + (cd files && tar xf ${test_srcdir}/fah-deltadata-new.tar.xz) + ${CMD_PREFIX} ostree --repo=${test_tmpdir}/ostree-srv/repo commit \ + --consume $commit_opts --add-metadata-string version=42.1 -b ${remote_ref} \ + --tree=dir=files + + # And serve via HTTP + cd ${test_tmpdir} + mkdir ${test_tmpdir}/httpd + cd httpd + ln -s ${test_tmpdir}/ostree-srv ostree + ${OSTREE_HTTPD} --autoexit --log-file $(pwd)/httpd.log --daemonize -p ${test_tmpdir}/httpd-port $args + port=$(cat ${test_tmpdir}/httpd-port) + echo "http://127.0.0.1:${port}" > ${test_tmpdir}/httpd-address + cd ${oldpwd} + export OSTREE="${CMD_PREFIX} ostree --repo=repo" +} + setup_os_boot_syslinux() { # Stub syslinux configuration mkdir -p sysroot/boot/loader.0 diff --git a/tests/pull-test2.sh b/tests/pull-test2.sh new file mode 100644 index 00000000..5957996a --- /dev/null +++ b/tests/pull-test2.sh @@ -0,0 +1,61 @@ +# This file is to be sourced, not executed + +# Copyright (C) 2011 Colin Walters +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +set -euo pipefail + +function repo_init() { + cd ${test_tmpdir} + rm repo -rf + mkdir repo + ostree_repo_init repo --mode=${repo_mode} + ${CMD_PREFIX} ostree --repo=repo remote add origin $(cat httpd-address)/ostree/gnomerepo "$@" +} + +repo_init --no-gpg-verify + +# See also the copy of this in basic-test.sh +COMMIT_ARGS="" +CHECKOUT_U_ARG="" +CHECKOUT_H_ARGS="-H" +if is_bare_user_only_repo repo; then + COMMIT_ARGS="--canonical-permissions" + # Also, since we can't check out uid=0 files we need to check out in user mode + CHECKOUT_U_ARG="-U" + CHECKOUT_H_ARGS="-U -H" +else + if grep -E -q '^mode=bare-user' repo/config; then + CHECKOUT_H_ARGS="-U -H" + fi +fi + +echo "1..1" +cd ${test_tmpdir} +repo_init --no-gpg-verify +prev_rev=$(ostree --repo=ostree-srv/repo rev-parse ${remote_ref}^) +rev=$(ostree --repo=ostree-srv/repo rev-parse ${remote_ref}) +${CMD_PREFIX} ostree --repo=ostree-srv/repo static-delta generate ${remote_ref} +${CMD_PREFIX} ostree --repo=ostree-srv/repo summary -u +${CMD_PREFIX} ostree --repo=repo pull origin ${remote_ref}@${prev_rev} +${CMD_PREFIX} ostree --repo=repo pull --dry-run --require-static-deltas origin ${remote_ref} >dry-run-pull.txt +assert_file_has_content dry-run-pull.txt 'Delta update: 0/1 parts, 0 bytes/[45][0-9].[0-9] kB, 1.[678] MB total uncompressed' +${CMD_PREFIX} ostree --repo=repo pull --require-static-deltas origin ${remote_ref} +final_rev=$(${CMD_PREFIX} ostree --repo=repo rev-parse origin:${remote_ref}) +assert_streq "${rev}" "${final_rev}" +${CMD_PREFIX} ostree --repo=repo fsck +echo "ok delta" diff --git a/tests/test-pull2-bareuseronly.sh b/tests/test-pull2-bareuseronly.sh new file mode 100755 index 00000000..59875442 --- /dev/null +++ b/tests/test-pull2-bareuseronly.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# +# Copyright (C) 2017 Colin Walters +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +set -euo pipefail + +. $(dirname $0)/libtest.sh + +setup_fake_remote_repo2 "archive" "--canonical-permissions" + +repo_mode=bare-user-only +. ${test_srcdir}/pull-test2.sh