diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2023-12-06 07:11:36 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-06 07:11:36 -0800 |
commit | c84af395e88ba143c19f7e34674bd222622e08ee (patch) | |
tree | 6a025727a2552854fe893e782ae8bc2adb5a81bd | |
parent | f64e4b43e1191ff30d902730f752875aa55682ce (diff) | |
download | rneovim-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.lua | 41 | ||||
-rw-r--r-- | test/functional/helpers.lua | 5 | ||||
-rw-r--r-- | test/functional/ui/screen_basic_spec.lua | 2 |
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', |