mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
test: 'nofsync' with deadly signal #26415
Problem:
The test for 'nofsync' swapfile preservation on a deadly signal, does
not actually assert anything.
followup to 1fd29a2884
Solution:
Check that swapfile contents are present after getting SIGTERM.
TODO: this doesn't really verify that 'fsync' was called; it still
passes with this patch:
diff --git a/src/nvim/main.c b/src/nvim/main.c
index 216e39f3e81c..7a635520401d 100644
--- a/src/nvim/main.c
+++ b/src/nvim/main.c
@@ -838,7 +838,7 @@ void preserve_exit(const char *errmsg)
if (errmsg != NULL) {
os_errmsg("Vim: preserving files...\r\n");
}
- ml_sync_all(false, false, true); // preserve all swap files
+ ml_sync_all(false, false, false); // preserve all swap files
break;
}
}
However it correctly fails with this patch, at least:
diff --git a/src/nvim/main.c b/src/nvim/main.c
index 216e39f3e81c..f2306c310ddc 100644
--- a/src/nvim/main.c
+++ b/src/nvim/main.c
@@ -838,7 +838,6 @@ void preserve_exit(const char *errmsg)
if (errmsg != NULL) {
os_errmsg("Vim: preserving files...\r\n");
}
- ml_sync_all(false, false, true); // preserve all swap files
break;
}
}
This commit is contained in:
parent
f64e4b43e1
commit
c84af395e8
@ -30,6 +30,8 @@ local feed_command = helpers.feed_command
|
|||||||
local skip = helpers.skip
|
local skip = helpers.skip
|
||||||
local is_os = helpers.is_os
|
local is_os = helpers.is_os
|
||||||
local is_ci = helpers.is_ci
|
local is_ci = helpers.is_ci
|
||||||
|
local spawn = helpers.spawn
|
||||||
|
local set_session = helpers.set_session
|
||||||
|
|
||||||
describe('fileio', function()
|
describe('fileio', function()
|
||||||
before_each(function()
|
before_each(function()
|
||||||
@ -49,6 +51,23 @@ describe('fileio', function()
|
|||||||
rmdir('Xtest_backupdir with spaces')
|
rmdir('Xtest_backupdir with spaces')
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
local args = { nvim_prog, '--clean', '--cmd', 'set nofsync directory=Xtest_startup_swapdir', }
|
||||||
|
--- Starts a new nvim session and returns an attached screen.
|
||||||
|
local function startup(extra_args)
|
||||||
|
extra_args = extra_args or {}
|
||||||
|
local argv = vim.tbl_flatten({args, '--embed', extra_args})
|
||||||
|
local screen_nvim = spawn(argv)
|
||||||
|
set_session(screen_nvim)
|
||||||
|
local screen = Screen.new(70, 10)
|
||||||
|
screen:attach()
|
||||||
|
screen:set_default_attr_ids({
|
||||||
|
[1] = {foreground = Screen.colors.NvimDarkGrey4};
|
||||||
|
[2] = {background = Screen.colors.NvimDarkGrey1, foreground = Screen.colors.NvimLightGrey3};
|
||||||
|
[3] = {foreground = Screen.colors.NvimLightCyan};
|
||||||
|
})
|
||||||
|
return screen
|
||||||
|
end
|
||||||
|
|
||||||
it("fsync() with 'nofsync' #8304", function()
|
it("fsync() with 'nofsync' #8304", function()
|
||||||
clear({ args={ '--cmd', 'set nofsync directory=Xtest_startup_swapdir', } })
|
clear({ args={ '--cmd', 'set nofsync directory=Xtest_startup_swapdir', } })
|
||||||
|
|
||||||
@ -81,16 +100,24 @@ describe('fileio', function()
|
|||||||
eq('foozubbaz', trim(read_file('Xtest_startup_file1')))
|
eq('foozubbaz', trim(read_file('Xtest_startup_file1')))
|
||||||
|
|
||||||
-- 4. Exit caused by deadly signal (+ 'swapfile').
|
-- 4. Exit caused by deadly signal (+ 'swapfile').
|
||||||
local j = funcs.jobstart({ nvim_prog, '-u', 'NONE', '--headless',
|
local j = funcs.jobstart(vim.tbl_flatten({args, '--embed'}), {rpc=true})
|
||||||
'--cmd', 'set nofsync directory=Xtest_startup_swapdir',
|
funcs.rpcrequest(j, 'nvim_exec2', [[
|
||||||
'-c', 'set swapfile',
|
set nofsync directory=Xtest_startup_swapdir
|
||||||
'-c', 'write Xtest_startup_file2',
|
edit Xtest_startup_file2
|
||||||
'-c', 'put =localtime()', })
|
write
|
||||||
sleep(10) -- Let Nvim start.
|
put ='fsyncd text'
|
||||||
|
]], {})
|
||||||
|
eq('Xtest_startup_swapdir', funcs.rpcrequest(j, 'nvim_eval', '&directory'))
|
||||||
funcs.jobstop(j) -- Send deadly signal.
|
funcs.jobstop(j) -- Send deadly signal.
|
||||||
|
|
||||||
|
local screen = startup()
|
||||||
|
feed(':recover Xtest_startup_file2<cr>')
|
||||||
|
screen:expect({any = [[Using swap file "Xtest_startup_swapdir[/\]Xtest_startup_file2%.swp"]]})
|
||||||
|
feed('<cr>')
|
||||||
|
screen:expect({any = 'fsyncd text'})
|
||||||
|
|
||||||
-- 5. SIGPWR signal.
|
-- 5. SIGPWR signal.
|
||||||
-- ??
|
-- oldtest: Test_signal_PWR()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('backup #9709', function()
|
it('backup #9709', function()
|
||||||
|
@ -438,7 +438,7 @@ function module.connect(file_or_address)
|
|||||||
return Session.new(stream)
|
return Session.new(stream)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Starts a new global Nvim session.
|
-- Starts (and returns) a new global Nvim session.
|
||||||
--
|
--
|
||||||
-- Parameters are interpreted as startup args, OR a map with these keys:
|
-- Parameters are interpreted as startup args, OR a map with these keys:
|
||||||
-- args: List: Args appended to the default `nvim_argv` set.
|
-- args: List: Args appended to the default `nvim_argv` set.
|
||||||
@ -452,6 +452,7 @@ end
|
|||||||
-- clear{args={'-e'}, args_rm={'-i'}, env={TERM=term}}
|
-- clear{args={'-e'}, args_rm={'-i'}, env={TERM=term}}
|
||||||
function module.clear(...)
|
function module.clear(...)
|
||||||
module.set_session(module.spawn_argv(false, ...))
|
module.set_session(module.spawn_argv(false, ...))
|
||||||
|
return module.get_session()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- same params as clear, but does returns the session instead
|
-- same params as clear, but does returns the session instead
|
||||||
@ -943,7 +944,7 @@ function module.add_builddir_to_rtp()
|
|||||||
module.command(string.format([[set rtp+=%s/runtime]], module.test_build_dir))
|
module.command(string.format([[set rtp+=%s/runtime]], module.test_build_dir))
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Kill process with given pid
|
-- Kill (reap) a process by PID.
|
||||||
function module.os_kill(pid)
|
function module.os_kill(pid)
|
||||||
return os.execute((is_os('win')
|
return os.execute((is_os('win')
|
||||||
and 'taskkill /f /t /pid '..pid..' > nul'
|
and 'taskkill /f /t /pid '..pid..' > nul'
|
||||||
|
@ -12,7 +12,7 @@ describe('screen', function()
|
|||||||
helpers.nvim_prog,
|
helpers.nvim_prog,
|
||||||
'-u', 'NONE',
|
'-u', 'NONE',
|
||||||
'-i', 'NONE',
|
'-i', 'NONE',
|
||||||
'-N',
|
'-n',
|
||||||
'--cmd', 'set shortmess+=I background=light noswapfile belloff= noshowcmd noruler',
|
'--cmd', 'set shortmess+=I background=light noswapfile belloff= noshowcmd noruler',
|
||||||
'--cmd', 'colorscheme vim',
|
'--cmd', 'colorscheme vim',
|
||||||
'--embed',
|
'--embed',
|
||||||
|
Loading…
Reference in New Issue
Block a user