test/bin-test/test-dav-sync-push1.sh

Sun, 17 Dec 2023 15:33:50 +0100

author
Mike Becker <universe@uap-core.de>
date
Sun, 17 Dec 2023 15:33:50 +0100
changeset 800
30d484806c2b
parent 761
a2f1d7c1755c
permissions
-rwxr-xr-x

fix faulty string to int conversion utilities

Probably it was expected that errno is set to EINVAL when illegal characters are encountered. But this is not standard and does not happen on every system, allowing illegal strings to be parsed as valid integers.

#!/bin/sh
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright 2019 Olaf Wintermann. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
#   1. Redistributions of source code must retain the above copyright
#      notice, this list of conditions and the following disclaimer.
#
#   2. Redistributions in binary form must reproduce the above copyright
#      notice, this list of conditions and the following disclaimer in the
#      documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#

if [ -z "$DAV_BIN" ];
then
	echo "DAV_BIN variable not set"
	exit 1
fi
if [ -z "$DAV_SYNC_BIN" ];
then
	echo "DAV_SYNC_BIN variable not set"
	exit 1
fi

# checks if tmp-sync/out.txt contains a specific text
# arg1: pattern
# arg2: errormsg
check_tmpout()
{
	TEST=`cat tmp-sync/out.txt | grep "$1"`
	if [ $? -ne 0 ];
	then
		echo "$2"
		exit 2	
	fi
}

# do dav-sync push and check return value
# arg1: dir
# arg2: errormsg
dav_sync_push()
{
	$DAV_SYNC_BIN push $1 > tmp-sync/out.txt
	if [ $? -ne 0 ];
	then
		echo "$2"
		exit 2
	fi
}

$DAV_BIN mkcol dav-test-repo/sync/test1 2> /dev/null

# 1. test
# copy files to the test1a dir and run push
# expected result: 2 uploads, no errors or conflicts

cp synctest/file1 tmp-sync/test1a
cp synctest/file2 tmp-sync/test1a

OUT=`$DAV_SYNC_BIN push test1a | tail -1`

TEST=`echo $OUT | grep Result`
if [ $? -ne 0 ];
then
	echo "push 1 failed"
	exit 2
fi

TEST=`echo $OUT | grep "2 files pushed"`
if [ $? -ne 0 ];
then
	echo "wrong push counter"
	exit 2
fi

TEST=`echo $OUT | grep "0 conflicts"`
if [ $? -ne 0 ];
then
	echo "wrong conflict counter"
	exit 2
fi

TEST=`echo $OUT | grep "0 files deleted"`
if [ $? -ne 0 ];
then
	echo "wrong delete counter"
	exit 2
fi

# 2. test
# do nothing
# expected result: no uploads or updates, only status line with zeros

dav_sync_push test1a "push 2 failed"

OUT=`wc -l < tmp-sync/out.txt`
if [ $OUT -ne 1 ];
then	
	echo "push 2: number of output lines not 1"
	exit 2
fi

check_tmpout "0 files pushed" "push 2: wrong push counter"
check_tmpout "0 errors" "push 2: wrong error counter"

# 3. test
# add empty dir
# expected result: 1 mkcol
mkdir tmp-sync/test1a/emptydir

dav_sync_push test1a "push 3 failed"
check_tmpout "mkcol: /emptydir" "push 3: no mkcol"

# 4. test
# do nothing again, test if double mkcol happens
# expected result: no mkcol
dav_sync_push test1a "push 4 failed"

OUT=`wc -l < tmp-sync/out.txt`
if [ $OUT -ne 1 ];
then	
	echo "push 4: number of output lines not 1"
	exit 2
fi

check_tmpout "0 files pushed" "push 4: wrong push counter"
check_tmpout "0 errors" "push 4: wrong error counter"


# 5. test
# touch file
# expected result: upload touched file
sleep 2
touch tmp-sync/test1a/file1

dav_sync_push test1a "push 5 failed"
check_tmpout "put: /file1" "push 5: no put"
check_tmpout "1 file pushed" "push 5: wrong push counter"
check_tmpout "0 conflicts" "push 5: wrong conflict counter"
check_tmpout "0 files deleted" "push 5: wrong delete counter"
check_tmpout "0 errors" "push 5: wrong error counter"

# 6. test
# add deep dir hierarchy and some files, test if mkcol order is fine
# expected result: multiple mkcol requests and some puts after that
mkdir -p tmp-sync/test1a/dir_a/1/2/3/4/5/6/7/8
mkdir -p tmp-sync/test1a/dir_a/1/2/3/a/b/c/d
mkdir -p tmp-sync/test1a/dir_a/i/j/k
mkdir -p tmp-sync/test1a/dir_b/1/2/3/4/5/6/7/8
mkdir -p tmp-sync/test1a/dir_b/1/2/3/a/b/c/d
mkdir -p tmp-sync/test1a/dir_b/i/j/k
mkdir -p tmp-sync/test1a/dir_c/sub1/sub2/sub3/sub4
mkdir -p tmp-sync/test1a/dir_c/sub1/sub2/1
mkdir -p tmp-sync/test1a/dir_c/sub1/sub2/2
mkdir -p tmp-sync/test1a/dir_c/sub1/sub2/3
mkdir -p tmp-sync/test1a/dir_c/sub1/sub2/4
mkdir -p tmp-sync/test1a/dir_c/sub1/sub2/5
mkdir -p tmp-sync/test1a/dir_c/sub_a/x
mkdir -p tmp-sync/test1a/dir_c/sub_a/y/d1/d2/d3
touch tmp-sync/test1a/dir_a/1/2/3/4/5/6/7/8/file1
touch tmp-sync/test1a/dir_a/1/2/3/4/5/6/7/file1
touch tmp-sync/test1a/dir_a/1/2/3/4/5/6/file1
touch tmp-sync/test1a/dir_a/1/2/3/a/b/c/d/d_file1
touch tmp-sync/test1a/dir_a/1/2/3/a/b/b_file1
touch tmp-sync/test1a/dir_a/a_file
echo "test6-file-1" > tmp-sync/test1a/dir_b/1/2/3/4/5/6/7/8/t6f1-8
echo "test6-file-2" > tmp-sync/test1a/dir_b/i/t6f2-i
echo "test6-file-3" > tmp-sync/test1a/dir_c/sub1/sub2/sub3/sub4/t6f3-s4
echo "test6-file-4" > tmp-sync/test1a/dir_c/sub1/sub2/3/t6f4-3

dav_sync_push test1a "push 6 failed"
check_tmpout "10 files pushed" "push6: wrong push counter"
check_tmpout "0 files deleted" "push6: wrong delete counter"
check_tmpout "0 conflicts" "push6: wrong conflict counter"
check_tmpout "0 errors" "push6: wrong error counter"
OUT=`grep mkcol tmp-sync/out.txt | wc -l`
if [ $OUT -ne 48 ];
then	
	echo "push 6: number of mkcol output lines not 48"
	exit 2
fi

# 7. test
# delete file
# expected result: delete file on server
rm -f tmp-sync/test1a/file1

dav_sync_push test1a "push 7 failed"
check_tmpout "0 files pushed" "push7: wrong push counter"
check_tmpout "1 file deleted" "push7: wrong delete counter"
check_tmpout "0 conflicts" "push7: wrong conflict counter"
check_tmpout "0 errors" "push7: wrong error counter"

# 8. test
# do nothing, test if double delete happens
# expected result: no delete

dav_sync_push test1a "push 8 failed"
check_tmpout "0 files pushed" "push8: wrong push counter"
check_tmpout "0 files deleted" "push8: wrong delete counter"
check_tmpout "0 conflicts" "push8: wrong conflict counter"
check_tmpout "0 errors" "push8: wrong error counter"

# 9. test
# delete multiple files
# expected result: multiple delete requests

rm -Rf tmp-sync/test1a/dir_a
rm -f tmp-sync/test1a/dir_b/1/2/3/4/5/6/7/8/t6f1-8
rm -f tmp-sync/test1a/dir_b/i/t6f2-i

dav_sync_push test1a "push 9 failed"

# don't test if there was a single delete for each collection
# and don't check if the delete counter has a specific value
# because there will be some optimizations maybe
check_tmpout "0 files pushed" "push8: wrong push counter"
check_tmpout "0 conflicts" "push8: wrong conflict counter"
check_tmpout "0 errors" "push8: wrong error counter"

check_tmpout "delete: /dir_a/" "missing: delete /dir_a/"
check_tmpout "delete: /dir_b/i/t6f2-i" "missing: delete: /dir_b/i/t6f2-i"
check_tmpout "delete: /dir_b/1/2/3/4/5/6/7/8/t6f1-8" "missing: delete: /dir_b/1/2/3/4/5/6/7/8/t6f1-8"

# 10. test
# delete empty dir
# expected result: empty dir deleted on server

rm -Rf tmp-sync/test1a/dir1

dav_sync_push test1a

check_tmpout "0 conflicts" "push10: wrong conflict counter"
check_tmpout "0 errors" "push10: wrong error counter"

dav info dav-test-repo/sync/test1a/dir1 > /dev/null 2>&1
if [ $? -eq 0 ]; then
	echo "push 10: collection not deleted"
	exit 2
fi

# 11. test
# delete everything
# collection is empty



rm -Rf tmp-sync/test1a/*


dav_sync_push test1a "push 11 failed"

check_tmpout "0 conflicts" "push10: wrong conflict counter"
check_tmpout "0 errors" "push10: wrong error counter"

OUT=`dav list dav-test-repo/sync/test1/ | wc -l`
if [ $? -ne 0 ]; then
	echo "push 11: dav list failed"
	exit 2
fi
if [ $OUT -ne 0 ];
then	
	echo "push 11: dav-test-repo/sync/test1/ not empty"
	exit 2
fi

mercurial