#!/usr/bin/lua require( 'posix' ) dofile( 'tests/testlib.lua' ) cwriteln( '****************************************************************' ); cwriteln( ' Testing excludes' ); 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, delay = 3, } sync { default.rsyncssh, host = 'localhost', 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, 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('exist 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 = os.execute('diff -urN '..srcdir..' '..trgdir) ~= 0 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