New upstream version 2018.8
This commit is contained in:
commit
119b14e21d
26 files changed
+538
-133
No files matched your search
@@ -29,6 +29,7 @@ echo "1..4"
|
||||
setup_test_repository "bare"
|
||||
echo "ok setup"
|
||||
|
||||
# Check that without commit-update-summary set, creating a commit doesn't update the summary
|
||||
mkdir test
|
||||
|
||||
echo hello > test/a
|
||||
@@ -47,6 +48,7 @@ echo "ok commit 2"
|
||||
|
||||
assert_streq "$OLD_MD5" "$(md5sum repo/summary)"
|
||||
|
||||
# Check that with commit-update-summary set, creating a commit updates the summary
|
||||
$OSTREE --repo=repo config set core.commit-update-summary true
|
||||
|
||||
echo hello3 > test/a
|
||||
@@ -56,7 +58,46 @@ echo "ok commit 3"
|
||||
|
||||
assert_not_streq "$OLD_MD5" "$(md5sum repo/summary)"
|
||||
|
||||
$OSTREE --repo=repo config set core.commit-update-summary false
|
||||
|
||||
# Check that summary --update deletes the .sig file
|
||||
touch repo/summary.sig
|
||||
$OSTREE summary --update
|
||||
assert_not_has_file repo/summary.sig
|
||||
|
||||
# Check that without auto-update-summary set, adding, changing, or deleting a ref doesn't update the summary
|
||||
$OSTREE summary --update
|
||||
OLD_MD5=$(md5sum repo/summary)
|
||||
$OSTREE commit -b test2 -s "A commit" test
|
||||
|
||||
assert_streq "$OLD_MD5" "$(md5sum repo/summary)"
|
||||
|
||||
$OSTREE reset test test^
|
||||
|
||||
assert_streq "$OLD_MD5" "$(md5sum repo/summary)"
|
||||
|
||||
$OSTREE refs --delete test
|
||||
|
||||
assert_streq "$OLD_MD5" "$(md5sum repo/summary)"
|
||||
|
||||
# Check that with auto-update-summary set, adding, changing, or deleting a ref updates the summary
|
||||
$OSTREE --repo=repo config set core.auto-update-summary true
|
||||
|
||||
$OSTREE summary --update
|
||||
OLD_MD5=$(md5sum repo/summary)
|
||||
echo hello > test/a
|
||||
$OSTREE commit -b test -s "A commit" test
|
||||
echo hello2 > test/a
|
||||
$OSTREE commit -b test -s "Another commit" test
|
||||
|
||||
assert_not_streq "$OLD_MD5" "$(md5sum repo/summary)"
|
||||
|
||||
OLD_MD5=$(md5sum repo/summary)
|
||||
$OSTREE reset test test^
|
||||
|
||||
assert_not_streq "$OLD_MD5" "$(md5sum repo/summary)"
|
||||
|
||||
OLD_MD5=$(md5sum repo/summary)
|
||||
$OSTREE refs --delete test
|
||||
|
||||
assert_not_streq "$OLD_MD5" "$(md5sum repo/summary)"
|
||||
Executable
+55
@@ -0,0 +1,55 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (C) 2018 Sinny Kumari <skumari@redhat.com>
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-2.0+
|
||||
#
|
||||
# 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
|
||||
|
||||
echo '1..2'
|
||||
|
||||
ostree_repo_init repo
|
||||
${CMD_PREFIX} ostree remote add --repo=repo --set=xa.title=Flathub --set=xa.title-is-set=true flathub https://dl.flathub.org/repo/
|
||||
${CMD_PREFIX} ostree remote add --repo=repo org.mozilla.FirefoxRepo http://example.com/ostree/repo/
|
||||
|
||||
${CMD_PREFIX} ostree config --repo=repo get core.mode > list.txt
|
||||
${CMD_PREFIX} ostree config --repo=repo get --group=core repo_version >> list.txt
|
||||
${CMD_PREFIX} ostree config --repo=repo get --group='remote "flathub"' 'xa.title' >> list.txt
|
||||
${CMD_PREFIX} ostree config --repo=repo get --group='remote "flathub"' 'xa.title-is-set' >> list.txt
|
||||
${CMD_PREFIX} ostree config --repo=repo get --group='remote "org.mozilla.FirefoxRepo"' url >> list.txt
|
||||
${CMD_PREFIX} cat list.txt
|
||||
|
||||
assert_file_has_content list.txt "bare"
|
||||
assert_file_has_content list.txt "1"
|
||||
assert_file_has_content list.txt "Flathub"
|
||||
assert_file_has_content list.txt "true"
|
||||
assert_file_has_content list.txt "http://example.com/ostree/repo/"
|
||||
echo "ok config get"
|
||||
|
||||
${CMD_PREFIX} ostree config --repo=repo set core.mode bare-user-only
|
||||
${CMD_PREFIX} ostree config --repo=repo set --group='remote "flathub"' 'xa.title' 'Nightly Flathub'
|
||||
${CMD_PREFIX} ostree config --repo=repo set --group='remote "flathub"' 'xa.title-is-set' 'false'
|
||||
${CMD_PREFIX} ostree config --repo=repo set --group='remote "org.mozilla.FirefoxRepo"' url http://example.com/ostree/
|
||||
|
||||
assert_file_has_content repo/config "bare-user-only"
|
||||
assert_file_has_content repo/config "Nightly Flathub"
|
||||
assert_file_has_content repo/config "false"
|
||||
assert_file_has_content repo/config "http://example.com/ostree/"
|
||||
echo "ok config set"
|
||||
@@ -23,7 +23,7 @@ set -euo pipefail
|
||||
|
||||
. $(dirname $0)/libtest.sh
|
||||
|
||||
echo "1..7"
|
||||
echo "1..10"
|
||||
|
||||
COMMIT_SIGN="--gpg-homedir=${TEST_GPG_KEYHOME} --gpg-sign=${TEST_GPG_KEYID_1}"
|
||||
setup_fake_remote_repo1 "archive" "${COMMIT_SIGN}"
|
||||
@@ -151,4 +151,128 @@ grep static-deltas summary.txt > static-deltas.txt
|
||||
assert_file_has_content static-deltas.txt \
|
||||
$(${OSTREE} --repo=repo rev-parse origin:main)
|
||||
|
||||
## Tests for handling of cached summaries while racing with remote summary updates
|
||||
|
||||
# Make 2 different but valid summary/signature pairs to test races with
|
||||
${OSTREE} --repo=${test_tmpdir}/ostree-srv/gnomerepo summary -u ${COMMIT_SIGN}
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary{,.1}
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig{,.1}
|
||||
mkdir ${test_tmpdir}/ostree-srv/even-another-files
|
||||
cd ${test_tmpdir}/ostree-srv/even-another-files
|
||||
echo 'hello world even another object' > even-another-hello-world
|
||||
${OSTREE} --repo=${test_tmpdir}/ostree-srv/gnomerepo commit ${COMMIT_SIGN} -b even-another -s "A commit" -m "Another Commit body"
|
||||
${OSTREE} --repo=${test_tmpdir}/ostree-srv/gnomerepo summary -u ${COMMIT_SIGN}
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary{,.2}
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig{,.2}
|
||||
cd ${test_tmpdir}
|
||||
|
||||
# Reset to the old valid summary and pull to cache it
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary{.1,}
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig{.1,}
|
||||
repo_reinit
|
||||
${OSTREE} --repo=repo pull origin main
|
||||
assert_has_file repo/tmp/cache/summaries/origin
|
||||
assert_has_file repo/tmp/cache/summaries/origin.sig
|
||||
cmp repo/tmp/cache/summaries/origin ${test_tmpdir}/ostree-srv/gnomerepo/summary.1 >&2
|
||||
cmp repo/tmp/cache/summaries/origin.sig ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig.1 >&2
|
||||
|
||||
# Simulate a pull race where the client gets the old summary and the new
|
||||
# summary signature since it was generated on the server between the
|
||||
# requests
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig{.2,}
|
||||
if ${OSTREE} --repo=repo pull origin main 2>err.txt; then
|
||||
assert_not_reached "Successful pull with old summary"
|
||||
fi
|
||||
assert_file_has_content err.txt "none are in trusted keyring"
|
||||
assert_has_file repo/tmp/cache/summaries/origin
|
||||
assert_has_file repo/tmp/cache/summaries/origin.sig
|
||||
cmp repo/tmp/cache/summaries/origin ${test_tmpdir}/ostree-srv/gnomerepo/summary.1 >&2
|
||||
cmp repo/tmp/cache/summaries/origin.sig ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig.1 >&2
|
||||
|
||||
# Publish correct summary and check that subsequent pull succeeds
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary{.2,}
|
||||
${OSTREE} --repo=repo pull origin main
|
||||
assert_has_file repo/tmp/cache/summaries/origin
|
||||
assert_has_file repo/tmp/cache/summaries/origin.sig
|
||||
cmp repo/tmp/cache/summaries/origin ${test_tmpdir}/ostree-srv/gnomerepo/summary.2 >&2
|
||||
cmp repo/tmp/cache/summaries/origin.sig ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig.2 >&2
|
||||
|
||||
echo "ok pull with signed summary remote old summary"
|
||||
|
||||
# Reset to the old valid summary and pull to cache it
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary{.1,}
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig{.1,}
|
||||
repo_reinit
|
||||
${OSTREE} --repo=repo pull origin main
|
||||
assert_has_file repo/tmp/cache/summaries/origin
|
||||
assert_has_file repo/tmp/cache/summaries/origin.sig
|
||||
cmp repo/tmp/cache/summaries/origin ${test_tmpdir}/ostree-srv/gnomerepo/summary.1 >&2
|
||||
cmp repo/tmp/cache/summaries/origin.sig ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig.1 >&2
|
||||
|
||||
# Simulate a pull race where the client gets the new summary and the old
|
||||
# summary signature. This is unlikely to happen except if the web server
|
||||
# is caching the old signature. This should succeed because the cached
|
||||
# old summary is used.
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary{.2,}
|
||||
${OSTREE} --repo=repo pull origin main
|
||||
assert_has_file repo/tmp/cache/summaries/origin
|
||||
assert_has_file repo/tmp/cache/summaries/origin.sig
|
||||
cmp repo/tmp/cache/summaries/origin ${test_tmpdir}/ostree-srv/gnomerepo/summary.1 >&2
|
||||
cmp repo/tmp/cache/summaries/origin.sig ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig.1 >&2
|
||||
|
||||
# Publish correct signature and check that subsequent pull succeeds
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig{.2,}
|
||||
${OSTREE} --repo=repo pull origin main
|
||||
assert_has_file repo/tmp/cache/summaries/origin
|
||||
assert_has_file repo/tmp/cache/summaries/origin.sig
|
||||
cmp repo/tmp/cache/summaries/origin ${test_tmpdir}/ostree-srv/gnomerepo/summary.2 >&2
|
||||
cmp repo/tmp/cache/summaries/origin.sig ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig.2 >&2
|
||||
|
||||
echo "ok pull with signed summary remote old summary signature"
|
||||
|
||||
# Reset to the old valid summary and pull to cache it
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary{.1,}
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig{.1,}
|
||||
repo_reinit
|
||||
${OSTREE} --repo=repo pull origin main
|
||||
assert_has_file repo/tmp/cache/summaries/origin
|
||||
assert_has_file repo/tmp/cache/summaries/origin.sig
|
||||
cmp repo/tmp/cache/summaries/origin ${test_tmpdir}/ostree-srv/gnomerepo/summary.1 >&2
|
||||
cmp repo/tmp/cache/summaries/origin.sig ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig.1 >&2
|
||||
|
||||
# Simulate a broken summary cache to see if it can be recovered from.
|
||||
# Prior to commit c4c2b5eb the client would save the summary to the
|
||||
# cache before validating the signature. That would mean the cache would
|
||||
# have mismatched summary and signature and ostree would remain
|
||||
# deadlocked there until the remote published a new signature.
|
||||
#
|
||||
# First pull with OSTREE_REPO_TEST_ERROR=invalid-cache to see the
|
||||
# invalid cache is detected. Then pull again to check if it can be
|
||||
# recovered from.
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary.2 repo/tmp/cache/summaries/origin
|
||||
if OSTREE_REPO_TEST_ERROR=invalid-cache ${OSTREE} --repo=repo pull origin main 2>err.txt; then
|
||||
assert_not_reached "Should have hit OSTREE_REPO_TEST_ERROR_INVALID_CACHE"
|
||||
fi
|
||||
assert_file_has_content err.txt "OSTREE_REPO_TEST_ERROR_INVALID_CACHE"
|
||||
assert_has_file repo/tmp/cache/summaries/origin
|
||||
assert_has_file repo/tmp/cache/summaries/origin.sig
|
||||
cmp repo/tmp/cache/summaries/origin ${test_tmpdir}/ostree-srv/gnomerepo/summary.2 >&2
|
||||
cmp repo/tmp/cache/summaries/origin.sig ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig.1 >&2
|
||||
${OSTREE} --repo=repo pull origin main
|
||||
assert_has_file repo/tmp/cache/summaries/origin
|
||||
assert_has_file repo/tmp/cache/summaries/origin.sig
|
||||
cmp repo/tmp/cache/summaries/origin ${test_tmpdir}/ostree-srv/gnomerepo/summary.1 >&2
|
||||
cmp repo/tmp/cache/summaries/origin.sig ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig.1 >&2
|
||||
|
||||
# Publish new signature and check that subsequent pull succeeds
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary{.2,}
|
||||
cp ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig{.2,}
|
||||
${OSTREE} --repo=repo pull origin main
|
||||
assert_has_file repo/tmp/cache/summaries/origin
|
||||
assert_has_file repo/tmp/cache/summaries/origin.sig
|
||||
cmp repo/tmp/cache/summaries/origin ${test_tmpdir}/ostree-srv/gnomerepo/summary.2 >&2
|
||||
cmp repo/tmp/cache/summaries/origin.sig ${test_tmpdir}/ostree-srv/gnomerepo/summary.sig.2 >&2
|
||||
|
||||
echo "ok pull with signed summary broken cache"
|
||||
|
||||
libtest_cleanup_gpg
|
||||
@@ -54,7 +54,7 @@ echo 'ok documented symbols'
|
||||
|
||||
# ONLY update this checksum in release commits!
|
||||
cat > released-sha256.txt <<EOF
|
||||
611278b6081cbd34e365f3a7988e0c981644a828230973d7675a1a31ef09a0e3 ${released_syms}
|
||||
a34e3681f1705ed3c6fcf25238e486365cb5b53ffde905ba28a2954ef6eb0269 ${released_syms}
|
||||
EOF
|
||||
sha256sum -c released-sha256.txt
|
||||
|
||||
|
||||
Reference in new issue
Block a user