Skip to content

Instantly share code, notes, and snippets.

@smerritt
Created January 30, 2018 19:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save smerritt/d5d3ca419a1007c365e29a1fb73a4b4b to your computer and use it in GitHub Desktop.
Save smerritt/d5d3ca419a1007c365e29a1fb73a4b4b to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
CONTAINER="ds-test"
echo "Test setup"
# Set up some data segments (these are just plain objects)
TOKEN="`swift stat -v | grep "Auth Token" | cut -d : -f 2`"
STORAGE_URL="`swift stat -v | grep "StorageURL" | cut -d : -f 2,3,4,5,6`"
pushd ${TMPDIR:-/tmp}
echo "normal segment 1" > ns1
echo "normal segment 2" > ns2
echo "normal segment 3" > ns3
echo "normal segment 4" > ns4
echo "normal segment 5" > ns5
echo "normal segment 6" > ns6
echo "normal segment 7" > ns7
echo "normal segment 8" > ns8
echo "normal segment 9" > ns9
echo "submanifest segment 1" > sub1
echo "submanifest segment 2" > sub2
echo "submanifest segment 3" > sub3
echo "submanifest segment 4" > sub4
swift upload "$CONTAINER" ns1 ns2 ns3 ns4 ns5 ns6 ns7 ns8 ns9 sub1 sub2 sub3 sub4 > /dev/null
cat <<EOF >submanifest
[
{"data": "c3VibWFuaWZlc3QgaW50cm8gZGF0YQo="},
{"path": "$CONTAINER/sub1"},
{"path": "$CONTAINER/sub2"},
{"data": "c3VibWFuaWZlc3QgZGF0YSBzZWdtZW50Cg=="},
{"path": "$CONTAINER/sub3"},
{"path": "$CONTAINER/sub4"},
{"data": "c3VibWFuaWZlc3Qgb3V0cm8gZGF0YQo="}
]
EOF
python -mjson.tool submanifest >/dev/null || echo "JSON not ok"
curl -q -X PUT --data-binary @submanifest -H "X-Auth-Token: $TOKEN" $STORAGE_URL/$CONTAINER/submanifest?multipart-manifest=put
function run_test() {
MANIFEST="$1"
# It's 2018, but trailing commas in JSON are still not allowed.
python -mjson.tool $MANIFEST >/dev/null || echo "JSON not ok"
curl -q -X PUT --data-binary @$MANIFEST -H "X-Auth-Token: $TOKEN" $STORAGE_URL/$CONTAINER/$MANIFEST?multipart-manifest=put
curl -i -X GET -H "X-Auth-Token: $TOKEN" $STORAGE_URL/$CONTAINER/$MANIFEST
}
echo
echo "Manifest containing both path/data segments"
cat <<EOF >manifest
[
{"data": "ZGF0YSBwcmUgMQo="},
{"data": "ZGF0YSBwcmUgMgo="},
{"path": "$CONTAINER/ns1"},
{"data": "ZGF0YSAxCg=="},
{"path": "$CONTAINER/ns2"},
{"data": "ZGF0YSAyCg=="},
{"path": "$CONTAINER/ns3"},
{"data": "ZGF0YSAzCg=="},
{"path": "$CONTAINER/ns4"},
{"data": "ZGF0YSA0Cg=="},
{"path": "$CONTAINER/ns5"},
{"data": "ZGF0YSA1Cg=="},
{"path": "$CONTAINER/ns6"},
{"data": "ZGF0YSA2Cg=="},
{"path": "$CONTAINER/ns7"},
{"data": "ZGF0YSA3Cg=="},
{"path": "$CONTAINER/ns8"},
{"data": "ZGF0YSA4Cg=="},
{"path": "$CONTAINER/ns9"},
{"data": "ZGF0YSBwb3N0IDEK"},
{"data": "ZGF0YSBwb3N0IDIK"}
]
EOF
run_test "manifest"
echo
echo "Manifest with ranges"
cat <<EOF >manifest-range
[
{"data": "ZGF0YSBwcmUgMQo="},
{"data": "ZGF0YSBwcmUgMgo="},
{"path": "$CONTAINER/ns1", "range": "0-6"},
{"path": "$CONTAINER/ns1", "range": "-2"},
{"data": "ZGF0YSAxCg=="},
{"path": "$CONTAINER/ns2", "range": "0-4"},
{"path": "$CONTAINER/ns2", "range": "-1"},
{"path": "$CONTAINER/ns3"},
{"data": "ZGF0YSBwb3N0IDEK"},
{"data": "ZGF0YSBwb3N0IDIK"}
]
EOF
run_test "manifest-range"
echo
echo "Manifest with submanifest after normal segment"
cat <<EOF >manifest-sub-after-normal
[
{"data": "ZGF0YSBwcmUgMQo="},
{"data": "ZGF0YSBwcmUgMgo="},
{"path": "$CONTAINER/ns1"},
{"path": "$CONTAINER/submanifest"},
{"path": "$CONTAINER/ns2"},
{"data": "ZGF0YSBwb3N0IDEK"},
{"data": "ZGF0YSBwb3N0IDIK"}
]
EOF
run_test "manifest-sub-after-normal"
echo
echo "Manifest with submanifest after data segment"
cat <<EOF >manifest-sub-after-data
[
{"data": "ZGF0YSBwcmUgMQo="},
{"data": "ZGF0YSBwcmUgMgo="},
{"path": "$CONTAINER/ns1"},
{"data": "ZGF0YSBiZWZvcmUgc3VibWFuaWZlc3QK"},
{"path": "$CONTAINER/submanifest"},
{"data": "ZGF0YSBhZnRlciBzdWJtYW5pZmVzdAo="},
{"path": "$CONTAINER/ns2"},
{"data": "ZGF0YSBwb3N0IDEK"},
{"data": "ZGF0YSBwb3N0IDIK"}
]
EOF
run_test "manifest-sub-after-data"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment