@ -1,22 +1,23 @@
#!/bin/bash
set -ex
shopt -s expand_aliases
export LC_ALL = C.UTF-8
export LANG = C.UTF-8
SCRIPT_FOLDER = " `dirname \" $0 \"` "
REPO_FOLDER = " ${ SCRIPT_FOLDER } /../ "
GARAGE_DEBUG = " ${ REPO_FOLDER } /target/debug/ "
GARAGE_RELEASE = " ${ REPO_FOLDER } /target/release/ "
PATH = " ${ GARAGE_DEBUG } : ${ GARAGE_RELEASE } : $PATH "
echo "setup"
echo "⏳ S etup"
cargo build
${ SCRIPT_FOLDER } /dev-clean.sh
${ SCRIPT_FOLDER } /dev-cluster.sh > /tmp/garage.log 2>& 1 &
${ SCRIPT_FOLDER } /dev-configure.sh
${ SCRIPT_FOLDER } /dev-bucket.sh
source ${ SCRIPT_FOLDER } /dev-env-aws.sh
source ${ SCRIPT_FOLDER } /dev-env-s3cmd.sh
which garage
garage status
garage key list
garage bucket list
@ -25,58 +26,86 @@ dd if=/dev/urandom of=/tmp/garage.1.rnd bs=1k count=2 # No multipart, inline sto
dd if = /dev/urandom of = /tmp/garage.2.rnd bs = 1M count = 5 # No multipart but file will be chunked
dd if = /dev/urandom of = /tmp/garage.3.rnd bs = 1M count = 10 # by default, AWS starts using multipart at 8MB
echo "s3 api testing..."
awsgrg --version
s3cmd --version
python3 --version
echo "🧪 S3 API testing..."
# AWS
if [ -z " $SKIP_AWS " ] ; then
echo "🛠️ Testing with awscli"
source ${ SCRIPT_FOLDER } /dev-env-aws.sh
for idx in $( seq 1 3) ; do
aws s3 cp " /tmp/garage. $idx .rnd " " s3://eprouvette/&+-é\"/garage. $idx .aws "
aws s3 ls s3://eprouvette
aws s3 cp " s3://eprouvette/&+-é\"/garage. $idx .aws " " /tmp/garage. $idx .dl "
diff /tmp/garage.$idx .rnd /tmp/garage.$idx .dl
rm /tmp/garage.$idx .dl
aws s3 rm " s3://eprouvette/&+-é\"/garage. $idx .aws "
done
fi
# S3CMD
if [ -z " $SKIP_S3CMD " ] ; then
echo "🛠️ Testing with s3cmd"
source ${ SCRIPT_FOLDER } /dev-env-s3cmd.sh
for idx in $( seq 1 3) ; do
s3cmd put " /tmp/garage. $idx .rnd " " s3://eprouvette/&+-é\"/garage. $idx .s3cmd "
s3cmd ls s3://eprouvette
s3cmd get " s3://eprouvette/&+-é\"/garage. $idx .s3cmd " " /tmp/garage. $idx .dl "
diff /tmp/garage.$idx .rnd /tmp/garage.$idx .dl
rm /tmp/garage.$idx .dl
s3cmd rm " s3://eprouvette/&+-é\"/garage. $idx .s3cmd "
done
fi
# Minio Client
if [ -z " $SKIP_MC " ] ; then
echo "🛠️ Testing with mc (minio client)"
source ${ SCRIPT_FOLDER } /dev-env-mc.sh
for idx in $( seq 1 3) ; do
mc cp " /tmp/garage. $idx .rnd " " garage/eprouvette/&+-é\"/garage. $idx .mc "
mc ls garage/eprouvette
mc cp " garage/eprouvette/&+-é\"/garage. $idx .mc " " /tmp/garage. $idx .dl "
diff /tmp/garage.$idx .rnd /tmp/garage.$idx .dl
rm /tmp/garage.$idx .dl
mc rm " garage/eprouvette/&+-é\"/garage. $idx .mc "
done
fi
# RClone
if [ -z " $SKIP_RCLONE " ] ; then
echo "🛠️ Testing with rclone"
source ${ SCRIPT_FOLDER } /dev-env-rclone.sh
for idx in $( seq 1 3) ; do
cp /tmp/garage.$idx .rnd /tmp/garage.$idx .dl
rclone copy " /tmp/garage. $idx .dl " "garage:eprouvette/&+-é\"/"
rm /tmp/garage.$idx .dl
rclone ls garage:eprouvette
rclone copy " garage:eprouvette/&+-é\"/garage. $idx .dl " "/tmp/"
diff /tmp/garage.$idx .rnd /tmp/garage.$idx .dl
rm /tmp/garage.$idx .dl
rclone delete " garage:eprouvette/&+-é\"/garage. $idx .dl "
done
fi
for idx in $( seq 1 3) ; do
# AWS sends
awsgrg cp " /tmp/garage. $idx .rnd " " s3://eprouvette/&+-é\"/garage. $idx .aws "
awsgrg ls s3://eprouvette
awsgrg cp " s3://eprouvette/&+-é\"/garage. $idx .aws " " /tmp/garage. $idx .dl "
diff /tmp/garage.$idx .rnd /tmp/garage.$idx .dl
rm /tmp/garage.$idx .dl
s3grg get " s3://eprouvette/&+-é\"/garage. $idx .aws " " /tmp/garage. $idx .dl "
diff /tmp/garage.$idx .rnd /tmp/garage.$idx .dl
rm /tmp/garage.$idx .dl
awsgrg rm " s3://eprouvette/&+-é\"/garage. $idx .aws "
# S3CMD sends
s3grg put " /tmp/garage. $idx .rnd " " s3://eprouvette/&+-é\"/garage. $idx .s3cmd "
s3grg ls s3://eprouvette
s3grg get " s3://eprouvette/&+-é\"/garage. $idx .s3cmd " " /tmp/garage. $idx .dl "
diff /tmp/garage.$idx .rnd /tmp/garage.$idx .dl
rm /tmp/garage.$idx .dl
awsgrg cp " s3://eprouvette/&+-é\"/garage. $idx .s3cmd " " /tmp/garage. $idx .dl "
diff /tmp/garage.$idx .rnd /tmp/garage.$idx .dl
rm /tmp/garage.$idx .dl
s3grg rm " s3://eprouvette/&+-é\"/garage. $idx .s3cmd "
done
rm /tmp/garage.{ 1,2,3} .rnd
echo "website testing"
echo "<h1>hello world</h1>" > /tmp/garage-index.html
awsgrg cp /tmp/garage-index.html s3://eprouvette/index.html
[ ` curl -s -o /dev/null -w "%{http_code}" --header "Host: eprouvette.garage.tld" http://127.0.0.1:3923/ ` = = 404 ]
garage bucket website --allow eprouvette
[ ` curl -s -o /dev/null -w "%{http_code}" --header "Host: eprouvette.garage.tld" http://127.0.0.1:3923/ ` = = 200 ]
garage bucket website --deny eprouvette
[ ` curl -s -o /dev/null -w "%{http_code}" --header "Host: eprouvette.garage.tld" http://127.0.0.1:3923/ ` = = 404 ]
awsgrg rm s3://eprouvette/index.html
rm /tmp/garage-index.html
echo "teardown"
if [ -z " $SKIP_AWS " ] ; then
echo "🧪 Website Testing"
echo "<h1>hello world</h1>" > /tmp/garage-index.html
aws s3 cp /tmp/garage-index.html s3://eprouvette/index.html
[ ` curl -s -o /dev/null -w "%{http_code}" --header "Host: eprouvette.garage.tld" http://127.0.0.1:3923/ ` = = 404 ]
garage bucket website --allow eprouvette
[ ` curl -s -o /dev/null -w "%{http_code}" --header "Host: eprouvette.garage.tld" http://127.0.0.1:3923/ ` = = 200 ]
garage bucket website --deny eprouvette
[ ` curl -s -o /dev/null -w "%{http_code}" --header "Host: eprouvette.garage.tld" http://127.0.0.1:3923/ ` = = 404 ]
aws s3 rm s3://eprouvette/index.html
rm /tmp/garage-index.html
fi
echo "🏁 Teardown"
AWS_ACCESS_KEY_ID = ` cat /tmp/garage.s3 | cut -d' ' -f1`
AWS_SECRET_ACCESS_KEY = ` cat /tmp/garage.s3 | cut -d' ' -f2`
garage bucket deny --read --write eprouvette --key $AWS_ACCESS_KEY_ID
garage bucket delete --yes eprouvette
garage key delete --yes $AWS_ACCESS_KEY_ID
echo "success"
echo "✅ Success"