2019-01-03 19:54:27 +00:00
|
|
|
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
|
|
TMP_DIR=$(mktemp -d -t tmp.XXXXXXXXXX)
|
|
|
|
CMP_DIR=$(mktemp -d -t tmp.XXXXXXXXXX)
|
|
|
|
# Clean up what we might have done
|
|
|
|
cleanup(){
|
|
|
|
echo ""
|
|
|
|
echo ""
|
|
|
|
echo ""
|
|
|
|
echo "=> Testing finished, logs to follow"
|
|
|
|
echo "=> Satellite logs"
|
|
|
|
docker logs storj_satellite_1
|
|
|
|
echo "=> Storagenode logs"
|
|
|
|
docker logs storj_storagenode_1
|
|
|
|
echo "=> Gateway logs"
|
|
|
|
docker logs storj_gateway_1
|
|
|
|
echo "=> Cleaning up"
|
|
|
|
rm -rf "$TMP_DIR" "$CMP_DIR"
|
|
|
|
# Hide any ERRORs and Faileds here as they are not relevant to the actual
|
|
|
|
# errors and failures of this test.
|
|
|
|
docker-compose down --rmi all 2>&1 | grep -v ERROR | grep -v Failed
|
|
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
|
|
|
|
|
|
mkdir -p "$TMP_DIR"
|
|
|
|
mkdir -p "$CMP_DIR"
|
|
|
|
|
|
|
|
# Stand up production images in a local environment
|
|
|
|
docker-compose up -d satellite storagenode gateway
|
|
|
|
|
2019-01-04 16:38:57 +00:00
|
|
|
echo "=> Waiting for the gateway to be ready"
|
2019-01-03 19:54:27 +00:00
|
|
|
until docker logs storj_gateway_1 | grep -q Access; do
|
|
|
|
sleep 2
|
|
|
|
done
|
|
|
|
|
|
|
|
# Extract the keys for AWS client
|
|
|
|
access_key_id="$(docker logs storj_gateway_1 2>/dev/null| awk '/Access/{print $3; exit}')"
|
|
|
|
secret_access_key="$(docker logs storj_gateway_1 2>/dev/null| awk '/Secret/{print $3; exit}')"
|
|
|
|
|
|
|
|
echo "=> Access Key: $access_key_id"
|
|
|
|
echo "=> Secret Key: $secret_access_key"
|
|
|
|
export AWS_ACCESS_KEY_ID="$access_key_id"
|
|
|
|
export AWS_SECRET_ACCESS_KEY="$secret_access_key"
|
|
|
|
|
|
|
|
aws configure set default.region us-east-1
|
|
|
|
|
|
|
|
echo "=> Making test files"
|
2019-03-20 14:58:07 +00:00
|
|
|
random_bytes_file(){
|
|
|
|
size=$1
|
|
|
|
output=$2
|
|
|
|
dd if=/dev/urandom of="$output" count=1 bs="$size" >/dev/null 2>&1
|
|
|
|
}
|
|
|
|
|
|
|
|
random_bytes_file 1x1024x1024 "$TMP_DIR/small-upload-testfile" # create 1mb file of random bytes (inline)
|
|
|
|
random_bytes_file 5x1024x1024 "$TMP_DIR/big-upload-testfile" # create 5mb file of random bytes (remote)
|
|
|
|
random_bytes_file 5x1024 "$TMP_DIR/multipart-upload-testfile" # create 5kb file of random bytes (remote)
|
2019-01-03 19:54:27 +00:00
|
|
|
|
|
|
|
echo "=> Making bucket"
|
|
|
|
aws s3 --endpoint=http://localhost:7777/ mb s3://bucket
|
|
|
|
|
|
|
|
echo "=> Uploading test files"
|
|
|
|
aws configure set default.s3.multipart_threshold 1TB
|
|
|
|
aws s3 --endpoint=http://localhost:7777/ cp "$TMP_DIR/small-upload-testfile" s3://bucket/small-testfile
|
|
|
|
starttime="$(date +%s)"
|
|
|
|
while true; do
|
|
|
|
if aws s3 --endpoint=http://localhost:7777/ cp "$TMP_DIR/big-upload-testfile" s3://bucket/big-testfile; then
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
echo "=> Large file failed, sleeping for a bit before trying again"
|
|
|
|
sleep 1
|
|
|
|
if [ $(( $starttime + 60 )) -lt $(date +%s) ]; then
|
|
|
|
echo "=> Failed to upload big-testfile for over a minute!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# Wait 5 seconds to trigger any error related to one of the different intervals
|
|
|
|
sleep 5
|
|
|
|
|
|
|
|
aws configure set default.s3.multipart_threshold 4KB
|
|
|
|
aws s3 --endpoint=http://localhost:7777/ cp "$TMP_DIR/multipart-upload-testfile" s3://bucket/multipart-testfile
|
|
|
|
|
|
|
|
echo "=> Listing bucket"
|
|
|
|
aws s3 --endpoint=http://localhost:7777/ ls s3://bucket
|
|
|
|
echo "=> Downloading test files"
|
|
|
|
aws s3 --endpoint=http://localhost:7777/ cp s3://bucket/small-testfile "$CMP_DIR/small-download-testfile"
|
|
|
|
aws s3 --endpoint=http://localhost:7777/ cp s3://bucket/big-testfile "$CMP_DIR/big-download-testfile"
|
|
|
|
aws s3 --endpoint=http://localhost:7777/ cp s3://bucket/multipart-testfile "$CMP_DIR/multipart-download-testfile"
|
|
|
|
echo "=> Removing bucket"
|
|
|
|
aws s3 --endpoint=http://localhost:7777/ rb s3://bucket --force
|
|
|
|
|
|
|
|
echo "=> Comparing test files downloaded with uploaded versions"
|
|
|
|
if cmp "$TMP_DIR/small-upload-testfile" "$CMP_DIR/small-download-testfile"
|
|
|
|
then
|
2019-03-20 14:58:07 +00:00
|
|
|
echo "Downloaded file matches uploaded file"
|
2019-01-03 19:54:27 +00:00
|
|
|
else
|
2019-03-20 14:58:07 +00:00
|
|
|
echo "Downloaded file does not match uploaded file"
|
|
|
|
exit 1
|
2019-01-03 19:54:27 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
if cmp "$TMP_DIR/big-upload-testfile" "$CMP_DIR/big-download-testfile"
|
|
|
|
then
|
2019-03-20 14:58:07 +00:00
|
|
|
echo "Downloaded file matches uploaded file"
|
2019-01-03 19:54:27 +00:00
|
|
|
else
|
2019-03-20 14:58:07 +00:00
|
|
|
echo "Downloaded file does not match uploaded file"
|
|
|
|
exit 1
|
2019-01-03 19:54:27 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
if cmp "$TMP_DIR/multipart-upload-testfile" "$CMP_DIR/multipart-download-testfile"
|
|
|
|
then
|
2019-03-20 14:58:07 +00:00
|
|
|
echo "Downloaded file matches uploaded file"
|
2019-01-03 19:54:27 +00:00
|
|
|
else
|
2019-03-20 14:58:07 +00:00
|
|
|
echo "Downloaded file does not match uploaded file"
|
|
|
|
exit 1
|
2019-01-03 19:54:27 +00:00
|
|
|
fi
|