#!/bin/sh
#
# Attempt to backup and restore a file with the bpipe plugin
#
TestName="plugin-test"
JobName=pluginTest
. scripts/functions

scripts/cleanup
scripts/copy-plugin-confs

# enable test-plugin
enable_plugin bpipe-fd
enable_plugin test-plugin-fd

file=encrypt-bug.jpg
echo "${cwd}/README" >${cwd}/tmp/file-list

start_test

cat <<END_OF_DATA >${cwd}/tmp/bconcmds
@$out /dev/null
messages
@$out ${cwd}/tmp/log1.out
label storage=File1 volume=TestVolume001
setdebug level=150 client=$CLIENT
estimate job=$JobName level=Full
setdebug level=50 client=$CLIENT
run job=$JobName storage=File1 yes
wait
status client=$CLIENT
messages
setdebug level=50 trace=1 client=$CLIENT
run job=TestPluginTest storage=File1 yes
wait
status client=$CLIENT
messages
setdebug level=50 trace=0 client=$CLIENT
quit
END_OF_DATA


run_bareos

cat <<END_OF_DATA >${cwd}/tmp/bconcmds
messages
@#
@# now do a restore
@#
@$out ${cwd}/tmp/log2.out
setdebug level=50 client=$CLIENT
restore fileset=pluginSet where=${cwd}/tmp  select all storage=File1 done
yes
wait
setdebug level=0 client=$CLIENT
messages
quit
END_OF_DATA

run_bconsole

stop_bareos

# ****FIXME**** test if the restore of the two files is OK

#
# Remove plugin so we can try the restore without the plugin
#
disable_plugin bpipe-fd

cat <<END_OF_DATA >${cwd}/tmp/bconcmds
@#
@# now do a restore without the plugin
@#
@$out ${cwd}/tmp/log2.out
@#setdebug level=50 client=$CLIENT
restore fileset=pluginSet where=${cwd}/tmp  select all storage=File1 done
yes
wait
messages
quit
END_OF_DATA

run_bareos -d50
run_bconsole

cat <<END_OF_DATA >${cwd}/tmp/bconcmds
messages
@#
@# now do a restore
@#
@$out ${cwd}/tmp/log3.out
setdebug level=50 client=$CLIENT trace=1
restore fileset=TestPluginSet where=${cwd}/tmp  select all storage=File1 done
yes
wait
setdebug level=0 client=$CLIENT trace=0
messages
quit
END_OF_DATA

run_bconsole

check_for_zombie_jobs storage=File1
stop_bareos
#
# Restore plugin
#
enable_plugin bpipe-fd

check_two_logs
#
# ****FIXME**** test that all three files are restored correctly
#
diff ${cwd}/${file} ${cwd}/tmp/${file}
dstat=$?

# the test-plugin should create a RestoreObject, just check
# compare restore object before/after
perl -ne '
 chomp();
 if (/Creating RestoreObject/) {
   @elt = split(/\s/, $_, 8);
   $ro{$elt[6]}{clen} = $elt[4];
   $ro{$elt[6]}{cdata} = $elt[7];
 } elsif (/Get RestoreObject/) {
   @elt = split(/\s/, $_, 10);
   $ro{$elt[7]}{glen} = $elt[4];
   $ro{$elt[7]}{gdata} = $elt[9];
 }
 END {
   $err=0;
   delete $ro{"oname=RestoreOptions"};
   if (scalar(keys %ro) == 0) {
     $err = 1;
     print "ERROR: No restore object found\n";
   }
   foreach my $k (keys %ro) {
      if ($ro{$k}{clen} ne $ro{$k}{glen}) {
        print "ERROR: $k $ro{$k}{clen} != $ro{$k}{glen}\n";
        $err++;
      } else {
        print "OK: $k $ro{$k}{clen} == $ro{$k}{glen}\n";
      }
      if ($ro{$k}{cdata} ne $ro{$k}{gdata}) {
        print "ERROR: $k <$ro{$k}{cdata}> != <$ro{$k}{gdata}>\n";
        $err++;
      } else {
        print "OK: $k $ro{$k}{gdata} == $ro{$k}{gdata}\n";
      }
   }
   exit $err;
 }
' working/*.trace

estat=$?

end_test
