mirror of
https://github.com/octoleo/lsyncd.git
synced 2024-11-11 15:50:56 +00:00
117 lines
2.9 KiB
Lua
117 lines
2.9 KiB
Lua
|
#!/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(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);
|
||
|
posix.sleep(1);
|
||
|
if lexitcode == 0 then
|
||
|
cwriteln("OK");
|
||
|
end
|
||
|
os.exit(lexitcode);
|
||
|
|
||
|
-- TODO remove temp
|