File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / lrzsz / testsuite / lib / lrzsz.exp
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Thu Oct 24 15:49:50 2019 UTC (4 years, 8 months ago) by misho
Branches: lrzsz, MAIN
CVS tags: v0_12_20p5, HEAD
lrzsz ver 0.12.20

# change to tmp dir

set z8_test_files ""
set z_test_files ""
set y_test_files ""
set x_test_files ""
set objdir [absolute $objdir]
set srcdir [absolute $srcdir]

set srcdir2 [exec sh -c "cd $srcdir/.. && pwd"]
set objdir2 [exec sh -c "cd $objdir/.. && pwd"]

set SZBUFSIZE "-B 524288"
set RZBUFSIZE "-B 524288"
set env(LANG) C
#puts "LANG=$env(LANG)"

foreach i [glob -nocomplain $srcdir/../src/l?z.c] {
    set z_test_files "$z_test_files $i"
    set x_test_files "$x_test_files $i"
}
foreach i [glob -nocomplain $objdir/../src/l?z] {
    set z_test_files "$z_test_files $i"
    set y_test_files "$y_test_files $i"
}
foreach i [glob -nocomplain /pub/gnu/emacs-*.tar.gz] {
    set z8_test_files "$z8_test_files $i"
}
#puts "objdir=$objdir\n"
#puts "srcdir=$srcdir\n"
#puts "x_test_files=$x_test_files\n"
#puts "y_test_files=$y_test_files\n"
#puts "z_test_files=$z_test_files\n"
#puts "z8_test_files=$z8_test_files\n"

# change to tmp dir
set TMPDIR [getenv TMPDIR]
#puts "T=$TMPDIR\n"
if [string compare "x$TMPDIR" "x"] then {
	set MYTEMP "$TMPDIR"
} else {
	set MYTEMP "/tmp"
}
set OLDDIR [pwd]
set testdir "$MYTEMP/test.lrzsz"
exec rm -rf $testdir
exec mkdir $testdir
exec sh -c "mkfifo $testdir/pipe || mknod $testdir/pipe p"

proc runthem_internal { name sz szopts rz rzopts files flags up} {
	global MYTEMP
	global OLDDIR
	global testdir
	global verbose
	global fail_is_ok
	upvar $up up_p
	if {[string match "*mkdir*" $flags] == 1} {
	    exec mkdir $testdir/$name
	}
    set fails 0
    cd $MYTEMP
	catch "exec sh -c \"($sz $szopts $files) <$testdir/pipe | \
			(cd $testdir/$name ; exec $rz $rzopts >>../pipe)\"" dummy
	set up_p $dummy
	foreach i $files {
		set bn [file tail $i]
		set v $verbose
		if {[string match "*compare*" $flags] == 1} {
			set res [catch "exec cmp $i $testdir/$name/$bn" dummy]
			set verbose $v
			if {$res == 0} {
				if {[string match "*delete*" $flags] == 1} {
					catch "file delete $testdir/$name/$bn" dummy
				}
			} else {
				send_log "$i: not identical: cmp told\n"
				send_log "$dummy\n"
				incr fails
			}
		} else {
			if {[string match "*delete*" $flags] == 1} {
				catch "file delete $testdir/$name/$bn" dummy
			}
		}
	}
	if {[string match "*rmdir*" $flags] == 1} {
		set res [catch "exec rmdir $testdir/$name" dummy]
		if {$res != 0} {
			send_log "rmdir failed: $dummy\n"
			incr fails
		}
	}
    if [info exists "fail_is_ok"] {
    	if {$fails > 0} {
    		set fails 0;
    	} else {
    		set fails 1;
    	}
    }
    cd $OLDDIR
    return $fails
}

# own test function for xmodem: xmodem can't transfer file names
proc runxmodem { name sz szopts rz rzopts files } {
	global MYTEMP
	global OLDDIR
	global testdir
	global verbose
	verbose "Testing $name" 1
    exec mkdir $testdir/$name
    set failed 0
    cd $MYTEMP
	foreach i $files {
		set bn [file tail $i]
   		set output [catch "set done [exec sh -c "($sz $szopts --xmodem $i 2>/dev/null) \
			<$testdir/pipe | \
	    	(cd $testdir/$name ; exec $rz $rzopts --xmodem $bn >>../pipe 2>/dev/null)"]]"]
		set res [catch "exec cmp $i $testdir/$name/$bn" dummy]
		if {$res == 0} {
			catch "file delete $testdir/$name/$bn" dummy
		} else {
			send_log "$i: not identical: cmp told\n"
			send_log "$dummy\n"
			set failed 1
		}
	}
    set res [catch "exec rmdir $testdir/$name" dummy]
	if {$res != 0} {
			send_log "rmdir: $dummy\n"
		set failed 1
	}
    cd $OLDDIR
	if {$failed == 0} {
		pass "$name"
	} else {
		fail "$name"
	}
}

proc runthem { name sz szopts rz rzopts files } {
	verbose "Testing $name" 1
	set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts"  \
		"$files" "mkdir,compare,delete,rmdir" dummy]
	if {$fails == 0} {
		pass "$name"
	} else {
		fail "$name"
	}
}

proc runabuse { name sz szopts rz rzopts files } {
	global fail_is_ok
	global testdir

	set fail_is_ok 1
	verbose "Testing $name" 1
	set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts"  \
		"$files" "mkdir" output]
	if {$fails == 1 && [string match "*ZRINIT*" $output]} {
		set fails 0
	}
	if {$fails == 1 && [string match "*Broken pipe*" $output]} {
		set fails 0
	}
	if {$fails == 1 && [string match "*caught signal*" $output]} {
		set fails 0
	}
	if {$fails == 1 && [string match "*exited abnormally*" $output]} {
		set fails 0
	}
	if {$fails == 0} {
		exec rm -rf "$testdir/$name"
		pass "$name"
	} else {
#puts "fails=$fails"
		fail "$name"
	}
	unset fail_is_ok
}

proc runthem0 { name sz szopts rz rzopts files } {
	verbose "Testing $name (write to /dev/null)" 1
	set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts" \
		"$files" "mkdir,rmdir" dummy]
	if {$fails == 0} {
		pass "$name"
	} else {
		fail "$name"
	}
}

proc runappend { name sz szopts rz rzopts file} {
	global testdir
	verbose "Testing $name" 1
	set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts" \
		"$file $file" "mkdir" dummy]
	if {$fails == 0} {
		set compare "$testdir/$name/compare"
		set bn [file tail $file]
		exec rm -f $compare
		exec cp $file $compare
		exec cat $file >>$compare

		set res [catch "exec cmp $testdir/$name/$bn $compare" dummy]
		if {$res != 0} {
			incr fails
		} else {
			catch "file delete $testdir/$name/$bn" dummy
			catch "file delete $compare" dummy
		}
	}
	if {$fails == 0} {
    	set res [catch "exec rmdir $testdir/$name" dummy]
		if {$res != 0} {
			incr fails
		}
    }

	if {$fails == 0} {
		pass "$name"
	} else {
		fail "$name"
	}
}

#
proc runrename { name sz szopts rz rzopts files} {
	global testdir
	verbose "Testing $name" 1
	exec mkdir $testdir/$name
	foreach i $files {
		set bn [file tail $i]
		exec touch "$testdir/$name/$bn"
		exec echo "1234" ">$testdir/$name/$bn.0"
	}
	set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts" \
		"$files" "" dummy]
	if {$fails == 0} {
		foreach i $files {
			set bn [file tail $i]
			set f "$testdir/$name/$bn"
			if {[file size $f] != 0} {
				incr fails
				send_log "$f: size !=0\n"
			} else {
				set s [file size $f.0]
				if {$s == 0 || $s>5} {
					incr fails
				send_log "$f: size !=5\n"
				} else {
					set compare "$f.1"
					set res [catch "exec cmp $i $compare" dummy]
					if {$res != 0} {
						incr fails
						send_log "$f: compare failed\n"
					} else {
						catch "file delete $f" dummy
						catch "file delete $f.0" dummy
						catch "file delete $f.1" dummy
					}
				}
			}
		}
	}
	if {$fails == 0} {
    	set res [catch "exec rmdir $testdir/$name" dummy]
		if {$res != 0} {
			incr fails
		}
    }

	if {$fails == 0} {
		pass "$name"
	} else {
		fail "$name"
	}
}

proc runresume { name sz szopts rz rzopts files} {
	global testdir
	global srcdir
	verbose "Testing $name" 1
	exec mkdir $testdir/$name
	set trash $srcdir/../src/Makefile.in
	foreach i $files {
		set bn [file tail $i]
		catch "exec dd if=$trash of=$testdir/$name/$bn bs=256 count=5" dummy
	}

	set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts" \
		"$files" "" dummy]
	if {$fails == 0} {
		foreach i $files {
			set bn [file tail $i]
			set f "$testdir/$name/$bn"
			set res [catch "exec cmp $i $f" dummy]
			if {$res == 0} {
				send_log "receiver did not resume but file is OK\n"
				puts "receiver did not resume but file is OK - error, but not critical"
				incr fails
			} else {
				catch "exec dd if=$i of=$f.1 bs=256 count=5" dummy
				catch "exec dd if=$f bs=256 skip=5 >>$f.1" dummy
				set res [catch "exec cmp $i $f.1" dummy]
				if {$res == 0} {
					catch "file delete $f" dummy
					catch "file delete $f.1" dummy
				} else {
					send_log "sender resumed, but files differ. This is really bad\n"
					puts "sender resumed, but files differ. This is really bad"
					incr fails
				}
			}
		}
	}
	if {$fails == 0} {
    	set res [catch "exec rmdir $testdir/$name" dummy]
		if {$res != 0} {
			incr fails
		}
    }

	if {$fails == 0} {
		pass "$name"
	} else {
		fail "$name"
	}
}

# --protect option
proc runprotect { name sz szopts rz rzopts files} {
	global testdir
	verbose "Testing $name" 1
	exec mkdir $testdir/$name
	foreach i $files {
		set bn [file tail $i]
		exec touch "$testdir/$name/$bn"
	}
	set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts" \
		"$files" "" dummy]
	foreach i $files {
		set bn [file tail $i]
		set f "$testdir/$name/$bn"
		if {[file size $f] != 0} {
			incr fails
			send_log "$f: size !=0 - overwritten, nit protected\n"
		} else {
			catch "file delete $f" dummy
		}
	}
	if {$fails == 0} {
    	set res [catch "exec rmdir $testdir/$name" dummy]
		if {$res != 0} {
			incr fails
		}
    }

	if {$fails == 0} {
		pass "$name"
	} else {
		fail "$name"
	}
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>