2015-10-14 12:23:37 +00:00
|
|
|
require( 'posix' )
|
|
|
|
dofile( 'tests/testlib.lua' )
|
2011-02-25 14:55:15 +00:00
|
|
|
|
2015-10-14 12:23:37 +00:00
|
|
|
cwriteln( '****************************************************************' );
|
2017-02-16 11:17:37 +00:00
|
|
|
cwriteln( ' Testing excludes (rsyncssh)' );
|
2015-10-14 12:23:37 +00:00
|
|
|
cwriteln( '****************************************************************' );
|
|
|
|
cwriteln( ' (this test needs passwordless ssh localhost access ' );
|
|
|
|
cwriteln( ' for current user)' );
|
2011-02-25 14:55:15 +00:00
|
|
|
|
2015-10-14 12:23:37 +00:00
|
|
|
local tdir, srcdir, trgdir = mktemps( )
|
2012-02-16 15:49:34 +00:00
|
|
|
local logfile = tdir .. 'log'
|
|
|
|
local cfgfile = tdir .. 'config.lua'
|
2011-02-25 14:55:15 +00:00
|
|
|
local range = 5
|
|
|
|
local log = {}
|
2012-02-16 15:49:34 +00:00
|
|
|
log = {'-log', 'all'}
|
2011-02-25 14:55:15 +00:00
|
|
|
|
|
|
|
writefile(cfgfile, [[
|
2017-01-04 11:24:59 +00:00
|
|
|
settings {
|
2015-10-14 12:23:37 +00:00
|
|
|
logfile = ']]..logfile..[[',
|
2017-01-04 11:25:38 +00:00
|
|
|
nodaemon = true
|
2011-02-25 14:55:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sync {
|
2015-10-14 12:23:37 +00:00
|
|
|
default.rsyncssh,
|
2017-01-04 11:25:38 +00:00
|
|
|
delay = 3,
|
2012-02-16 15:49:34 +00:00
|
|
|
host = 'localhost',
|
2021-12-02 16:51:32 +00:00
|
|
|
ssh = {
|
|
|
|
port= 2468,
|
|
|
|
identityFile = "]] .. script_path() .. [[/ssh/id_rsa",
|
2021-12-09 12:50:41 +00:00
|
|
|
options = {
|
|
|
|
StrictHostKeyChecking="no",
|
|
|
|
UserKnownHostsFile="/dev/null",
|
|
|
|
},
|
2021-12-02 16:51:32 +00:00
|
|
|
},
|
2012-02-16 15:49:34 +00:00
|
|
|
source = ']]..srcdir..[[',
|
|
|
|
targetdir = ']]..trgdir..[[',
|
2011-02-25 14:55:15 +00:00
|
|
|
exclude = {
|
2015-10-14 12:23:37 +00:00
|
|
|
'erf',
|
2012-02-16 15:49:34 +00:00
|
|
|
'/eaf',
|
|
|
|
'erd/',
|
|
|
|
'/ead/',
|
2011-02-25 14:55:15 +00:00
|
|
|
},
|
|
|
|
}]]);
|
|
|
|
|
|
|
|
-- writes all files
|
2017-01-04 11:32:10 +00:00
|
|
|
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' )
|
2011-02-25 14:55:15 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
-- test if the filename exists, fails if this is different to expect
|
2017-01-04 11:32:10 +00:00
|
|
|
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 );
|
2011-02-25 14:55:15 +00:00
|
|
|
end
|
2017-01-04 11:32:10 +00:00
|
|
|
|
|
|
|
if not stat and expect
|
|
|
|
then
|
|
|
|
cwriteln( 'failure: ',filename,' should not be excluded' );
|
|
|
|
os.exit( 1 );
|
2011-02-25 14:55:15 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
-- test all files
|
2017-01-04 11:32:10 +00:00
|
|
|
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 )
|
2011-02-25 14:55:15 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
|
2017-01-04 11:32:10 +00:00
|
|
|
cwriteln( 'testing startup excludes' )
|
|
|
|
writefiles( )
|
|
|
|
cwriteln( 'starting Lsyncd' )
|
2018-03-09 10:07:53 +00:00
|
|
|
local pid = spawn( './lsyncd', cfgfile, table.unpack( log ) )
|
2017-01-04 11:32:10 +00:00
|
|
|
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
|
2011-02-25 14:55:15 +00:00
|
|
|
-- just to make sure before rm -rf
|
2017-01-04 11:32:10 +00:00
|
|
|
cwriteln('exit before drama, srcdir is "', srcdir, '"')
|
|
|
|
|
|
|
|
os.exit( 1 )
|
2011-02-25 14:55:15 +00:00
|
|
|
end
|
2015-10-14 12:23:37 +00:00
|
|
|
|
2017-01-04 11:32:10 +00:00
|
|
|
os.execute( 'rm -rf ' .. srcdir .. '/*' )
|
|
|
|
cwriteln( 'waiting for Lsyncd to remove destination' )
|
|
|
|
posix.sleep( 5 )
|
2015-10-14 12:23:37 +00:00
|
|
|
|
2022-06-07 19:28:18 +00:00
|
|
|
result, code = execute( 'diff -urN '..srcdir..' '..trgdir )
|
2015-10-14 12:23:37 +00:00
|
|
|
|
|
|
|
if result ~= 'exit' or code ~= 0
|
|
|
|
then
|
|
|
|
cwriteln( 'fail, target directory not empty!' );
|
|
|
|
os.exit( 1 );
|
2011-02-25 14:55:15 +00:00
|
|
|
end
|
|
|
|
|
2017-01-04 11:32:10 +00:00
|
|
|
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 )
|
2012-10-07 18:48:09 +00:00
|
|
|
|
2015-10-14 12:23:37 +00:00
|
|
|
if lexitcode == 143
|
|
|
|
then
|
2012-10-07 18:48:09 +00:00
|
|
|
cwriteln( 'OK' );
|
|
|
|
os.exit( 0 );
|
|
|
|
else
|
|
|
|
os.exit( 1 );
|
2011-02-25 14:55:15 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
-- TODO remove temp
|