#!/bin/sh # PCP QA Test No. 738 # Exercise pmlogmv # # Copyright (c) 2014 Ken McDonell. All Rights Reserved. # seq=`basename $0` echo "QA output created by $seq" # get standard environment, filters and checks . ./common.product . ./common.filter . ./common.check status=1 # failure is the default! $sudo rm -rf $tmp.* $seq.full mkdir $tmp cd $tmp trap "cd $here; rm -rf $tmp.* $tmp; exit \$status" 0 1 2 3 15 _filter() { # there are a lot of bizarre quoting variants for ln(1) error # messages! sed \ -e '/^[rwx.-]* /s/.* /... ls data ... /' \ -e 's/`'"/'/g" \ -e 's/‘'"/'/g" \ -e 's/’'"/'/g" \ -e 's/ln: creating hard link/ln: failed to create hard link/' } # real QA test starts here # echo "=== Usage, no input files, incomplete input archive ===" pmlogmv sts=$? [ $sts -eq 0 ] || echo exit status $sts pmlogmv foo sts=$? [ $sts -eq 0 ] || echo exit status $sts pmlogmv foo bar sts=$? [ $sts -eq 0 ] || echo exit status $sts cp $here/src/foo.0 . pmlogmv foo bar >$tmp.out 2>&1 sts=$? _filter <$tmp.out [ $sts -eq 0 ] || echo exit status $sts rm foo.0 cp $here/src/foo.meta . pmlogmv foo bar >$tmp.out 2>&1 sts=$? _filter <$tmp.out [ $sts -eq 0 ] || echo exit status $sts rm -f foo.* bar.* echo echo "=== non-pcp archives and output files already exist ===" cp $here/src/foo.* . touch foo.frog pmlogmv -V foo bar >$tmp.out 2>&1 sts=$? _filter <$tmp.out [ $sts -eq 0 ] || echo exit status $sts ls foo* bar* rm -f foo.* bar.* cp $here/src/foo.* . for i in 0 index meta do echo "--- bar.$i already exists ---" cp $here/src/bar.$i . pmlogmv -V foo bar >$tmp.out 2>&1 sts=$? _filter <$tmp.out [ $sts -eq 0 ] || echo exit status $sts ls foo* bar* rm bar.$i done rm -f foo.* bar.* echo echo "=== simplest case ===" cp $here/src/foo.* . pmlogmv -NV foo bar >$tmp.out 2>&1 sts=$? _filter <$tmp.out [ $sts -eq 0 ] || echo exit status $sts pmlogmv -V foo bar >$tmp.out 2>&1 sts=$? _filter <$tmp.out [ $sts -eq 0 ] || echo exit status $sts for part in 0 index meta do if cmp $here/src/foo.$part bar.$part then : else echo "Arrgh ... input foo.$part not the same as output bar.$part" ls -l $here/src/foo.$part bar.$part fi done ls foo* bar* rm -f foo.* bar.* echo echo "=== single oldfile name cases ===" for ext in meta 0 index do echo "--- foo.$ext ---" cp $here/src/foo.* . pmlogmv -V foo.$ext bar >$tmp.out 2>&1 sts=$? _filter <$tmp.out [ $sts -eq 0 ] || echo exit status $sts for part in 0 index meta do if cmp $here/src/foo.$part bar.$part then : else echo "Arrgh ... input foo.$part not the same as output bar.$part" ls -l $here/src/foo.$part bar.$part fi done ls foo* bar* rm -f foo.* bar.* done echo echo "=== multi-volume case ===" cp $here/src/mv-foo.* . cp mv-foo.2 mv-foo.123456789 pmlogmv -V mv-foo bar >$tmp.out 2>&1 sts=$? _filter <$tmp.out [ $sts -eq 0 ] || echo exit status $sts for opart in 0 1 2 123456789 index meta do npart=$opart [ "$opart" = 123456789 ] && opart=2 if cmp $here/src/mv-foo.$opart bar.$npart then : else echo "Arrgh ... input mv-foo.$opart not the same as output bar.$npart" ls -l $here/src/mv-foo.$opart bar.$npart fi done ls foo* bar* rm -f foo.* bar.* echo echo "=== old and new in different directories ==" mkdir new cp $here/src/mv-foo.* . pmlogmv -V mv-foo new/mv-foo >$tmp.out 2>&1 sts=$? _filter <$tmp.out [ $sts -eq 0 ] || echo exit status $sts for part in 0 1 2 index meta do if cmp $here/src/mv-foo.$part new/mv-foo.$part then : else echo "Arrgh ... input mv-foo.$part not the same as output new/mv-foo.$part" ls -l $here/src/mv-foo.$part new/mv-foo.$part fi done ls foo* new/* rm -rf foo.* new echo echo "=== error case for ln failing ===" mkdir new chmod u-w,g-w,o-w new cp $here/src/mv-foo.* . pmlogmv -V mv-foo new/mv-foo >$tmp.out 2>&1 sts=$? _filter <$tmp.out [ $sts -eq 0 ] || echo exit status $sts ls mv-foo* new/* rm -rf foo.* new echo echo "=== error case for rm failing ===" mkdir new chmod u-w,g-w,o-w . cp $here/src/mv-foo.* . pmlogmv -V mv-foo new/mv-foo >$tmp.out 2>&1 sts=$? _filter <$tmp.out [ $sts -eq 0 ] || echo exit status $sts ls mv-foo* new/* chmod u+w,g+w,o+w . rm -rf mv-foo.* new echo echo "=== Frank's error case rm failing after first file ===" cp $here/src/mv-foo.* . ln mv-foo.2 mv-foo.3 pmlogmv -V mv-foo mv-bar >$tmp.out 2>&1 sts=$? _filter <$tmp.out [ $sts -eq 0 ] || echo exit status $sts ls mv-foo* mv-bar* rm -rf mv-foo.* mv-bar.* # success, all done status=0 exit