#!/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 make -C $src/src/plugins/fd install-test-plugin file=encrypt-bug.jpg rm -rf ${cwd}/tmp/* echo "${cwd}/README" >${cwd}/tmp/file-list start_test cat <${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_bacula cat <${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_bacula # ****FIXME**** test if the restore of the two files is OK # # Remove plugin so we can try the restore without the plugin # mv -f ${cwd}/bin/plugins/bpipe-fd.so ${cwd}/bin/plugins/bpipe-fd.sox cat <${cwd}/tmp/bconcmds @$out ${cwd}/tmp/log2.out @# remove plugin @exec "sh -c 'rm -f ${cwd}/bin/plugins/bpipe-fd.so'" @# @# 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_bacula -d50 run_bconsole cat <${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_bacula # # Restore plugin # mv -f ${cwd}/bin/plugins/bpipe-fd.sox ${cwd}/bin/plugins/bpipe-fd.so 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/, $_, 7); $ro{$elt[5]}{clen} = $elt[4]; $ro{$elt[5]}{cdata} = $elt[6]; } elsif (/Get RestoreObject/) { @elt = split(/\s/, $_, 9); $ro{$elt[6]}{glen} = $elt[4]; $ro{$elt[6]}{gdata} = $elt[8]; } 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