2017-01-19 14:23:30 +03:00
# This file is to be sourced, not executed
2012-09-24 03:25:09 +04:00
# 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.
2016-01-27 19:44:10 +03:00
set -euo pipefail
2014-01-19 20:48:27 +04:00
2014-02-10 01:11:37 +04:00
function repo_init( ) {
cd ${ test_tmpdir }
rm repo -rf
mkdir repo
2017-07-10 04:46:23 +03:00
ostree_repo_init repo --mode= ${ repo_mode }
2017-05-17 18:41:54 +03:00
${ CMD_PREFIX } ostree --repo= repo remote add origin $( cat httpd-address) /ostree/gnomerepo " $@ "
2014-02-10 01:11:37 +04:00
}
function verify_initial_contents( ) {
rm checkout-origin-main -rf
$OSTREE checkout origin/main checkout-origin-main
cd checkout-origin-main
assert_file_has_content firstfile '^first$'
assert_file_has_content baz/cow '^moo$'
}
2017-09-23 17:23:47 +03:00
echo "1..30"
2016-03-02 18:28:04 +03:00
2014-01-21 12:57:34 +04:00
# Try both syntaxes
2017-05-17 18:41:54 +03:00
repo_init --no-gpg-verify
2017-06-29 17:23:32 +03:00
${ CMD_PREFIX } ostree --repo= repo pull origin main >out.txt
assert_file_has_content out.txt "[1-9][0-9]* metadata, [1-9][0-9]* content objects fetched"
${ CMD_PREFIX } ostree --repo= repo pull origin:main > out.txt
assert_not_file_has_content out.txt "content objects fetched"
2012-09-24 03:25:09 +04:00
${ CMD_PREFIX } ostree --repo= repo fsck
echo "ok pull"
cd ${ test_tmpdir }
2014-02-10 01:11:37 +04:00
verify_initial_contents
2012-09-24 03:25:09 +04:00
echo "ok pull contents"
2013-09-26 22:00:36 +04:00
2014-06-17 01:11:50 +04:00
cd ${ test_tmpdir }
mkdir mirrorrepo
2017-06-29 05:52:40 +03:00
ostree_repo_init mirrorrepo --mode= archive
2014-06-17 01:11:50 +04:00
${ CMD_PREFIX } ostree --repo= mirrorrepo remote add --set= gpg-verify= false origin $( cat httpd-address) /ostree/gnomerepo
${ CMD_PREFIX } ostree --repo= mirrorrepo pull --mirror origin main
${ CMD_PREFIX } ostree --repo= mirrorrepo fsck
$OSTREE show main >/dev/null
echo "ok pull mirror"
2017-06-16 11:07:44 +03:00
mkdir otherbranch
echo someothercontent > otherbranch/someothercontent
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo commit -b otherbranch --tree= dir = otherbranch
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
rm mirrorrepo -rf
# All refs
2017-06-29 05:52:40 +03:00
ostree_repo_init mirrorrepo --mode= archive
2017-06-16 11:07:44 +03:00
${ CMD_PREFIX } ostree --repo= mirrorrepo remote add --set= gpg-verify= false origin $( cat httpd-address) /ostree/gnomerepo
${ CMD_PREFIX } ostree --repo= mirrorrepo pull --mirror origin
${ CMD_PREFIX } ostree --repo= mirrorrepo fsck
for ref in main otherbranch; do
${ CMD_PREFIX } ostree --repo= mirrorrepo rev-parse $ref
done
echo "ok pull mirror (all refs)"
rm mirrorrepo -rf
2017-06-29 05:52:40 +03:00
ostree_repo_init mirrorrepo --mode= archive
2017-06-16 11:07:44 +03:00
${ CMD_PREFIX } ostree --repo= mirrorrepo remote add --set= gpg-verify= false origin $( cat httpd-address) /ostree/gnomerepo
# Generate a summary in the mirror
${ CMD_PREFIX } ostree --repo= mirrorrepo summary -u
summarysig = $( sha256sum < mirrorrepo/summary | cut -f 1 -d ' ' )
# Mirror subset of refs: https://github.com/ostreedev/ostree/issues/846
${ CMD_PREFIX } ostree --repo= mirrorrepo pull --mirror origin main
newsummarysig = $( sha256sum < mirrorrepo/summary | cut -f 1 -d ' ' )
assert_streq ${ summarysig } ${ newsummarysig }
echo "ok pull mirror (ref subset with summary)"
2016-07-22 23:58:26 +03:00
cd ${ test_tmpdir }
rm checkout-origin-main -rf
$OSTREE --repo= ostree-srv/gnomerepo checkout main checkout-origin-main
echo moomoo > checkout-origin-main/baz/cow
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo commit -b main -s "" --tree= dir = checkout-origin-main
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo static-delta generate main
2016-11-01 23:39:58 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
2016-07-22 23:58:26 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo fsck
${ CMD_PREFIX } ostree --repo= mirrorrepo pull --mirror origin main
${ CMD_PREFIX } ostree --repo= mirrorrepo fsck
echo "ok pull mirror (should not apply deltas)"
2017-03-02 20:11:17 +03:00
cd ${ test_tmpdir }
if ${ CMD_PREFIX } ostree --repo= mirrorrepo \
pull origin main --require-static-deltas 2>err.txt; then
assert_not_reached "--require-static-deltas unexpectedly succeeded"
fi
assert_file_has_content err.txt "Can't use static deltas in an archive repo"
${ CMD_PREFIX } ostree --repo= mirrorrepo pull origin main
${ CMD_PREFIX } ostree --repo= mirrorrepo fsck
echo "ok pull (refuses deltas)"
2017-06-15 00:55:11 +03:00
cd ${ test_tmpdir }
rm mirrorrepo/refs/remotes/* -rf
${ CMD_PREFIX } ostree --repo= mirrorrepo prune --refs-only
${ CMD_PREFIX } ostree --repo= mirrorrepo pull --bareuseronly-files origin main
echo "ok pull (bareuseronly, safe)"
rm checkout-origin-main -rf
$OSTREE --repo= ostree-srv/gnomerepo checkout main checkout-origin-main
cat > statoverride.txt <<EOF
2048 /some-setuid
EOF
echo asetuid > checkout-origin-main/some-setuid
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo commit -b content-with-suid --statoverride= statoverride.txt --tree= dir = checkout-origin-main
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
# Verify we reject it both when unpacking and when mirroring
for flag in "" "--mirror" ; do
if ${ CMD_PREFIX } ostree --repo= mirrorrepo pull ${ flag } --bareuseronly-files origin content-with-suid 2>err.txt; then
assert_not_reached "pulled unsafe bareuseronly"
fi
2017-09-18 22:46:03 +03:00
assert_file_has_content err.txt 'Content object.*: invalid mode.*with bits 040.*'
2017-06-15 00:55:11 +03:00
done
echo "ok pull (bareuseronly, unsafe)"
cd ${ test_tmpdir }
rm mirrorrepo/refs/remotes/* -rf
${ CMD_PREFIX } ostree --repo= mirrorrepo prune --refs-only
${ CMD_PREFIX } ostree --repo= mirrorrepo pull --mirror --bareuseronly-files origin main
echo "ok pull (bareuseronly mirror)"
2017-06-12 22:06:19 +03:00
2017-09-23 17:23:47 +03:00
# Corruption tests <https://github.com/ostreedev/ostree/issues/1211>
cd ${ test_tmpdir }
repo_init --no-gpg-verify
if ! is_bare_user_only_repo repo && ! skip_one_without_user_xattrs; then
if is_bare_user_only_repo repo; then
cacherepomode = bare-user-only
else
cacherepomode = bare-user
fi
rm cacherepo -rf
ostree_repo_init cacherepo --mode= ${ cacherepomode }
${ CMD_PREFIX } ostree --repo= cacherepo pull-local ostree-srv/gnomerepo main
rev = $( ostree --repo= cacherepo rev-parse main)
${ CMD_PREFIX } ostree --repo= cacherepo ls -R -C main > ls.txt
regfile_hash = $( grep -E -e '^-0' ls.txt | head -1 | awk '{ print $5 }' )
${ CMD_PREFIX } ostree --repo= repo remote add --set= gpg-verify= false corruptrepo $( cat httpd-address) /ostree/corruptrepo
# Make this a loop so in the future we can add more object types like commit etc.
for object in ${ regfile_hash } .file; do
checksum = $( echo ${ object } | sed -e 's,\(.*\)\.[a-z]*$,\1,' )
path = cacherepo/objects/${ object : 0 : 2 } /${ object : 2 }
# Preserve user.ostreemeta xattr
cp -a ${ path } { ,.new}
( dd if = ${ path } conv = swab) > ${ path } .new
mv ${ path } { .new,}
if ${ CMD_PREFIX } ostree --repo= cacherepo fsck 2>err.txt; then
fatal "corrupt repo fsck?"
fi
assert_file_has_content err.txt " corrupted.* ${ checksum } "
rm ostree-srv/corruptrepo -rf
ostree_repo_init ostree-srv/corruptrepo --mode= archive
${ CMD_PREFIX } ostree --repo= ostree-srv/corruptrepo pull-local cacherepo main
# Pulling via HTTP into a non-archive should fail, even with
# --http-trusted.
if ${ CMD_PREFIX } ostree --repo= repo pull --http-trusted corruptrepo main 2>err.txt; then
fatal "Pulled from corrupt repo?"
fi
assert_file_has_content err.txt " Corrupted.* ${ checksum } "
if ${ CMD_PREFIX } ostree --repo= repo show corruptrepo:main >/dev/null; then
fatal "Pulled from corrupt repo?"
fi
${ CMD_PREFIX } ostree --repo= repo prune --refs-only
rm repo/tmp/* -rf
ostree_repo_init corruptmirrorrepo --mode= archive
# Pulling via http-trusted should not verify the checksum
${ CMD_PREFIX } ostree --repo= corruptmirrorrepo remote add --set= gpg-verify= false corruptrepo $( cat httpd-address) /ostree/corruptrepo
${ CMD_PREFIX } ostree --repo= corruptmirrorrepo pull --mirror --http-trusted corruptrepo main
# But it should fail to fsck
if ${ CMD_PREFIX } ostree --repo= corruptmirrorrepo fsck 2>err.txt; then
fatal "corrupt mirror repo fsck?"
fi
done
# And ensure the repo is reinitialized
repo_init --no-gpg-verify
echo "ok corruption"
fi
2016-11-01 23:39:58 +03:00
cd ${ test_tmpdir }
rm mirrorrepo/refs/remotes/* -rf
${ CMD_PREFIX } ostree --repo= mirrorrepo prune --refs-only
${ CMD_PREFIX } ostree --repo= mirrorrepo pull origin main
rm checkout-origin-main -rf
$OSTREE --repo= ostree-srv/gnomerepo checkout main checkout-origin-main
echo yetmorecontent > checkout-origin-main/baz/cowtest
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo commit -b main -s "" --tree= dir = checkout-origin-main
rev = $( ${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo rev-parse main)
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo static-delta generate main
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
${ CMD_PREFIX } ostree --repo= mirrorrepo pull --commit-metadata-only origin main
assert_has_file mirrorrepo/state/${ rev } .commitpartial
echo "ok pull commit metadata only (should not apply deltas)"
2015-02-06 18:02:57 +03:00
cd ${ test_tmpdir }
mkdir mirrorrepo-local
2017-06-29 05:52:40 +03:00
ostree_repo_init mirrorrepo-local --mode= archive
2015-02-06 18:02:57 +03:00
${ CMD_PREFIX } ostree --repo= mirrorrepo-local remote add --set= gpg-verify= false origin file://$( pwd ) /ostree-srv/gnomerepo
${ CMD_PREFIX } ostree --repo= mirrorrepo-local pull --mirror origin main
${ CMD_PREFIX } ostree --repo= mirrorrepo-local fsck
2017-09-23 17:23:47 +03:00
${ CMD_PREFIX } ostree --repo= mirrorrepo show main >/dev/null
2015-02-06 18:02:57 +03:00
echo "ok pull local mirror"
2017-07-04 13:55:51 +03:00
cd ${ test_tmpdir }
# This is more of a known issue; test that we give a clean error right now
rm otherrepo -rf
ostree_repo_init otherrepo --mode= archive
rm checkout-origin-main -rf
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo checkout main checkout-origin-main
${ CMD_PREFIX } ostree --repo= otherrepo commit -b localbranch --tree= dir = checkout-origin-main
${ CMD_PREFIX } ostree --repo= otherrepo remote add --set= gpg-verify= false origin file://$( pwd ) /ostree-srv/gnomerepo
${ CMD_PREFIX } ostree --repo= otherrepo pull origin main
rm mirrorrepo-local -rf
ostree_repo_init mirrorrepo-local --mode= archive
if ${ CMD_PREFIX } ostree --repo= mirrorrepo-local pull-local otherrepo 2>err.txt; then
fatal "pull with mixed refs succeeded?"
fi
assert_file_has_content err.txt "error: Invalid ref name origin:main"
${ CMD_PREFIX } ostree --repo= mirrorrepo-local pull-local otherrepo localbranch
${ CMD_PREFIX } ostree --repo= mirrorrepo-local rev-parse localbranch
${ CMD_PREFIX } ostree --repo= mirrorrepo-local fsck
echo "ok pull-local mirror errors with mixed refs"
2013-09-26 22:00:36 +04:00
cd ${ test_tmpdir }
2015-11-09 15:03:35 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo commit -b main -s "Metadata string" --add-detached-metadata-string= SIGNATURE = HANCOCK --tree= ref = main
2016-11-01 23:39:58 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
2013-09-26 22:00:36 +04:00
${ CMD_PREFIX } ostree --repo= repo pull origin main
${ CMD_PREFIX } ostree --repo= repo fsck
$OSTREE show --print-detached-metadata-key= SIGNATURE main > main-meta
assert_file_has_content main-meta "HANCOCK"
echo "ok pull detached metadata"
2014-02-10 01:11:37 +04:00
2016-02-11 21:28:03 +03:00
cd ${ test_tmpdir }
mkdir parentpullrepo
2017-06-29 05:52:40 +03:00
ostree_repo_init parentpullrepo --mode= archive
2016-02-11 21:28:03 +03:00
${ CMD_PREFIX } ostree --repo= parentpullrepo remote add --set= gpg-verify= false origin file://$( pwd ) /ostree-srv/gnomerepo
parent_rev = $( ostree --repo= ostree-srv/gnomerepo rev-parse main^)
rev = $( ostree --repo= ostree-srv/gnomerepo rev-parse main)
${ CMD_PREFIX } ostree --repo= parentpullrepo pull origin main@${ parent_rev }
${ CMD_PREFIX } ostree --repo= parentpullrepo rev-parse origin:main > main.txt
assert_file_has_content main.txt ${ parent_rev }
${ CMD_PREFIX } ostree --repo= parentpullrepo fsck
${ CMD_PREFIX } ostree --repo= parentpullrepo pull origin main
${ CMD_PREFIX } ostree --repo= parentpullrepo rev-parse origin:main > main.txt
assert_file_has_content main.txt ${ rev }
echo "ok pull specific commit"
2017-05-19 01:12:33 +03:00
# test pull -T
cd ${ test_tmpdir }
repo_init --no-gpg-verify
${ CMD_PREFIX } ostree --repo= repo pull origin main
origrev = $( ${ CMD_PREFIX } ostree --repo= repo rev-parse main)
# Check we can pull the same commit with timestamp checking enabled
${ CMD_PREFIX } ostree --repo= repo pull -T origin main
assert_streq ${ origrev } " $( ${ CMD_PREFIX } ostree --repo= repo rev-parse main) "
newrev = $( ${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo commit -b main --tree= ref = main)
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
# New commit with timestamp checking
${ CMD_PREFIX } ostree --repo= repo pull -T origin main
assert_not_streq " ${ origrev } " " ${ newrev } "
assert_streq ${ newrev } " $( ${ CMD_PREFIX } ostree --repo= repo rev-parse main) "
newrev2 = $( ${ CMD_PREFIX } ostree --timestamp= "October 25 1985" --repo= ostree-srv/gnomerepo commit -b main --tree= ref = main)
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
if ${ CMD_PREFIX } ostree --repo= repo pull -T origin main 2>err.txt; then
fatal "pulled older commit with timestamp checking enabled?"
fi
assert_file_has_content err.txt "Upgrade.*is chronologically older"
assert_streq ${ newrev } " $( ${ CMD_PREFIX } ostree --repo= repo rev-parse main) "
# But we can pull it without timestamp checking
${ CMD_PREFIX } ostree --repo= repo pull origin main
echo "ok pull timestamp checking"
2014-02-10 01:11:37 +04:00
cd ${ test_tmpdir }
2017-05-17 18:41:54 +03:00
repo_init --no-gpg-verify
2014-02-10 01:11:37 +04:00
${ CMD_PREFIX } ostree --repo= repo pull origin main
${ CMD_PREFIX } ostree --repo= repo fsck
# Generate a delta from old to current, even though we aren't going to
# use it.
2015-11-09 15:03:35 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo static-delta generate main
2014-02-10 01:11:37 +04:00
rm main-files -rf
2015-11-09 15:03:35 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo checkout main main-files
2014-02-10 01:11:37 +04:00
cd main-files
echo "an added file for static deltas" > added-file
echo "modified file for static deltas" > baz/cow
rm baz/saucer
2015-11-09 15:03:35 +03:00
${ CMD_PREFIX } ostree --repo= ${ test_tmpdir } /ostree-srv/gnomerepo commit -b main -s 'static delta test'
2014-02-10 01:11:37 +04:00
cd ..
rm main-files -rf
# Generate delta that we'll use
2015-11-09 15:03:35 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo static-delta generate main
2016-02-19 16:43:35 +03:00
prev_rev = $( ostree --repo= ostree-srv/gnomerepo rev-parse main^)
2016-02-19 20:28:07 +03:00
new_rev = $( ostree --repo= ostree-srv/gnomerepo rev-parse main)
2016-02-29 15:23:28 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
2014-02-10 01:11:37 +04:00
2017-04-12 00:22:54 +03:00
# Explicitly test delta fetches via ref name as well as commit hash
for delta_target in main ${ new_rev } ; do
2016-02-19 20:28:07 +03:00
cd ${ test_tmpdir }
2017-05-17 18:41:54 +03:00
repo_init --no-gpg-verify
2016-02-19 20:28:07 +03:00
${ CMD_PREFIX } ostree --repo= repo pull origin main@${ prev_rev }
2017-04-12 00:22:54 +03:00
${ CMD_PREFIX } ostree --repo= repo pull --dry-run --require-static-deltas origin ${ delta_target } >dry-run-pull.txt
2017-02-11 02:09:16 +03:00
# Compression can vary, so we support 400-699
assert_file_has_content dry-run-pull.txt 'Delta update: 0/1 parts, 0 bytes/[456][0-9][0-9] bytes, 455 bytes total uncompressed'
2016-02-19 20:28:07 +03:00
rev = $( ${ CMD_PREFIX } ostree --repo= repo rev-parse origin:main)
assert_streq " ${ prev_rev } " " ${ rev } "
${ CMD_PREFIX } ostree --repo= repo fsck
2017-04-12 00:22:54 +03:00
done
2016-02-19 20:28:07 +03:00
2017-04-12 00:22:54 +03:00
# Explicitly test delta fetches via ref name as well as commit hash
for delta_target in main ${ new_rev } ; do
2014-02-10 01:11:37 +04:00
cd ${ test_tmpdir }
2017-05-17 18:41:54 +03:00
repo_init --no-gpg-verify
2016-02-19 16:43:35 +03:00
${ CMD_PREFIX } ostree --repo= repo pull origin main@${ prev_rev }
2017-04-12 00:22:54 +03:00
${ CMD_PREFIX } ostree --repo= repo pull --require-static-deltas origin ${ delta_target }
if test ${ delta_target } = main; then
rev = $( ${ CMD_PREFIX } ostree --repo= repo rev-parse origin:main)
assert_streq " ${ new_rev } " " ${ rev } "
else
${ CMD_PREFIX } ostree --repo= repo rev-parse ${ delta_target }
fi
2014-02-10 01:11:37 +04:00
${ CMD_PREFIX } ostree --repo= repo fsck
2017-04-12 00:22:54 +03:00
done
2014-02-10 01:11:37 +04:00
2015-05-12 11:57:03 +03:00
cd ${ test_tmpdir }
2017-05-17 18:41:54 +03:00
repo_init --no-gpg-verify
2016-02-19 16:43:35 +03:00
${ CMD_PREFIX } ostree --repo= repo pull origin main@${ prev_rev }
2015-05-12 11:57:03 +03:00
${ CMD_PREFIX } ostree --repo= repo pull --disable-static-deltas origin main
${ CMD_PREFIX } ostree --repo= repo fsck
2014-02-10 01:11:37 +04:00
rm checkout-origin-main -rf
$OSTREE checkout origin:main checkout-origin-main
cd checkout-origin-main
assert_file_has_content firstfile '^first$'
assert_file_has_content baz/cow "modified file for static deltas"
assert_not_has_file baz/saucer
echo "ok static delta"
2016-02-24 22:29:56 +03:00
cd ${ test_tmpdir }
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo static-delta generate --swap-endianness main
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
2017-05-17 18:41:54 +03:00
repo_init --no-gpg-verify
2016-02-24 22:29:56 +03:00
${ CMD_PREFIX } ostree --repo= repo pull origin main@${ prev_rev }
${ CMD_PREFIX } ostree --repo= repo pull --require-static-deltas --dry-run origin main >byteswapped-dry-run-pull.txt
${ CMD_PREFIX } ostree --repo= repo fsck
if ! diff -u dry-run-pull.txt byteswapped-dry-run-pull.txt; then
assert_not_reached "byteswapped delta differs in size"
fi
echo "ok pull byteswapped delta"
2016-02-19 16:43:35 +03:00
cd ${ test_tmpdir }
rm ostree-srv/gnomerepo/deltas -rf
2016-02-29 15:23:28 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
2017-05-17 18:41:54 +03:00
repo_init --no-gpg-verify
2016-02-19 16:43:35 +03:00
if ${ CMD_PREFIX } ostree --repo= repo pull --require-static-deltas origin main 2>err.txt; then
assert_not_reached "--require-static-deltas unexpectedly succeeded"
fi
assert_file_has_content err.txt "deltas required, but none found"
${ CMD_PREFIX } ostree --repo= repo fsck
2017-04-12 00:22:54 +03:00
# Now test with a partial commit
2017-05-17 18:41:54 +03:00
repo_init --no-gpg-verify
2017-04-12 00:22:54 +03:00
${ CMD_PREFIX } ostree --repo= repo pull --commit-metadata-only origin main@${ prev_rev }
if ${ CMD_PREFIX } ostree --repo= repo pull --require-static-deltas origin main 2>err.txt; then
assert_not_reached "--require-static-deltas unexpectedly succeeded"
fi
assert_file_has_content err.txt "deltas required, but none found"
2016-02-19 20:28:07 +03:00
echo "ok delta required but don't exist"
2017-05-17 18:41:54 +03:00
repo_init --no-gpg-verify
2017-04-12 00:22:54 +03:00
${ CMD_PREFIX } ostree --repo= repo pull origin main@${ prev_rev }
if ${ CMD_PREFIX } ostree --repo= repo pull --require-static-deltas origin ${ new_rev } 2>err.txt; then
assert_not_reached "--require-static-deltas unexpectedly succeeded"
fi
assert_file_has_content err.txt "deltas required, but none found"
echo "ok delta required for revision"
2015-10-15 11:46:16 +03:00
cd ${ test_tmpdir }
rm main-files -rf
2015-11-09 15:03:35 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo checkout main main-files
2015-10-15 11:46:16 +03:00
cd main-files
echo "more added files for static deltas" > added-file2
2015-11-25 16:18:39 +03:00
${ CMD_PREFIX } ostree --repo= ${ test_tmpdir } /ostree-srv/gnomerepo commit -b main -s 'inline static delta test'
2015-10-15 11:46:16 +03:00
cd ..
rm main-files -rf
# Generate new delta that we'll use
2015-11-25 16:18:39 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo static-delta generate --inline main
2016-02-29 15:23:28 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
2015-10-15 11:46:16 +03:00
cd ${ test_tmpdir }
${ CMD_PREFIX } ostree --repo= repo pull origin main
${ CMD_PREFIX } ostree --repo= repo fsck
rm checkout-origin-main -rf
$OSTREE checkout origin:main checkout-origin-main
cd checkout-origin-main
assert_file_has_content added-file2 "more added files for static deltas"
echo "ok inline static delta"
2014-02-10 01:11:37 +04:00
cd ${ test_tmpdir }
rm main-files -rf
2015-11-25 16:18:39 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo checkout main main-files
2014-02-10 01:11:37 +04:00
cd main-files
# Make a file larger than 16M for testing
dd if = /dev/zero of = test-bigfile count = 1 seek = 42678
echo "further modified file for static deltas" > baz/cow
2015-11-09 15:03:35 +03:00
${ CMD_PREFIX } ostree --repo= ${ test_tmpdir } /ostree-srv/gnomerepo commit -b main -s '2nd static delta test'
2014-02-10 01:11:37 +04:00
cd ..
rm main-files -rf
2015-11-09 15:03:35 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo static-delta generate main
2016-02-29 15:23:28 +03:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
2014-02-10 01:11:37 +04:00
cd ${ test_tmpdir }
${ CMD_PREFIX } ostree --repo= repo pull origin main
${ CMD_PREFIX } ostree --repo= repo fsck
rm checkout-origin-main -rf
$OSTREE checkout origin:main checkout-origin-main
cd checkout-origin-main
assert_has_file test-bigfile
stat --format= %s test-bigfile > bigfile-size
assert_file_has_content bigfile-size 21851648
assert_file_has_content baz/cow "further modified file for static deltas"
assert_not_has_file baz/saucer
echo "ok static delta 2"
2016-12-08 22:20:19 +03:00
2017-07-31 19:22:16 +03:00
cd ${ test_tmpdir }
${ CMD_PREFIX } ostree --repo= repo pull origin main main@${ rev } main@${ rev } main main@${ rev } main
echo "ok pull specific commit array"
2016-12-08 22:20:19 +03:00
cd ${ test_tmpdir }
${ CMD_PREFIX } ostree --repo= repo remote add --set= gpg-verify= false --set= unconfigured-state= "Access to ExampleOS requires ONE BILLION DOLLARS." origin-subscription file://$( pwd ) /ostree-srv/gnomerepo
if ${ CMD_PREFIX } ostree --repo= repo pull origin-subscription main 2>err.txt; then
assert_not_reached "pull unexpectedly succeeded?"
fi
assert_file_has_content err.txt "ONE BILLION DOLLARS"
echo "ok unconfigured"
2017-05-17 18:41:54 +03:00
2017-05-26 17:22:52 +03:00
cd ${ test_tmpdir }
repo_init
${ CMD_PREFIX } ostree --repo= repo remote add origin-bad $( cat httpd-address) /ostree/noent
if ${ CMD_PREFIX } ostree --repo= repo --depth= 0 pull origin-bad main 2>err.txt; then
assert_not_reached "pull repo 404 succeeded?"
fi
assert_file_has_content err.txt "404"
echo "ok pull repo 404"
cd ${ test_tmpdir }
repo_init --set= gpg-verify= true
if ${ CMD_PREFIX } ostree --repo= repo --depth= 0 pull origin main 2>err.txt; then
assert_not_reached "pull repo 404 succeeded?"
fi
assert_file_has_content err.txt "GPG verification enabled, but no signatures found"
echo "ok pull repo 404 (gpg)"
2017-05-17 18:41:54 +03:00
cd ${ test_tmpdir }
repo_init --set= gpg-verify= true
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo commit \
--gpg-homedir= ${ TEST_GPG_KEYHOME } --gpg-sign= ${ TEST_GPG_KEYID_1 } -b main \
-s "A signed commit" --tree= ref = main
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
# make sure gpg verification is correctly on
csum = $( ${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo rev-parse main)
objpath = objects/${ csum : : 2 } /${ csum : 2 } .commitmeta
remotesig = ostree-srv/gnomerepo/$objpath
localsig = repo/$objpath
mv $remotesig $remotesig .bak
if ${ CMD_PREFIX } ostree --repo= repo --depth= 0 pull origin main; then
assert_not_reached "pull with gpg-verify unexpectedly succeeded?"
fi
# ok now check that we can pull correctly
mv $remotesig .bak $remotesig
${ CMD_PREFIX } ostree --repo= repo pull origin main
echo "ok pull signed commit"
rm $localsig
${ CMD_PREFIX } ostree --repo= repo pull origin main
test -f $localsig
echo "ok re-pull signature for stored commit"
2017-07-19 12:47:33 +03:00
cd ${ test_tmpdir }
repo_init --no-gpg-verify
mv ostree-srv/gnomerepo/refs/heads/main{ ,.orig}
rm ostree-srv/gnomerepo/summary
( for x in $( seq 20) ; do echo "lots of html here " ; done ) > ostree-srv/gnomerepo/refs/heads/main
if ${ CMD_PREFIX } ostree --repo= repo pull origin main 2>err.txt; then
fatal "pull of invalid ref succeeded"
fi
assert_file_has_content_literal err.txt 'error: Fetching refs/heads/main: Invalid rev lots of html here lots of html here lots of html here lots of'
echo "ok pull got HTML for a ref"