aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2023-12-06 07:11:36 -0800
committerGitHub <noreply@github.com>2023-12-06 07:11:36 -0800
commitc84af395e88ba143c19f7e34674bd222622e08ee (patch)
tree6a025727a2552854fe893e782ae8bc2adb5a81bd
parentf64e4b43e1191ff30d902730f752875aa55682ce (diff)
downloadrneovim-c84af395e88ba143c19f7e34674bd222622e08ee.tar.gz
rneovim-c84af395e88ba143c19f7e34674bd222622e08ee.tar.bz2
rneovim-c84af395e88ba143c19f7e34674bd222622e08ee.zip
test: 'nofsync' with deadly signal #26415
Problem: The test for 'nofsync' swapfile preservation on a deadly signal, does not actually assert anything. followup to 1fd29a28841dee3d25ff079eb24fc160eb02cb3c 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; } }
-rw-r--r--test/functional/core/fileio_spec.lua41
-rw-r--r--test/functional/helpers.lua5
-rw-r--r--test/functional/ui/screen_basic_spec.lua2
3 files changed, 38 insertions, 10 deletions
diff --git a/test/functional/core/fileio_spec.lua b/test/functional/core/fileio_spec.lua
index c347b51dd3..6458d07ec7 100644
--- a/test/functional/core/fileio_spec.lua
+++ b/test/functional/core/fileio_spec.lua
@@ -30,6 +30,8 @@ local feed_command = helpers.feed_command
local skip = helpers.skip
local is_os = helpers.is_os
local is_ci = helpers.is_ci
+local spawn = helpers.spawn
+local set_session = helpers.set_session
describe('fileio', function()
before_each(function()
@@ -49,6 +51,23 @@ describe('fileio', function()
rmdir('Xtest_backupdir with spaces')
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()
clear({ args={ '--cmd', 'set nofsync directory=Xtest_startup_swapdir', } })
@@ -81,16 +100,24 @@ describe('fileio', function()
eq('foozubbaz', trim(read_file('Xtest_startup_file1')))
-- 4. Exit caused by deadly signal (+ 'swapfile').
- local j = funcs.jobstart({ nvim_prog, '-u', 'NONE', '--headless',
- '--cmd', 'set nofsync directory=Xtest_startup_swapdir',
- '-c', 'set swapfile',
- '-c', 'write Xtest_startup_file2',
- '-c', 'put =localtime()', })
- sleep(10) -- Let Nvim start.
+ local j = funcs.jobstart(vim.tbl_flatten({args, '--embed'}), {rpc=true})
+ funcs.rpcrequest(j, 'nvim_exec2', [[
+ set nofsync directory=Xtest_startup_swapdir
+ edit Xtest_startup_file2
+ write
+ put ='fsyncd text'
+ ]], {})
+ eq('Xtest_startup_swapdir', funcs.rpcrequest(j, 'nvim_eval', '&directory'))
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.
- -- ??
+ -- oldtest: Test_signal_PWR()
end)
it('backup #9709', function()
diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua
index 2bff1d16f8..b50df4c677 100644
--- a/test/functional/helpers.lua
+++ b/test/functional/helpers.lua
@@ -438,7 +438,7 @@ function module.connect(file_or_address)
return Session.new(stream)
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:
-- args: List: Args appended to the default `nvim_argv` set.
@@ -452,6 +452,7 @@ end
-- clear{args={'-e'}, args_rm={'-i'}, env={TERM=term}}
function module.clear(...)
module.set_session(module.spawn_argv(false, ...))
+ return module.get_session()
end
-- 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))
end
--- Kill process with given pid
+-- Kill (reap) a process by PID.
function module.os_kill(pid)
return os.execute((is_os('win')
and 'taskkill /f /t /pid '..pid..' > nul'
diff --git a/test/functional/ui/screen_basic_spec.lua b/test/functional/ui/screen_basic_spec.lua
index 4ef7565ec5..0406cc9771 100644
--- a/test/functional/ui/screen_basic_spec.lua
+++ b/test/functional/ui/screen_basic_spec.lua
@@ -12,7 +12,7 @@ describe('screen', function()
helpers.nvim_prog,
'-u', 'NONE',
'-i', 'NONE',
- '-N',
+ '-n',
'--cmd', 'set shortmess+=I background=light noswapfile belloff= noshowcmd noruler',
'--cmd', 'colorscheme vim',
'--embed',