lsyncd/tests/exclude-rsyncssh.lua

145 lines
3.3 KiB
Lua

require( 'posix' )
dofile( 'tests/testlib.lua' )
cwriteln( '****************************************************************' );
cwriteln( ' Testing excludes (rsyncssh)' );
cwriteln( '****************************************************************' );
cwriteln( ' (this test needs passwordless ssh localhost access ' );
cwriteln( ' for current user)' );
local tdir, srcdir, trgdir = mktemps( )
local logfile = tdir .. 'log'
local cfgfile = tdir .. 'config.lua'
local range = 5
local log = {}
log = {'-log', 'all'}
writefile(cfgfile, [[
settings {
logfile = ']]..logfile..[[',
nodaemon = true
}
sync {
default.rsyncssh,
delay = 3,
host = 'localhost',
ssh = {
port= 2468,
identityFile = "]] .. script_path() .. [[/ssh/id_rsa",
options = {
StrictHostKeyChecking="no",
UserKnownHostsFile="/dev/null",
},
},
source = ']]..srcdir..[[',
targetdir = ']]..trgdir..[[',
exclude = {
'erf',
'/eaf',
'erd/',
'/ead/',
},
}]]);
-- writes all files
local function writefiles
( )
posix.mkdir( srcdir .. 'd' )
writefile( srcdir .. 'erf', 'erf' )
writefile( srcdir .. 'eaf', 'erf' )
writefile( srcdir .. 'erd', 'erd' )
writefile( srcdir .. 'ead', 'ead' )
writefile( srcdir .. 'd/erf', 'erf' )
writefile( srcdir .. 'd/eaf', 'erf' )
writefile( srcdir .. 'd/erd', 'erd' )
writefile( srcdir .. 'd/ead', 'ead' )
end
-- test if the filename exists, fails if this is different to expect
local function testfile
(
filename,
expect
)
local stat, err = posix.stat( filename )
if stat and not expect
then
cwriteln( 'failure: ',filename,' should be excluded' );
os.exit( 1 );
end
if not stat and expect
then
cwriteln( 'failure: ',filename,' should not be excluded' );
os.exit( 1 );
end
end
-- test all files
local function testfiles
( )
testfile( trgdir .. 'erf', false )
testfile( trgdir .. 'eaf', false )
testfile( trgdir .. 'erd', true )
testfile( trgdir .. 'ead', true )
testfile( trgdir .. 'd/erf', false )
testfile( trgdir .. 'd/eaf', true )
testfile( trgdir .. 'd/erd', true )
testfile( trgdir .. 'd/ead', true )
end
cwriteln( 'testing startup excludes' )
writefiles( )
cwriteln( 'starting Lsyncd' )
local pid = spawn( './lsyncd', cfgfile, table.unpack( log ) )
cwriteln( 'waiting for Lsyncd to start' )
posix.sleep( 10 )
cwriteln( 'testing excludes after startup' )
testfiles( )
cwriteln( 'ok, removing sources' )
if srcdir:sub(1,4) ~= '/tmp'
then
-- just to make sure before rm -rf
cwriteln('exit before drama, srcdir is "', srcdir, '"')
os.exit( 1 )
end
os.execute( 'rm -rf ' .. srcdir .. '/*' )
cwriteln( 'waiting for Lsyncd to remove destination' )
posix.sleep( 5 )
result, code = execute( 'diff -urN '..srcdir..' '..trgdir )
if result ~= 'exit' or code ~= 0
then
cwriteln( 'fail, target directory not empty!' );
os.exit( 1 );
end
cwriteln( 'writing files after startup' )
writefiles( )
cwriteln( 'waiting for Lsyncd to transmit changes' )
posix.sleep( 15 )
testfiles( )
cwriteln( 'killing started Lsyncd' )
posix.kill( pid )
local _, exitmsg, lexitcode = posix.wait( lpid )
cwriteln( 'Exitcode of Lsyncd = ', exitmsg, ' ', lexitcode )
posix.sleep( 1 )
if lexitcode == 143
then
cwriteln( 'OK' );
os.exit( 0 );
else
os.exit( 1 );
end
-- TODO remove temp