vsphere-influxdb-go/vendor/github.com/vmware/govmomi/govc/test/datastore_file_manager_test.sh

103 lines
2.6 KiB
Bash
Executable File

#!/bin/bash -e
# This test is not run via bats
# See also: datastore.bats@test "datastore.disk"
export GOVC_TEST_URL=$GOVC_URL
. "$(dirname "$0")"/test_helper.bash
echo -n "checking datastore type..."
type=$(govc object.collect -s "datastore/$GOVC_DATASTORE" summary.type)
echo "$type"
if [ "$type" = "vsan" ] ; then
echo -n "checking for orphan objects..."
objs=($(govc datastore.vsan.dom.ls -o))
echo "${#objs[@]}"
if [ "${#objs[@]}" -ne "0" ] ; then
govc datastore.vsan.dom.rm "${objs[@]}"
fi
fi
dir=govc-test-dfm
echo "uploading plain file..."
cal | govc datastore.upload - $dir/cal.txt
echo "removing plain file..."
govc datastore.rm $dir/cal.txt
scratch=$dir/govc-test-scratch/govc-test-scratch.vmdk
govc datastore.mkdir -p "$(dirname $scratch)"
echo "creating disk $scratch..."
govc datastore.disk.create -size 1M $scratch
id=$(new_id)
echo "creating $id VM with disk linked to $scratch..."
govc vm.create -on=false -link -disk $scratch "$id"
info=$(govc device.info -vm "$id" disk-*)
echo "$info"
disk="$(grep Name: <<<"$info" | awk '{print $2}')"
vmdk="$id/$id.vmdk"
echo "removing $disk device but keeping the .vmdk backing file..."
govc device.remove -vm "$id" -keep "$disk"
echo -n "checking delta disk ddb.deletable..."
govc datastore.download "$vmdk" - | grep -q -v ddb.deletable
echo "yes"
echo -n "checking scratch disk ddb.deletable..."
govc datastore.download "$scratch" - | grep ddb.deletable | grep -q false
echo "no"
echo "removing $vmdk"
govc datastore.rm "$vmdk"
echo -n "checking that rm $scratch fails..."
govc datastore.rm "$scratch" 2>/dev/null || echo "yes"
echo -n "checking that rm -f $scratch deletes..."
govc datastore.rm -f "$scratch" && echo "yes"
echo "removing disk Directory via FileManager..."
govc datastore.mkdir -p "$(dirname $scratch)"
govc datastore.disk.create -size 1M $scratch
govc datastore.rm "$(dirname $scratch)"
echo -n "checking for remaining files..."
govc datastore.ls -p -R $dir
teardown
status=0
if [ "$type" = "vsan" ] ; then
echo -n "checking for leaked objects..."
objs=($(govc datastore.vsan.dom.ls -l -o | awk '{print $3}'))
echo "${#objs[@]}"
if [ "${#objs[@]}" -ne "0" ] ; then
printf "%s\n" "${objs[@]}"
status=1
else
# this is expected to leak on vSAN currently
echo -n "checking if FileManager.Delete still leaks..."
govc datastore.mkdir -p "$(dirname $scratch)"
govc datastore.disk.create -size 1M $scratch
# '-t=false' forces use of FileManager instead of VirtualDiskManager
govc datastore.rm -t=false $scratch
govc datastore.rm $dir
govc datastore.vsan.dom.ls -o | xargs -r govc datastore.vsan.dom.rm -v
fi
fi
exit $status