lsyncd/tests/exclude-rsync.lua
2012-10-07 20:48:09 +02:00

116 lines
2.8 KiB
Lua
Executable File

#!/usr/bin/lua
require("posix")
dofile("tests/testlib.lua")
cwriteln("****************************************************************")
cwriteln(" Testing excludes ")
cwriteln("****************************************************************")
local tdir, srcdir, trgdir = mktemps()
local logfile = tdir .. "log"
local cfgfile = tdir .. "config.lua"
local range = 5
local log = {"-log", "all"}
writefile(cfgfile, [[
settings = {
logfile = "]]..logfile..[[",
nodaemon = true,
delay = 3,
}
sync {
default.rsync,
source = "]]..srcdir..[[",
target = "]]..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, '-log', 'all');
cwriteln("waiting for Lsyncd to start");
posix.sleep(3)
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);
if os.execute("diff -urN "..srcdir.." "..trgdir) ~= 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( 5 );
testfiles( );
cwriteln( "killing started Lsyncd" );
posix.kill( pid );
local _, exitmsg, lexitcode = posix.wait( lpid );
cwriteln( "Exitcode of Lsyncd = ", exitmsg, " ", lexitcode );
if lexitcode == 143 then
cwriteln( "OK" );
os.exit( 0 );
else
os.exit( 1 );
end
-- TODO remove temp