dejsem.1.5/unix/test.sh
changeset 0 676905a3b03c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dejsem.1.5/unix/test.sh	Wed Nov 27 09:50:16 2019 +0100
@@ -0,0 +1,330 @@
+#!/bin/bash
+base=$(dirname $0)
+P=dejsem
+DEB=${DEB:-4}
+CHAN=${CHAN:-2}
+HOST=${HOST:-racek.hh.cz}
+export DEB CHAN HOST
+xclip="xclip -selection clipboard"
+eta="tplzKrx6tž88ČJGlŘeMf."
+tmp=/tmp/dejsem
+tmpf=$tmp/file
+tmpd=$tmp/dir
+
+red="\e[1;31m"
+green="\e[1;32m"
+std="\e[0;39m"
+
+help() {
+	n=$(basename $0)
+	echo -e "syntax:"
+	echo -e "\t$n clip { short | long }"
+	echo -e "\t$n hist"
+	echo -e "\t$n srv  { short | long | dir }"
+	echo -e "\t$n peer { short | long | dir }"
+	echo -e "\t$n all"
+	echo 
+	echo ENVIRONMENT:
+	echo DEB=0-5
+	echo HOST="<server>"
+	echo SSL="<path to ssl repository>"
+	exit 1
+}
+
+clean() { rm -rf /tmp/dejsem; }
+
+etalon() {
+#----------------------------------------
+#	create etalon file of specified size
+#----------------------------------------
+	mkdir -p $tmpf/chk
+	rm -f $tmpf/etalon
+	echo -n $eta >$tmpf/etalon
+	cat $tmpf/etalon >$tmpf/f
+	for i in `seq $1`
+	do	cat $tmpf/etalon >> $tmpf/f
+		cat $tmpf/f >> $tmpf/etalon
+	done
+	[[ $# -gt 1 ]] && echo -n "$2 " | cat - $tmp/f >$tmpf/etalon
+	touch -r /etc $tmpf/etalon
+	( cd $tmpf; ls -l etalon >chk/0.stat; )
+}
+
+etadir() {
+#----------------------------------------
+#	create etalon directory
+#----------------------------------------
+	mkdir -p $tmpd/chk
+	rm -rf $tmpd/etalon
+	mkdir -p $tmpd/etalon/d/alev
+	mkdir -p $tmpd/etalon/epol
+	
+	etalon 3
+	cp $tmpf/etalon $tmpd/etalon/f0
+	touch -r /etc $tmpd/etalon/f0
+	cp $tmpf/etalon $tmpd/etalon/d/f1
+	
+	etalon 5
+	cp $tmpf/etalon $tmpd/etalon/epol/f2
+	touch -r /lib $tmpd/etalon/epol/f2
+	cp $tmpf/etalon $tmpd/etalon/d/alev/f3
+	touch -r /usr/lib $tmpd/etalon/d/alev/f3
+	
+	touch -r /home $tmpd/etalon/d/alev
+	touch -r /bin $tmpd/etalon/epol
+	touch -r /usr $tmpd/etalon
+	
+	( 	cd $tmpd		
+		zip -qr chk/0.zip etalon
+		set - $(du -sbx etalon)
+		echo $1 >chk/0.size
+		ls -R etalon >chk/0.list
+		ls -lR etalon >chk/0.stat
+	)
+}
+
+say() {
+	echo -e $*
+	echo
+}
+
+chkdir() {
+#----------------------------------------
+#	compare sent and received etalon directory
+#----------------------------------------
+(	cd $tmpd/chk
+	zip -qr 1.zip etalon || return 1
+	set - $(du -sbx etalon)
+	echo $1 >1.size
+	ls -R etalon >1.list
+	ls -lR etalon >1.stat
+	
+	if diff 0.list 1.list &>/dev/null
+	then	say file/dir names ${green}OK${std}.
+	else	say original and result file list ${red}differ${std}!!!
+			return 1
+	fi
+	if diff 0.size 1.size &>/dev/null
+	then	say total byte count ${green}OK${std}.
+	else	say original and result byte count ${red}differ${std}!!!
+			return 1
+	fi
+	if diff 0.stat 1.stat &>/dev/null
+	then	say time stamps ${green}OK${std}.
+	else	say original and result time stamps ${red}differ${std}!!!
+			return 1
+	fi
+	if diff 0.zip 1.zip &>/dev/null
+	then	return 0
+	else	say data contents ${red}differ${std}!!!
+			return 1
+	fi		
+)}
+
+chkfile() {
+#----------------------------------------
+#	compare sent and received etalon files
+#----------------------------------------
+	if diff $tmpf/etalon $tmpf/chk/etalon
+	then	say content of received file ${green}OK$std.
+	else	say data content ${red}differs${std}!!!
+			return 1
+	fi		
+	( cd $tmpf/chk; ls -l etalon >1.stat; )
+	if diff $tmpf/chk/0.stat $tmpf/chk/1.stat
+	then	say time stamps ${green}OK${std}.
+	else	say original and result time stamps ${red}differ${std}!!!
+			return 1
+	fi
+}
+
+clip() {
+#----------------------------------------
+#	test clipboard exchange
+#----------------------------------------
+	[[ $1 ]] || help
+	case $1 in
+		short )	n=2 ;;
+		long )	n=7 ;;
+	esac	
+	etalon $n
+	clf=$tmpf/etalon
+	$xclip -i <$clf
+	$xclip -o >$tmpf/f1
+	cl=$($xclip -o)
+	echo
+	say ">>> clipboard $1: ${#cl} chars >>> $($xclip -o | head -c 66)"
+	$P --push
+	echo
+	read -p ">>> on Android perform pull clipboard "
+	echo
+	echo "" | $xclip -i
+	ssh root@$HOST rm -f "/L/dejsem/$(printf %02d $CHAN)/clipboard"
+	read -p ">>> on Android perform push clipboard "
+	echo
+	$P --pull
+	$xclip -o >$tmpf/f2
+	echo
+    diff $tmpf/f1 $tmpf/f2 && return 0 || return 1
+}
+
+hist() {
+#----------------------------------------
+#	test clipboard history
+#----------------------------------------
+	ssh root@$HOST rm -rf "/L/dejsem/$(printf %02d $CHAN)/history"
+	etalon 1
+	echo 1111 entry 1, $(<$tmpf/etalon) | $xclip -i
+	$P --push
+	etalon 3
+	echo 2222 long entry 2, $(<$tmpf/etalon) >$tmpf/chk/0.entry
+	$xclip -i $tmpf/chk/0.entry
+	$P --push
+	etalon 1
+	echo 3333 entry 3, $(<$tmpf/etalon) | $xclip -i
+	$P --push
+	rm -rf ~/.local/share/dejsem/history
+	echo
+	read -p ">>> pulling clipboard history to local host - it should contain 3 entries, hit ENTER "
+	echo
+	$P --pullhist
+	echo
+	read -p ">>> on Android go to clipboard  history and choose \"2222 long entry 2\" "
+	echo
+	read -p ">>> on Android push clipboard "
+	$P --pull
+	$xclip -o >$tmpf/chk/1.entry
+	echo
+    diff $tmpf/chk/0.entry $tmpf/chk/1.entry && return 0 || return 1
+}
+
+srv() {
+#----------------------------------------
+#	test file exchange with server
+#----------------------------------------
+	[[ $1 ]] || help
+	if [[ $1 == dir ]]
+	then
+		etadir
+		fp=$tmpd/etalon
+		ssh root@$HOST rm -rf "/L/dejsem/$(printf %02d $CHAN)/files/etalon"
+		say ">>> uploading directory etalon..."
+		$P --pushfile $fp
+		echo
+		read -p ">>> on Android refresh / on server and download directory etalon "
+		echo
+		ssh root@$HOST rm -rf "/L/dejsem/$(printf %02d $CHAN)/files/etalon"
+		echo
+		read -p ">>> on Android upload directory etalon to / on server "
+		echo
+		rm -rf $tmpd/chk/etalon
+		$P --pullfile etalon $tmpd/chk
+		echo
+		chkdir	
+	else
+		case $1 in
+			short )		n=3 ;;
+			long )		n=8 ;;
+		esac	
+		etalon $n
+		fp=$tmpf/etalon
+		ssh root@$HOST rm -rf "/L/dejsem/$(printf %02d $CHAN)/files/etalon"
+		say ">>> uploading file etalon: $(set -- $(ls -lh $fp); echo $5) bytes"
+		$P --pushfile $fp
+		echo
+		read -p ">>> refresh Android server-list and dowload file etalon "
+		ssh root@$HOST rm -rf "/L/dejsem/$(printf %02d $CHAN)/files/etalon"
+		echo
+		read -p ">>> on Android upload file etalon "
+		echo
+		say ">>> downloading file etalon: $(set -- $(ls -lh $fp); echo $5) bytes"
+		rm -rf $tmpf/chk/etalon
+		$P --pullfile etalon $tmpf/chk
+		echo
+		chkfile
+	fi
+}
+
+peer() {
+#----------------------------------------
+#	test file exchange with peer
+#----------------------------------------
+	[[ $1 ]] || help
+	if [[ $1 == dir ]]
+	then
+		etadir
+		fp=$tmpd/etalon
+		echo
+		read -p ">>> on Android start pull from peer "
+		echo
+		$P --pushpeer $fp
+		say ">>> on Android copy directory etalon to peer (${red}1 minute TIMEOUT!${std})"
+		rm -rf $tmpd/chk/etalon
+		$P --pullpeer $tmpd/chk
+		echo
+		chkdir
+	else
+		case $1 in
+			short )		n=3 ;;
+			long )		n=13 ;;
+		esac	
+		etalon $n
+		read -p ">>> on Android start pull from peer "
+		echo
+		$P --pushpeer $tmpd/etalon
+		echo
+		say ">>> on Android copy file etalon to peer (${red}1 minute TIMEOUT${std})"
+		rm -rf $tmpf/chk/etalon
+		$P --pullpeer $tmpf/chk
+		echo
+		chkfile
+	fi
+}
+
+tst() {
+#----------------------------------------
+#	run specified test
+#----------------------------------------
+	x=y 
+	while [[ $x == y ]]; do
+		echo
+		echo "*----------------------------------------"
+		echo "* $*"
+		echo "*----------------------------------------"
+		echo
+		$* &&  say "${green}>>> OK${std}" || say "${red}>>> orig & result don't compare !!!${std}"
+		read -p  ">>> repaeat the test? y/N " x
+	done	
+}
+
+all() {
+#----------------------------------------
+#	run all tests
+#----------------------------------------
+	tst clip short
+	tst srv dir
+	tst clip long
+	tst srv short
+	tst srv long
+	tst peer short
+	tst peer long
+	tst peer dir
+}
+
+trap clean exit
+clean
+mkdir -p $tmp
+
+[[ $1 == all ]] && {
+	all
+	exit
+	}
+	
+(($#)) && {
+	[[ $# -lt 1 ]] && help
+	tst $*
+	exit
+0	}
+
+help
+10
\ No newline at end of file