2012-09-23 19:25:09 -04:00
#!/bin/bash
#
# 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 11:44:10 -05:00
set -euo pipefail
2014-01-19 11:48:27 -05:00
2014-02-09 16:11:37 -05:00
function repo_init( ) {
cd ${ test_tmpdir }
rm repo -rf
mkdir repo
${ CMD_PREFIX } ostree --repo= repo init
${ CMD_PREFIX } ostree --repo= repo remote add --set= gpg-verify= false origin $( cat httpd-address) /ostree/gnomerepo
}
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$'
}
2016-03-02 10:28:04 -05:00
echo "1..11"
2014-01-21 08:57:34 +00:00
# Try both syntaxes
2014-02-09 16:11:37 -05:00
repo_init
2013-07-09 09:28:02 -04:00
${ CMD_PREFIX } ostree --repo= repo pull origin main
2014-01-21 08:57:34 +00:00
${ CMD_PREFIX } ostree --repo= repo pull origin:main
2012-09-23 19:25:09 -04:00
${ CMD_PREFIX } ostree --repo= repo fsck
echo "ok pull"
cd ${ test_tmpdir }
2014-02-09 16:11:37 -05:00
verify_initial_contents
2012-09-23 19:25:09 -04:00
echo "ok pull contents"
2013-09-26 14:00:36 -04:00
2014-06-16 17:11:50 -04:00
cd ${ test_tmpdir }
mkdir mirrorrepo
2015-11-09 13:03:35 +01:00
${ CMD_PREFIX } ostree --repo= mirrorrepo init --mode= archive-z2
2014-06-16 17: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"
2015-02-06 10:02:57 -05:00
cd ${ test_tmpdir }
mkdir mirrorrepo-local
2015-11-09 13:03:35 +01:00
${ CMD_PREFIX } ostree --repo= mirrorrepo-local init --mode= archive-z2
2015-02-06 10:02:57 -05: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
$OSTREE show main >/dev/null
echo "ok pull local mirror"
2013-09-26 14:00:36 -04:00
cd ${ test_tmpdir }
2015-11-09 13:03:35 +01:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo commit -b main -s "Metadata string" --add-detached-metadata-string= SIGNATURE = HANCOCK --tree= ref = main
2013-09-26 14: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-09 16:11:37 -05:00
2016-02-11 13:28:03 -05:00
cd ${ test_tmpdir }
mkdir parentpullrepo
${ CMD_PREFIX } ostree --repo= parentpullrepo init --mode= archive-z2
${ 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"
2014-02-09 16:11:37 -05:00
cd ${ test_tmpdir }
repo_init
${ 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 13:03:35 +01:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo static-delta generate main
2014-02-09 16:11:37 -05:00
rm main-files -rf
2015-11-09 13:03:35 +01:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo checkout main main-files
2014-02-09 16:11:37 -05: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 13:03:35 +01:00
${ CMD_PREFIX } ostree --repo= ${ test_tmpdir } /ostree-srv/gnomerepo commit -b main -s 'static delta test'
2014-02-09 16:11:37 -05:00
cd ..
rm main-files -rf
# Generate delta that we'll use
2015-11-09 13:03:35 +01:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo static-delta generate main
2016-02-19 08:43:35 -05:00
prev_rev = $( ostree --repo= ostree-srv/gnomerepo rev-parse main^)
2016-02-19 12:28:07 -05:00
new_rev = $( ostree --repo= ostree-srv/gnomerepo rev-parse main)
2016-02-29 13:23:28 +01:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
2014-02-09 16:11:37 -05:00
2016-02-19 12:28:07 -05:00
cd ${ test_tmpdir }
repo_init
${ CMD_PREFIX } ostree --repo= repo pull origin main@${ prev_rev }
2016-02-24 14:29:56 -05:00
${ CMD_PREFIX } ostree --repo= repo pull --dry-run --require-static-deltas origin main >dry-run-pull.txt
assert_file_has_content dry-run-pull.txt 'Delta update: 0/1 parts'
2016-02-19 12:28:07 -05:00
rev = $( ${ CMD_PREFIX } ostree --repo= repo rev-parse origin:main)
assert_streq " ${ prev_rev } " " ${ rev } "
${ CMD_PREFIX } ostree --repo= repo fsck
2014-02-09 16:11:37 -05:00
cd ${ test_tmpdir }
2016-02-19 08:43:35 -05:00
repo_init
${ CMD_PREFIX } ostree --repo= repo pull origin main@${ prev_rev }
${ CMD_PREFIX } ostree --repo= repo pull --require-static-deltas origin main
2016-02-19 12:28:07 -05:00
rev = $( ${ CMD_PREFIX } ostree --repo= repo rev-parse origin:main)
assert_streq " ${ new_rev } " " ${ rev } "
2014-02-09 16:11:37 -05:00
${ CMD_PREFIX } ostree --repo= repo fsck
2015-05-12 10:57:03 +02:00
cd ${ test_tmpdir }
2016-02-19 08:43:35 -05:00
repo_init
${ CMD_PREFIX } ostree --repo= repo pull origin main@${ prev_rev }
2015-05-12 10:57:03 +02:00
${ CMD_PREFIX } ostree --repo= repo pull --disable-static-deltas origin main
${ CMD_PREFIX } ostree --repo= repo fsck
2014-02-09 16:11:37 -05: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 14:29:56 -05: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
repo_init
${ 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 08:43:35 -05:00
cd ${ test_tmpdir }
rm ostree-srv/gnomerepo/deltas -rf
2016-02-29 13:23:28 +01:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
2016-02-19 08:43:35 -05:00
repo_init
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
2016-02-19 12:28:07 -05:00
echo "ok delta required but don't exist"
2015-10-15 10:46:16 +02:00
cd ${ test_tmpdir }
rm main-files -rf
2015-11-09 13:03:35 +01:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo checkout main main-files
2015-10-15 10:46:16 +02:00
cd main-files
echo "more added files for static deltas" > added-file2
2015-11-25 14:18:39 +01:00
${ CMD_PREFIX } ostree --repo= ${ test_tmpdir } /ostree-srv/gnomerepo commit -b main -s 'inline static delta test'
2015-10-15 10:46:16 +02:00
cd ..
rm main-files -rf
# Generate new delta that we'll use
2015-11-25 14:18:39 +01:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo static-delta generate --inline main
2016-02-29 13:23:28 +01:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
2015-10-15 10:46:16 +02: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-09 16:11:37 -05:00
cd ${ test_tmpdir }
rm main-files -rf
2015-11-25 14:18:39 +01:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo checkout main main-files
2014-02-09 16:11:37 -05: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 13:03:35 +01:00
${ CMD_PREFIX } ostree --repo= ${ test_tmpdir } /ostree-srv/gnomerepo commit -b main -s '2nd static delta test'
2014-02-09 16:11:37 -05:00
cd ..
rm main-files -rf
2015-11-09 13:03:35 +01:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo static-delta generate main
2016-02-29 13:23:28 +01:00
${ CMD_PREFIX } ostree --repo= ostree-srv/gnomerepo summary -u
2014-02-09 16:11:37 -05: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"