tests: Add a "pull-test2" that uses slightly more realistic content
authorColin Walters <walters@verbum.org>
Mon, 30 Oct 2017 18:17:10 +0000 (14:17 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Wed, 1 Nov 2017 17:38:26 +0000 (17:38 +0000)
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

Makefile-tests.am
tests/fah-deltadata-new.tar.xz [new file with mode: 0644]
tests/fah-deltadata-old.tar.xz [new file with mode: 0644]
tests/libtest.sh
tests/pull-test2.sh [new file with mode: 0644]
tests/test-pull2-bareuseronly.sh [new file with mode: 0755]

index 42e73fa09f5f4a131f31c7bcb87d3b3abbe330d5..bc962aac16c07b980ae8f5a1dd6dab5c9c6d49ea 100644 (file)
@@ -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 (file)
index 0000000..aea6a02
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 (file)
index 0000000..8768733
Binary files /dev/null and b/tests/fah-deltadata-old.tar.xz differ
index 8798563b7c299a6e0541150fbb0a57ca5101a8ac..a997ce4bf7a27c321fb59caf15ca45344bd00d1a 100755 (executable)
@@ -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 (file)
index 0000000..5957996
--- /dev/null
@@ -0,0 +1,61 @@
+# This file is to be sourced, not executed
+
+# Copyright (C) 2011 Colin Walters <walters@verbum.org>
+#
+# 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 (executable)
index 0000000..5987544
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 Colin Walters <walters@verbum.org>
+#
+# 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