~corey.bryant/charms/trusty/swift-proxy/mitaka-ch-sync

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/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