charm-swift-proxy/unit_tests/swift-test

117 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# Tests account access via proxy and file upload
# and download to swift. Right now meant to be run on ec2, will change later.
#
# TODO: Generate test files with something other than /dev/zero and check
# integrity after download.
#
# Author: Adam Gandelman <adamg@canonical.com>
PWD=`pwd`
PROXY_IP=`ec2metadata 2>/dev/null | grep local-ipv4 | awk '{ print $2 }'`
PROXY_IP=$PROXY_IP
TEST_USER=root
TEST_PASS=testpass
CONTAINER=testcontainer
TEST_DIR=/tmp/swift
###
# Test account server via proxy
echo -n "Testing proxy server @ $PROXY_IP: "
RESP=$(curl -w "http_code: %{http_code}\n" -k -i \
-H "X-Storage-User: system:$TEST_USER" \
-H "X-Storage-Pass: $TEST_PASS" \
https://$PROXY_IP:8080/auth/v1.0 2>/dev/null \
| grep http_code: | awk '{ print $2 }')
[[ $RESP != "200" ]] && echo "ERROR: RESP != 200 from server" && exit 1
echo "OK"
echo -n "Requesting url and auth token for user $TEST_USER with password $TEST_PASS: "
TOKEN=$(curl -w "http_code: %{http_code}\n" -k -i \
-H "X-Storage-User: system:$TEST_USER" \
-H "X-Storage-Pass: $TEST_PASS" \
https://$PROXY_IP:8080/auth/v1.0 2>/dev/null \
| grep X-Auth-Token | awk '{ print $2 }')
URL=$(curl -w "http_code: %{http_code}\n" -k -i \
-H "X-Storage-User: system:$TEST_USER" \
-H "X-Storage-Pass: $TEST_PASS" \
https://$PROXY_IP:8080/auth/v1.0 2>/dev/null \
| grep X-Storage-Url | awk '{ print $2 }')
[[ -z $TOKEN ]] || [[ -z $URL ]] && \
echo "ERROR: Did not recieve token or url. URL=$URL TOKEN=$TOKEN" && exit 1
echo "OK"
echo "URL=$URL"
echo "TOKEN=$TOKEN"
echo -n "Testing TOKEN @ URL: "
RESP=$(curl -w "http_code: %{http_code}\n" -k -i \
-H "X-Auth-Token: $TOKEN" $URL 2>/dev/null \
| grep http_code: | awk '{ print $2 }')
if [[ $RESP != "200" ]] && [[ $RESP != "204" ]] ; then
echo "ERROR: http_code $RESP, expecting 200 or 204"
fi
echo "OK"
###
# Test swift
function run_swift {
COMMAND="swift -A https://$PROXY_IP:8080/auth/v1.0 \
-U system:$TEST_USER \
-K $TEST_PASS $1"
$COMMAND
}
echo -n "Testing swift stat: "
run_swift stat | grep Containers >/dev/null
[[ $? != 0 ]] && echo "ERROR could not query for empty container"
echo "OK"
echo -n "Creating 3 25MB test files for upload in $TEST_DIR: "
mkdir -p $TEST_DIR
for i in 1 2 3 ; do
dd if=/dev/zero of=$TEST_DIR/testfile$i bs=1M count=25 >/dev/null 2>&1 || exit 1
done
echo "OK"
echo "Uploading test files to $CONTAINER from $TEST_DIR: "
cd $TEST_DIR
for i in `ls | grep -v download` ; do
echo -ne "\t$i: "
# output of successful upload is the filename uploaded.
uploaded=$(run_swift "upload $CONTAINER $i")
[[ $uploaded != $i ]] && \
echo "FAIL" && exit 1
echo "OK"
done
echo "Downloading container $CONTAINER to $TEST_DIR/download: "
mkdir -p $TEST_DIR/download
cd $TEST_DIR/download
run_swift "download $CONTAINER" >>/dev/null 2>&1
echo "OK"
echo "Verifying upload vs download: "
cd $TEST_DIR
for i in `ls | grep -v download` ; do
local_size=$(stat -c%s $i)
echo -e "\tLocal file: $i"
echo -ne "\t\tDownloaded: $TEST_DIR/download/$i - "
ls $TEST_DIR/download/$i >/dev/null 2>&1
if [[ $? != 0 ]] ; then
echo -e "FAILED\nERROR: Uploaded file $i was not downloaded to $TEMP_DIR/download"
exit 1
fi
echo "OK"
down_size=$(stat -c%s $TEST_DIR/download/$i)
echo -ne "\t\tBytes: Uploaded ($local_size bytes) Downloaded ($down_size) - "
if [[ $local_size != $down_size ]] ; then
echo -e "FAILED\nERROR: Downloaded size of $i does not match uploaded"
exit 1
fi
echo "OK"
done
echo "Test pass."
cd $PWD