From 1d40f677760d3fbaaaac6292841f2f5426bf83bd Mon Sep 17 00:00:00 2001 From: Siddhant Agarwal <68201519+siddhantdev@users.noreply.github.com> Date: Mon, 18 Aug 2025 09:10:28 +0530 Subject: feat(ssh): SSH configuration parser #35027 --- test/functional/lua/ssh_spec.lua | 78 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 test/functional/lua/ssh_spec.lua (limited to 'test/functional/lua/ssh_spec.lua') diff --git a/test/functional/lua/ssh_spec.lua b/test/functional/lua/ssh_spec.lua new file mode 100644 index 0000000000..925a902ef0 --- /dev/null +++ b/test/functional/lua/ssh_spec.lua @@ -0,0 +1,78 @@ +local t = require('test.testutil') +local parser = require('vim.net._ssh') +local eq = t.eq + +describe('SSH parser', function() + it('parses SSH configuration strings', function() + local config = [[ + Host * + ConnectTimeout 10 + ServerAliveInterval 60 + ServerAliveCountMax 3 + # Use a specific key for any host not otherwise specified + # IdentityFile ~/.ssh/id_rsa + + Host=dev + HostName=dev.example.com + User=devuser + Port=2222 + IdentityFile=~/.ssh/id_rsa_dev + + Host prod test + HostName 198.51.100.10 + User admin + Port 22 + IdentityFile ~/.ssh/id_rsa_prod + ForwardAgent yes + + Host test + IdentitiesOnly yes + + Host "quoted string" + User quote + Port 22 + + Match host foo host gh + HostName github.com + User git + IdentityFile ~/.ssh/id_rsa_github + IdentitiesOnly yes + ]] + + eq({ + 'dev', + 'prod', + 'test', + 'quoted string', + 'gh', + }, parser.parse_ssh_config(config)) + end) + + it('fails when a quote is not closed', function() + local config = [[ + Host prod dev "test prod my + HostName 198.51.100.10 + User admin + Port 22 + IdentityFile ~/.ssh/id_rsa_prod + ForwardAgent yes + ]] + + local ok, _ = pcall(parser.parse_ssh_config, config) + eq(false, ok) + end) + + it('fails when the line ends with a single backslash', function() + local config = [[ + Host prod test + HostName 198.51.100.10 + User admin\ + Port 22 + IdentityFile ~/.ssh/id_rsa_prod + ForwardAgent yes + ]] + + local ok, _ = pcall(parser.parse_ssh_config, config) + eq(false, ok) + end) +end) -- cgit